Files

2665 lines
115 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/apply-change-preview.ts
let apply_change_preview_e = Symbol("fluentApplyChangePreview");
function apply_change_preview_t(e, t) {
e.appendChild(document.createTextNode(t));
}
function apply_change_preview_n(e, t) {
let n = document.createElement("strong");
n.textContent = t, e.appendChild(n);
}
function apply_change_preview_l(e) {
return `'${e.replaceAll("'", "'\"'\"'")}'`;
}
function apply_change_preview_r(e) {
try {
return JSON.stringify(e) ?? String(e);
} catch {
return "[unserializable UCI change record]";
}
}
function apply_change_preview_i(e) {
return null === e || "object" != typeof e ? [] : Object.entries(e).flatMap(([e, t])=>Array.isArray(t) && t.length ? [
[
e,
t
]
] : []);
}
function apply_change_preview_u(e, t) {
let n = document.createElement(e);
return n.textContent = t, n;
}
function apply_change_preview_a(e, l, r) {
let i = document.createElement("var"), u = document.createElement(e);
return apply_change_preview_t(u, l), apply_change_preview_n(u, r), i.appendChild(u), i;
}
function setupApplyChangePreview() {
let c = ui.changes;
if (c[apply_change_preview_e] || "function" != typeof c.apply || "function" != typeof c.displayStatus) return;
let o = c.apply.bind(c), d = c.displayStatus.bind(c), p = 0, s = null, m = ()=>{
let e = s;
if (null === e || null === e.changes || e.dismissed) return;
let i = document.querySelector("#modal_overlay .modal.alert-message.notice.spinning");
if (!i) return;
let c = i.parentElement || i, o = c.querySelectorAll(".fluent-apply-change-preview");
if (1 === o.length && o[0] === e.preview) return;
o.forEach((e)=>{
e.remove();
});
let d = e.preview || function(e, i) {
let c = document.createElement("div");
for (let [o, d] of (c.className = "fluent-apply-change-preview", e)){
let e = document.createElement("div");
e.className = "fluent-apply-change-preview-card";
let p = document.createElement("div");
p.className = "fluent-apply-change-preview-card-header";
let s = document.createElement("span");
s.textContent = `# /etc/config/${o}`, p.appendChild(s);
let m = document.createElement("button");
m.className = "fluent-apply-change-preview-close", m.type = "button", m.title = "Close preview", m.onclick = ()=>{
i && i(), c.remove();
}, p.appendChild(m), e.appendChild(p);
let v = document.createElement("div");
v.className = "fluent-apply-change-preview-card-body uci-change-list";
let f = null;
for (let e of d)v.appendChild(function(e, i, c) {
if (!Array.isArray(i) || !i.every((e)=>"string" == typeof e)) return apply_change_preview_u("var", apply_change_preview_r(i));
let [o, d, p, s] = i, m = void 0 === d ? void 0 : null !== c && d === c[0] ? `@${c[1]}[-1]` : d;
if ("add" === o && 3 === i.length && void 0 !== m && void 0 !== p) {
let l = document.createElement("ins");
return apply_change_preview_t(l, `uci add ${e} `), apply_change_preview_n(l, p), apply_change_preview_t(l, ` # =${m}`), l;
}
if ("set" === o && 3 === i.length && void 0 !== m && void 0 !== p) {
let l = document.createElement("ins");
return apply_change_preview_t(l, `uci set ${e}.`), apply_change_preview_n(l, m), apply_change_preview_t(l, `=${p}`), l;
}
if ("set" === o && 4 === i.length && void 0 !== m && void 0 !== p && void 0 !== s) return apply_change_preview_a("ins", `uci set ${e}.${m}.${p}=`, apply_change_preview_l(s));
if ("remove" === o && 2 === i.length && void 0 !== m) {
let l = document.createElement("del");
return apply_change_preview_t(l, `uci del ${e}.`), apply_change_preview_n(l, m), l;
}
if ("remove" === o && 3 === i.length && void 0 !== m && void 0 !== p) return apply_change_preview_a("del", `uci del ${e}.${m}.`, p);
if ("order" === o && 3 === i.length && void 0 !== m && void 0 !== p) {
let l = document.createElement("var");
return apply_change_preview_t(l, `uci reorder ${e}.${m}=`), apply_change_preview_n(l, p), l;
}
if ("list-add" === o && 4 === i.length && void 0 !== m && void 0 !== p && void 0 !== s) return apply_change_preview_a("ins", `uci add_list ${e}.${m}.${p}=`, apply_change_preview_l(s));
if ("list-del" === o && 4 === i.length && void 0 !== m && void 0 !== p && void 0 !== s) return apply_change_preview_a("del", `uci del_list ${e}.${m}.${p}=`, apply_change_preview_l(s));
if ("rename" === o && 3 === i.length && void 0 !== m && void 0 !== p) {
let l = document.createElement("var");
return apply_change_preview_t(l, `uci rename ${e}.${m}=`), apply_change_preview_n(l, p), l;
}
if ("rename" === o && 4 === i.length && void 0 !== m && void 0 !== p && void 0 !== s) {
let r = document.createElement("var");
return apply_change_preview_t(r, `uci rename ${e}.${m}.${p}=`), apply_change_preview_n(r, apply_change_preview_l(s)), r;
}
return apply_change_preview_u("var", apply_change_preview_r(i));
}(o, e, f)), Array.isArray(e) && 3 === e.length && "add" === e[0] && "string" == typeof e[1] && "string" == typeof e[2] && (f = [
e[1],
e[2]
]);
e.appendChild(v), c.appendChild(e);
}
return c;
}(e.changes, ()=>{
e.dismissed = !0;
});
c.appendChild(d), e.preview = d;
}, v = null;
c.displayStatus = (e, t)=>{
if ("notice spinning" !== e ? null === v && (v = setTimeout(()=>{
"function" == typeof document.querySelectorAll && document.querySelectorAll(".fluent-apply-change-preview").forEach((e)=>{
e.remove();
}), v = null;
}, 150)) : null !== v && (clearTimeout(v), v = null), d(e, t), !e) {
p += 1, s = null;
return;
}
"notice spinning" === e && m();
}, "u" > typeof MutationObserver && new MutationObserver(m).observe(document, {
childList: !0,
subtree: !0
}), c.apply = (e)=>{
let t = ++p;
s = null;
let n = L.uci.get_first("fluent", "global", "uci_changes_preview");
if ("1" === n || null == n) {
let e = apply_change_preview_i(c.changes);
s = {
token: t,
changes: e.length ? e : null,
preview: null
};
try {
L.uci.changes().then((e)=>{
if (s?.token !== t) return;
let n = apply_change_preview_i(e);
n.length && (s.changes = n, m());
}, ()=>{
s?.token === t && null === s.changes && (s = null);
});
} catch {
s?.token === t && null === s.changes && (s = null);
}
}
o(e);
}, c[apply_change_preview_e] = !0;
}
;// CONCATENATED MODULE: ./web/resources/utils/error-tooltips.tsx
function setupErrorTooltips() {
document.querySelectorAll(".cbi-input-invalid").forEach((t)=>{
error_tooltips_i(t);
}), new MutationObserver((t)=>{
t.forEach((t)=>{
if ("attributes" === t.type) {
let r, n = t.target;
"class" === t.attributeName ? n.classList.contains("cbi-input-invalid") ? error_tooltips_i(n) : (r = error_tooltips_e(n).nextElementSibling, r?.classList.contains("fluent-error-message") && r.remove()) : "data-tooltip" === t.attributeName && n.classList.contains("cbi-input-invalid") && error_tooltips_i(n);
} else "childList" === t.type && t.addedNodes.forEach((t)=>{
t.nodeType === Node.ELEMENT_NODE && (t.classList.contains("cbi-input-invalid") && error_tooltips_i(t), t.querySelectorAll(".cbi-input-invalid").forEach((t)=>{
error_tooltips_i(t);
}));
});
});
}).observe(document.body, {
attributes: !0,
childList: !0,
subtree: !0,
attributeFilter: [
"class",
"data-tooltip"
]
});
}
function error_tooltips_e(t) {
return t.parentElement?.closest(".control-group, .password-input, .cbi-input-group, .add-item") || t;
}
function error_tooltips_i(i) {
let r = i.getAttribute("data-tooltip");
if (!r) return;
let n = error_tooltips_e(i), l = n.nextElementSibling;
if (l?.classList.contains("fluent-error-message")) {
let t = l.querySelector(".fluent-error-text");
t && t.textContent !== r && (t.textContent = r), l.style.display = "";
return;
}
(l = jsx("div", {
class: "fluent-error-message",
children: jsx("span", {
class: "fluent-error-text",
children: r
})
})).insertAdjacentHTML("afterbegin", '<svg fill="currentColor" width="12" height="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg" style="flex-shrink: 0;"><path d="M6 1a5 5 0 1 0 0 10A5 5 0 0 0 6 1Zm2.12 3.28a.5.5 0 0 1 0 .7L6.7 6.42l1.41 1.41a.5.5 0 1 1-.7.7L6 7.12 4.59 8.53a.5.5 0 0 1-.7-.7L5.3 6.42 3.88 5.01a.5.5 0 0 1 .7-.7L6 5.72l1.41-1.41a.5.5 0 0 1 .71 0Z" fill="currentColor"></path></svg>'), n.parentNode?.insertBefore(l, n.nextSibling);
}
;// CONCATENATED MODULE: ./web/resources/utils/direction.ts
function direction_t(t) {
return "rtl" === t || "ltr" === t ? t : null;
}
function getEffectiveDocumentDirection(e = document) {
let n = direction_t(e.documentElement.dir);
return n || (direction_t(e.body?.dataset.fluentDir) ?? "ltr");
}
function getViewportInlineSize() {
return window.innerWidth;
}
function getRectInlineStart(t, e, n = getViewportInlineSize()) {
return "rtl" === e ? n - t.right : t.left;
}
function getPhysicalLeftFromInlineStart(t, e, n) {
return "rtl" === e ? n - t.inlineStart - t.inlineSize : t.inlineStart;
}
function applyInlineGeometryToStyle(t, e) {
t.left = "auto", t.insetInlineStart = `${e.inlineStart}px`, t.width = `${e.inlineSize}px`;
}
function setInlineCssCustomProperties(t, e, n, i, r) {
t.setProperty(r.inlineStart, `${getPhysicalLeftFromInlineStart(e, n, i)}px`), t.setProperty(r.inlineSize, `${e.inlineSize}px`);
}
function getInlinePadding(t) {
return {
inlineStart: Number.parseFloat(t.paddingInlineStart) || 16,
inlineEnd: Number.parseFloat(t.paddingInlineEnd) || 16
};
}
;// CONCATENATED MODULE: ./web/resources/utils/ifacebox-tooltip.ts
let ifacebox_tooltip_l = null;
function setupIfaceboxTooltips() {
document.addEventListener("mouseover", (n)=>{
let s = n.target.closest(".cbi-tooltip-container");
if (!s?.closest('td[data-name="_ifacebox"] .ifacebox-body, .td[data-name="_ifacebox"] .ifacebox-body')) {
ifacebox_tooltip_l && "none" !== ifacebox_tooltip_l.style.display && (ifacebox_tooltip_l.style.display = "none", ifacebox_tooltip_l.style.opacity = "0");
return;
}
let a = s.querySelector(".cbi-tooltip");
if (!a) return;
ifacebox_tooltip_l || ((ifacebox_tooltip_l = document.createElement("div")).id = "fluent-global-tooltip", ifacebox_tooltip_l.className = "cbi-tooltip ifacebadge large", ifacebox_tooltip_l.style.position = "absolute", ifacebox_tooltip_l.style.zIndex = "10000", ifacebox_tooltip_l.style.pointerEvents = "none", ifacebox_tooltip_l.style.display = "none", document.body.appendChild(ifacebox_tooltip_l)), ifacebox_tooltip_l.innerHTML = a.innerHTML, ifacebox_tooltip_l.style.display = "block", ifacebox_tooltip_l.style.opacity = "0";
let d = s.getBoundingClientRect(), r = ifacebox_tooltip_l.getBoundingClientRect(), y = getEffectiveDocumentDirection(), c = getViewportInlineSize(), p = window.pageYOffset + d.bottom + 6, f = getRectInlineStart(d, y, c) + d.width / 2, m = f - r.width / 2;
m < 10 && (m = 10), m + r.width > c - 10 && (m = c - r.width - 10);
let u = getPhysicalLeftFromInlineStart({
inlineStart: m,
inlineSize: r.width
}, y, c);
ifacebox_tooltip_l.style.top = `${p}px`, ifacebox_tooltip_l.style.left = `${window.pageXOffset + u}px`, ifacebox_tooltip_l.offsetWidth, ifacebox_tooltip_l.style.opacity = "1";
let v = f - m, w = "rtl" === y ? r.width - v : v;
ifacebox_tooltip_l.style.setProperty("--arrow-left", `${w}px`);
let b = ()=>{
ifacebox_tooltip_l && (ifacebox_tooltip_l.style.display = "none", ifacebox_tooltip_l.style.opacity = "0"), s.removeEventListener("mouseleave", b), window.removeEventListener("scroll", g, !0);
}, g = ()=>{
ifacebox_tooltip_l && (ifacebox_tooltip_l.style.display = "none", ifacebox_tooltip_l.style.opacity = "0"), s.removeEventListener("mouseleave", b), window.removeEventListener("scroll", g, !0);
};
s.addEventListener("mouseleave", b), window.addEventListener("scroll", g, !0);
}, !0);
}
;// CONCATENATED MODULE: ./web/resources/utils/log-viewer.tsx
let log_viewer_l = "fluent-log-wordwrap", log_viewer_n = "fluent-log-autoscroll";
function log_viewer_o(e) {
try {
let t = document.createElement("textarea");
t.value = e, t.style.position = "fixed", t.style.left = "-9999px", t.style.top = "-9999px", document.body.appendChild(t), t.focus(), t.select();
let l = document.execCommand("copy");
return document.body.removeChild(t), l;
} catch (e) {
return !1;
}
}
function setupLogViewer() {
let e = document.getElementById("syslog");
e && log_viewer_r(e), new MutationObserver(()=>{
let e = document.getElementById("syslog");
e && "true" !== e.getAttribute("data-fluent-log-transformed") && log_viewer_r(e);
}).observe(document.body, {
childList: !0,
subtree: !0
});
}
function log_viewer_r(r) {
if ("true" === r.getAttribute("data-fluent-log-transformed")) return;
r.setAttribute("data-fluent-log-transformed", "true");
let i = "true" === localStorage.getItem(log_viewer_l), a = "false" !== localStorage.getItem(log_viewer_n), s = !1, c = null, u = null, d = jsxs("div", {
class: "fluent-log-viewer",
children: [
jsxs("div", {
class: "fluent-log-viewer__header",
children: [
jsxs("div", {
class: "fluent-log-viewer__stats",
children: [
jsxs("span", {
class: "fluent-log-viewer__badge fluent-log-viewer__badge--lines",
children: [
jsx("span", {
class: "fluent-log-viewer__badge-icon fluent-log-viewer__badge-icon--lines"
}),
jsx("span", {
class: "fluent-log-viewer__badge-count",
id: "fluentLogCountLines",
children: "0"
}),
jsx("span", {
class: "fluent-log-viewer__badge-label",
children: _("Lines")
})
]
}),
jsxs("span", {
class: "fluent-log-viewer__badge fluent-log-viewer__badge--errors",
children: [
jsx("span", {
class: "fluent-log-viewer__badge-icon fluent-log-viewer__badge-icon--errors"
}),
jsx("span", {
class: "fluent-log-viewer__badge-count",
id: "fluentLogCountErrors",
children: "0"
}),
jsx("span", {
class: "fluent-log-viewer__badge-label",
children: _("Errors")
})
]
}),
jsxs("span", {
class: "fluent-log-viewer__badge fluent-log-viewer__badge--warnings",
children: [
jsx("span", {
class: "fluent-log-viewer__badge-icon fluent-log-viewer__badge-icon--warnings"
}),
jsx("span", {
class: "fluent-log-viewer__badge-count",
id: "fluentLogCountWarnings",
children: "0"
}),
jsx("span", {
class: "fluent-log-viewer__badge-label",
children: _("Warnings")
})
]
}),
jsxs("span", {
class: "fluent-log-viewer__badge fluent-log-viewer__badge--disconnects",
children: [
jsx("span", {
class: "fluent-log-viewer__badge-icon fluent-log-viewer__badge-icon--disconnects"
}),
jsx("span", {
class: "fluent-log-viewer__badge-count",
id: "fluentLogCountDisconnects",
children: "0"
}),
jsx("span", {
class: "fluent-log-viewer__badge-label",
children: _("Disconnects")
})
]
})
]
}),
jsxs("div", {
class: "fluent-log-viewer__toolbar",
children: [
jsx("button", {
type: "button",
class: "fluent-log-viewer__tool-btn",
"data-action": "wrap",
title: _("Word wrap"),
children: jsx("span", {
class: "fluent-log-viewer__icon fluent-log-viewer__icon--wrap"
})
}),
jsx("button", {
type: "button",
class: "fluent-log-viewer__tool-btn",
"data-action": "autoscroll",
title: _("Auto-scroll"),
children: jsx("span", {
class: "fluent-log-viewer__icon fluent-log-viewer__icon--autoscroll"
})
}),
jsx("button", {
type: "button",
class: "fluent-log-viewer__tool-btn",
"data-action": "copy",
title: _("Copy log"),
children: jsx("span", {
class: "fluent-log-viewer__icon fluent-log-viewer__icon--copy"
})
}),
jsx("button", {
type: "button",
class: "fluent-log-viewer__tool-btn",
"data-action": "download",
title: _("Download log"),
children: jsx("span", {
class: "fluent-log-viewer__icon fluent-log-viewer__icon--download"
})
}),
jsx("button", {
type: "button",
class: "fluent-log-viewer__tool-btn",
"data-action": "scroll-top",
title: _("Scroll to top"),
children: jsx("span", {
class: "fluent-log-viewer__icon fluent-log-viewer__icon--scroll-top"
})
}),
jsx("button", {
type: "button",
class: "fluent-log-viewer__tool-btn",
"data-action": "scroll-bottom",
title: _("Scroll to bottom"),
children: jsx("span", {
class: "fluent-log-viewer__icon fluent-log-viewer__icon--scroll-bottom"
})
}),
jsx("button", {
type: "button",
class: "fluent-log-viewer__tool-btn",
"data-action": "fullscreen",
title: _("Toggle fullscreen"),
children: jsx("span", {
class: "fluent-log-viewer__icon fluent-log-viewer__icon--fullscreen"
})
})
]
})
]
}),
jsx("div", {
class: "fluent-log-viewer__body",
children: jsx("div", {
class: "fluent-log-viewer__content"
})
})
]
}), g = d.querySelector("#fluentLogCountLines"), f = d.querySelector("#fluentLogCountErrors"), v = d.querySelector("#fluentLogCountWarnings"), p = d.querySelector("#fluentLogCountDisconnects"), w = d.querySelector(".fluent-log-viewer__body"), b = d.querySelector(".fluent-log-viewer__content"), m = d.querySelector('[data-action="wrap"]'), h = d.querySelector('[data-action="autoscroll"]'), y = d.querySelector('[data-action="copy"]'), L = d.querySelector('[data-action="download"]'), C = d.querySelector('[data-action="scroll-top"]'), x = d.querySelector('[data-action="scroll-bottom"]'), S = d.querySelector('[data-action="fullscreen"]');
function E(e, t) {
let l = e.getAttribute("title") || "";
e.setAttribute("title", t), e.classList.add("fluent-log-viewer__tool-btn--feedback"), setTimeout(()=>{
e.setAttribute("title", l), e.classList.remove("fluent-log-viewer__tool-btn--feedback");
}, 1500);
}
function q() {
if (!r) return;
let { lines: e, errors: t, warnings: l, disconnects: n } = function(e) {
let t = e.split(/\r?\n/), l = [], n = 0, o = 0, r = 0, i = 0;
for(let e = 0; e < t.length; e++){
let a, s, c, u = t[e];
if (!u && e === t.length - 1) continue;
i++;
let d = "default", g = u, f = u.match(/^\[([^\]]+)\]\s+([a-zA-Z0-9_-]+\.([a-zA-Z0-9_-]+))\s*:\s*(?:([a-zA-Z0-9_./-]+(?:\[\d+\])?)\s*:\s*)?(.*)$/);
if (f) {
a = f[1], s = f[2];
let e = f[3].toLowerCase();
c = f[4], g = f[5], [
"err",
"error",
"crit",
"alert",
"emerg"
].includes(e) ? (d = "err", n++) : [
"warn",
"warning"
].includes(e) ? (d = "warn", o++) : [
"notice",
"info"
].includes(e) ? d = "notice" === e ? "notice" : "info" : "debug" === e && (d = "debug");
} else {
let e = u.match(/^\[\s*([\d.]+)\]\s+(.*)$/);
if (e) {
a = e[1];
let t = (g = e[2]).toLowerCase();
t.includes("cut here") || t.includes("panic") || t.includes("error") || t.includes("failed") ? (d = "err", n++) : (t.includes("warning") || t.includes("warn")) && (d = "warn", o++);
}
}
let v = /disconnect|disassociat|deauthenticat|Exited normally|Exit before auth/i.test(u);
v && r++, l.push({
lineNumber: i,
raw: u,
time: a,
level: s,
levelType: d,
tag: c,
message: g,
isDisconnect: v
});
}
return {
lines: l,
errors: n,
warnings: o,
disconnects: r
};
}(r.value || r.textContent || "");
g.textContent = String(e.length), f.textContent = String(t), v.textContent = String(l), p.textContent = String(n);
let o = document.createDocumentFragment();
e.forEach((e)=>{
let t = document.createElement("div");
t.className = `fluent-log-viewer__line fluent-log-viewer__line--${e.levelType}${e.isDisconnect ? " fluent-log-viewer__line--disconnect" : ""}`;
let l = document.createElement("span");
if (l.className = "fluent-log-viewer__line-number", l.textContent = String(e.lineNumber), l.title = _("Line %d").format(e.lineNumber), t.appendChild(l), e.time) {
let l = document.createElement("span");
l.className = "fluent-log-viewer__line-time", l.textContent = function(e) {
if (/^\s*[\d.]+\s*$/.test(e)) {
let t = parseFloat(e);
return Number.isNaN(t) ? e.trim() : `${t.toFixed(2)}s`;
}
let t = e.match(/(\d{2}:\d{2}:\d{2})/);
if (t) {
let l = {
jan: "01",
feb: "02",
mar: "03",
apr: "04",
may: "05",
jun: "06",
jul: "07",
aug: "08",
sep: "09",
oct: "10",
nov: "11",
dec: "12"
}, n = e.match(/(\d{1,2})\s+([A-Za-z]{3})/i);
if (n) {
let e = n[1].padStart(2, "0"), o = n[2].toLowerCase();
if (l[o]) return `${l[o]}-${e} ${t[1]}`;
}
let o = e.match(/([A-Za-z]{3})\s+(\d{1,2})/i);
if (o) {
let e = o[1].toLowerCase(), n = o[2].padStart(2, "0");
if (l[e]) return `${l[e]}-${n} ${t[1]}`;
}
return t[1];
}
return e;
}(e.time), t.appendChild(l);
}
if (e.level) {
let l = document.createElement("span");
l.className = `fluent-log-viewer__level fluent-log-viewer__level--${e.levelType}`, l.textContent = e.level, t.appendChild(l);
}
if (e.tag) {
let l = document.createElement("span");
l.className = "fluent-log-viewer__tag", l.textContent = `${e.tag}:`, t.appendChild(l);
}
let n = document.createElement("span");
n.className = "fluent-log-viewer__text", n.textContent = e.message, t.appendChild(n), o.appendChild(t);
}), b.innerHTML = "", b.appendChild(o), a && requestAnimationFrame(()=>{
w.scrollTop = w.scrollHeight;
});
}
i && (m.classList.add("active"), d.classList.add("fluent-log-viewer--wrap")), a && h.classList.add("active"), r.style.display = "none", r.parentNode && r.parentNode.insertBefore(d, r.nextSibling), m.addEventListener("click", ()=>{
i = !i, m.classList.toggle("active", i), d.classList.toggle("fluent-log-viewer--wrap", i);
try {
localStorage.setItem(log_viewer_l, i ? "true" : "false");
} catch (e) {}
}), h.addEventListener("click", ()=>{
a = !a, h.classList.toggle("active", a);
try {
localStorage.setItem(log_viewer_n, a ? "true" : "false");
} catch (e) {}
a && requestAnimationFrame(()=>{
w.scrollTop = w.scrollHeight;
});
}), y.addEventListener("click", ()=>{
var e;
(e = r.value || r.textContent || "", navigator.clipboard && window.isSecureContext ? navigator.clipboard.writeText(e).then(()=>!0).catch(()=>log_viewer_o(e)) : Promise.resolve(log_viewer_o(e))).then((e)=>{
e && E(y, _("Copied"));
});
}), L.addEventListener("click", ()=>{
let e = r.value || r.textContent || "", t = location.pathname.includes("dmesg"), l = new Date().toISOString().slice(0, 10), n = `${t ? "dmesg" : "syslog"}-${l}.log`, o = new Blob([
e
], {
type: "text/plain;charset=utf-8"
}), i = URL.createObjectURL(o), a = document.createElement("a");
a.href = i, a.download = n, document.body.appendChild(a), a.click(), document.body.removeChild(a), URL.revokeObjectURL(i), E(L, _("Downloaded"));
}), C.addEventListener("click", ()=>{
w.scrollTo({
top: 0,
behavior: "smooth"
});
}), x.addEventListener("click", ()=>{
w.scrollTo({
top: w.scrollHeight,
behavior: "smooth"
});
}), S.addEventListener("click", ()=>{
s = !s, S.classList.toggle("active", s), s ? (c = d.parentNode, u = d.nextSibling, document.body.appendChild(d), d.classList.add("fluent-log-viewer--fullscreen"), document.body.classList.add("fluent-log-fullscreen")) : (c && c.insertBefore(d, u), d.classList.remove("fluent-log-viewer--fullscreen"), document.body.classList.remove("fluent-log-fullscreen"));
let e = S.querySelector(".fluent-log-viewer__icon");
e && (e.classList.toggle("fluent-log-viewer__icon--fullscreen", !s), e.classList.toggle("fluent-log-viewer__icon--fullscreen-exit", s));
}), q(), new MutationObserver(()=>{
q();
}).observe(r, {
childList: !0,
characterData: !0,
subtree: !0,
attributes: !0
});
let A = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, "value")?.set;
A && Object.defineProperty(r, "value", {
set (e) {
A.call(this, e), q();
},
get () {
return Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, "value")?.get?.call(this);
},
configurable: !0
}), r.addEventListener("input", q), r.addEventListener("change", q);
}
;// CONCATENATED MODULE: ./web/resources/utils/mac-selector.tsx
let mac_selector_n = [
{
name: _("Random Local MAC"),
prefix: "RANDOM_LOCAL"
},
{
name: "Apple",
prefix: "00:1C:42"
},
{
name: "Apple",
prefix: "AC:BC:32"
},
{
name: "Intel",
prefix: "00:1E:67"
},
{
name: "Intel",
prefix: "3C:FD:FE"
},
{
name: "Huawei",
prefix: "00:1E:10"
},
{
name: "Huawei",
prefix: "70:54:F5"
},
{
name: "Xiaomi",
prefix: "18:59:36"
},
{
name: "Xiaomi",
prefix: "34:80:B3"
},
{
name: "ASUS",
prefix: "04:D4:C4"
},
{
name: "ASUS",
prefix: "2C:4D:54"
},
{
name: "TP-Link",
prefix: "00:1D:0F"
},
{
name: "TP-Link",
prefix: "50:C7:BF"
},
{
name: "Lenovo",
prefix: "00:12:FE"
},
{
name: "Dell",
prefix: "00:14:22"
},
{
name: "Microsoft",
prefix: "00:15:5D"
},
{
name: "Raspberry Pi",
prefix: "B8:27:EB"
},
{
name: "Raspberry Pi",
prefix: "DC:A6:32"
},
{
name: "Realtek / QEMU",
prefix: "52:54:00"
},
{
name: "Cisco",
prefix: "00:00:0C"
},
{
name: "Samsung",
prefix: "00:12:FB"
}
];
function mac_selector_a() {
return Math.floor(256 * Math.random()).toString(16).padStart(2, "0").toUpperCase();
}
function mac_selector_l(l) {
let i;
if ("true" === l.dataset.fluentMacInit) return;
l.dataset.fluentMacInit = "true";
let r = l.parentElement;
if (!r) return;
r.classList.contains("fluent-mac-selector-group") ? i = r : (i = jsx("div", {
class: "cbi-input-group fluent-mac-selector-group"
}), r.insertBefore(i, l), i.appendChild(l));
let c = jsx("button", {
type: "button",
class: "cbi-button cbi-button-action fluent-mac-edit-btn",
title: _("Advanced MAC Selector")
});
c.addEventListener("click", (i)=>{
let r, c, o, d, s, p, u, f, m, b, v;
i.preventDefault(), i.stopPropagation(), c = function(e) {
if (!e) return null;
let t = e.trim().toUpperCase().replace(/[:-]/g, "");
if (t.length < 6) return null;
let a = t.slice(0, 6), l = `${a.slice(0, 2)}:${a.slice(2, 4)}:${a.slice(4, 6)}`, i = mac_selector_n.find((e)=>e.prefix.toUpperCase() === l);
return i ? i.prefix : null;
}(r = l.value.trim() || l.placeholder || "00:00:00:00:00:00"), d = jsx("input", {
id: o = "fluent-mac-overlay-input",
type: "text",
class: "cbi-input-text fluent-mac-modal-input",
value: r,
placeholder: "00:00:00:00:00:00"
}), s = jsx("select", {
id: "fluent-mac-overlay-vendor-select",
class: "cbi-input-select",
style: "width: 100%;",
children: jsx("option", {
value: "",
disabled: !0,
hidden: !0,
selected: !c,
children: _("Select vendor prefix...")
})
}), mac_selector_n.forEach((e)=>{
let t = document.createElement("option");
t.value = e.prefix, t.textContent = `${e.name} (${"RANDOM_LOCAL" === e.prefix ? "x2:xx:xx" : e.prefix})`, c && e.prefix === c && (t.selected = !0), s.appendChild(t);
}), c && (s.value = c), (p = jsx("button", {
type: "button",
class: "btn cbi-button cbi-button-action fluent-mac-random-btn",
children: _("Randomize MAC")
})).addEventListener("click", (e)=>{
e.stopPropagation(), d.value = function(e) {
if (e && "RANDOM_LOCAL" !== e) {
let t = e.trim().toUpperCase().split(/[:-]/);
for(; t.length < 6;)t.push(mac_selector_a());
return t.slice(0, 6).join(":");
}
let t = [
"2",
"6",
"A",
"E"
], n = Math.floor(16 * Math.random()).toString(16).toUpperCase(), l = t[Math.floor(Math.random() * t.length)], i = [
`${n}${l}`
];
for(let e = 0; e < 5; e++)i.push(mac_selector_a());
return i.join(":");
}(s.value || void 0);
}), u = jsx("button", {
type: "button",
class: "btn cbi-button cbi-button-neutral",
children: _("Cancel")
}), f = jsx("button", {
type: "button",
class: "btn cbi-button cbi-button-positive",
children: _("Confirm")
}), m = jsx("button", {
type: "button",
class: "fluent-mac-overlay-close",
title: _("Close")
}), b = jsx("div", {
class: "fluent-mac-overlay-backdrop",
children: jsxs("div", {
class: "fluent-mac-overlay-card",
children: [
jsxs("div", {
class: "fluent-mac-overlay-header",
children: [
jsx("h3", {
children: _("Advanced MAC Selector")
}),
m
]
}),
jsxs("div", {
class: "fluent-mac-overlay-body",
children: [
jsxs("div", {
class: "fluent-mac-field-block",
children: [
jsx("label", {
htmlFor: o,
class: "fluent-mac-label",
children: _("Current / Pending MAC Address")
}),
d
]
}),
jsxs("div", {
class: "fluent-mac-field-block",
children: [
jsx("label", {
htmlFor: "fluent-mac-overlay-vendor-select",
class: "fluent-mac-label",
children: _("Preset Vendor / Generator")
}),
jsxs("div", {
class: "fluent-mac-picker-row",
children: [
jsx("div", {
class: "fluent-mac-vendor-picker-wrap",
children: s
}),
p
]
})
]
})
]
}),
jsxs("div", {
class: "fluent-mac-overlay-footer",
children: [
u,
f
]
})
]
})
}), v = ()=>{
b.remove();
}, m.addEventListener("click", (e)=>{
e.stopPropagation(), v();
}), u.addEventListener("click", (e)=>{
e.stopPropagation(), v();
}), f.addEventListener("click", (e)=>{
e.stopPropagation();
let t = d.value.trim();
t && (l.value = t, l.dispatchEvent(new Event("input", {
bubbles: !0
})), l.dispatchEvent(new Event("change", {
bubbles: !0
}))), v();
}), b.addEventListener("click", (e)=>{
e.target === b && v();
}), document.body.appendChild(b);
}), i.appendChild(c);
}
function setupMacSelector() {
document.querySelectorAll('input[id$=".macaddr"]').forEach((e)=>{
mac_selector_l(e);
}), new MutationObserver((e)=>{
e.forEach((e)=>{
e.addedNodes.forEach((e)=>{
e.nodeType === Node.ELEMENT_NODE && ("INPUT" === e.tagName && e.id && e.id.endsWith(".macaddr") ? mac_selector_l(e) : e.querySelectorAll('input[id$=".macaddr"]').forEach((e)=>{
mac_selector_l(e);
}));
});
});
}).observe(document.body, {
childList: !0,
subtree: !0
});
}
;// CONCATENATED MODULE: ./web/resources/utils/menu-search.ts
let menu_search_e;
function menu_search_t(e) {
return e.toLowerCase().replace(/\s+/g, " ");
}
function menu_search_n(e, n, l) {
return menu_search_t(n).includes(l) || menu_search_t(e).includes(l);
}
function searchMenu(e, l) {
let r = menu_search_t(l);
if (!r) return [];
let a = [], i = (e, t, l)=>{
for (let u of ui.menu.getChildren(e)){
if (!u.satisfied) continue;
let e = `${t}/${u.name}`, c = u.title || u.name || "", s = c ? _(c) : "", o = c ? [
...l,
s
] : l;
menu_search_n(c, s, r) && a.push({
node: u,
url: e,
breadcrumb: [
...o
]
}), i(u, e, o);
}
};
for (let t of e.categories)if (!e.hiddenCategoryIds.has(t.id)) for (let l of (t.primary && menu_search_n(t.primary.rawTitle, t.title, r) && a.push({
node: t.primary.node,
url: t.primary.path,
breadcrumb: [
t.title
]
}), t.items)){
if (e.hiddenPaths.has(l.path)) continue;
let u = [
t.title,
l.title
];
menu_search_n(l.rawTitle, l.title, r) && a.push({
node: l.node,
url: l.path,
breadcrumb: u
}), i(l.node, l.path, u);
}
return a;
}
function setupMenuSearch(t) {
menu_search_e && (document.removeEventListener("keydown", menu_search_e), menu_search_e = void 0);
let n = [], l = (e)=>{
let l = document.querySelector(e);
if (!l) return;
l.innerHTML = "";
let { container: r, input: a } = function(e) {
let t = document.createElement("div");
t.className = "fluent-menu-search";
let n = document.createElement("input");
n.type = "search", n.className = "fluent-menu-search-input", n.placeholder = _("Search menu..."), n.autocomplete = "off", n.spellcheck = !1, n.setAttribute("aria-label", _("Search menu items"));
let l = document.createElement("span");
l.className = "fluent-menu-search-hotkey", l.textContent = "Ctrl+K";
let r = document.createElement("div");
r.className = "fluent-menu-search-overlay", r.style.display = "none", t.appendChild(n), t.appendChild(l), t.appendChild(r);
let a = -1, i = [];
function u() {
r.style.display = "none", r.innerHTML = "", a = -1, i = [];
}
function c(e) {
u(), n.blur(), window.location.href = L.url(e.url);
}
function s(e) {
let t = r.querySelectorAll(".fluent-menu-search-item");
0 !== t.length && (a >= 0 && t[a] && (t[a].classList.remove("selected"), t[a].removeAttribute("aria-selected")), (a += e) < 0 && (a = t.length - 1), a >= t.length && (a = 0), t[a].classList.add("selected"), t[a].setAttribute("aria-selected", "true"), t[a].scrollIntoView({
block: "nearest"
}));
}
return n.addEventListener("input", ()=>{
let t = n.value.trim();
t ? function(e) {
if (i = e, r.innerHTML = "", a = -1, 0 === e.length) {
r.style.display = "none";
return;
}
let t = document.createElement("ul");
t.className = "fluent-menu-search-list", t.setAttribute("role", "listbox");
let l = Math.min(e.length, 20);
for(let n = 0; n < l; n++){
let l = e[n], r = document.createElement("li");
r.className = "fluent-menu-search-item", r.setAttribute("role", "option"), r.setAttribute("data-index", String(n));
let a = document.createElement("span");
if (a.className = "fluent-menu-search-label", a.textContent = _(l.node.title || l.node.name || ""), l.breadcrumb.length > 1) {
let e = document.createElement("span");
e.className = "fluent-menu-search-path", e.textContent = l.breadcrumb.slice(0, -1).join(" \u2192 "), r.appendChild(e);
}
r.appendChild(a), r.addEventListener("mousedown", (e)=>{
e.preventDefault(), c(l);
}), r.addEventListener("click", ()=>c(l)), t.appendChild(r);
}
if (e.length > 20) {
let n = document.createElement("li");
n.className = "fluent-menu-search-more", n.textContent = _("and %d more...").format(e.length - 20), t.appendChild(n);
}
r.appendChild(t), r.style.display = "";
let u = n.getBoundingClientRect();
r.style.left = "0", r.style.top = `${u.height}px`;
}(searchMenu(e, t)) : u();
}), n.addEventListener("keydown", (e)=>{
if ("Escape" === e.key) {
u(), n.blur();
return;
}
if ("ArrowDown" === e.key) {
e.preventDefault(), s(1);
return;
}
if ("ArrowUp" === e.key) {
e.preventDefault(), s(-1);
return;
}
if ("Enter" === e.key) {
e.preventDefault();
let t = r.querySelectorAll(".fluent-menu-search-item");
a >= 0 && t[a] ? t[a].click() : i.length > 0 && c(i[0]);
return;
}
}), n.addEventListener("blur", ()=>{
setTimeout(()=>{
r.contains(document.activeElement) || u();
}, 150);
}), r.addEventListener("mousedown", (e)=>e.preventDefault()), {
container: t,
input: n,
overlay: r
};
}(t);
l.appendChild(r), n.push(a);
};
l(".header__search-slot"), l(".sidebar__search-slot"), 0 !== n.length && (menu_search_e = (e)=>{
if ((e.ctrlKey || e.metaKey) && "k" === e.key || "/" === e.key && !e.ctrlKey && !e.metaKey && !e.altKey && document.activeElement?.tagName !== "INPUT" && document.activeElement?.tagName !== "TEXTAREA" && !document.activeElement?.getAttribute("contenteditable")) {
e.preventDefault(), (()=>{
for (let e of n)if (null !== e.offsetParent) {
e.focus(), e.select();
return;
}
})();
return;
}
let t = n.find((e)=>document.activeElement === e);
"Escape" === e.key && t && t.blur();
}, document.addEventListener("keydown", menu_search_e));
}
;// CONCATENATED MODULE: ./web/resources/utils/poll-pause.ts
function setupSelectionPause() {
let t = !1, e = L.poll, n = "u" < typeof XHR ? void 0 : XHR, o = "function" == typeof e?.active && "function" == typeof e.stop && "function" == typeof e.start ? e : null, i = "function" == typeof n?.running && "function" == typeof n.halt && "function" == typeof n.run ? n : null, c = o ? {
isActive: ()=>o.active(),
stop: ()=>o.stop(),
start: ()=>o.start()
} : i ? {
isActive: ()=>i.running(),
stop: ()=>i.halt(),
start: ()=>i.run()
} : null;
c && document.addEventListener("selectionchange", ()=>{
let e = document.getSelection(), n = (e?.toString().trim().length ?? 0) > 0;
if (!n) {
let t = document.activeElement;
(t instanceof HTMLInputElement || t instanceof HTMLTextAreaElement) && (n = t.selectionStart !== t.selectionEnd);
}
n ? !t && c.isActive() && (t = c.stop()) : t && (c.start(), t = !1);
});
}
;// CONCATENATED MODULE: ./web/resources/utils/select-dropdown.tsx
let select_dropdown_r = !1;
function select_dropdown_s() {
document.querySelectorAll("cbi-dropdown[open], .cbi-dropdown[open], .fluent-custom-select[open]").forEach((e)=>{
if (e instanceof HTMLElement) if (e.classList.contains("fluent-custom-select")) {
let t = e.previousElementSibling;
t instanceof HTMLSelectElement && select_dropdown_f(e, t);
} else select_dropdown_a(e);
});
}
function select_dropdown_a(e) {
let t = e.getBoundingClientRect(), n = window.innerHeight - t.bottom, o = t.top, l = e.querySelector("ul.dropdown, ul:not(.preview)"), i = l ? l.querySelectorAll("li").length : 8, r = l ? l.scrollHeight : 0, s = Math.min(r > 0 ? r + 8 : 36 * i + 10, select_dropdown_c), a = n < s && o > n, d = a ? Math.max(64, o - select_dropdown_u - select_dropdown_p) : Math.max(64, n - select_dropdown_u - select_dropdown_p);
e.setAttribute("data-open-direction", a ? "up" : "down"), e.style.setProperty("--fluent-dropdown-max-height", `${Math.min(select_dropdown_c, s, d)}px`);
}
function setupFluentSelects() {
select_dropdown_r || (select_dropdown_r = !0, window.addEventListener("scroll", select_dropdown_s, !0), window.addEventListener("resize", select_dropdown_s), new MutationObserver((e)=>{
e.forEach((e)=>{
if ("attributes" === e.type && "open" === e.attributeName) {
let t = e.target;
if (t.hasAttribute("open")) if (t.classList.contains("fluent-custom-select")) {
let e = t.previousElementSibling;
e instanceof HTMLSelectElement && select_dropdown_f(t, e);
} else ("CBI-DROPDOWN" === t.tagName || t.classList.contains("cbi-dropdown")) && select_dropdown_a(t);
}
});
}).observe(document.body, {
attributes: !0,
attributeFilter: [
"open"
],
subtree: !0
})), "0" === document.body.getAttribute("data-theme-custom-select") || (document.querySelectorAll("select").forEach((e)=>{
select_dropdown_h(e);
}), document.querySelectorAll("cbi-dropdown, .cbi-dropdown").forEach((e)=>{
e.classList.contains("fluent-custom-select") || select_dropdown_d(e);
}), new MutationObserver((e)=>{
e.forEach((e)=>{
e.addedNodes.forEach((e)=>{
e.nodeType === Node.ELEMENT_NODE && ("SELECT" === e.tagName ? select_dropdown_h(e) : "CBI-DROPDOWN" === e.tagName || e.classList.contains("cbi-dropdown") ? e.classList.contains("fluent-custom-select") || select_dropdown_d(e) : (e.querySelectorAll("select").forEach((e)=>{
select_dropdown_h(e);
}), e.querySelectorAll("cbi-dropdown, .cbi-dropdown").forEach((e)=>{
e.classList.contains("fluent-custom-select") || select_dropdown_d(e);
})));
});
});
}).observe(document.body, {
childList: !0,
subtree: !0
}));
}
function select_dropdown_d(e) {
let t;
(t = e.querySelector("span.open")) && "true" !== t.getAttribute("data-chevron-upgraded") && (t.setAttribute("data-chevron-upgraded", "true"), t.innerHTML = "");
let n = e.querySelector("ul:not(.preview)");
n && !n.classList.contains("dropdown") && n.classList.add("dropdown");
}
let select_dropdown_c = 350, select_dropdown_u = 8, select_dropdown_p = 2;
function select_dropdown_b(e, t) {
let n = t.offsetTop, o = n + t.offsetHeight, l = e.scrollTop, i = l + e.clientHeight;
n < l ? e.scrollTop = n : o > i && (e.scrollTop = o - e.clientHeight);
}
function select_dropdown_f(e, t) {
let r = e.getBoundingClientRect(), s = getEffectiveDocumentDirection(), a = getViewportInlineSize(), d = window.innerHeight, b = d - r.bottom, f = r.top;
if (b < Math.min(32 * t.options.length + 10, select_dropdown_c) && f > b ? e.setAttribute("data-open-direction", "up") : e.setAttribute("data-open-direction", "down"), !e.closest("#modal_overlay .modal, .fluent-mac-overlay-card, [class*='overlay']")) return void e.removeAttribute("data-fluent-floating");
let m = Math.min(32 * t.options.length + 10, select_dropdown_c, 0.45 * d), h = b < m && f > b, v = Math.min(m, Math.max(64, h ? f - select_dropdown_u - select_dropdown_p : b - select_dropdown_u - select_dropdown_p)), w = Math.min(r.width, a - 2 * select_dropdown_u), y = Math.min(Math.max(select_dropdown_u, getRectInlineStart(r, s, a)), a - w - select_dropdown_u), A = h ? Math.max(select_dropdown_u, r.top - v - select_dropdown_p) : Math.min(d - select_dropdown_u - v, r.bottom + select_dropdown_p);
e.setAttribute("data-open-direction", h ? "up" : "down"), e.setAttribute("data-fluent-floating", "modal"), setInlineCssCustomProperties(e.style, {
inlineStart: y,
inlineSize: w
}, s, a, {
inlineStart: "--fluent-dropdown-left",
inlineSize: "--fluent-dropdown-width"
}), e.style.setProperty("--fluent-dropdown-top", `${A}px`), e.style.setProperty("--fluent-dropdown-max-height", `${v}px`);
}
function select_dropdown_m(e) {
e.removeAttribute("open"), e.removeAttribute("data-fluent-floating"), e.style.removeProperty("--fluent-dropdown-left"), e.style.removeProperty("--fluent-dropdown-top"), e.style.removeProperty("--fluent-dropdown-width"), e.style.removeProperty("--fluent-dropdown-max-height"), e.closest(".cbi-value-field, .cbi-value")?.classList.remove("cbi-dropdown-open");
let t = e.querySelector("ul.dropdown");
t instanceof HTMLElement && "function" == typeof t.hidePopover && t.matches(":popover-open") && t.hidePopover();
}
function select_dropdown_h(n) {
if (n?.tagName !== "SELECT" || "true" === n.getAttribute("data-fluent-transformed") || n.closest(".cbi-dropdown") || n.multiple || function(e) {
let t = e.getAttribute("style") || "";
if (/\bdisplay\s*:\s*none/i.test(t) || "none" === e.style.display) return !0;
if (!e.isConnected) return !1;
try {
let t = window.getComputedStyle(e);
if ("none" === t.display) {
let t = e.parentElement, n = !1;
for(; t;){
let e = window.getComputedStyle(t);
if ("none" === e.display) {
n = !0;
break;
}
t = t.parentElement;
}
if (!n) return !0;
let o = e.cloneNode(!1);
o.style.display = "", document.body.appendChild(o);
let l = window.getComputedStyle(o), i = "none" === l.display;
return document.body.removeChild(o), i;
}
} catch (e) {}
return !1;
}(n)) return;
let o = n.getAttribute("style");
n.setAttribute("data-fluent-transformed", "true"), n.style.setProperty("display", "none", "important");
let l = jsx("li", {});
l.setAttribute("selected", "");
let i = jsx("ul", {
class: "dropdown"
}), r = jsx("span", {
class: "open"
}), s = jsxs("div", {
class: "fluent-custom-select",
children: [
jsx("ul", {
children: l
}),
r,
i
]
});
if (s.setAttribute("tabindex", "0"), o) {
let e = o.replace(/\bdisplay\s*:\s*[^;]+(;|$)/gi, "").trim();
e && s.setAttribute("style", e);
}
n.disabled && (s.setAttribute("disabled", ""), s.removeAttribute("tabindex"));
let a = ()=>{
i.innerHTML = "";
let t = "", o = !1;
if (Array.from(n.options).forEach((n)=>{
let l = jsx("li", {
children: n.text
});
l.setAttribute("data-value", n.value), n.selected && (l.setAttribute("selected", ""), t = n.text, o = !0), n.disabled && l.setAttribute("disabled", ""), i.appendChild(l);
}), !o && n.options.length > 0) {
let e = n.options[n.selectedIndex >= 0 ? n.selectedIndex : 0];
t = e.text;
let o = i.querySelector(`li[data-value="${e.value}"]`);
o?.setAttribute("selected", "");
}
l.textContent = t;
};
a(), n.parentNode?.insertBefore(s, n.nextSibling), s.addEventListener("click", (e)=>{
if (s.hasAttribute("disabled")) return;
let t = e.target.closest("ul.dropdown > li");
if (t) {
let o = t.getAttribute("data-value");
null === o || t.hasAttribute("disabled") || (n.value = o, n.dispatchEvent(new Event("change", {
bubbles: !0
})), n.dispatchEvent(new Event("input", {
bubbles: !0
}))), select_dropdown_m(s), e.stopPropagation();
return;
}
if (s.hasAttribute("open")) select_dropdown_m(s);
else {
document.querySelectorAll("cbi-dropdown[open], .cbi-dropdown[open], .fluent-custom-select[open]").forEach((e)=>{
e instanceof HTMLElement && e.classList.contains("fluent-custom-select") ? select_dropdown_m(e) : (e.removeAttribute("open"), e.closest(".cbi-value-field, .cbi-value")?.classList.remove("cbi-dropdown-open"));
}), select_dropdown_f(s, n), s.setAttribute("open", ""), s.closest(".cbi-value-field, .cbi-value")?.classList.add("cbi-dropdown-open");
let e = i.querySelector("li[selected]");
e && select_dropdown_b(i, e);
}
e.stopPropagation();
});
let d = (e)=>{
!s.contains(e.target) && e.target !== n && s.hasAttribute("open") && select_dropdown_m(s);
};
document.addEventListener("click", d, !0), s.addEventListener("keydown", (e)=>{
if (s.hasAttribute("disabled")) return;
let t = s.hasAttribute("open"), o = Array.from(i.querySelectorAll("li:not([disabled])")), l = o.findIndex((e)=>e.hasAttribute("selected"));
switch(e.key){
case "Enter":
case " ":
if (e.preventDefault(), t) {
let e = o[l];
e && e.click();
} else s.click();
break;
case "Escape":
t && (e.preventDefault(), select_dropdown_m(s));
break;
case "ArrowDown":
if (e.preventDefault(), t) {
if (o.length > 0) {
let e = (l + 1) % o.length;
o.forEach((t, o)=>{
if (o === e) {
t.setAttribute("selected", ""), select_dropdown_b(i, t);
let e = t.getAttribute("data-value");
null !== e && (n.value = e, n.dispatchEvent(new Event("change", {
bubbles: !0
})), n.dispatchEvent(new Event("input", {
bubbles: !0
})));
} else t.removeAttribute("selected");
});
}
} else s.click();
break;
case "ArrowUp":
if (e.preventDefault(), t) {
if (o.length > 0) {
let e = (l - 1 + o.length) % o.length;
o.forEach((t, o)=>{
if (o === e) {
t.setAttribute("selected", ""), select_dropdown_b(i, t);
let e = t.getAttribute("data-value");
null !== e && (n.value = e, n.dispatchEvent(new Event("change", {
bubbles: !0
})), n.dispatchEvent(new Event("input", {
bubbles: !0
})));
} else t.removeAttribute("selected");
});
}
} else s.click();
break;
case "Tab":
t && select_dropdown_m(s);
}
}), n.addEventListener("change", ()=>{
let e = n.value, t = Array.from(i.querySelectorAll("li")), o = "";
t.forEach((t)=>{
t.getAttribute("data-value") === e ? (t.setAttribute("selected", ""), o = t.textContent || "") : t.removeAttribute("selected");
}), l.textContent = o;
});
let c = new MutationObserver(()=>{
a();
});
c.observe(n, {
childList: !0
});
let u = new MutationObserver((e)=>{
e.forEach((e)=>{
"disabled" === e.attributeName && (n.disabled ? (s.setAttribute("disabled", ""), s.removeAttribute("tabindex"), select_dropdown_m(s)) : (s.removeAttribute("disabled"), s.setAttribute("tabindex", "0")));
});
});
u.observe(n, {
attributes: !0,
attributeFilter: [
"disabled"
]
});
let p = new MutationObserver((e)=>{
e.forEach((e)=>{
e.removedNodes.forEach((e)=>{
(e === n || e.contains?.(n)) && (document.removeEventListener("click", d, !0), c.disconnect(), u.disconnect(), p.disconnect(), s.remove());
});
});
});
n.parentNode && p.observe(n.parentNode, {
childList: !0
});
}
;// 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.ts
function setupThemeFeatures() {
let l = document.body;
if (!l) return;
let a = L.ui, s = a.Dropdown;
s && (s.prototype.getScrollParent = (e)=>{
let t = e.parentElement;
for(; t;){
if (t.classList.contains("cbi-tabcontainer") || t.id?.startsWith("container.") || t.classList.contains("cbi-section") || t.clientHeight < 250 && !t.classList.contains("modal")) {
t = t.parentElement;
continue;
}
let e = getComputedStyle(t);
if (/(auto|scroll)/.test(e.overflow + e.overflowY + e.overflowX)) return t;
t = t.parentElement;
}
return document.scrollingElement || document.documentElement;
});
let o = L.rpc.declare({
object: "luci.fluent",
method: "set_mode",
params: [
"mode"
]
}), d = l.getAttribute("data-prefers-reduced-motion") || "1";
if ("1" === d) {
let e = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
l.setAttribute("data-reduce-motion", e ? "true" : "false");
} else l.setAttribute("data-reduce-motion", "false");
"1" === d && window.matchMedia("(prefers-reduced-motion: reduce)").addEventListener("change", (e)=>{
l.setAttribute("data-reduce-motion", e.matches ? "true" : "false");
});
let c = l.getAttribute("data-theme-mode") || "auto", u = document.getElementById("theme-toggle");
function m(e) {
return "dark" === e ? "dark" : "light" === e ? "light" : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
}
function f(e, t) {
u && (document.documentElement.setAttribute("data-theme", e), u.setAttribute("data-active-theme", e), u.setAttribute("data-mode", t));
}
u && (f(m(l.getAttribute("data-theme-mode") || "auto"), c), u.hidden = !1, requestAnimationFrame(()=>{
u.classList.add("visible");
}), u.addEventListener("click", async ()=>{
var e;
if (u.disabled) return;
let t = "dark" === (e = l.getAttribute("data-theme-mode") || c) ? "light" : "light" === e ? "auto" : "dark", i = m(t);
u.disabled = !0, f(i, t);
try {
let e = await o(t);
if (e?.result !== 0) throw Error(`RPC returned ${e?.result ?? "no response"} - permission denied or script error`);
l.setAttribute("data-theme-mode", t);
} catch (t) {
let e = l.getAttribute("data-theme-mode") || c;
f(m(e), e), a.addNotification(null, `Failed to save theme mode: ${t instanceof Error ? t.message : String(t)}`, "error");
} finally{
u.disabled = !1;
}
}), window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", (e)=>{
if ("auto" !== (l.getAttribute("data-theme-mode") || c)) return;
let t = e.matches ? "dark" : "light";
document.documentElement.setAttribute("data-theme", t), u.setAttribute("data-active-theme", t);
}));
let h = "1" === l.getAttribute("data-tab-animation");
function b(l) {
let a = l.getBoundingClientRect();
if (0 === a.width && 0 === a.height) return;
let s = l.querySelector(".fluent-tab-slider");
s || ((s = document.createElement("div")).className = "fluent-tab-slider", l.appendChild(s));
let o = l.querySelector("li.cbi-tab, li.active");
if (!o) {
s.style.width = "0px";
return;
}
let d = o.querySelector("a");
if (!d) return;
let c = d.getBoundingClientRect(), u = window.getComputedStyle(d), m = getEffectiveDocumentDirection(), f = getViewportInlineSize(), h = getInlinePadding(u), b = {
inlineStart: getRectInlineStart(c, m, f) - getRectInlineStart(a, m, f) + Math.abs(l.scrollLeft) + h.inlineStart,
inlineSize: c.width - h.inlineStart - h.inlineEnd
}, p = `${b.inlineStart}px`, g = `${b.inlineSize}px`;
if (s.dataset.inlineStart === p && s.dataset.inlineSize === g) return;
let y = void 0 === s.dataset.inlineStart;
y && (s.style.transition = "none"), applyInlineGeometryToStyle(s.style, b), s.dataset.inlineStart = p, s.dataset.inlineSize = g, y && (s.offsetHeight, s.style.transition = "");
}
function p() {
document.querySelectorAll("ul.cbi-tabmenu, ul.tabs").forEach((i)=>{
if (i.dataset.sliderInit) return void b(i);
i.dataset.sliderInit = "true";
let n = i.querySelector(".fluent-tab-slider");
if (n || ((n = document.createElement("div")).className = "fluent-tab-slider", i.appendChild(n)), h && i.classList.contains("tabs")) {
let r = null;
try {
r = sessionStorage.getItem("fluent-tab-slider-pos");
} catch {}
if (r) try {
let t = JSON.parse(r);
sessionStorage.removeItem("fluent-tab-slider-pos"), n.style.transition = "none", applyInlineGeometryToStyle(n.style, {
inlineStart: Number.parseFloat(t.inlineStart),
inlineSize: Number.parseFloat(t.inlineSize)
}), n.dataset.inlineStart = t.inlineStart, n.dataset.inlineSize = t.inlineSize, n.offsetHeight, n.style.transition = "", b(i);
} catch {
b(i);
}
else {
b(i);
let e = getEffectiveDocumentDirection();
n.style.transition = "none", n.style.transformOrigin = "rtl" === e ? "right center" : "left center", n.style.transform = "scaleX(0)", n.offsetHeight, n.style.transition = "", n.style.transform = "scaleX(1)";
}
i.querySelectorAll("li > a").forEach((e)=>{
let t = e.getAttribute("href");
t && "#" !== t && e.addEventListener("click", ()=>{
try {
n && sessionStorage.setItem("fluent-tab-slider-pos", JSON.stringify({
inlineStart: n.dataset.inlineStart || "0px",
inlineSize: n.dataset.inlineSize || "0px"
}));
} catch {}
});
});
} else b(i);
new MutationObserver(()=>{
b(i);
}).observe(i, {
attributes: !0,
subtree: !0,
attributeFilter: [
"class"
]
});
try {
new IntersectionObserver((e)=>{
for (let t of e)t.isIntersecting && b(i);
}, {
threshold: 0
}).observe(i);
} catch (e) {
console.warn("Fluent theme: IntersectionObserver not supported", e);
}
});
}
function g() {
document.querySelectorAll("#modal_overlay .modal").forEach((e)=>{
let t = Array.from(e.children).find((e)=>e instanceof HTMLElement && e.classList.contains("modal-content-wrap")), i = e.classList.contains("alert-message") && !e.querySelector(".button-row, button, .cbi-button"), n = e.classList.contains("spinning") && !e.querySelector(".cbi-map, form");
if (i || n) {
if (t) {
for (let i of Array.from(t.children))e.insertBefore(i, t);
t.remove();
}
return;
}
if (t?.querySelector(":scope > .cbi-map")) {
for (let i of Array.from(t.children))e.insertBefore(i, t);
t.remove();
return;
}
if (Array.from(e.children).some((e)=>e.classList.contains("cbi-map"))) return;
let r = Array.from(e.children).filter((e)=>{
if (e === t) return !1;
let i = e.classList.contains("close") || e.classList.contains("modal-close"), n = "SCRIPT" === e.tagName || "STYLE" === e.tagName;
return !i && !n;
});
if (0 === r.length) return;
let l = [], a = 0;
for(; a < r.length;){
let e = r[a];
if ("H4" === e.tagName || e.classList.contains("modal-header") || e.classList.contains("cbi-tabmenu") || e.classList.contains("tabs")) l.push(e), a++;
else break;
}
let s = null;
if (a < r.length) {
let e = r[r.length - 1];
if (!l.includes(e)) {
let t = e.classList.contains("button-row") || e.classList.contains("modal-footer") || e.classList.contains("right"), i = null !== e.querySelector('button, .btn, .cbi-button, input[type="button"], input[type="submit"]');
if ((t || i) && (s = e, r.length >= 3)) {
let e = r[r.length - 2];
if (!l.includes(e) && !(e.classList.contains("cbi-map") || e.classList.contains("cbi-section") || "UL" === e.tagName || "TABLE" === e.tagName || e.id.startsWith("cbi-"))) {
let t = null !== e.querySelector('input[type="checkbox"], .cbi-checkbox'), i = null !== e.querySelector('input[type="text"], input[type="number"], input[type="password"], textarea, select');
t && !i && (s = e);
}
}
}
}
let o = [], d = s ? r.indexOf(s) : r.length;
for(let e = a; e < d; e++)o.push(r[e]);
if (o.length > 0) for (let i of (t || ((t = document.createElement("div")).className = "modal-content-wrap", s ? e.insertBefore(t, s) : e.appendChild(t)), o))t.appendChild(i);
});
}
if (p(), g(), new MutationObserver(()=>{
p(), g();
}).observe(l, {
childList: !0,
subtree: !0
}), window.addEventListener("resize", ()=>{
document.querySelectorAll("ul.cbi-tabmenu, ul.tabs").forEach((e)=>{
b(e);
});
}), "1" === l.getAttribute("data-loading-bar")) {
let e = !1, t = document.getElementById("fluent-top-loading"), i = ()=>{
t && !e && t.classList.add("loaded");
}, n = ()=>{
t && t.classList.remove("loaded");
};
"interactive" === document.readyState || "complete" === document.readyState ? i() : document.addEventListener("DOMContentLoaded", i), window.addEventListener("load", i), window.addEventListener("beforeunload", ()=>{
e = !0, n();
}), document.addEventListener("click", (e)=>{
let t = e.target;
if (!t) return;
let i = t.closest("a");
if (i) {
let e = i.getAttribute("href");
!e || e.startsWith("#") || e.startsWith("javascript:") || i.getAttribute("target") || i.hostname !== location.hostname || n();
}
}), document.addEventListener("submit", (e)=>{
if (e.defaultPrevented) return;
let t = e.target;
if (!t) return;
let i = t.closest("form");
i && !i.getAttribute("target") && n();
}), new MutationObserver(()=>{
Array.from(document.querySelectorAll(".spinning, .loading, #view > .spinning")).some((e)=>{
let t = window.getComputedStyle(e);
return e.getClientRects().length > 0 && "none" !== t.display && "hidden" !== t.visibility && !e.closest(".btn");
}) ? n() : i();
}).observe(document.documentElement, {
childList: !0,
subtree: !0
});
}
function y(e, t) {
let i, n, r = t ? "fluent-sidebar-parent-slider" : "fluent-sidebar-slider", l = e.querySelector(`.${r}`);
l || ((l = document.createElement("div")).className = r, e.appendChild(l));
let a = e.querySelector("li.active");
if (!a || t && (a.classList.contains("slide") || a.querySelector(".slide-menu"))) {
l.style.height = "0px", l.style.opacity = "0";
return;
}
l.style.opacity = "1";
let s = t ? a.querySelector("a.menu, a.item") : a;
if (!s) return;
let o = s.getBoundingClientRect(), d = e.getBoundingClientRect();
t ? (i = o.top - d.top + e.scrollTop + 0.2 * o.height, n = 0.6 * o.height) : (i = o.top - d.top + e.scrollTop + 0.15 * o.height, n = 0.7 * o.height), l.style.top = `${i}px`, l.style.height = `${n}px`;
}
function S() {
let e = document.querySelector("#mainmenu");
if (!e) return;
let t = e.querySelector("ul.nav");
if (t) {
let e = t.querySelector(".fluent-sidebar-parent-slider");
if (e || ((e = document.createElement("div")).className = "fluent-sidebar-parent-slider", t.appendChild(e)), t.classList.add("has-slider"), !t.dataset.sliderInit && (t.dataset.sliderInit = "true", h && t.querySelectorAll("li > a.menu, li > a.item").forEach((e)=>{
let i = e.getAttribute("href");
i && "#" !== i && e.addEventListener("click", ()=>{
try {
let e = t.querySelector(".fluent-sidebar-parent-slider");
e && sessionStorage.setItem("fluent-sidebar-parent-pos", JSON.stringify({
top: e.style.top,
height: e.style.height
}));
} catch {}
});
})), h) {
let t = null;
try {
t = sessionStorage.getItem("fluent-sidebar-parent-pos");
} catch {}
if (t) try {
let i = JSON.parse(t);
sessionStorage.removeItem("fluent-sidebar-parent-pos"), e.style.transition = "none", e.style.top = i.top, e.style.height = i.height, e.offsetHeight, e.style.transition = "";
} catch {}
}
y(t, !0);
}
e.querySelectorAll("ul.slide-menu").forEach((e)=>{
let t = e.classList.contains("active"), i = e.querySelector(".fluent-sidebar-slider");
if (i || ((i = document.createElement("div")).className = "fluent-sidebar-slider", e.appendChild(i)), e.classList.add("has-slider"), !e.dataset.sliderInit && (e.dataset.sliderInit = "true", h && e.querySelectorAll("li > a").forEach((t)=>{
let i = t.getAttribute("href");
i && "#" !== i && t.addEventListener("click", ()=>{
try {
let t = e.querySelector(".fluent-sidebar-slider");
t && sessionStorage.setItem("fluent-sidebar-submenu-pos", JSON.stringify({
top: t.style.top,
height: t.style.height
}));
} catch {}
});
})), h && t) {
let e = null;
try {
e = sessionStorage.getItem("fluent-sidebar-submenu-pos");
} catch {}
if (e) try {
let t = JSON.parse(e);
sessionStorage.removeItem("fluent-sidebar-submenu-pos"), i.style.transition = "none", i.style.top = t.top, i.style.height = t.height, i.offsetHeight, i.style.transition = "";
} catch {}
}
y(e, !1);
});
}
S(), new MutationObserver(()=>S()).observe(l, {
childList: !0,
subtree: !0
}), document.addEventListener("fluent-menu-expand", ()=>{
let e = document.querySelector("#mainmenu");
if (e) {
let t = e.querySelector("ul.nav");
t && (y(t, !0), setTimeout(()=>{
y(t, !0);
}, 250));
}
}), document.addEventListener("fluent-sidebar-state-change", ()=>{
let e = document.querySelector("#mainmenu");
if (e) {
let t = e.querySelector("ul.nav");
t && y(t, !0), e.querySelectorAll("ul.slide-menu").forEach((e)=>{
y(e, !1);
});
}
}), window.addEventListener("resize", ()=>{
let e = document.querySelector("#mainmenu");
if (e) {
let t = e.querySelector("ul.nav");
t && y(t, !0), e.querySelectorAll("ul.slide-menu").forEach((e)=>{
y(e, !1);
});
}
});
}
;// CONCATENATED MODULE: ./web/resources/utils/menu-features.ts
const setupMenuStartup = ()=>setupApplyChangePreview();
const setupMenuFeatures = (r)=>{
if (!r) {
setupTableWrappers(), setupSelectionPause(), setupErrorTooltips(), setupFluentSelects(), setupIfaceboxTooltips(), setupThemeFeatures(), setupMacSelector(), setupLogViewer();
return;
}
setupMenuSearch(r);
};
;// 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;