diff --git a/CHANGELOG.md b/CHANGELOG.md
index 59ec464a..6d76e98c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -30,6 +30,11 @@ All notable changes to this project are documented in this file.
### Fixed
- **`mjr_am_backend.adapters.tools` missing from Registry installs**: `.comfyignore`'s unanchored `tools/` pattern also matched `mjr_am_backend/adapters/tools/`, stripping the ExifTool/FFProbe adapters out of every Registry-published package and causing `ModuleNotFoundError: No module named 'mjr_am_backend.adapters.tools'` at startup. The pattern is now anchored to the repo-root `/tools/` dev-scripts folder only.
+### Fixed (duplicate stacks)
+- **Clicking a duplicate-stack badge froze ComfyUI**: three passes (`displayAssets`, the per-card ref callback `syncRenderedDuplicateCards`, the live-upsert dedupe) each rewrote `_mjrDupStack` / `_mjrDupMembers` on reactive assets read by the grid template, with a fresh array on every pass and conflicting representatives. The ref callback ran on every render (a new closure each time), so every write scheduled another render: an endless update loop (production Vue has no recursion limit). Duplicate stacks are now computed in one place with change-guarded writes, card refs are stable, and the other passes no longer touch these fields.
+- **"Corrupted" duplicate stacks**: stacks were also built from the file name alone across folders, so unrelated files sharing a name (e.g. frame grabs `at-7.958s.png` from different videos) were stacked, hidden from the grid and given another file's generation time. A duplicate is now the same name in the same source/root/subfolder only.
+- **Duplicates view collapsed back to one card**: the "Duplicates - N copies" view re-grouped its own members; it now lists every copy, using cycle-free copies of the members.
+
### Fixed (asset sync)
- **Renamed / moved files lost their ratings, tags and collections**: the `assets_fts` triggers ran a plain `UPDATE`/`DELETE` on an external-content FTS5 table, so every filename/subfolder change failed with "database disk image is malformed" (and could start a needless DB recovery). The watcher then fell back to delete + re-index, creating a new asset id. Triggers now use FTS5's `'delete'` command (update trigger limited to `filename, subfolder`); existing databases are repaired and the FTS index rebuilt automatically at startup.
- **Outputs missed after a generation**: ComfyUI calls `on_prompt_end` before it stores the prompt history, so post-execution ingestion could read an empty history and index nothing (prompts queued from the API, another tab or another device). Ingestion now waits briefly for the history entry.
diff --git a/dist/chunks/FloatingViewer-Bw0UgjBJ.js b/dist/chunks/FloatingViewer-DjWZOB3Z.js
similarity index 99%
rename from dist/chunks/FloatingViewer-Bw0UgjBJ.js
rename to dist/chunks/FloatingViewer-DjWZOB3Z.js
index 7be922e7..a84def20 100644
--- a/dist/chunks/FloatingViewer-Bw0UgjBJ.js
+++ b/dist/chunks/FloatingViewer-DjWZOB3Z.js
@@ -1,12 +1,12 @@
import { $t as e, g as t, y as n } from "./viewerRuntimeHosts-CkUqwo6l.js";
import { C as r, H as i, I as a, M as o, O as s, P as c, V as l, at as u, j as d, m as f, o as p, r as m, v as h, w as g, x as _, z as v } from "./events-B9CSrqJ_.js";
import { a as y, i as b, o as x, s as S } from "./graphTraversal-DTdQWkn5.js";
-import { _ as C, g as w, m as T, n as E, p as ee, r as D, w as O } from "./Viewer-BEptWhbV.js";
-import { r as k, v as A } from "./SidebarWorkflowSection-BjUgGET_.js";
-import { _ as j, a as M, c as N, d as P, f as F, g as I, h as L, i as te, l as R, m as z, o as ne, p as B, r as re, s as V, t as ie, u as H, v as U } from "./openMajoorSettings-BZtL8v_l.js";
+import { _ as C, g as w, m as T, n as E, p as ee, r as D, w as O } from "./Viewer-DCWIIJQl.js";
+import { r as k, v as A } from "./SidebarWorkflowSection-BMRq92Vq.js";
+import { _ as j, a as M, c as N, d as P, f as F, g as I, h as L, i as te, l as R, m as z, o as ne, p as B, r as re, s as V, t as ie, u as H, v as U } from "./openMajoorSettings-D92RuxBO.js";
import { a as W, n as ae, r as oe } from "./model3dRenderer-BsJ9YHaZ.js";
import { i as se, o as ce, r as le, t as ue } from "./geninfoParser-CgHp-y-n.js";
-import { t as de } from "./genInfo-C3ZF_agc.js";
+import { t as de } from "./genInfo-B60U6rEQ.js";
// ui/features/viewer/floatingViewerConstants.ts
var G = Object.freeze({
SIMPLE: "simple",
diff --git a/dist/chunks/LiveStreamTracker-CUeCguVd.js b/dist/chunks/LiveStreamTracker-B3HhmLvE.js
similarity index 98%
rename from dist/chunks/LiveStreamTracker-CUeCguVd.js
rename to dist/chunks/LiveStreamTracker-B3HhmLvE.js
index 8dbaaa24..c359d141 100644
--- a/dist/chunks/LiveStreamTracker-CUeCguVd.js
+++ b/dist/chunks/LiveStreamTracker-B3HhmLvE.js
@@ -1,5 +1,5 @@
import { Z as e, o as t, r as n } from "./events-B9CSrqJ_.js";
-import { t as r } from "./floatingViewerManager-DI520cRz.js";
+import { t as r } from "./floatingViewerManager-B_1xQj1m.js";
// ui/features/viewer/LiveStreamTracker.ts
var i = !1, a = null, o = null, s = null, c = null, l = null, u = null, d = null, f = null, p = 0, m = 0, h = !1, g = 400, _ = "kj_preview_override", v = /* @__PURE__ */ new Set([
"image/jpeg",
diff --git a/dist/chunks/SidebarWorkflowSection-BjUgGET_.js b/dist/chunks/SidebarWorkflowSection-BMRq92Vq.js
similarity index 99%
rename from dist/chunks/SidebarWorkflowSection-BjUgGET_.js
rename to dist/chunks/SidebarWorkflowSection-BMRq92Vq.js
index c27ca268..8a7ed4d3 100644
--- a/dist/chunks/SidebarWorkflowSection-BjUgGET_.js
+++ b/dist/chunks/SidebarWorkflowSection-BMRq92Vq.js
@@ -1,10 +1,10 @@
import { $ as e, $t as t, At as n, Bt as r, Ct as i, Dt as a, Et as o, Ft as s, Gt as c, Ht as l, I as u, It as d, K as f, Kt as p, Mt as m, N as h, Nt as g, O as _, Ot as v, Pt as y, Q as b, Qt as x, R as S, Rt as C, S as ee, St as te, T as ne, Tt as w, Ut as T, Vt as re, X as ie, Y as E, Yt as ae, Z as oe, Zt as se, at as ce, cn as le, ct as ue, dt as de, et as D, gt as fe, it as pe, jt as me, k as he, kt as ge, ln as _e, lt as ve, nt as ye, ot as be, p as xe, rt as Se, tn as Ce, tt as we, ut as Te, w as Ee, wt as De } from "./viewerRuntimeHosts-CkUqwo6l.js";
import { G as Oe, J as ke, N as Ae, R as je, T as Me, Tt as Ne, X as Pe, c as Fe, d as Ie, f as Le, h as Re, ht as ze, j as Be, l as Ve, m as O, o as k, p as He, rt as Ue, s as A, u as We, x as Ge, y as Ke } from "./events-B9CSrqJ_.js";
-import { F as qe, K as Je, P as Ye, Y as Xe, f as Ze, m as Qe, p as $e } from "./Viewer-BEptWhbV.js";
-import { t as et } from "./floatingViewerManager-DI520cRz.js";
+import { F as qe, G as Je, J as Ye, P as Xe, f as Ze, m as Qe, p as $e } from "./Viewer-DCWIIJQl.js";
+import { t as et } from "./floatingViewerManager-B_1xQj1m.js";
import { A as tt, C as j, D as nt, E as M, G as rt, J as it, K as at, N as ot, O as N, R as st, S as ct, T as P, U as F, V as I, Y as lt, _ as ut, a as dt, b as ft, c as pt, d as mt, dt as L, f as ht, ft as R, g as gt, h as _t, i as vt, j as yt, k as z, l as bt, lt as B, m as xt, n as St, nt as Ct, o as wt, p as Tt, r as Et, rt as V, s as Dt, t as Ot, u as kt, ut as At, y as jt, z as Mt } from "./mjr-primevue-BRqtdXzb.js";
import { t as Nt } from "./mjr-vue-vendor-mHY_eIVE.js";
-import { t as Pt } from "./viewerOpenRequest-B8IT-KHd.js";
+import { t as Pt } from "./viewerOpenRequest-DaR0P9Y2.js";
import { a as Ft, i as It, n as Lt, o as Rt, r as zt, t as Bt } from "./geninfoParser-CgHp-y-n.js";
// ui/app/settings/settingsUtils.ts
var H = (e, t) => {
@@ -251,7 +251,7 @@ var H = (e, t) => {
console.debug?.(e);
}
try {
- Xe("mjr-settings-save-failed", { error: String(e?.message || e || "") }, { warnPrefix: "[Majoor]" });
+ Ye("mjr-settings-save-failed", { error: String(e?.message || e || "") }, { warnPrefix: "[Majoor]" });
} catch (e) {
console.debug?.(e);
}
@@ -318,7 +318,7 @@ async function Zt() {
} catch (e) {
console.debug?.(e);
}
- G(n), K(n), Xe("mjr-settings-changed", { key: "security" }, { warnPrefix: "[Majoor]" });
+ G(n), K(n), Ye("mjr-settings-changed", { key: "security" }, { warnPrefix: "[Majoor]" });
} catch (e) {
console.warn("[Majoor] failed to sync backend security settings", e);
}
@@ -330,7 +330,7 @@ async function Qt() {
let t = e.data?.prefs;
if (!t || typeof t != "object") return;
let n = Xt();
- n.ai = n.ai || {}, n.ai.vectorSearchEnabled = H(t.enabled, n.ai.vectorSearchEnabled ?? !0), n.ai.vectorCaptionOnIndex = H(t.caption_on_index ?? t.captionOnIndex, n.ai.vectorCaptionOnIndex ?? !1), n.ai.vectorIndexOnScan = H(t.index_on_scan ?? t.indexOnScan, n.ai.vectorIndexOnScan ?? !1), n.ai.vectorUnloadAfterUse = H(t.unload_after_use ?? t.unloadAfterUse, n.ai.vectorUnloadAfterUse ?? !1), n.ai.vectorConcurrency = Math.max(1, Math.min(16, Math.floor(Number(t.concurrency ?? n.ai.vectorConcurrency ?? 1) || 1))), G(n), K(n), Xe("mjr-settings-changed", { key: "ai.vectorSearch" }, { warnPrefix: "[Majoor]" });
+ n.ai = n.ai || {}, n.ai.vectorSearchEnabled = H(t.enabled, n.ai.vectorSearchEnabled ?? !0), n.ai.vectorCaptionOnIndex = H(t.caption_on_index ?? t.captionOnIndex, n.ai.vectorCaptionOnIndex ?? !1), n.ai.vectorIndexOnScan = H(t.index_on_scan ?? t.indexOnScan, n.ai.vectorIndexOnScan ?? !1), n.ai.vectorUnloadAfterUse = H(t.unload_after_use ?? t.unloadAfterUse, n.ai.vectorUnloadAfterUse ?? !1), n.ai.vectorConcurrency = Math.max(1, Math.min(16, Math.floor(Number(t.concurrency ?? n.ai.vectorConcurrency ?? 1) || 1))), G(n), K(n), Ye("mjr-settings-changed", { key: "ai.vectorSearch" }, { warnPrefix: "[Majoor]" });
} catch (e) {
console.warn("[Majoor] failed to sync backend vector search settings", e);
}
@@ -342,7 +342,7 @@ async function $t() {
let t = e.data?.prefs;
if (!t || typeof t != "object") return;
let n = Xt();
- n.executionGrouping = n.executionGrouping || {}, n.executionGrouping.enabled = H(t.enabled, n.executionGrouping.enabled ?? A.EXECUTION_GROUPING_ENABLED), G(n), K(n), Xe("mjr-settings-changed", { key: "executionGrouping.enabled" }, { warnPrefix: "[Majoor]" });
+ n.executionGrouping = n.executionGrouping || {}, n.executionGrouping.enabled = H(t.enabled, n.executionGrouping.enabled ?? A.EXECUTION_GROUPING_ENABLED), G(n), K(n), Ye("mjr-settings-changed", { key: "executionGrouping.enabled" }, { warnPrefix: "[Majoor]" });
} catch (e) {
console.warn("[Majoor] failed to sync backend execution grouping settings", e);
}
@@ -2602,12 +2602,12 @@ function Mr(e, t, { initRuntime: n = !1 } = {}) {
if (!i.size) return;
let e = Array.from(i);
i.clear();
- for (let t of e) Xe("mjr-settings-changed", { key: t }, { warnPrefix: "[Majoor]" });
+ for (let t of e) Ye("mjr-settings-changed", { key: t }, { warnPrefix: "[Majoor]" });
}, s = () => {
if (!a.size) return;
let e = Array.from(a);
a.clear();
- for (let t of e) Xe("mjr-settings-changed", { key: t }, { warnPrefix: "[Majoor]" });
+ for (let t of e) Ye("mjr-settings-changed", { key: t }, { warnPrefix: "[Majoor]" });
}, c = fn(o, 120), l = fn(s, 450), u = (e) => {
typeof e == "string" && i.add(e), c();
}, d = (e) => {
@@ -2672,7 +2672,7 @@ try {
let e = Xt();
e?.watcher && typeof e.watcher.enabled == "boolean" && Te().then((e) => {
let t = !!e?.ok && !!e?.data?.enabled, n = Xt();
- n.watcher = n.watcher || {}, typeof t == "boolean" && t !== !!n.watcher.enabled && (n.watcher.enabled = t, G(n), Xe("mjr-settings-changed", { key: "watcher.enabled" }, { warnPrefix: "[Majoor]" }));
+ n.watcher = n.watcher || {}, typeof t == "boolean" && t !== !!n.watcher.enabled && (n.watcher.enabled = t, G(n), Ye("mjr-settings-changed", { key: "watcher.enabled" }, { warnPrefix: "[Majoor]" }));
}).catch(() => {});
} catch (e) {
console.debug?.(e);
@@ -4256,7 +4256,7 @@ var Xa = {
label: "Generation Time",
value: `${(Number(h) / 1e3).toFixed(1)}s`,
tooltip: "Time taken to generate this asset (workflow execution time)",
- valueStyle: `color: ${Ye(h)}; font-weight: 600;`
+ valueStyle: `color: ${Xe(h)}; font-weight: 600;`
});
let g = e.generation_time || e.file_creation_time || e.mtime || e.created_at;
if (g) {
@@ -5171,7 +5171,7 @@ var Vo = ["title"], Ho = ["src"], Uo = {
setup(e) {
let n = e, r = V(0), i = V(!1), a = null;
function o() {
- return a ||= import("./floatingViewerManager-DI520cRz.js").then((e) => e.n), a;
+ return a ||= import("./floatingViewerManager-B_1xQj1m.js").then((e) => e.n), a;
}
function s() {
return (Array.isArray(n.inputFile?.previewCandidates) ? n.inputFile.previewCandidates : [])[r.value] || "";
diff --git a/dist/chunks/TagsEditor-gpBsG4si.js b/dist/chunks/TagsEditor-BydzUbtv.js
similarity index 99%
rename from dist/chunks/TagsEditor-gpBsG4si.js
rename to dist/chunks/TagsEditor-BydzUbtv.js
index 07a7afb6..c9c9c37b 100644
--- a/dist/chunks/TagsEditor-gpBsG4si.js
+++ b/dist/chunks/TagsEditor-BydzUbtv.js
@@ -1,6 +1,6 @@
import { $t as e, F as t, v as n } from "./viewerRuntimeHosts-CkUqwo6l.js";
import { m as r, n as i, wt as a } from "./events-B9CSrqJ_.js";
-import { Y as o } from "./Viewer-BEptWhbV.js";
+import { J as o } from "./Viewer-DCWIIJQl.js";
import { A as s, C as c, E as l, G as u, J as d, K as f, L as p, N as m, R as ee, T as h, U as te, V as g, Y as _, b as ne, ft as v, j as y, k as b, lt as x, rt as S, ut as C, z as w } from "./mjr-primevue-BRqtdXzb.js";
// ui/vue/components/common/TagsEditor.vue?vue&type=script&setup=true&lang.ts
var T = ["aria-busy"], re = ["aria-label"], ie = {
diff --git a/dist/chunks/Viewer-BEptWhbV.js b/dist/chunks/Viewer-DCWIIJQl.js
similarity index 86%
rename from dist/chunks/Viewer-BEptWhbV.js
rename to dist/chunks/Viewer-DCWIIJQl.js
index ebdde935..0c9e7254 100644
--- a/dist/chunks/Viewer-BEptWhbV.js
+++ b/dist/chunks/Viewer-DCWIIJQl.js
@@ -51,7 +51,7 @@ var le = async (e, t = "Majoor", n = {}) => {
if (n?.native !== !1) {
let n = z();
if (n) try {
- n.show(fe(e, t));
+ n.show(B(e, t));
try {
n.element?.style?.setProperty?.("z-index", "1100");
} catch (e) {
@@ -62,21 +62,21 @@ var le = async (e, t = "Majoor", n = {}) => {
console.debug?.(e);
}
}
- let a = me();
+ let a = pe();
if (a) return new Promise((n) => {
let r = new a();
- W(r);
- let i = U("div", { style: {
+ G(r);
+ let i = W("div", { style: {
display: "flex",
flexDirection: "column",
gap: "18px",
padding: "18px 20px 18px 20px"
} }, [
- U("div", { style: {
+ W("div", { style: {
display: "flex",
alignItems: "center",
justifyContent: "flex-start"
- } }, [U("div", {
+ } }, [W("div", {
textContent: t,
style: {
fontWeight: "700",
@@ -85,7 +85,7 @@ var le = async (e, t = "Majoor", n = {}) => {
lineHeight: "1.2"
}
})]),
- U("div", {
+ W("div", {
textContent: String(e || ""),
style: {
fontSize: "22px",
@@ -94,11 +94,11 @@ var le = async (e, t = "Majoor", n = {}) => {
lineHeight: "1.45"
}
}),
- U("div", { style: {
+ W("div", { style: {
display: "flex",
justifyContent: "flex-end",
gap: "10px"
- } }, [U("button", {
+ } }, [W("button", {
textContent: w("dialog.confirm", "Confirm"),
onclick: () => {
try {
@@ -120,7 +120,7 @@ var le = async (e, t = "Majoor", n = {}) => {
})])
]);
try {
- r.show(i), setTimeout(() => G(r), 0);
+ r.show(i), setTimeout(() => K(r), 0);
} catch {
try {
window.alert(e);
@@ -146,7 +146,7 @@ var le = async (e, t = "Majoor", n = {}) => {
} catch (e) {
console.debug?.(e);
}
- let r = me();
+ let r = pe();
if (!r) try {
return window.confirm(e);
} catch {
@@ -154,7 +154,7 @@ var le = async (e, t = "Majoor", n = {}) => {
}
return new Promise((n) => {
let i = new r();
- W(i);
+ G(i);
let a = (e) => {
try {
i.close();
@@ -162,17 +162,17 @@ var le = async (e, t = "Majoor", n = {}) => {
console.debug?.(e);
}
n(!!e);
- }, o = U("div", { style: {
+ }, o = W("div", { style: {
display: "flex",
flexDirection: "column",
gap: "18px",
padding: "18px 20px 18px 20px"
} }, [
- U("div", { style: {
+ W("div", { style: {
display: "flex",
alignItems: "center",
justifyContent: "flex-start"
- } }, [U("div", {
+ } }, [W("div", {
textContent: t,
style: {
fontWeight: "700",
@@ -181,7 +181,7 @@ var le = async (e, t = "Majoor", n = {}) => {
lineHeight: "1.2"
}
})]),
- U("div", {
+ W("div", {
textContent: String(e || ""),
style: {
fontSize: "22px",
@@ -190,11 +190,11 @@ var le = async (e, t = "Majoor", n = {}) => {
lineHeight: "1.45"
}
}),
- U("div", { style: {
+ W("div", { style: {
display: "flex",
justifyContent: "flex-end",
gap: "10px"
- } }, [U("button", {
+ } }, [W("button", {
textContent: w("dialog.cancel", "Cancel"),
onclick: () => a(!1),
style: {
@@ -206,7 +206,7 @@ var le = async (e, t = "Majoor", n = {}) => {
fontWeight: "600",
cursor: "pointer"
}
- }), U("button", {
+ }), W("button", {
textContent: w("dialog.confirm", "Confirm"),
onclick: () => a(!0),
style: {
@@ -221,7 +221,7 @@ var le = async (e, t = "Majoor", n = {}) => {
})])
]);
try {
- i.show(o), setTimeout(() => G(i), 0);
+ i.show(o), setTimeout(() => K(i), 0);
} catch {
try {
n(!!window.confirm(e));
@@ -242,7 +242,7 @@ var le = async (e, t = "Majoor", n = {}) => {
} catch (e) {
console.debug?.(e);
}
- let i = me();
+ let i = pe();
if (!i) try {
return window.prompt(e, t);
} catch {
@@ -250,7 +250,7 @@ var le = async (e, t = "Majoor", n = {}) => {
}
return new Promise((r) => {
let a = new i();
- W(a);
+ G(a);
let o = (e) => {
try {
a.close();
@@ -258,7 +258,7 @@ var le = async (e, t = "Majoor", n = {}) => {
console.debug?.(e);
}
r(e ?? null);
- }, s = U("input", {
+ }, s = W("input", {
type: "text",
value: String(t ?? ""),
style: {
@@ -274,13 +274,13 @@ var le = async (e, t = "Majoor", n = {}) => {
onkeydown: (e) => {
e.key === "Enter" && o(s.value), e.key === "Escape" && o(null), e.stopPropagation();
}
- }), c = U("div", { style: {
+ }), c = W("div", { style: {
display: "flex",
flexDirection: "column",
gap: "12px",
padding: "16px"
} }, [
- U("div", {
+ W("div", {
textContent: n,
style: {
fontWeight: "600",
@@ -288,7 +288,7 @@ var le = async (e, t = "Majoor", n = {}) => {
color: "rgba(255,255,255,0.95)"
}
}),
- U("div", {
+ W("div", {
textContent: String(e || ""),
style: {
fontSize: "13px",
@@ -298,11 +298,11 @@ var le = async (e, t = "Majoor", n = {}) => {
}
}),
s,
- U("div", { style: {
+ W("div", { style: {
display: "flex",
justifyContent: "flex-end",
gap: "10px"
- } }, [U("button", {
+ } }, [W("button", {
textContent: w("dialog.cancel", "Cancel"),
onclick: () => o(null),
style: {
@@ -313,7 +313,7 @@ var le = async (e, t = "Majoor", n = {}) => {
color: "rgba(255,255,255,0.85)",
cursor: "pointer"
}
- }), U("button", {
+ }), W("button", {
textContent: w("dialog.ok", "OK"),
onclick: () => o(s.value),
style: {
@@ -327,7 +327,7 @@ var le = async (e, t = "Majoor", n = {}) => {
})])
]);
try {
- a.show(c), setTimeout(() => G(a), 0), setTimeout(() => {
+ a.show(c), setTimeout(() => K(a), 0), setTimeout(() => {
try {
s.focus(), s.select();
} catch (e) {
@@ -373,10 +373,10 @@ var le = async (e, t = "Majoor", n = {}) => {
console.debug?.(e);
}
return null;
-}, fe = (e, t = "Majoor") => {
+}, B = (e, t = "Majoor") => {
let n = String(e ?? ""), r = String(t ?? "").trim();
return !r || r.toLowerCase() === "majoor" ? n : `${r}
${n}`;
-}, B = /* @__PURE__ */ new Set(/* @__PURE__ */ "abort.blur.change.click.close.contextmenu.dblclick.dragend.dragenter.dragleave.dragover.dragstart.drop.error.focus.input.keydown.keypress.keyup.load.mousedown.mouseenter.mouseleave.mousemove.mouseout.mouseover.mouseup.reset.resize.scroll.select.submit.touchcancel.touchend.touchmove.touchstart.transitionend.unload.wheel".split(".")), V = /* @__PURE__ */ new Set([
+}, V = /* @__PURE__ */ new Set(/* @__PURE__ */ "abort.blur.change.click.close.contextmenu.dblclick.dragend.dragenter.dragleave.dragover.dragstart.drop.error.focus.input.keydown.keypress.keyup.load.mousedown.mouseenter.mouseleave.mousemove.mouseout.mouseover.mouseup.reset.resize.scroll.select.submit.touchcancel.touchend.touchmove.touchstart.transitionend.unload.wheel".split(".")), H = /* @__PURE__ */ new Set([
"__proto__",
"constructor",
"prototype",
@@ -387,7 +387,7 @@ var le = async (e, t = "Majoor", n = {}) => {
"__defineSetter__",
"__lookupGetter__",
"__lookupSetter__"
-]), H = /* @__PURE__ */ new Set([
+]), U = /* @__PURE__ */ new Set([
"id",
"name",
"value",
@@ -400,20 +400,20 @@ var le = async (e, t = "Majoor", n = {}) => {
"htmlFor",
"role",
"tabIndex"
-]), pe = (e, t = {}, n = []) => {
+]), fe = (e, t = {}, n = []) => {
let r = document.createElement(e);
return Object.entries(t || {}).forEach(([e, t]) => {
let n = String(e || "");
- if (n && !V.has(n)) {
+ if (n && !H.has(n)) {
if (e === "style" && t && typeof t == "object") Object.assign(r.style, t);
else if (e === "className") r.className = String(t);
else if (n.startsWith("on")) {
if (typeof t == "function") {
let e = n.slice(2).toLowerCase();
- B.has(e) && r.addEventListener(e, t);
+ V.has(e) && r.addEventListener(e, t);
}
} else {
- if (H.has(n)) try {
+ if (U.has(n)) try {
r[n] = t;
return;
} catch (e) {
@@ -433,19 +433,19 @@ var le = async (e, t = "Majoor", n = {}) => {
r.appendChild(document.createTextNode(String(e)));
}
}), r;
-}, U = (e, t, n) => {
+}, W = (e, t, n) => {
let r = ue();
if (r?.$el) try {
return r.$el(e, t, n);
} catch {}
- return pe(e, t, n);
-}, me = () => ue()?.ComfyDialog || null, he = 999999, ge = 560, _e = 12, W = (e) => {
+ return fe(e, t, n);
+}, pe = () => ue()?.ComfyDialog || null, me = 999999, he = 560, ge = 12, G = (e) => {
try {
- e.element.style.zIndex = String(he), e.element.style.width = `${ge}px`, e.element.style.padding = "0", e.element.style.backgroundColor = "var(--comfy-menu-bg, #131722)", e.element.style.border = "1px solid rgba(255,255,255,0.14)", e.element.style.borderRadius = `${_e}px`, e.element.style.boxSizing = "border-box", e.element.style.overflow = "hidden", e.element.style.boxShadow = "0 18px 48px rgba(0,0,0,0.48)";
+ e.element.style.zIndex = String(me), e.element.style.width = `${he}px`, e.element.style.padding = "0", e.element.style.backgroundColor = "var(--comfy-menu-bg, #131722)", e.element.style.border = "1px solid rgba(255,255,255,0.14)", e.element.style.borderRadius = `${ge}px`, e.element.style.boxSizing = "border-box", e.element.style.overflow = "hidden", e.element.style.boxShadow = "0 18px 48px rgba(0,0,0,0.48)";
} catch (e) {
console.debug?.(e);
}
-}, G = (e) => {
+}, K = (e) => {
try {
let t = e?.element;
if (!t) return;
@@ -463,28 +463,28 @@ var le = async (e, t = "Majoor", n = {}) => {
}
};
// ui/features/status/AssetStatusDotTheme.ts
-function K(e) {
+function q(e) {
return String(e || "").trim().toLowerCase();
}
-function ve({ dot: e = null, asset: t = null, scope: n = "" } = {}) {
- let r = K(n);
+function _e({ dot: e = null, asset: t = null, scope: n = "" } = {}) {
+ let r = q(n);
if (r) return r === "custom";
- let i = K(t?.type || t?.scope);
+ let i = q(t?.type || t?.scope);
if (i) return i === "custom";
try {
- let t = K(e?.closest?.(".mjr-grid")?.dataset?.mjrScope);
+ let t = q(e?.closest?.(".mjr-grid")?.dataset?.mjrScope);
if (t) return t === "custom";
} catch (e) {
console.debug?.(e);
}
return !1;
}
-function ye(e, t = {}) {
- let n = K(e);
- return ve(t) ? n === "pending" || n === "info" ? "var(--mjr-browser-status-info, #4DB6AC)" : n === "success" ? "var(--mjr-browser-status-success, #2E7D32)" : n === "warning" ? "var(--mjr-browser-status-warning, #FFB74D)" : n === "error" ? "var(--mjr-browser-status-error, #EF5350)" : "var(--mjr-browser-status-neutral, #90A4AE)" : n === "pending" || n === "info" ? "var(--mjr-status-info, #64B5F6)" : n === "success" ? "var(--mjr-status-success, #4CAF50)" : n === "warning" ? "var(--mjr-status-warning, #FFA726)" : n === "error" ? "var(--mjr-status-error, #f44336)" : "var(--mjr-status-neutral, #666)";
+function ve(e, t = {}) {
+ let n = q(e);
+ return _e(t) ? n === "pending" || n === "info" ? "var(--mjr-browser-status-info, #4DB6AC)" : n === "success" ? "var(--mjr-browser-status-success, #2E7D32)" : n === "warning" ? "var(--mjr-browser-status-warning, #FFB74D)" : n === "error" ? "var(--mjr-browser-status-error, #EF5350)" : "var(--mjr-browser-status-neutral, #90A4AE)" : n === "pending" || n === "info" ? "var(--mjr-status-info, #64B5F6)" : n === "success" ? "var(--mjr-status-success, #4CAF50)" : n === "warning" ? "var(--mjr-status-warning, #FFA726)" : n === "error" ? "var(--mjr-status-error, #f44336)" : "var(--mjr-status-neutral, #666)";
}
// ui/stores/useRuntimeStore.ts
-var q = N("mjr-runtime", () => {
+var J = N("mjr-runtime", () => {
let e = M(null), t = M(null), n = M(!1), r = M(0), i = M(null), a = M(null), o = M(null), s = M(null), c = M(null), l = M([]), u = A(() => !!i.value), d = A(() => {
let e = s.value, t = c.value;
return !t || t <= 0 || e == null ? 0 : Math.round(e / t * 100);
@@ -532,16 +532,16 @@ var q = N("mjr-runtime", () => {
};
});
// ui/stores/getOptionalRuntimeStore.ts
-function be() {
+function ye() {
try {
- return ee() ? q() : null;
+ return ee() ? J() : null;
} catch {
return null;
}
}
// ui/stores/runtimeEnrichmentState.ts
-var xe = Symbol.for("majoor.assets_manager.runtime_state");
-function Se() {
+var be = Symbol.for("majoor.assets_manager.runtime_state");
+function xe() {
return {
api: null,
assetsDeletedHandler: null,
@@ -549,48 +549,48 @@ function Se() {
enrichmentQueueLength: 0
};
}
-function Ce() {
+function Se() {
try {
let e = typeof globalThis < "u" ? globalThis : {};
- return e[xe] && typeof e[xe] == "object" || (e[xe] = Se()), e[xe];
+ return e[be] && typeof e[be] == "object" || (e[be] = xe()), e[be];
} catch {
- return Se();
+ return xe();
}
}
-function we(e, t) {
- let n = be();
+function Ce(e, t) {
+ let n = ye();
if (n) {
n.setEnrichmentState(e, t);
return;
}
- let r = Ce();
+ let r = Se();
r.enrichmentActive = !!e, r.enrichmentQueueLength = Math.max(0, Number(t || 0) || 0);
}
-function Te() {
- let e = be();
+function we() {
+ let e = ye();
if (e) return e.getEnrichmentState();
- let t = Ce();
+ let t = Se();
return {
active: !!t.enrichmentActive,
queueLength: Math.max(0, Number(t.enrichmentQueueLength || 0) || 0)
};
}
// ui/features/grid/AssetCardRenderer.ts
-function Ee(e) {
+function Te(e) {
try {
return String(e || "").trim().toLowerCase();
} catch {
return "";
}
}
-function De(e) {
+function Ee(e) {
try {
return (String(e || "").split(".").pop() || "").toUpperCase();
} catch {
return "";
}
}
-function Oe(e) {
+function De(e) {
try {
let t = String(e || ""), n = t.lastIndexOf("."), r = n > 0 ? t.slice(0, n) : t;
return String(r || "").trim().toLowerCase();
@@ -598,60 +598,14 @@ function Oe(e) {
return "";
}
}
-function ke(e) {
- try {
- if (String(e?.kind || "").toLowerCase() !== "video") return !1;
- let t = String(e?.filename || "").toLowerCase();
- return t.includes("-audio") || t.includes("_audio");
- } catch {
- return !1;
- }
-}
-function Ae(e) {
- try {
- let t = String(e?.kind || "").toLowerCase(), n = 0;
- ke(e) ? n = 2 : t === "video" && (n = 1);
- let r = +(Number(e?.has_generation_data || 0) > 0), i = Number(e?.size || 0), a = Number(e?.mtime || 0);
- return [
- n,
- a,
- r,
- i
- ];
- } catch {
- return [
- 0,
- 0,
- 0,
- 0
- ];
- }
-}
-function je(e, t) {
- for (let n = 0; n < Math.max(e.length, t.length); n++) {
- let r = (e[n] || 0) - (t[n] || 0);
- if (r !== 0) return r;
- }
- return 0;
-}
-function Me(e) {
- if (!Array.isArray(e) || e.length === 0) return null;
- if (e.length === 1) return e[0];
- let t = e[0], n = Ae(t);
- for (let r = 1; r < e.length; r++) {
- let i = e[r], a = Ae(i);
- je(a, n) > 0 && (t = i, n = a);
- }
- return t;
-}
-function Ne(e, t) {
+function Oe(e, t) {
if (!e || !Array.isArray(t) || t.length === 0 || (Number(e?.generation_time_ms ?? e?.metadata?.generation_time_ms ?? 0) || 0) > 0) return e;
let n = t.find((e) => (Number(e?.generation_time_ms ?? e?.metadata?.generation_time_ms ?? 0) || 0) > 0);
if (!n) return e;
let r = Number(n?.generation_time_ms ?? n?.metadata?.generation_time_ms ?? 0) || 0;
return r <= 0 || (e.generation_time_ms = r, !e.has_generation_data && n?.has_generation_data && (e.has_generation_data = n.has_generation_data)), e;
}
-function Pe(e, t) {
+function ke(e, t) {
let n = String(e?.kind || "").toLowerCase();
if (n) return n;
let r = /* @__PURE__ */ new Set([
@@ -687,29 +641,29 @@ function Pe(e, t) {
]);
return r.has(t) ? "image" : i.has(t) ? "video" : a.has(t) ? "audio" : o.has(t) ? "model3d" : "unknown";
}
-function Fe(e) {
+function Ae(e) {
try {
return !!e()?.siblings?.hidePngSiblings;
} catch {
return !1;
}
}
-function Ie(e) {
+function je(e) {
return `${String(e?.source || e?.type || "").trim().toLowerCase()}|${String(e?.root_id || e?.custom_root_id || "").trim().toLowerCase()}|${String(e?.subfolder || "").trim().toLowerCase()}`;
}
-function J(e) {
- let t = Ee(e?.filename);
- return t ? `${Ie(e)}|${t}` : "";
+function Me(e) {
+ let t = Te(e?.filename);
+ return t ? `${je(e)}|${t}` : "";
}
-function Le(e, t = De(e?.filename || "")) {
- let n = Pe(e, t), r = String(e?.filename || "").trim();
+function Ne(e, t = Ee(e?.filename || "")) {
+ let n = ke(e, t), r = String(e?.filename || "").trim();
if (!r) return "";
- let i = Ie(e);
+ let i = je(e);
if (n === "model3d") return `${i}|model3d|${r.toLowerCase()}`;
- let a = Oe(r);
+ let a = De(r);
return a ? `${i}|media|${a}` : "";
}
-function Re(e) {
+function Pe(e) {
let t = e.nonImageSiblingKeys || /* @__PURE__ */ new Set();
e.nonImageSiblingKeys = t;
let n = e.stemMap || /* @__PURE__ */ new Map();
@@ -724,10 +678,10 @@ function Re(e) {
seenKeys: i
};
}
-function ze(e, t = [], { assetKey: n = null, preserveHiddenCount: r = !1 } = {}) {
+function Fe(e, t = [], { assetKey: n = null, preserveHiddenCount: r = !1 } = {}) {
let i = Number(e?.hiddenPngSiblings || 0) || 0;
e.seenKeys = /* @__PURE__ */ new Set(), e.assetIdSet = /* @__PURE__ */ new Set(), e.filenameCounts = /* @__PURE__ */ new Map(), e.nonImageSiblingKeys = /* @__PURE__ */ new Set(), e.stemMap = /* @__PURE__ */ new Map(), e.renderedFilenameMap = /* @__PURE__ */ new Map(), e.hiddenPngSiblings = r ? i : 0, typeof n == "function" && (e.assetKeyFn = n);
- let a = Re(e);
+ let a = Pe(e);
for (let r of Array.isArray(t) ? t : []) if (r && typeof r == "object") {
try {
let e = r?.id == null ? "" : String(r.id);
@@ -742,24 +696,24 @@ function ze(e, t = [], { assetKey: n = null, preserveHiddenCount: r = !1 } = {})
console.debug?.(e);
}
try {
- let t = J(r);
+ let t = Me(r);
t && e.filenameCounts.set(t, (Number(e.filenameCounts.get(t) || 0) || 0) + 1);
} catch (e) {
console.debug?.(e);
}
try {
- let e = De(r?.filename || ""), t = Le(r, e);
+ let e = Ee(r?.filename || ""), t = Ne(r, e);
if (!t) continue;
let n = a.stemMap.get(t);
n || (n = [], a.stemMap.set(t, n)), n.push(r);
- let i = Pe(r, e);
+ let i = ke(r, e);
(i === "video" || i === "audio" || i === "model3d" || e === "WEBP") && a.nonImageSiblingKeys.add(t);
} catch (e) {
console.debug?.(e);
}
}
}
-function Be(e, t, n) {
+function Y(e, t, n) {
try {
t?.id != null && n.assetIdSet.delete(String(t.id));
} catch (e) {
@@ -772,20 +726,20 @@ function Be(e, t, n) {
console.debug?.(e);
}
}
-function Ve(e, t, n, r) {
+function Ie(e, t, n, r) {
let i = n.stemMap.get(t);
if (!i?.length) return [];
let a = [];
for (let e = i.length - 1; e >= 0; e--) r(i[e]) && (a.push(i[e]), i.splice(e, 1));
return i.length || n.stemMap.delete(t), a;
}
-function He(e, t, n) {
- if (!Fe(n)) return {
+function Le(e, t, n) {
+ if (!Ae(n)) return {
hidden: !1,
hideEnabled: !1,
removed: []
};
- let r = Re(t), i = String(e?.filename || ""), a = De(i), o = Pe(e, a), s = Le(e, a);
+ let r = Pe(t), i = String(e?.filename || ""), a = Ee(i), o = ke(e, a), s = Ne(e, a);
if (!s) return {
hidden: !1,
hideEnabled: !0,
@@ -794,10 +748,10 @@ function He(e, t, n) {
if (o === "video" || o === "audio" || o === "model3d" || a === "WEBP") return r.nonImageSiblingKeys.add(s), {
hidden: !1,
hideEnabled: !0,
- removed: Ve(t, s, r, (e) => De(e?.filename || "") === "PNG")
+ removed: Ie(t, s, r, (e) => Ee(e?.filename || "") === "PNG")
};
if (a === "PNG") {
- let t = `${Ie(e)}|model3d|${Oe(i)}`;
+ let t = `${je(e)}|model3d|${De(i)}`;
if (r.nonImageSiblingKeys.has(s) || r.nonImageSiblingKeys.has(t)) return {
hidden: !0,
hideEnabled: !0,
@@ -810,59 +764,28 @@ function He(e, t, n) {
removed: []
};
}
-function Ue(e, t, n, r) {
- let i = Fe(r.loadMajoorSettings), a = n.filenameCounts || /* @__PURE__ */ new Map();
+function Re(e, t, n, r) {
+ let i = Ae(r.loadMajoorSettings), a = n.filenameCounts || /* @__PURE__ */ new Map();
n.filenameCounts = a, r.clearGridMessage(e);
let o = r.ensureVirtualGrid(e, n);
if (!o) return 0;
i || (n.hiddenPngSiblings = 0), n.assetKeyFn = r.assetKey;
- let s = Re(n), c = /* @__PURE__ */ new Map();
+ let s = Pe(n), c = /* @__PURE__ */ new Map();
for (let e of n.assets || []) {
- let t = J(e);
+ let t = Me(e);
if (!t) continue;
let n = c.get(t);
n || (n = [], c.set(t, n)), n.push(e);
}
let l = 0, u = !1, d = [], f = /* @__PURE__ */ new Set(), p = () => {
try {
- let t = new Set((Array.isArray(n.assets) ? n.assets : []).map((e) => String(e?.id || "")).filter(Boolean));
- for (let [i, o] of c.entries()) {
- let s = (Array.isArray(o) ? o : []).filter((e) => {
- let n = String(e?.id || "");
- return n ? t.has(n) : !1;
- }), c = s.length;
- if (a.set(i, c), c < 2) {
- for (let e of s) e._mjrNameCollision = !1, delete e._mjrNameCollisionCount, delete e._mjrNameCollisionPaths, e._mjrDupStack && (e._mjrDupStack = !1, e._mjrDupMembers = null, e._mjrDupCount = 0);
- let t = n.renderedFilenameMap?.get(i);
- if (t) for (let n of t) {
- let t = n.querySelector?.(".mjr-file-badge");
- r.setFileBadgeCollision(t, !1);
- try {
- r.ensureDupStackCard?.(e, n, n._mjrAsset);
- } catch (e) {
- console.debug?.(e);
- }
- }
- continue;
- }
- let l = Ne(Me(s), s), u = s.filter((e) => e !== l);
- for (let e of s) e._mjrNameCollision = !1, delete e._mjrNameCollisionCount, delete e._mjrNameCollisionPaths, e !== l && (e._mjrDupStack = !1, e._mjrDupMembers = null, e._mjrDupCount = 0);
- let d = Array.isArray(l._mjrDupMembers) ? l._mjrDupMembers : [], f = new Set(d.map((e) => String(e?.id || ""))), p = [...d, ...s.filter((e) => !f.has(String(e?.id || "")))];
- l._mjrDupStack = !0, l._mjrDupMembers = p, l._mjrDupCount = p.length, l._mjrNameCollision = !1;
- let m = new Set(u.map((e) => String(e?.id || "")));
- m.size > 0 && (n.assets = n.assets.filter((e) => !m.has(String(e?.id || ""))));
- let h = n.renderedFilenameMap?.get(i);
- if (h) for (let t of h) {
- let n = t._mjrAsset, i = t.querySelector?.(".mjr-file-badge");
- if (n === l || String(n?.id || "") === String(l?.id || "")) {
- r.setFileBadgeCollision(i, !1);
- try {
- r.ensureDupStackCard?.(e, t, l);
- } catch (e) {
- console.debug?.(e);
- }
- }
- }
+ let e = new Set((Array.isArray(n.assets) ? n.assets : []).map((e) => String(e?.id || "")).filter(Boolean));
+ for (let [t, n] of c.entries()) {
+ let r = (Array.isArray(n) ? n : []).filter((t) => {
+ let n = String(t?.id || "");
+ return n ? e.has(n) : !1;
+ }).length;
+ a.set(t, r);
}
} catch (e) {
console.debug?.(e);
@@ -877,13 +800,13 @@ function Ue(e, t, n, r) {
} catch (e) {
console.debug?.(e);
}
- let t = De(String(e?.filename || "")), i = He(e, n, r.loadMajoorSettings);
+ let t = Ee(String(e?.filename || "")), i = Le(e, n, r.loadMajoorSettings);
for (let e of i.removed || []) f.add(e);
if (i.hidden) {
n.hiddenPngSiblings += 1;
continue;
}
- let a = J(e);
+ let a = Me(e);
if (a) {
let t = c.get(a);
t || (t = [], c.set(a, t)), t.push(e);
@@ -891,7 +814,7 @@ function Ue(e, t, n, r) {
let o = r.assetKey(e);
if (!o || s.seenKeys.has(o) || e.id != null && s.assetIdSet.has(String(e.id))) continue;
s.seenKeys.add(o), e.id != null && s.assetIdSet.add(String(e.id)), d.push(e);
- let u = Le(e, t);
+ let u = Ne(e, t);
if (u) {
let t = s.stemMap.get(u);
t || (t = [], s.stemMap.set(u, t)), t.push(e);
@@ -901,10 +824,10 @@ function Ue(e, t, n, r) {
if (f.size > 0) {
n.hiddenPngSiblings += f.size, n.assets = n.assets.filter((e) => !f.has(e));
for (let e = d.length - 1; e >= 0; e--) f.has(d[e]) && (d.splice(e, 1), l = Math.max(0, l - 1));
- for (let e of f) Be(n, e, s);
+ for (let e of f) Y(n, e, s);
try {
for (let e of f) {
- let t = J(e);
+ let t = Me(e);
if (!t) continue;
let n = c.get(t);
if (!n) continue;
@@ -925,7 +848,7 @@ function Ue(e, t, n, r) {
return l;
}
// ui/components/Badges.ts
-function We({ ext: e = "", filename: t = "", count: n = 0, paths: r = [] } = {}) {
+function ze({ ext: e = "", filename: t = "", count: n = 0, paths: r = [] } = {}) {
let i = String(e || "").trim(), a = String(t || "").trim(), o = Math.max(0, Number(n) || 0), s = Array.isArray(r) ? r.map((e) => String(e || "").trim()).filter(Boolean) : [];
if (o < 2) return `${i} file`;
let c = [`${i}+ name collision in current view (${o})`];
@@ -936,7 +859,7 @@ function We({ ext: e = "", filename: t = "", count: n = 0, paths: r = [] } = {})
}
return c.push("Click to select collisions in current view"), c.join("\n");
}
-function Ge(e, t, n = !1, r = null) {
+function Be(e, t, n = !1, r = null) {
let i = document.createElement("div");
i.className = "mjr-file-badge";
let a = String(e || "").split(".").pop()?.toUpperCase?.() || "";
@@ -950,8 +873,8 @@ function Ge(e, t, n = !1, r = null) {
video: "--mjr-badge-video",
audio: "--mjr-badge-audio",
model3d: "--mjr-badge-model3d"
- }[Pe({ kind: t }, a)], s = o ? `var(${o}, #607D8B)` : "#607D8B", c = n ? "var(--mjr-badge-duplicate-alert, #ff1744)" : s;
- i.textContent = a + (n ? "+" : ""), i.title = n ? We({
+ }[ke({ kind: t }, a)], s = o ? `var(${o}, #607D8B)` : "#607D8B", c = n ? "var(--mjr-badge-duplicate-alert, #ff1744)" : s;
+ i.textContent = a + (n ? "+" : ""), i.title = n ? ze({
ext: a,
filename: e,
count: r?.count,
@@ -981,10 +904,10 @@ function Ge(e, t, n = !1, r = null) {
}
return i;
}
-function Ke(e, t, n = null) {
+function Ve(e, t, n = null) {
if (e) try {
let r = e.dataset?.mjrExt || "", i = e.dataset?.mjrBadgeBg || "var(--mjr-badge-image, #607D8B)";
- e.textContent = String(r || "") + (t ? "+" : ""), e.title = t ? We({
+ e.textContent = String(r || "") + (t ? "+" : ""), e.title = t ? ze({
ext: r,
filename: n?.filename || "",
count: n?.count,
@@ -994,18 +917,18 @@ function Ke(e, t, n = null) {
console.debug?.(e);
}
}
-function qe(e) {
+function He(e) {
return e === !0 ? !0 : e === !1 ? !1 : e === 1 || e === "1" ? !0 : e === 0 || e === "0" ? !1 : null;
}
-function Je(e, t = []) {
+function Ue(e, t = []) {
if (!e || typeof e != "object") return null;
for (let n of t) if (e[n] != null) return e[n];
return null;
}
-function Ye(e) {
+function We(e) {
return typeof e == "string" && e.trim().length > 0;
}
-function Xe(e) {
+function Ge(e) {
if (Array.isArray(e)) return e.some((e) => String(e ?? "").trim().length > 0);
if (e && typeof e == "object") return Object.keys(e).length > 0;
if (typeof e != "string") return !1;
@@ -1019,44 +942,44 @@ function Xe(e) {
}
return !0;
}
-function Y(e) {
- let t = Je(e, [
+function Ke(e) {
+ let t = Ue(e, [
"auto_tags",
"autoTags",
"ai_auto_tags",
"aiAutoTags",
"suggested_tags",
"suggestedTags"
- ]), n = Je(e, [
+ ]), n = Ue(e, [
"enhanced_caption",
"enhancedCaption",
"enhanced_prompt",
"enhancedPrompt",
"ai_enhanced_prompt",
"aiEnhancedPrompt"
- ]), r = qe(Je(e, [
+ ]), r = He(Ue(e, [
"has_ai_auto_tags",
"hasAiAutoTags",
"ai_has_auto_tags",
"aiHasAutoTags"
- ])), i = qe(Je(e, [
+ ])), i = He(Ue(e, [
"has_ai_enhanced_caption",
"hasAiEnhancedCaption",
"ai_has_enhanced_caption",
"aiHasEnhancedCaption"
- ])), a = qe(Je(e, [
+ ])), a = He(Ue(e, [
"has_ai_vector",
"hasAiVector",
"has_vector_embedding",
"hasVectorEmbedding",
"vector_indexed",
"vectorIndexed"
- ])), o = qe(Je(e, [
+ ])), o = He(Ue(e, [
"has_ai_info",
"hasAiInfo",
"ai_indexed",
"aiIndexed"
- ])), s = r === !0 || r === null && Xe(t), c = i === !0 || i === null && Ye(n), l = a === !0 || o === !0;
+ ])), s = r === !0 || r === null && Ge(t), c = i === !0 || i === null && We(n), l = a === !0 || o === !0;
return {
hasAiInfo: o === !0 || s || c || l,
hasAutoTags: s,
@@ -1064,14 +987,14 @@ function Y(e) {
hasVectorIndexed: l
};
}
-function Ze(e) {
+function qe(e) {
let t = document.createElement("span");
t.className = "mjr-workflow-dot mjr-asset-status-dot";
- let n = qe(e?.has_workflow ?? e?.hasWorkflow), r = qe(e?.has_generation_data ?? e?.hasGenerationData), i = Te(), a = i.queueLength, o = i.active || a > 0, s = "Pending: parsing metadata...", c = n === !0 || r === !0, l = n === !1 || r === !1, u = n === null || r === null;
+ let n = He(e?.has_workflow ?? e?.hasWorkflow), r = He(e?.has_generation_data ?? e?.hasGenerationData), i = we(), a = i.queueLength, o = i.active || a > 0, s = "Pending: parsing metadata...", c = n === !0 || r === !0, l = n === !1 || r === !1, u = n === null || r === null;
n === !0 && r === !0 ? s = "Complete: workflow + generation data detected" : c ? s = n === !0 ? "Partial: workflow only (generation data missing)" : "Partial: generation data only (workflow missing)" : l && !c && !u ? s = "None: no workflow or generation data found" : u && (s = "Pending: metadata not parsed yet");
let d = u ? "pending" : n === !0 && r === !0 ? "success" : c ? "warning" : "error";
- o && d !== "success" && (d = "pending", s = a > 0 ? `Pending: database metadata enrichment in progress (${a} queued)` : "Pending: database metadata enrichment in progress"), Qe(t, d, s, { asset: e });
- let f = Y(e);
+ o && d !== "success" && (d = "pending", s = a > 0 ? `Pending: database metadata enrichment in progress (${a} queued)` : "Pending: database metadata enrichment in progress"), Je(t, d, s, { asset: e });
+ let f = Ke(e);
if (f.hasAiInfo) {
let e = [];
f.hasVectorIndexed && e.push("vector indexed"), f.hasAutoTags && e.push("AI tag suggestions"), f.hasEnhancedPrompt && e.push("enhanced prompt"), t.textContent = "";
@@ -1093,9 +1016,9 @@ function Ze(e) {
}
return t;
}
-function Qe(e, t, n = "", r = {}) {
+function Je(e, t, n = "", r = {}) {
if (!e) return;
- let i = String(t || "").toLowerCase(), a = ye(i, {
+ let i = String(t || "").toLowerCase(), a = ve(i, {
dot: e,
...r || {}
});
@@ -1120,7 +1043,7 @@ function Qe(e, t, n = "", r = {}) {
console.debug?.(e);
}
}
-function $e(e) {
+function Ye(e) {
let t = Math.max(0, Math.min(5, Number(e) || 0));
if (t <= 0) return null;
let n = document.createElement("div");
@@ -1131,7 +1054,7 @@ function $e(e) {
}
return n;
}
-function et(e) {
+function Xe(e) {
if (Array.isArray(e)) return e.map((e) => String(e ?? "").trim()).filter(Boolean);
if (typeof e == "string") {
let t = e.trim();
@@ -1144,11 +1067,11 @@ function et(e) {
}
return [];
}
-function tt(e) {
+function Ze(e) {
let t = Number(e) / 1e3;
return t >= 60 ? "#FF9800" : t >= 30 ? "#FFC107" : t >= 10 ? "#8BC34A" : "#4CAF50";
}
-function nt(e) {
+function Qe(e) {
let t = e / 1e3;
if (t >= 60) {
let e = (t / 60).toFixed(1);
@@ -1163,7 +1086,7 @@ function nt(e) {
title: `Generation time: ${n} seconds`
};
}
-function rt(e, { maxMs: t = 864e5 } = {}) {
+function $e(e, { maxMs: t = 864e5 } = {}) {
let n;
if (e == null) return 0;
if (typeof e == "string") {
@@ -1178,14 +1101,14 @@ function rt(e, { maxMs: t = 864e5 } = {}) {
} else n = Number(e);
return !Number.isFinite(n) || n <= 0 || n >= Number(t) ? 0 : n;
}
-function it(e) {
+function et(e) {
let t = document.createElement("div");
t.className = "mjr-tags-badge";
- let n = et(e);
+ let n = Xe(e);
return n.length === 0 ? (t.style.display = "none", t) : (t.textContent = n.join(", "), t.title = `Tags: ${n.join(", ")}`, t.style.cssText = "\n position: absolute;\n bottom: 6px;\n left: 6px;\n padding: 3px 6px;\n border-radius: 4px;\n background: rgba(0,0,0,0.8);\n color: var(--mjr-tag-color, #90CAF9);\n font-size: 9px;\n max-width: 80%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n z-index: 10;\n box-shadow: 0 2px 4px rgba(0,0,0,0.3);\n ", t);
}
// ui/utils/filenames.ts
-var at = /* @__PURE__ */ new Set([
+var tt = /* @__PURE__ */ new Set([
"CON",
"PRN",
"AUX",
@@ -1208,17 +1131,17 @@ var at = /* @__PURE__ */ new Set([
"LPT7",
"LPT8",
"LPT9"
-]), ot = 255;
-function st(e) {
+]), nt = 255;
+function rt(e) {
try {
let t = String(e ?? "").trim();
if (!t) return {
valid: !1,
reason: "Filename cannot be empty"
};
- if (t.length > ot) return {
+ if (t.length > nt) return {
valid: !1,
- reason: `Filename is too long (max ${ot} characters)`
+ reason: `Filename is too long (max ${nt} characters)`
};
if (t.includes("/") || t.includes("\\")) return {
valid: !1,
@@ -1241,7 +1164,7 @@ function st(e) {
reason: "Filename cannot end with a dot or space"
};
let n = t.split(".")[0].toUpperCase();
- return at.has(n) ? {
+ return tt.has(n) ? {
valid: !1,
reason: "Filename uses a reserved Windows name"
} : {
@@ -1255,15 +1178,15 @@ function st(e) {
};
}
}
-function ct(e) {
+function it(e) {
try {
return String(e ?? "").trim();
} catch {
return "";
}
}
-function lt(e) {
- let t = ct(e);
+function at(e) {
+ let t = it(e);
if (!t) return {
stem: "",
ext: ""
@@ -1277,14 +1200,14 @@ function lt(e) {
ext: t.slice(n)
};
}
-function ut(e, t) {
- let n = ct(e);
+function ot(e, t) {
+ let n = it(e);
if (!n) return "";
- let r = lt(t);
- return !lt(n).ext && r.ext ? `${n}${r.ext}` : n;
+ let r = at(t);
+ return !at(n).ext && r.ext ? `${n}${r.ext}` : n;
}
// ui/utils/dom.ts
-function dt(e, t) {
+function st(e, t) {
if (!t) return null;
try {
if (!e) return null;
@@ -1296,7 +1219,7 @@ function dt(e, t) {
}
return null;
}
-function ft(e) {
+function ct(e) {
let t = String(e ?? "");
try {
if (typeof CSS?.escape == "function") return CSS.escape(t);
@@ -1305,7 +1228,7 @@ function ft(e) {
}
return t.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1");
}
-async function pt(e) {
+async function lt(e) {
try {
return navigator?.clipboard?.writeText ? (await navigator.clipboard.writeText(String(e ?? "")), !0) : !1;
} catch {
@@ -1313,31 +1236,31 @@ async function pt(e) {
}
}
// ui/utils/deleteGuard.ts
-async function mt(e, t) {
+async function ut(e, t) {
return !E.DELETE_CONFIRMATION || !!await I(e > 1 ? w("dialog.deleteSelectedFiles", "Delete {count} selected files?", { count: e }) : w("dialog.deleteSingleFile", "Delete \"{label}\"?", { label: String(t || w("label.thisFile", "this file")) }), w("dialog.confirmDeleteTitle", "Majoor: Confirm delete"));
}
// ui/features/collections/contextmenu/addToCollectionMenuState.ts
-var ht = j({
+var dt = j({
open: !1,
x: 0,
y: 0,
assets: []
});
-function gt() {
+function ft() {
try {
window.dispatchEvent(new CustomEvent("mjr-close-all-menus"));
} catch (e) {
console.debug?.(e);
}
}
-function _t({ x: e = 0, y: t = 0, assets: n = [] } = {}) {
- gt(), ht.open = Array.isArray(n) && n.length > 0, ht.x = Number(e) || 0, ht.y = Number(t) || 0, ht.assets = Array.isArray(n) ? [...n] : [];
+function pt({ x: e = 0, y: t = 0, assets: n = [] } = {}) {
+ ft(), dt.open = Array.isArray(n) && n.length > 0, dt.x = Number(e) || 0, dt.y = Number(t) || 0, dt.assets = Array.isArray(n) ? [...n] : [];
}
-function vt() {
- ht.open = !1, ht.x = 0, ht.y = 0, ht.assets = [];
+function mt() {
+ dt.open = !1, dt.x = 0, dt.y = 0, dt.assets = [];
}
// ui/features/collections/contextmenu/addToCollectionMenu.ts
-function yt(e) {
+function ht(e) {
if (!e || typeof e != "object") return null;
let t = e.filepath || e.path || e?.file_info?.filepath || "";
return t ? {
@@ -1349,18 +1272,18 @@ function yt(e) {
kind: e.kind || ""
} : null;
}
-async function bt({ x: t, y: n, assets: r }) {
- let i = Array.isArray(r) ? r.map(yt).filter(Boolean) : [];
- i.length ? _t({
+async function gt({ x: t, y: n, assets: r }) {
+ let i = Array.isArray(r) ? r.map(ht).filter(Boolean) : [];
+ i.length ? pt({
x: Number(t) || 0,
y: Number(n) || 0,
assets: i
}) : e(w("toast.noValidAssetsSelected", "No valid assets selected."), "warning");
}
// ui/features/contextmenu/ratingUpdater.ts
-var xt = 350, St = /* @__PURE__ */ new Map();
-function Ct(e) {
- let t = St.get(e);
+var _t = 350, vt = /* @__PURE__ */ new Map();
+function yt(e) {
+ let t = vt.get(e);
if (t) {
try {
clearTimeout(t.timer);
@@ -1372,20 +1295,20 @@ function Ct(e) {
} catch (e) {
console.debug?.(e);
}
- St.delete(e);
+ vt.delete(e);
}
}
-function wt(e) {
- e && Ct(String(e));
+function bt(e) {
+ e && yt(String(e));
}
-function Tt() {
- for (let e of Array.from(St.keys())) wt(e);
+function xt() {
+ for (let e of Array.from(vt.keys())) bt(e);
}
-function Et(t, r, { onSuccess: i, onFailure: o, successMessage: s = null, errorMessage: c = null, warnPrefix: l = "[RatingUpdater]" } = {}) {
+function St(t, r, { onSuccess: i, onFailure: o, successMessage: s = null, errorMessage: c = null, warnPrefix: l = "[RatingUpdater]" } = {}) {
if (!t) return;
- wt(t);
+ bt(t);
let u = new AbortController(), d = setTimeout(async () => {
- St.delete(String(t));
+ vt.delete(String(t));
try {
let a = await n(t, r, { signal: u.signal });
if (!a?.ok) {
@@ -1396,14 +1319,14 @@ function Et(t, r, { onSuccess: i, onFailure: o, successMessage: s = null, errorM
} catch (e) {
a(e, l, { showToast: !0 }), o?.(e);
}
- }, xt);
- St.set(String(t), {
+ }, _t);
+ vt.set(String(t), {
timer: d,
controller: u
});
}
// ui/utils/tooltipShortcuts.ts
-function Dt(e, t) {
+function Ct(e, t) {
let n = String(e || "").trim(), r = String(t || "").trim();
if (!r) return n;
if (!n) return r;
@@ -1413,25 +1336,25 @@ function Dt(e, t) {
} else if (n.toLowerCase().includes(r.toLowerCase())) return n;
return `${n} (${r})`;
}
-function Ot(e, t, n, { setAriaLabel: r = !0, ariaLabel: i = null } = {}) {
+function wt(e, t, n, { setAriaLabel: r = !0, ariaLabel: i = null } = {}) {
if (!e) return "";
- let a = Dt(t, n);
+ let a = Ct(t, n);
if (e.title = a, r) {
let r = i ?? t;
- e.setAttribute("aria-label", Dt(r, n));
+ e.setAttribute("aria-label", Ct(r, n));
}
return a;
}
// ui/utils/safeCall.ts
-var kt = () => {};
-function At(e) {
+var Tt = () => {};
+function Et(e) {
try {
return !!E?.[e];
} catch {
return !1;
}
}
-function jt(e, t) {
+function Dt(e, t) {
try {
console.warn(`[Majoor] ${e}`, t);
} catch (e) {
@@ -1442,7 +1365,7 @@ function X(e, t = "safeCall") {
try {
return e?.();
} catch (e) {
- At("DEBUG_SAFE_CALL") && jt(t, e);
+ Et("DEBUG_SAFE_CALL") && Dt(t, e);
return;
}
}
@@ -1452,15 +1375,15 @@ function Z(e, t, n, r, i = "safeAddListener") {
try {
e?.removeEventListener?.(t, n, r);
} catch (e) {
- At("DEBUG_SAFE_LISTENERS") && jt(`${i}:remove:${String(t || "")}`, e);
+ Et("DEBUG_SAFE_LISTENERS") && Dt(`${i}:remove:${String(t || "")}`, e);
}
};
} catch (e) {
- return At("DEBUG_SAFE_LISTENERS") && jt(`${i}:add:${String(t || "")}`, e), kt;
+ return Et("DEBUG_SAFE_LISTENERS") && Dt(`${i}:add:${String(t || "")}`, e), Tt;
}
}
// ui/utils/mediaFps.ts
-function Mt(e) {
+function Ot(e) {
try {
let t = Number(e);
if (Number.isFinite(t) && t > 0) return t;
@@ -1479,15 +1402,15 @@ function Mt(e) {
return null;
}
}
-function Nt(e) {
+function kt(e) {
try {
let t = e, n = t.metadata_raw || {}, r = (n.raw_ffprobe || {}).video_stream || {};
- return Mt(r.avg_frame_rate) ?? Mt(r.r_frame_rate) ?? Mt(n.fps_raw) ?? Mt(n.fps) ?? Mt(n.frame_rate) ?? Mt(t.fps);
+ return Ot(r.avg_frame_rate) ?? Ot(r.r_frame_rate) ?? Ot(n.fps_raw) ?? Ot(n.fps) ?? Ot(n.frame_rate) ?? Ot(t.fps);
} catch {
return null;
}
}
-function Pt(e, t) {
+function At(e, t) {
try {
let n = e, r = n.metadata_raw || {}, i = (r.raw_ffprobe || {}).video_stream || {}, a = Number(n.frame_count) || Number(r.frame_count) || Number(r.frames) || Number(i.nb_frames) || Number(i.nb_read_frames) || 0;
if (Number.isFinite(a) && a > 0) return Math.floor(a);
@@ -1498,27 +1421,27 @@ function Pt(e, t) {
}
return null;
}
-function Ft(e) {
+function jt(e) {
let t = Number(e);
return !Number.isFinite(t) || t <= 0 ? "" : Math.abs(t - Math.round(t)) < .001 ? `${Math.round(t)} fps` : `${t.toFixed(3).replace(/\.?0+$/, "")} fps`;
}
-function It(e, t = 30) {
- let n = Mt(e);
+function Mt(e, t = 30) {
+ let n = Ot(e);
if (n != null) return Math.max(1, Math.round(n * 1e3) / 1e3);
- let r = Mt(t);
+ let r = Ot(t);
return r == null ? 30 : Math.max(1, Math.round(r * 1e3) / 1e3);
}
// ui/components/VideoControls.ts
-var Lt = 400, Rt = 1e3, zt = 220, Bt = .001;
-function Vt(e, t) {
+var Nt = 400, Pt = 1e3, Ft = 220, It = .001;
+function Lt(e, t) {
let n = Number(e), r = Math.max(1, Number(t) || 1);
if (!Number.isFinite(n) || n <= 0) return 1;
let i = n / r, a = 10 ** Math.floor(Math.log10(Math.max(i, .001))), o = i / a;
return Math.max(.001, (o <= 1 ? 1 : o <= 2 ? 2 : o <= 5 ? 5 : 10) * a);
}
-function Ht(e, t, n) {
+function Rt(e, t, n) {
try {
- if (e?.aborted) return kt;
+ if (e?.aborted) return Tt;
let r = setTimeout(() => {
try {
if (e?.aborted) return;
@@ -1551,20 +1474,20 @@ function Ht(e, t, n) {
}
};
} catch {
- return kt;
+ return Tt;
}
}
-function Ut(e) {
+function zt(e) {
let t = Math.floor(Number(e) || 0);
return t < 10 ? `0${t}` : String(t);
}
-function Wt(e) {
+function Bt(e) {
let t = Number(e);
if (!Number.isFinite(t) || t < 0) return "0:00";
let n = Math.floor(t), r = Math.floor(n / 3600), i = Math.floor(n % 3600 / 60), a = n % 60;
- return r > 0 ? `${r}:${Ut(i)}:${Ut(a)}` : `${i}:${Ut(a)}`;
+ return r > 0 ? `${r}:${zt(i)}:${zt(a)}` : `${i}:${zt(a)}`;
}
-function Gt(e, t, n) {
+function Vt(e, t, n) {
let r = document.createElement("button");
r.type = "button", r.className = `mjr-video-btn ${e || ""}`.trim(), n && (r.title = n);
try {
@@ -1574,7 +1497,7 @@ function Gt(e, t, n) {
}
return r.textContent = t, r;
}
-function Kt(e, t, n, r) {
+function Ht(e, t, n, r) {
let i = document.createElement("button");
i.type = "button", i.className = `mjr-video-btn ${e || ""}`.trim(), n && (i.title = n);
try {
@@ -1588,18 +1511,18 @@ function Kt(e, t, n, r) {
icon: a
};
}
-function qt(e, { min: t, max: n, step: r, value: i, title: a, ariaLabel: o, widthPx: s } = {}) {
+function Ut(e, { min: t, max: n, step: r, value: i, title: a, ariaLabel: o, widthPx: s } = {}) {
let c = document.createElement("input");
return c.type = "number", c.className = `mjr-video-num ${e || ""}`.trim(), a && (c.title = a), o && c.setAttribute("aria-label", o), t != null && (c.min = String(t)), n != null && (c.max = String(n)), r != null && (c.step = String(r)), i != null && (c.value = String(i)), s != null && (c.style.width = `${s}px`), c;
}
-function Jt(e) {
+function Wt(e) {
try {
return e?.variant === "preview" ? "preview" : e?.variant === "viewerbar" ? "viewerbar" : "viewer";
} catch {
return "viewer";
}
}
-function Yt(e) {
+function Gt(e) {
try {
let t = Number(e?.initialFps);
return Number.isFinite(t) && t > 0 ? t : null;
@@ -1607,11 +1530,11 @@ function Yt(e) {
return null;
}
}
-function Xt(e, t) {
+function Kt(e, t) {
let n = Number(e), r = Number(t);
- return Number.isFinite(n) && Number.isFinite(r) && Math.abs(n - r) <= Bt;
+ return Number.isFinite(n) && Number.isFinite(r) && Math.abs(n - r) <= It;
}
-function Zt(e, t) {
+function qt(e, t) {
let n = [];
try {
e.controls = !1, e.loop = !0, e.muted = !0, e.playsInline = !0, e.autoplay = !0;
@@ -1699,14 +1622,14 @@ function Zt(e, t) {
}
};
}
-function Qt(e, t = {}) {
+function Jt(e, t = {}) {
try {
- let n = Jt(t), r = String(t?.mediaKind || "video").toLowerCase() === "audio", i = n === "viewerbar", a = n !== "preview", o = a, s = Yt(t), c = t?.hostEl || e?.parentElement;
+ let n = Wt(t), r = String(t?.mediaKind || "video").toLowerCase() === "audio", i = n === "viewerbar", a = n !== "preview", o = a, s = Gt(t), c = t?.hostEl || e?.parentElement;
if (!e || !c) return {
controlsEl: null,
- destroy: kt
+ destroy: Tt
};
- if (n === "preview") return Zt(e, c);
+ if (n === "preview") return qt(e, c);
try {
e.loop = !1;
} catch (e) {
@@ -1724,7 +1647,7 @@ function Qt(e, t = {}) {
let f = document.createElement("div");
f.className = "mjr-video-seek-wrap";
let p = document.createElement("input");
- p.className = "mjr-video-range mjr-video-range--seek", p.type = "range", p.min = "0", p.max = String(Rt), p.step = "1", p.value = "0", p.setAttribute("aria-label", w("video.seek", "Seek")), p.title = r ? w("video.seekThroughAudio", "Seek through audio") : w("video.seekThrough", "Seek through video");
+ p.className = "mjr-video-range mjr-video-range--seek", p.type = "range", p.min = "0", p.max = String(Pt), p.step = "1", p.value = "0", p.setAttribute("aria-label", w("video.seek", "Seek")), p.title = r ? w("video.seekThroughAudio", "Seek through audio") : w("video.seekThrough", "Seek through video");
let m = document.createElement("div");
m.className = "mjr-video-seek-overlay";
let h = null, g = null, _ = null, v = null;
@@ -1758,31 +1681,31 @@ function Qt(e, t = {}) {
A.className = "mjr-video-timegroup", A.appendChild(O), o && A.appendChild(k);
let j = document.createElement("span");
j.className = "mjr-video-frame", j.textContent = "F: 0", j.title = w("video.currentFrame", "Current frame number");
- let M = Gt("mjr-video-btn--play", w("btn.play", "Play"), w("video.playPauseSpace", "Play/Pause (Space)")), N = Gt("mjr-video-btn--step", "<", w("video.stepBack", "Step back")), ee = Gt("mjr-video-btn--step", ">", w("video.stepForward", "Step forward")), te = Gt("mjr-video-btn--jump mjr-video-btn--in", "|<", w("video.goToIn", "Go to In")), ne = Gt("mjr-video-btn--jump mjr-video-btn--out", ">|", w("video.goToOut", "Go to Out")), re = Gt("mjr-video-btn--mark mjr-video-btn--in", "I", w("video.setInFromCurrent", "Set In from current frame")), ie = Gt("mjr-video-btn--mark mjr-video-btn--out", "O", w("video.setOutFromCurrent", "Set Out from current frame")), ae = Kt("mjr-video-btn--toggle", "pi-refresh", w("video.loopPlaybackInRange", "Loop playback in range"), w("video.loop", "Loop")), oe = ae.btn, se = qt("mjr-video-num--in", {
+ let M = Vt("mjr-video-btn--play", w("btn.play", "Play"), w("video.playPauseSpace", "Play/Pause (Space)")), N = Vt("mjr-video-btn--step", "<", w("video.stepBack", "Step back")), ee = Vt("mjr-video-btn--step", ">", w("video.stepForward", "Step forward")), te = Vt("mjr-video-btn--jump mjr-video-btn--in", "|<", w("video.goToIn", "Go to In")), ne = Vt("mjr-video-btn--jump mjr-video-btn--out", ">|", w("video.goToOut", "Go to Out")), re = Vt("mjr-video-btn--mark mjr-video-btn--in", "I", w("video.setInFromCurrent", "Set In from current frame")), ie = Vt("mjr-video-btn--mark mjr-video-btn--out", "O", w("video.setOutFromCurrent", "Set Out from current frame")), ae = Ht("mjr-video-btn--toggle", "pi-refresh", w("video.loopPlaybackInRange", "Loop playback in range"), w("video.loop", "Loop")), oe = ae.btn, se = Ut("mjr-video-num--in", {
min: 0,
step: 1,
value: 0,
title: w("video.inFrame", "In frame"),
ariaLabel: w("video.inFrame", "In frame"),
widthPx: 72
- }), ce = qt("mjr-video-num--out", {
+ }), ce = Ut("mjr-video-num--out", {
min: 0,
step: 1,
value: 0,
title: w("video.outFrame", "Out frame"),
ariaLabel: w("video.outFrame", "Out frame"),
widthPx: 72
- }), le = qt("mjr-video-num--step", {
+ }), le = Ut("mjr-video-num--step", {
min: 1,
step: 1,
value: 1,
title: w("video.frameIncrement", "Frame increment"),
ariaLabel: w("video.frameIncrement", "Frame increment"),
widthPx: 56
- }), I = qt("mjr-video-num--fps", {
+ }), I = Ut("mjr-video-num--fps", {
min: 1,
step: .001,
- value: It(s || 30),
+ value: Mt(s || 30),
title: w("video.fpsStepping", "FPS (used for frame stepping)"),
ariaLabel: w("video.fps", "FPS"),
widthPx: 56
@@ -1803,7 +1726,7 @@ function Qt(e, t = {}) {
let t = document.createElement("option");
t.value = String(e), t.textContent = `${e}x`, L.appendChild(t);
}
- let ue = Kt("mjr-video-btn--mute", "pi-volume-up", w("video.mute", "Mute"), w("video.mute", "Mute")), de = ue.btn, R = document.createElement("div");
+ let ue = Ht("mjr-video-btn--mute", "pi-volume-up", w("video.mute", "Mute"), w("video.mute", "Mute")), de = ue.btn, R = document.createElement("div");
R.className = "mjr-video-volume-wrap", R.style.cssText = "display:none; align-items:center; position:relative;";
let z = null;
z = document.createElement("input"), z.className = "mjr-video-range mjr-video-range--volume", z.type = "range", z.min = "0", z.max = "1", z.step = "0.02", z.value = String(P(Number(e.volume) || 0)), z.setAttribute("aria-label", w("video.volume", "Volume")), z.title = w("video.volume", "Volume");
@@ -1813,72 +1736,72 @@ function Qt(e, t = {}) {
console.debug?.(e);
}
R.appendChild(z);
+ let B = document.createElement("div");
+ B.className = "mjr-video-group mjr-video-group--in";
+ let V = document.createElement("span");
+ V.textContent = "In", V.title = w("video.resetInToStart", "Reset In to start"), V.style.cssText = "cursor:pointer; user-select:none;", o && (B.appendChild(V), B.appendChild(se));
+ let H = document.createElement("div");
+ H.className = "mjr-video-group mjr-video-group--out";
+ let U = document.createElement("span");
+ U.textContent = "Out", U.title = w("video.resetOutToEnd", "Reset Out to end"), U.style.cssText = "cursor:pointer; user-select:none;", o && (H.appendChild(U), H.appendChild(ce));
let fe = document.createElement("div");
- fe.className = "mjr-video-group mjr-video-group--in";
- let B = document.createElement("span");
- B.textContent = "In", B.title = w("video.resetInToStart", "Reset In to start"), B.style.cssText = "cursor:pointer; user-select:none;", o && (fe.appendChild(B), fe.appendChild(se));
- let V = document.createElement("div");
- V.className = "mjr-video-group mjr-video-group--out";
- let H = document.createElement("span");
- H.textContent = "Out", H.title = w("video.resetOutToEnd", "Reset Out to end"), H.style.cssText = "cursor:pointer; user-select:none;", o && (V.appendChild(H), V.appendChild(ce));
+ fe.className = "mjr-video-group mjr-video-group--adjust-left", o && (fe.appendChild(re), r || (fe.appendChild(document.createTextNode(w("video.step", "Step"))), fe.appendChild(le), fe.appendChild(document.createTextNode(w("video.fps", "FPS"))), fe.appendChild(I)), fe.appendChild(j));
+ let W = document.createElement("div");
+ W.className = "mjr-video-group mjr-video-group--adjust-right", o && (W.appendChild(A), W.appendChild(oe));
let pe = document.createElement("div");
- pe.className = "mjr-video-group mjr-video-group--adjust-left", o && (pe.appendChild(re), r || (pe.appendChild(document.createTextNode(w("video.step", "Step"))), pe.appendChild(le), pe.appendChild(document.createTextNode(w("video.fps", "FPS"))), pe.appendChild(I)), pe.appendChild(j));
- let U = document.createElement("div");
- U.className = "mjr-video-group mjr-video-group--adjust-right", o && (U.appendChild(A), U.appendChild(oe));
+ pe.className = "mjr-video-group mjr-video-group--speed", pe.appendChild(document.createTextNode(w("video.speed", "Speed"))), pe.appendChild(L);
let me = document.createElement("div");
- me.className = "mjr-video-group mjr-video-group--speed", me.appendChild(document.createTextNode(w("video.speed", "Speed"))), me.appendChild(L);
+ me.className = "mjr-video-bottom mjr-video-bottom--left";
let he = document.createElement("div");
- he.className = "mjr-video-bottom mjr-video-bottom--left";
+ he.className = "mjr-video-transport";
let ge = document.createElement("div");
- ge.className = "mjr-video-transport";
- let _e = document.createElement("div");
- if (_e.className = "mjr-video-bottom mjr-video-bottom--right", ge.appendChild(te), r || ge.appendChild(N), ge.appendChild(M), r || ge.appendChild(ee), ge.appendChild(ne), o && he.appendChild(pe), o && _e.appendChild(U), _e.appendChild(me), _e.appendChild(de), o && _e.appendChild(ie), z && _e.appendChild(R), i) {
+ if (ge.className = "mjr-video-bottom mjr-video-bottom--right", he.appendChild(te), r || he.appendChild(N), he.appendChild(M), r || he.appendChild(ee), he.appendChild(ne), o && me.appendChild(fe), o && ge.appendChild(W), ge.appendChild(pe), ge.appendChild(de), o && ge.appendChild(ie), z && ge.appendChild(R), i) {
let e = document.createElement("div");
- e.className = "mjr-video-bar-timeline", o && e.appendChild(fe), e.appendChild(f), o && e.appendChild(V);
+ e.className = "mjr-video-bar-timeline", o && e.appendChild(B), e.appendChild(f), o && e.appendChild(H);
let t = document.createElement("div");
t.className = "mjr-video-bar-actions";
let n = document.createElement("div");
- n.className = "mjr-video-bar-side mjr-video-bar-side--left", o && n.appendChild(pe);
+ n.className = "mjr-video-bar-side mjr-video-bar-side--left", o && n.appendChild(fe);
let r = document.createElement("div");
- r.className = "mjr-video-bar-center", r.appendChild(ge);
+ r.className = "mjr-video-bar-center", r.appendChild(he);
let i = document.createElement("div");
- i.className = "mjr-video-bar-side mjr-video-bar-side--right", o && i.appendChild(U), i.appendChild(me), i.appendChild(de), o && i.appendChild(ie), z && i.appendChild(R), t.appendChild(n), t.appendChild(r), t.appendChild(i), l.replaceChildren(e, t);
- } else o && u.appendChild(j), o && u.appendChild(fe), u.appendChild(f), o && u.appendChild(V), u.appendChild(A), d.appendChild(he), d.appendChild(ge), d.appendChild(_e);
- let W = (e) => {
+ i.className = "mjr-video-bar-side mjr-video-bar-side--right", o && i.appendChild(W), i.appendChild(pe), i.appendChild(de), o && i.appendChild(ie), z && i.appendChild(R), t.appendChild(n), t.appendChild(r), t.appendChild(i), l.replaceChildren(e, t);
+ } else o && u.appendChild(j), o && u.appendChild(B), u.appendChild(f), o && u.appendChild(H), u.appendChild(A), d.appendChild(me), d.appendChild(he), d.appendChild(ge);
+ let G = (e) => {
try {
e.stopPropagation?.();
} catch (e) {
console.debug?.(e);
}
- }, G = (e) => {
+ }, K = (e) => {
try {
e.preventDefault?.();
} catch (e) {
console.debug?.(e);
}
- W(e);
- }, K = [], ve = (() => {
+ G(e);
+ }, q = [], _e = (() => {
try {
return new AbortController();
} catch {
return {
signal: {
aborted: !1,
- addEventListener: kt,
- removeEventListener: kt
+ addEventListener: Tt,
+ removeEventListener: Tt
},
- abort: kt
+ abort: Tt
};
}
})();
- K.push(() => {
+ q.push(() => {
try {
- ve.abort();
+ _e.abort();
} catch (e) {
console.debug?.(e);
}
});
- let ye = () => {
+ let ve = () => {
try {
let e = Number(c?.clientWidth) || Number(l?.clientWidth) || 0, t = "regular";
e > 0 && e < 560 ? t = "stacked" : e > 0 && e < 860 && (t = "compact"), l.dataset.mjrLayout = t;
@@ -1886,15 +1809,15 @@ function Qt(e, t = {}) {
console.debug?.(e);
}
};
- ye();
+ ve();
try {
if (typeof ResizeObserver == "function" && c) {
let e = typeof requestAnimationFrame == "function" ? requestAnimationFrame : null, t = typeof cancelAnimationFrame == "function" ? cancelAnimationFrame : null, n = 0, r = new ResizeObserver(e ? () => {
n ||= e(() => {
- n = 0, ye();
+ n = 0, ve();
});
- } : () => ye());
- r.observe(c), K.push(() => {
+ } : () => ve());
+ r.observe(c), q.push(() => {
try {
n && t && t(n), r.disconnect();
} catch (e) {
@@ -1905,18 +1828,18 @@ function Qt(e, t = {}) {
} catch (e) {
console.debug?.(e);
}
- K.push(Z(l, "pointerdown", W)), K.push(Z(l, "dblclick", G, { capture: !0 })), K.push(Z(l, "wheel", G, {
+ q.push(Z(l, "pointerdown", G)), q.push(Z(l, "dblclick", K, { capture: !0 })), q.push(Z(l, "wheel", K, {
capture: !0,
passive: !1
- })), K.push(Z(window, "dblclick", (e) => {
+ })), q.push(Z(window, "dblclick", (e) => {
try {
- l.contains?.(e?.target) && G(e);
+ l.contains?.(e?.target) && K(e);
} catch (e) {
console.debug?.(e);
}
- }, { capture: !0 })), K.push(Z(window, "wheel", (e) => {
+ }, { capture: !0 })), q.push(Z(window, "wheel", (e) => {
try {
- l.contains?.(e?.target) && G(e);
+ l.contains?.(e?.target) && K(e);
} catch (e) {
console.debug?.(e);
}
@@ -1924,7 +1847,7 @@ function Qt(e, t = {}) {
capture: !0,
passive: !1
}));
- let q = {
+ let J = {
outFrame: null,
frameCount: null,
loop: o,
@@ -1936,38 +1859,38 @@ function Qt(e, t = {}) {
_ppRafId: null,
_userInteracted: !1
};
- q.nativeFps = s ? It(s, 30) : null, q.fps = q.nativeFps || It(I.value, 30);
- let be = () => {
- let e = Number(q.nativeFps), t = Number(q.fps);
- return Number.isFinite(e) && e > 0 && !Xt(t, e);
- }, xe = (e = !1) => {
+ J.nativeFps = s ? Mt(s, 30) : null, J.fps = J.nativeFps || Mt(I.value, 30);
+ let ye = () => {
+ let e = Number(J.nativeFps), t = Number(J.fps);
+ return Number.isFinite(e) && e > 0 && !Kt(t, e);
+ }, be = (e = !1) => {
try {
if (!I || r) return;
- let t = Number(q.nativeFps), n = be(), i = w("video.fpsStepping", "FPS (used for frame stepping)");
- I.classList.toggle("is-overridden", n), Number.isFinite(t) && t > 0 ? (I.dataset.defaultFps = String(t), I.title = `${i} - Source FPS: ${t}`, n && (I.title += " - Modified")) : (delete I.dataset.defaultFps, I.title = i), e && !I.matches?.(":focus") && (I.value = String(It(q.fps, q.nativeFps || 30)));
+ let t = Number(J.nativeFps), n = ye(), i = w("video.fpsStepping", "FPS (used for frame stepping)");
+ I.classList.toggle("is-overridden", n), Number.isFinite(t) && t > 0 ? (I.dataset.defaultFps = String(t), I.title = `${i} - Source FPS: ${t}`, n && (I.title += " - Modified")) : (delete I.dataset.defaultFps, I.title = i), e && !I.matches?.(":focus") && (I.value = String(Mt(J.fps, J.nativeFps || 30)));
} catch (e) {
console.debug?.(e);
}
};
- xe(!0);
- let Se = () => {
- if (!q._userInteracted) {
- q._userInteracted = !0;
+ be(!0);
+ let xe = () => {
+ if (!J._userInteracted) {
+ J._userInteracted = !0;
try {
- e.muted && (e.muted = !1, Ge?.());
+ e.muted && (e.muted = !1, We?.());
} catch (e) {
console.debug?.(e);
}
}
- }, Ce = null, we = () => {
+ }, Se = null, Ce = () => {
if (o) try {
j.classList.add("is-step");
try {
- Ce?.();
+ Se?.();
} catch (e) {
console.debug?.(e);
}
- Ce = Ht(ve.signal, zt, () => {
+ Se = Rt(_e.signal, Ft, () => {
try {
j.classList.remove("is-step");
} catch (e) {
@@ -1978,32 +1901,32 @@ function Qt(e, t = {}) {
console.debug?.(e);
}
};
- K.push(() => {
+ q.push(() => {
try {
- Ce?.();
+ Se?.();
} catch (e) {
console.debug?.(e);
}
- Ce = null;
+ Se = null;
try {
j?.classList?.remove?.("is-step");
} catch (e) {
console.debug?.(e);
}
});
- let Te = (e, t) => {
+ let we = (e, t) => {
try {
if (!e) return;
t ? e.classList.add("is-on") : e.classList.remove("is-on");
} catch (e) {
console.debug?.(e);
}
- }, Ee = (t) => {
+ }, Te = (t) => {
try {
let n = Number(t);
- if (!Number.isFinite(n) || n <= 0) return q.playbackRate;
+ if (!Number.isFinite(n) || n <= 0) return J.playbackRate;
let r = Math.max(.25, Math.min(10, Math.round(n * 100) / 100));
- q.playbackRate = r;
+ J.playbackRate = r;
try {
e.playbackRate = r;
} catch (e) {
@@ -2016,53 +1939,53 @@ function Qt(e, t = {}) {
}
return r;
} catch {
- return q.playbackRate;
+ return J.playbackRate;
}
- }, De = () => {
+ }, Ee = () => {
try {
- Te(oe, !!(q.loop || q.pingpong));
+ we(oe, !!(J.loop || J.pingpong));
try {
- ae?.icon && (q.pingpong ? (ae.icon.className = "pi pi-sort-alt", oe.title = w("video.pingpongPlayback", "Ping-pong playback (forward then reverse)")) : (ae.icon.className = "pi pi-refresh", oe.title = w("video.loopPlaybackInRange", "Loop playback in range")));
+ ae?.icon && (J.pingpong ? (ae.icon.className = "pi pi-sort-alt", oe.title = w("video.pingpongPlayback", "Ping-pong playback (forward then reverse)")) : (ae.icon.className = "pi pi-refresh", oe.title = w("video.loopPlaybackInRange", "Loop playback in range")));
} catch (e) {
console.debug?.(e);
}
} catch (e) {
console.debug?.(e);
}
- }, Oe = () => {
+ }, De = () => {
try {
- let t = Number(q.frameCount);
+ let t = Number(J.frameCount);
if (Number.isFinite(t) && t > 0) return Math.max(1, Math.floor(t));
- let n = Number(e?.duration), r = It(q.fps, 30);
+ let n = Number(e?.duration), r = Mt(J.fps, 30);
return !Number.isFinite(n) || n <= 0 ? 0 : Math.max(0, Math.floor(n * r));
} catch {
return 0;
}
- }, ke = (t = null) => {
+ }, Oe = (t = null) => {
try {
- let n = t ?? e?.currentTime, r = Number(n), i = It(q.fps, 30);
+ let n = t ?? e?.currentTime, r = Number(n), i = Mt(J.fps, 30);
return !Number.isFinite(r) || r < 0 ? 0 : Math.max(0, Math.floor(r * i + 1e-6));
} catch {
return 0;
}
- }, Ae = (e) => {
- let t = It(q.fps, 30);
+ }, ke = (e) => {
+ let t = Mt(J.fps, 30);
return Math.max(0, Number(e) || 0) / t;
- }, je = () => {
+ }, Ae = () => {
try {
- let e = Oe();
+ let e = De();
if (e <= 0) return;
- let t = q.inFrame == null ? 0 : F(q.inFrame, 0, e), n = q.outFrame == null ? e : F(q.outFrame, 0, e);
- n < t ? (q.inFrame = n, q.outFrame = t) : (q.inFrame = t, q.outFrame = n);
+ let t = J.inFrame == null ? 0 : F(J.inFrame, 0, e), n = J.outFrame == null ? e : F(J.outFrame, 0, e);
+ n < t ? (J.inFrame = n, J.outFrame = t) : (J.inFrame = t, J.outFrame = n);
} catch (e) {
console.debug?.(e);
}
- }, Me = () => {
+ }, je = () => {
try {
- let e = Oe();
+ let e = De();
return {
- inF: q.inFrame == null ? 0 : F(q.inFrame, 0, e),
- outF: q.outFrame == null ? e : F(q.outFrame, 0, e),
+ inF: J.inFrame == null ? 0 : F(J.inFrame, 0, e),
+ outF: J.outFrame == null ? e : F(J.outFrame, 0, e),
maxF: e
};
} catch {
@@ -2072,29 +1995,29 @@ function Qt(e, t = {}) {
maxF: 0
};
}
+ }, Me = () => {
+ try {
+ if (!o || r) return Pt;
+ let e = De();
+ if (Number.isFinite(e) && e > Pt) return Math.max(Pt, Math.floor(e));
+ } catch (e) {
+ console.debug?.(e);
+ }
+ return Pt;
}, Ne = () => {
try {
- if (!o || r) return Rt;
- let e = Oe();
- if (Number.isFinite(e) && e > Rt) return Math.max(Rt, Math.floor(e));
+ p.max = String(Me());
} catch (e) {
console.debug?.(e);
}
- return Rt;
}, Pe = () => {
try {
- p.max = String(Ne());
- } catch (e) {
- console.debug?.(e);
- }
- }, Fe = () => {
- try {
- let t = !e?.paused || q._ppReverse;
+ let t = !e?.paused || J._ppReverse;
M.textContent = t ? w("video.pause", "Pause") : w("video.play", "Play");
} catch (e) {
console.debug?.(e);
}
- }, Ie = () => {
+ }, Fe = () => {
try {
let t = !!e?.muted || (Number(e?.volume) || 0) <= .001;
try {
@@ -2107,14 +2030,14 @@ function Qt(e, t = {}) {
} catch (e) {
console.debug?.(e);
}
- }, J = (t = null) => {
+ }, Y = (t = null) => {
try {
let n = Number(e?.duration), i = t ?? e?.currentTime, s = Number(i), c = Number.isFinite(n) && n > 0;
- if (O.textContent = `${Wt(s)} / ${c ? Wt(n) : "0:00"}`, p.disabled = !c, c) {
+ if (O.textContent = `${Bt(s)} / ${c ? Bt(n) : "0:00"}`, p.disabled = !c, c) {
let e = P((s || 0) / n);
- Pe();
- let t = Math.round(e * Ne());
- Number.isNaN(t) || q._seeking || p.matches?.(":active") || (p.value = String(t));
+ Ne();
+ let t = Math.round(e * Me());
+ Number.isNaN(t) || J._seeking || p.matches?.(":active") || (p.value = String(t));
try {
C.style.left = `${e * 100}%`;
} catch (e) {
@@ -2128,23 +2051,23 @@ function Qt(e, t = {}) {
console.debug?.(e);
}
}
- let l = o ? Oe() : 0, u = o ? ke(s) : 0;
+ let l = o ? De() : 0, u = o ? Oe(s) : 0;
if (a) {
- o && (j.textContent = r ? `T: ${Wt(s)} / ${Wt(n)}` : `F: ${u} / ${l}`);
+ o && (j.textContent = r ? `T: ${Bt(s)} / ${Bt(n)}` : `F: ${u} / ${l}`);
try {
if (Number.isFinite(n) && n > 0) {
let e = P((s || 0) / n);
- T.style.left = `${e * 100}%`, T.textContent = r ? Wt(s) : String(u), T.style.display = "";
+ T.style.left = `${e * 100}%`, T.textContent = r ? Bt(s) : String(u), T.style.display = "";
} else T.style.display = "none";
} catch (e) {
console.debug?.(e);
}
}
if (o) {
- se.matches?.(":focus") || (se.value = String(q.inFrame ?? 0)), ce.matches?.(":focus") || (ce.value = String(q.outFrame ?? l));
+ se.matches?.(":focus") || (se.value = String(J.inFrame ?? 0)), ce.matches?.(":focus") || (ce.value = String(J.outFrame ?? l));
try {
- let { inF: e, outF: t, maxF: n } = Me(), i = e <= 0 && t >= n, a = Math.max(0, Math.floor(t) - Math.floor(e) + 1);
- !i && n > 0 ? (k.textContent = r ? `R: ${Wt(a / It(q.fps, 30))}` : `R: ${a}f`, k.style.display = "") : k.style.display = "none";
+ let { inF: e, outF: t, maxF: n } = je(), i = e <= 0 && t >= n, a = Math.max(0, Math.floor(t) - Math.floor(e) + 1);
+ !i && n > 0 ? (k.textContent = r ? `R: ${Bt(a / Mt(J.fps, 30))}` : `R: ${a}f`, k.style.display = "") : k.style.display = "none";
} catch (e) {
console.debug?.(e);
}
@@ -2152,7 +2075,7 @@ function Qt(e, t = {}) {
} catch (e) {
console.debug?.(e);
}
- }, Le = () => {
+ }, Ie = () => {
if (a && r) try {
let t = Number(e?.duration);
if (!Number.isFinite(t) || t <= 0) {
@@ -2164,7 +2087,7 @@ function Qt(e, t = {}) {
}
return;
}
- let n = Vt(t, 80), r = Vt(t, 8), i = n / t * 100, a = r / t * 100;
+ let n = Lt(t, 80), r = Lt(t, 8), i = n / t * 100, a = r / t * 100;
if (Number.isFinite(i) && i > .02) {
let e = `repeating-linear-gradient(to right, rgba(255,255,255,0.16) 0, rgba(255,255,255,0.16) 1px, transparent 1px, transparent ${i}%)`, t = `repeating-linear-gradient(to right, rgba(255,255,255,0.3) 0, rgba(255,255,255,0.3) 1px, transparent 1px, transparent ${a}%)`;
y.style.backgroundImage = `${t}, ${e}`;
@@ -2176,7 +2099,7 @@ function Qt(e, t = {}) {
let n = document.createElement("span");
n.className = "mjr-video-seek-label";
let r = Math.max(0, Math.min(t, Number(e) || 0));
- return n.style.left = `${P(r / t) * 100}%`, n.textContent = Wt(r), n;
+ return n.style.left = `${P(r / t) * 100}%`, n.textContent = Bt(r), n;
};
b.appendChild(s(0));
for (let e = r; e < t; e += r) b.appendChild(s(e));
@@ -2184,10 +2107,10 @@ function Qt(e, t = {}) {
} catch (e) {
console.debug?.(e);
}
- }, Re = () => {
- if (!o) Le();
+ }, Le = () => {
+ if (!o) Ie();
else try {
- let { inF: e, outF: t, maxF: n } = Me();
+ let { inF: e, outF: t, maxF: n } = je();
if (!Number.isFinite(n) || n <= 0) return;
let i = P(e / n) * 100, a = P(t / n) * 100, o = e <= 0 && t >= n;
try {
@@ -2219,11 +2142,11 @@ function Qt(e, t = {}) {
console.debug?.(e);
}
if (r) {
- Le();
+ Ie();
return;
}
try {
- let e = Math.max(1, Math.floor(n / Lt)), t = Math.max(e, Math.floor(Number(q.step) || 1)), r = t / n * 100, i = r * 10;
+ let e = Math.max(1, Math.floor(n / Nt)), t = Math.max(e, Math.floor(Number(J.step) || 1)), r = t / n * 100, i = r * 10;
if (Number.isFinite(r) && r > .02) {
let e = `repeating-linear-gradient(to right, rgba(255,255,255,0.16) 0, rgba(255,255,255,0.16) 1px, transparent 1px, transparent ${r}%)`, t = `repeating-linear-gradient(to right, rgba(255,255,255,0.28) 0, rgba(255,255,255,0.28) 1px, transparent 1px, transparent ${i}%)`;
y.style.backgroundImage = `${t}, ${e}`;
@@ -2275,70 +2198,70 @@ function Qt(e, t = {}) {
} catch (e) {
console.debug?.(e);
}
- }, ze = ({ prefer: e = null } = {}) => {
+ }, Re = ({ prefer: e = null } = {}) => {
if (o) try {
- je();
- let { inF: t, outF: n } = Me(), r = ke();
- e === "in" ? Ke(t) : e === "out" ? r > n && Ke(n) : r < t ? Ke(t) : r > n && Ke(n);
+ Ae();
+ let { inF: t, outF: n } = je(), r = Oe();
+ e === "in" ? Ge(t) : e === "out" ? r > n && Ge(n) : r < t ? Ge(t) : r > n && Ge(n);
+ } catch (e) {
+ console.debug?.(e);
+ }
+ }, ze = () => {
+ try {
+ J.inFrame = 0, Ae(), Y(), Le(), Re({ prefer: "in" });
} catch (e) {
console.debug?.(e);
}
}, Be = () => {
try {
- q.inFrame = 0, je(), J(), Re(), ze({ prefer: "in" });
+ let { maxF: e } = je();
+ J.outFrame = Math.max(0, Number(e) || 0), Ae(), Y(), Le(), Re({ prefer: "out" });
} catch (e) {
console.debug?.(e);
}
}, Ve = () => {
try {
- let { maxF: e } = Me();
- q.outFrame = Math.max(0, Number(e) || 0), je(), J(), Re(), ze({ prefer: "out" });
- } catch (e) {
- console.debug?.(e);
- }
- }, He = () => {
- try {
- q._ppRafId != null && (cancelAnimationFrame(q._ppRafId), q._ppRafId = null);
+ J._ppRafId != null && (cancelAnimationFrame(J._ppRafId), J._ppRafId = null);
} catch (e) {
console.debug?.(e);
}
};
- K.push(He);
- let Ue = () => {
+ q.push(Ve);
+ let He = () => {
try {
- He(), q._ppReverse = !0, e.pause?.(), Fe();
- let t = 1e3 / (It(q.fps, 30) * Math.max(.25, Number(q.playbackRate) || 1)), n = performance.now(), r = (i) => {
+ Ve(), J._ppReverse = !0, e.pause?.(), Pe();
+ let t = 1e3 / (Mt(J.fps, 30) * Math.max(.25, Number(J.playbackRate) || 1)), n = performance.now(), r = (i) => {
try {
- if (!q._ppReverse || !q.pingpong) {
- q._ppReverse = !1, Fe();
+ if (!J._ppReverse || !J.pingpong) {
+ J._ppReverse = !1, Pe();
return;
}
let a = i - n;
if (a >= t) {
n = i - a % t;
- let { inF: r } = Me(), o = ke();
+ let { inF: r } = je(), o = Oe();
if (o <= r) {
- q._ppReverse = !1, Ke(r);
+ J._ppReverse = !1, Ge(r);
let t = e.play?.();
- t && typeof t.catch == "function" && t.catch(() => {}), Fe(), J();
+ t && typeof t.catch == "function" && t.catch(() => {}), Pe(), Y();
return;
}
- let s = Math.max(1, Math.floor(Number(q.step) || 1));
- Ke(o - s), J();
+ let s = Math.max(1, Math.floor(Number(J.step) || 1));
+ Ge(o - s), Y();
}
- q._ppRafId = requestAnimationFrame(r);
+ J._ppRafId = requestAnimationFrame(r);
} catch (e) {
- console.debug?.(e), q._ppReverse = !1, Fe();
+ console.debug?.(e), J._ppReverse = !1, Pe();
}
};
- q._ppRafId = requestAnimationFrame(r);
+ J._ppRafId = requestAnimationFrame(r);
} catch (e) {
- console.debug?.(e), q._ppReverse = !1;
+ console.debug?.(e), J._ppReverse = !1;
}
- }, We = () => {
+ }, Ue = () => {
try {
- let e = Oe();
- q.inFrame = 0, q.outFrame = e > 0 ? e : null, q.step = 1, q.loop = !!o, q.pingpong = !1, q._ppReverse = !1, He(), q.once = !1, Ee(1);
+ let e = De();
+ J.inFrame = 0, J.outFrame = e > 0 ? e : null, J.step = 1, J.loop = !!o, J.pingpong = !1, J._ppReverse = !1, Ve(), J.once = !1, Te(1);
try {
le.value = "1";
} catch (e) {
@@ -2349,11 +2272,11 @@ function Qt(e, t = {}) {
} catch (e) {
console.debug?.(e);
}
- je(), De(), J(), Re(), ze({ prefer: "in" });
+ Ae(), Ee(), Y(), Le(), Re({ prefer: "in" });
} catch (e) {
console.debug?.(e);
}
- }, Ge = () => {
+ }, We = () => {
try {
let t = P(Number(e?.volume) || 0);
try {
@@ -2361,133 +2284,133 @@ function Qt(e, t = {}) {
} catch (e) {
console.debug?.(e);
}
- Ie();
+ Fe();
} catch (e) {
console.debug?.(e);
}
+ }, Ge = (t) => {
+ try {
+ let { maxF: n } = je(), r = F(t, 0, n > 0 ? n : Infinity);
+ e.currentTime = ke(r);
+ } catch (e) {
+ console.debug?.(e);
+ }
+ Y();
}, Ke = (t) => {
+ xe();
try {
- let { maxF: n } = Me(), r = F(t, 0, n > 0 ? n : Infinity);
- e.currentTime = Ae(r);
- } catch (e) {
- console.debug?.(e);
- }
- J();
- }, qe = (t) => {
- Se();
- try {
- let n = Math.max(1, Math.floor(Number(q.step) || 1)), { inF: r, outF: i } = Me(), a = ke() + t * n;
- q.loop ? (a < r && (a = i), a > i && (a = r)) : a = F(a, r, i);
+ let n = Math.max(1, Math.floor(Number(J.step) || 1)), { inF: r, outF: i } = je(), a = Oe() + t * n;
+ J.loop ? (a < r && (a = i), a > i && (a = r)) : a = F(a, r, i);
try {
e.pause?.();
} catch (e) {
console.debug?.(e);
}
- Ke(a), we();
+ Ge(a), Ce();
+ } catch (e) {
+ console.debug?.(e);
+ }
+ }, qe = () => {
+ if (o) try {
+ Ae();
+ let { inF: e, outF: t } = je(), n = Oe();
+ (n < e || n > t) && Ge(e);
} catch (e) {
console.debug?.(e);
}
}, Je = () => {
- if (o) try {
- je();
- let { inF: e, outF: t } = Me(), n = ke();
- (n < e || n > t) && Ke(e);
- } catch (e) {
- console.debug?.(e);
- }
- }, Ye = () => {
- Se();
+ xe();
try {
- if (q._ppReverse) {
- q._ppReverse = !1, He(), Fe();
+ if (J._ppReverse) {
+ J._ppReverse = !1, Ve(), Pe();
return;
}
if (e.paused) {
- Je();
+ qe();
let t = e.play?.();
t && typeof t.catch == "function" && t.catch(() => {});
} else e.pause?.();
} catch (e) {
console.debug?.(e);
}
- Fe();
+ Pe();
};
- K.push(Z(e, "click", (t) => {
+ q.push(Z(e, "click", (t) => {
try {
if (t?.target !== e) return;
} catch (e) {
console.debug?.(e);
}
- Ye();
- })), K.push(Z(M, "click", (e) => {
- W(e), Ye();
- })), K.push(Z(N, "click", (e) => {
- W(e), qe(-1);
- })), K.push(Z(ee, "click", (e) => {
- W(e), qe(1);
- })), K.push(Z(te, "click", (e) => {
- W(e);
- let { inF: t } = Me();
- Ke(t), we();
- })), K.push(Z(ne, "click", (e) => {
- W(e);
- let { outF: t } = Me();
- Ke(t), we();
+ Je();
+ })), q.push(Z(M, "click", (e) => {
+ G(e), Je();
+ })), q.push(Z(N, "click", (e) => {
+ G(e), Ke(-1);
+ })), q.push(Z(ee, "click", (e) => {
+ G(e), Ke(1);
+ })), q.push(Z(te, "click", (e) => {
+ G(e);
+ let { inF: t } = je();
+ Ge(t), Ce();
+ })), q.push(Z(ne, "click", (e) => {
+ G(e);
+ let { outF: t } = je();
+ Ge(t), Ce();
}));
- let Xe = (t) => {
+ let Ye = (t) => {
try {
let n = Number(e?.duration);
if (!Number.isFinite(n) || n <= 0) return !1;
let r = f.getBoundingClientRect?.(), i = Number(r?.width) || 0;
if (!(i > 0)) return !1;
let a = F((Number(t) || 0) - Number(r.left || 0), 0, i), o = P(a / i), s = o * n;
- return e.currentTime = s, Pe(), p.value = String(Math.round(o * Ne())), J(s), !0;
+ return e.currentTime = s, Ne(), p.value = String(Math.round(o * Me())), Y(s), !0;
} catch (e) {
return console.debug?.(e), !1;
}
- }, Y = {
+ }, Xe = {
active: !1,
pointerId: null,
ac: null
}, Ze = (e = null) => {
- if (Y.active) {
- e && G(e), Y.active = !1, q._seeking = !1;
+ if (Xe.active) {
+ e && K(e), Xe.active = !1, J._seeking = !1;
try {
- f.releasePointerCapture?.(Y.pointerId);
+ f.releasePointerCapture?.(Xe.pointerId);
} catch (e) {
console.debug?.(e);
}
- Y.pointerId = null;
+ Xe.pointerId = null;
try {
- Y.ac?.abort?.();
+ Xe.ac?.abort?.();
} catch (e) {
console.debug?.(e);
}
- Y.ac = null, J();
+ Xe.ac = null, Y();
}
}, Qe = (e) => {
- Y.active && (G(e), Xe(e.clientX));
+ Xe.active && (K(e), Ye(e.clientX));
};
- if (K.push(() => Ze()), K.push(Z(f, "pointerdown", (e) => {
+ if (q.push(() => Ze()), q.push(Z(f, "pointerdown", (e) => {
try {
if (e?.button != null && e.button !== 0 || e?.target?.closest?.(".mjr-video-seek-handle, .mjr-video-seek-mark")) return;
} catch (e) {
console.debug?.(e);
}
- G(e), Se(), q._seeking = !0, Y.active = !0, Y.pointerId = e?.pointerId ?? null, Xe(e?.clientX);
+ K(e), xe(), J._seeking = !0, Xe.active = !0, Xe.pointerId = e?.pointerId ?? null, Ye(e?.clientX);
try {
- f.setPointerCapture?.(Y.pointerId);
+ f.setPointerCapture?.(Xe.pointerId);
} catch (e) {
console.debug?.(e);
}
try {
- Y.ac?.abort?.();
+ Xe.ac?.abort?.();
} catch (e) {
console.debug?.(e);
}
try {
let e = new AbortController();
- Y.ac = e, window.addEventListener("pointermove", Qe, {
+ Xe.ac = e, window.addEventListener("pointermove", Qe, {
passive: !1,
capture: !0,
signal: e.signal
@@ -2503,69 +2426,69 @@ function Qt(e, t = {}) {
} catch (e) {
console.debug?.(e);
}
- }, { passive: !1 })), K.push(Z(p, "pointerdown", () => {
- q._seeking = !0;
- })), K.push(Z(p, "pointerup", () => {
- Y.active || (q._seeking = !1);
- })), K.push(Z(p, "pointercancel", () => {
- Y.active || (q._seeking = !1);
- })), K.push(Z(p, "input", (t) => {
- W(t), Se();
+ }, { passive: !1 })), q.push(Z(p, "pointerdown", () => {
+ J._seeking = !0;
+ })), q.push(Z(p, "pointerup", () => {
+ Xe.active || (J._seeking = !1);
+ })), q.push(Z(p, "pointercancel", () => {
+ Xe.active || (J._seeking = !1);
+ })), q.push(Z(p, "input", (t) => {
+ G(t), xe();
try {
let t = Number(e?.duration);
if (!Number.isFinite(t) || t <= 0) return;
let n = Number(p.value);
- e.currentTime = P((Number.isFinite(n) ? n : 0) / Ne()) * t;
+ e.currentTime = P((Number.isFinite(n) ? n : 0) / Me()) * t;
} catch (e) {
console.debug?.(e);
}
- J();
+ Y();
})), o) {
- K.push(Z(re, "click", (e) => {
- W(e), q.inFrame = ke(), je(), J(), Re(), ze({ prefer: "in" });
- })), K.push(Z(ie, "click", (e) => {
- W(e), q.outFrame = ke(), je(), J(), Re(), ze({ prefer: "out" });
- })), K.push(Z(se, "change", (e) => {
- W(e);
+ q.push(Z(re, "click", (e) => {
+ G(e), J.inFrame = Oe(), Ae(), Y(), Le(), Re({ prefer: "in" });
+ })), q.push(Z(ie, "click", (e) => {
+ G(e), J.outFrame = Oe(), Ae(), Y(), Le(), Re({ prefer: "out" });
+ })), q.push(Z(se, "change", (e) => {
+ G(e);
try {
let e = Number(se.value);
- q.inFrame = Number.isFinite(e) ? Math.max(0, Math.floor(e)) : null, je();
+ J.inFrame = Number.isFinite(e) ? Math.max(0, Math.floor(e)) : null, Ae();
} catch (e) {
console.debug?.(e);
}
- J(), Re(), ze({ prefer: "in" });
- })), K.push(Z(ce, "change", (e) => {
- W(e);
+ Y(), Le(), Re({ prefer: "in" });
+ })), q.push(Z(ce, "change", (e) => {
+ G(e);
try {
let e = Number(ce.value);
- q.outFrame = Number.isFinite(e) ? Math.max(0, Math.floor(e)) : null, je();
+ J.outFrame = Number.isFinite(e) ? Math.max(0, Math.floor(e)) : null, Ae();
} catch (e) {
console.debug?.(e);
}
- J(), Re(), ze({ prefer: "out" });
- })), K.push(Z(le, "change", (e) => {
- W(e);
+ Y(), Le(), Re({ prefer: "out" });
+ })), q.push(Z(le, "change", (e) => {
+ G(e);
try {
- q.step = Math.max(1, Math.floor(Number(le.value) || 1)), le.value = String(q.step);
+ J.step = Math.max(1, Math.floor(Number(le.value) || 1)), le.value = String(J.step);
} catch (e) {
console.debug?.(e);
}
- })), K.push(Z(I, "change", (e) => {
- W(e);
+ })), q.push(Z(I, "change", (e) => {
+ G(e);
try {
- q.fps = It(I.value, 30), I.value = String(q.fps), xe(!1), je();
+ J.fps = Mt(I.value, 30), I.value = String(J.fps), be(!1), Ae();
} catch (e) {
console.debug?.(e);
}
- J(), Re();
- })), K.push(Z(oe, "click", (e) => {
- W(e), !q.loop && !q.pingpong ? (q.loop = !0, q.pingpong = !1) : q.loop && !q.pingpong ? (q.loop = !1, q.pingpong = !0) : (q.loop = !1, q.pingpong = !1), (q.loop || q.pingpong) && (q.once = !1), q.pingpong || (q._ppReverse = !1, He()), De();
- })), K.push(Z(B, "click", (e) => {
- W(e), Be();
- })), K.push(Z(H, "click", (e) => {
- W(e), Ve();
- })), K.push(Z(k, "click", (e) => {
- W(e), We();
+ Y(), Le();
+ })), q.push(Z(oe, "click", (e) => {
+ G(e), !J.loop && !J.pingpong ? (J.loop = !0, J.pingpong = !1) : J.loop && !J.pingpong ? (J.loop = !1, J.pingpong = !0) : (J.loop = !1, J.pingpong = !1), (J.loop || J.pingpong) && (J.once = !1), J.pingpong || (J._ppReverse = !1, Ve()), Ee();
+ })), q.push(Z(V, "click", (e) => {
+ G(e), ze();
+ })), q.push(Z(U, "click", (e) => {
+ G(e), Be();
+ })), q.push(Z(k, "click", (e) => {
+ G(e), Ue();
}));
try {
k.title = w("video.resetPlayerControls", "Reset player controls"), k.style.cursor = "pointer", k.style.userSelect = "none";
@@ -2573,16 +2496,16 @@ function Qt(e, t = {}) {
console.debug?.(e);
}
}
- K.push(Z(de, "click", (t) => {
- W(t);
+ q.push(Z(de, "click", (t) => {
+ G(t);
try {
e.muted = !e.muted, R && (R.style.display = e.muted ? "none" : "inline-flex");
} catch (e) {
console.debug?.(e);
}
- Ge();
- })), K.push(Z(de, "contextmenu", (e) => {
- G(e);
+ We();
+ })), q.push(Z(de, "contextmenu", (e) => {
+ K(e);
try {
if (!R) return;
let e = R.style.display !== "none";
@@ -2590,27 +2513,27 @@ function Qt(e, t = {}) {
} catch (e) {
console.debug?.(e);
}
- Ge();
- })), K.push(Z(window, "pointerdown", (e) => {
+ We();
+ })), q.push(Z(window, "pointerdown", (e) => {
try {
if (!R || R.style.display === "none" || de.contains?.(e?.target) || R.contains?.(e?.target)) return;
R.style.display = "none";
} catch (e) {
console.debug?.(e);
}
- }, { capture: !0 })), z && K.push(Z(z, "input", (t) => {
- W(t);
+ }, { capture: !0 })), z && q.push(Z(z, "input", (t) => {
+ G(t);
try {
let t = P(Number(z.value) || 0);
e.volume = t, t > .001 && (e.muted = !1);
} catch (e) {
console.debug?.(e);
}
- Ge();
- })), K.push(Z(L, "change", (e) => {
- W(e);
+ We();
+ })), q.push(Z(L, "change", (e) => {
+ G(e);
try {
- Ee(Number(L.value) || 1);
+ Te(Number(L.value) || 1);
} catch (e) {
console.debug?.(e);
}
@@ -2619,48 +2542,48 @@ function Qt(e, t = {}) {
} catch (e) {
console.debug?.(e);
}
- })), K.push(Z(e, "ratechange", () => {
+ })), q.push(Z(e, "ratechange", () => {
try {
- Ee(Number(e.playbackRate) || q.playbackRate || 1);
+ Te(Number(e.playbackRate) || J.playbackRate || 1);
} catch (e) {
console.debug?.(e);
}
}));
let $e = () => {
if (o) try {
- if (q._seeking || e?.paused) return;
- let { inF: t, outF: n, maxF: r } = Me();
- if (r <= 0 || t <= 0 && n >= r && !q.loop && !q.pingpong && !q.once || q._ppReverse) return;
- let i = ke();
- if (i >= n - Math.max(1, Math.floor(Number(q.step) || 1))) {
- if (q.pingpong) {
- Ue();
+ if (J._seeking || e?.paused) return;
+ let { inF: t, outF: n, maxF: r } = je();
+ if (r <= 0 || t <= 0 && n >= r && !J.loop && !J.pingpong && !J.once || J._ppReverse) return;
+ let i = Oe();
+ if (i >= n - Math.max(1, Math.floor(Number(J.step) || 1))) {
+ if (J.pingpong) {
+ He();
return;
}
- if (q.loop) {
- Ke(t);
+ if (J.loop) {
+ Ge(t);
try {
let t = e.play?.();
t && typeof t.catch == "function" && t.catch(() => {});
} catch (e) {
console.debug?.(e);
}
- } else if (q.once) {
+ } else if (J.once) {
try {
e.pause?.();
} catch (e) {
console.debug?.(e);
}
- Ke(n);
+ Ge(n);
} else {
try {
e.pause?.();
} catch (e) {
console.debug?.(e);
}
- Ke(n);
+ Ge(n);
}
- } else i < t && Ke(t);
+ } else i < t && Ge(t);
} catch (e) {
console.debug?.(e);
}
@@ -2683,13 +2606,13 @@ function Qt(e, t = {}) {
}, nt = (t = 0, n = null) => {
et.rafId = null, et.rvfcId = null;
try {
- X(J, n?.mediaTime), X($e);
+ X(Y, n?.mediaTime), X($e);
} catch (e) {
console.debug?.(e);
}
- if (!(!q._ppReverse && e?.paused || ve.signal?.aborted)) {
+ if (!(!J._ppReverse && e?.paused || _e.signal?.aborted)) {
try {
- if (typeof e?.requestVideoFrameCallback == "function" && !q._ppReverse) {
+ if (typeof e?.requestVideoFrameCallback == "function" && !J._ppReverse) {
et.rvfcId = e.requestVideoFrameCallback(nt);
return;
}
@@ -2705,29 +2628,29 @@ function Qt(e, t = {}) {
}
}
}, rt = () => {
- tt(), !(!q._ppReverse && e?.paused || ve.signal?.aborted) && nt(0, { mediaTime: Number(e?.currentTime) || 0 });
+ tt(), !(!J._ppReverse && e?.paused || _e.signal?.aborted) && nt(0, { mediaTime: Number(e?.currentTime) || 0 });
};
- K.push(tt), K.push(Z(e, "play", () => {
- X(Fe), rt();
+ q.push(tt), q.push(Z(e, "play", () => {
+ X(Pe), rt();
}));
- for (let t of ["pause", "ended"]) K.push(Z(e, t, () => {
- tt(), X(Fe), X(J);
+ for (let t of ["pause", "ended"]) q.push(Z(e, t, () => {
+ tt(), X(Pe), X(Y);
}));
for (let t of [
"timeupdate",
"loadedmetadata",
"durationchange",
"seeked"
- ]) K.push(Z(e, t, () => X(J)));
- K.push(Z(e, "timeupdate", $e)), K.push(Z(e, "ended", () => {
+ ]) q.push(Z(e, t, () => X(Y)));
+ q.push(Z(e, "timeupdate", $e)), q.push(Z(e, "ended", () => {
if (o) try {
- let { inF: t, outF: n, maxF: r } = Me(), i = t <= 0 && n >= r;
- if (q.pingpong && !q._ppReverse) {
- Ue();
+ let { inF: t, outF: n, maxF: r } = je(), i = t <= 0 && n >= r;
+ if (J.pingpong && !J._ppReverse) {
+ He();
return;
}
- if (!q.loop && !i) return;
- Ke(t);
+ if (!J.loop && !i) return;
+ Ge(t);
try {
let t = e.play?.();
t && typeof t.catch == "function" && t.catch(() => {});
@@ -2737,47 +2660,47 @@ function Qt(e, t = {}) {
} catch (e) {
console.debug?.(e);
}
- }, { passive: !0 })), a && (K.push(Z(e, "loadedmetadata", () => {
- if (!o) Re();
+ }, { passive: !0 })), a && (q.push(Z(e, "loadedmetadata", () => {
+ if (!o) Le();
else {
try {
- let e = Oe();
- e > 0 && q.inFrame == null && q.outFrame == null && (q.inFrame = 0, q.outFrame = e, je());
+ let e = De();
+ e > 0 && J.inFrame == null && J.outFrame == null && (J.inFrame = 0, J.outFrame = e, Ae());
} catch (e) {
console.debug?.(e);
}
- Re();
+ Le();
}
- })), K.push(Z(e, "durationchange", () => X(Re)))), o && K.push(Z(e, "mjr:frameStep", () => {
- X(we);
+ })), q.push(Z(e, "durationchange", () => X(Le)))), o && q.push(Z(e, "mjr:frameStep", () => {
+ X(Ce);
}));
- for (let t of ["volumechange"]) K.push(Z(e, t, () => X(Ge)));
+ for (let t of ["volumechange"]) q.push(Z(e, t, () => X(We)));
try {
- q.fps = It(I.value, q.nativeFps || 30), xe(!0), q.step = Math.max(1, Math.floor(Number(le.value) || 1)), je(), De(), Ee(q.playbackRate);
+ J.fps = Mt(I.value, J.nativeFps || 30), be(!0), J.step = Math.max(1, Math.floor(Number(le.value) || 1)), Ae(), Ee(), Te(J.playbackRate);
} catch (e) {
console.debug?.(e);
}
- X(Fe), X(J), X(Re), X(Ge);
+ X(Pe), X(Y), X(Le), X(We);
try {
- (!e?.paused || q._ppReverse) && rt();
+ (!e?.paused || J._ppReverse) && rt();
} catch (e) {
console.debug?.(e);
}
let it = (e = {}) => {
let t = 0, n = !1;
try {
- t = Math.max(0, Oe()), n = t > 0 && q.outFrame != null && q.outFrame >= t - 1;
+ t = Math.max(0, De()), n = t > 0 && J.outFrame != null && J.outFrame >= t - 1;
} catch (e) {
console.debug?.(e);
}
try {
let t = Number(e?.fps);
if (Number.isFinite(t) && t > 0) {
- if (String(e?.fpsSource || e?.source || "") === "rvfc" && Number(q.nativeFps) > 0) return;
- let n = be();
- q.nativeFps = It(t, q.nativeFps || 30), n || (q.fps = q.nativeFps);
+ if (String(e?.fpsSource || e?.source || "") === "rvfc" && Number(J.nativeFps) > 0) return;
+ let n = ye();
+ J.nativeFps = Mt(t, J.nativeFps || 30), n || (J.fps = J.nativeFps);
try {
- xe(!0);
+ be(!0);
} catch (e) {
console.debug?.(e);
}
@@ -2787,13 +2710,13 @@ function Qt(e, t = {}) {
}
try {
let t = Number(e?.frameCount);
- q.frameCount = Number.isFinite(t) && t > 0 ? Math.floor(t) : null;
+ J.frameCount = Number.isFinite(t) && t > 0 ? Math.floor(t) : null;
} catch {
- q.frameCount = null;
+ J.frameCount = null;
}
try {
- let e = Math.max(0, Oe());
- n && e > t + .5 && (q.outFrame = null), je(), De(), J(), Re();
+ let e = Math.max(0, De());
+ n && e > t + .5 && (J.outFrame = null), Ae(), Ee(), Y(), Le();
} catch (e) {
console.debug?.(e);
}
@@ -2818,13 +2741,13 @@ function Qt(e, t = {}) {
captureEl: null
}, t = (e) => {
try {
- let t = f.getBoundingClientRect(), n = F((Number(e) || 0) - t.left, 0, t.width || 1), r = t.width > 0 ? n / t.width : 0, { maxF: i } = Me();
+ let t = f.getBoundingClientRect(), n = F((Number(e) || 0) - t.left, 0, t.width || 1), r = t.width > 0 ? n / t.width : 0, { maxF: i } = je();
return F(Math.round(r * i), 0, i);
} catch {
return 0;
}
}, n = (n, a) => {
- G(n);
+ K(n);
try {
e.ac?.abort?.();
} catch (e) {
@@ -2865,15 +2788,15 @@ function Qt(e, t = {}) {
console.debug?.(e);
}
let o = t(n.clientX);
- a === "in" ? q.inFrame = o : q.outFrame = o, je(), J(), Re(), ze({ prefer: a });
+ a === "in" ? J.inFrame = o : J.outFrame = o, Ae(), Y(), Le(), Re({ prefer: a });
}, r = (n) => {
if (!e.active) return;
- G(n);
+ K(n);
let r = t(n.clientX);
- e.which === "in" ? q.inFrame = r : q.outFrame = r, je(), J(), Re();
+ e.which === "in" ? J.inFrame = r : J.outFrame = r, Ae(), Y(), Le();
}, i = (t) => {
if (e.active) {
- G(t), e.active = !1;
+ K(t), e.active = !1;
try {
f.releasePointerCapture?.(e.pointerId);
} catch (e) {
@@ -2886,7 +2809,7 @@ function Qt(e, t = {}) {
}
e.captureEl = null, e.pointerId = null;
try {
- ze({ prefer: e.which });
+ Re({ prefer: e.which });
} catch (e) {
console.debug?.(e);
}
@@ -2898,21 +2821,21 @@ function Qt(e, t = {}) {
e.ac = null;
}
};
- K.push(Z(E, "pointerdown", (e) => n(e, "in"), { passive: !1 })), K.push(Z(D, "pointerdown", (e) => n(e, "out"), { passive: !1 })), K.push(Z(x, "pointerdown", (e) => n(e, "in"), { passive: !1 })), K.push(Z(S, "pointerdown", (e) => n(e, "out"), { passive: !1 })), K.push(Z(f, "pointermove", r, { passive: !1 })), K.push(Z(f, "pointerup", i, { passive: !1 })), K.push(Z(f, "pointercancel", i, { passive: !1 }));
+ q.push(Z(E, "pointerdown", (e) => n(e, "in"), { passive: !1 })), q.push(Z(D, "pointerdown", (e) => n(e, "out"), { passive: !1 })), q.push(Z(x, "pointerdown", (e) => n(e, "in"), { passive: !1 })), q.push(Z(S, "pointerdown", (e) => n(e, "out"), { passive: !1 })), q.push(Z(f, "pointermove", r, { passive: !1 })), q.push(Z(f, "pointerup", i, { passive: !1 })), q.push(Z(f, "pointercancel", i, { passive: !1 }));
}
return X(() => c.appendChild(l)), {
controlsEl: l,
setMediaInfo: it,
setPlaybackRate: (e) => {
try {
- return Ee(e);
+ return Te(e);
} catch {
- return q.playbackRate || 1;
+ return J.playbackRate || 1;
}
},
getPlaybackRate: () => {
try {
- return Number(q.playbackRate) || 1;
+ return Number(J.playbackRate) || 1;
} catch {
return 1;
}
@@ -2920,21 +2843,21 @@ function Qt(e, t = {}) {
adjustPlaybackRate: (e) => {
try {
let t = Number(e);
- return Number.isFinite(t) ? Ee((Number(q.playbackRate) || 1) + t) : q.playbackRate || 1;
+ return Number.isFinite(t) ? Te((Number(J.playbackRate) || 1) + t) : J.playbackRate || 1;
} catch {
- return q.playbackRate || 1;
+ return J.playbackRate || 1;
}
},
togglePlay: () => {
try {
- return Ye(), !0;
+ return Je(), !0;
} catch {
return !1;
}
},
stepFrames: (e) => {
try {
- return qe(e), !0;
+ return Ke(e), !0;
} catch {
return !1;
}
@@ -2942,7 +2865,7 @@ function Qt(e, t = {}) {
setInPoint: () => {
if (!o) return !1;
try {
- return q.inFrame = ke(), je(), J(), Re(), ze({ prefer: "in" }), !0;
+ return J.inFrame = Oe(), Ae(), Y(), Le(), Re({ prefer: "in" }), !0;
} catch {
return !1;
}
@@ -2950,7 +2873,7 @@ function Qt(e, t = {}) {
setOutPoint: () => {
if (!o) return !1;
try {
- return q.outFrame = ke(), je(), J(), Re(), ze({ prefer: "out" }), !0;
+ return J.outFrame = Oe(), Ae(), Y(), Le(), Re({ prefer: "out" }), !0;
} catch {
return !1;
}
@@ -2958,8 +2881,8 @@ function Qt(e, t = {}) {
goToIn: () => {
if (!o) return !1;
try {
- let { inF: e } = Me();
- return Ke(e), we(), !0;
+ let { inF: e } = je();
+ return Ge(e), Ce(), !0;
} catch {
return !1;
}
@@ -2967,26 +2890,26 @@ function Qt(e, t = {}) {
goToOut: () => {
if (!o) return !1;
try {
- let { outF: e } = Me();
- return Ke(e), we(), !0;
+ let { outF: e } = je();
+ return Ge(e), Ce(), !0;
} catch {
return !1;
}
},
destroy: () => {
- for (let e of K) X(e);
+ for (let e of q) X(e);
X(() => l.remove());
}
};
} catch {
return {
controlsEl: null,
- destroy: kt
+ destroy: Tt
};
}
}
// ui/features/contextmenu/viewerContextMenuState.ts
-function $t() {
+function Yt() {
return {
open: !1,
x: 0,
@@ -2998,8 +2921,8 @@ function $t() {
var Q = j({
portalOwnerId: "",
mountedPortalIds: [],
- main: $t(),
- submenu: $t(),
+ main: Yt(),
+ submenu: Yt(),
tags: {
open: !1,
x: 0,
@@ -3007,51 +2930,51 @@ var Q = j({
asset: null,
onChanged: null
}
-}), en = 1;
-function tn(e) {
+}), Xt = 1;
+function Zt(e) {
e && (e.open = !1, e.x = 0, e.y = 0, e.items = [], e.title = "");
}
-function nn(e = "") {
+function Qt(e = "") {
try {
window.dispatchEvent(new CustomEvent("mjr-close-all-menus", { detail: { source: String(e || "") } }));
} catch (e) {
console.debug?.(e);
}
}
-function rn() {
- let e = `mjr-viewer-context-menu-portal-${en++}`;
+function $t() {
+ let e = `mjr-viewer-context-menu-portal-${Xt++}`;
return Q.mountedPortalIds.push(e), Q.portalOwnerId ||= e, e;
}
-function an(e) {
+function en(e) {
let t = Q.mountedPortalIds.filter((t) => t !== e);
Q.mountedPortalIds.splice(0, Q.mountedPortalIds.length, ...t), Q.portalOwnerId === e && (Q.portalOwnerId = Q.mountedPortalIds[0] || "");
}
-function on(e) {
+function tn(e) {
return String(Q.portalOwnerId || "") === String(e || "");
}
-function sn({ x: e = 0, y: t = 0, items: n = [], title: r = "" } = {}) {
- nn("viewer"), fn(), un(), Q.main.open = !0, Q.main.x = Number(e) || 0, Q.main.y = Number(t) || 0, Q.main.items = Array.isArray(n) ? n.filter(Boolean) : [], Q.main.title = String(r || "");
+function nn({ x: e = 0, y: t = 0, items: n = [], title: r = "" } = {}) {
+ Qt("viewer"), cn(), on(), Q.main.open = !0, Q.main.x = Number(e) || 0, Q.main.y = Number(t) || 0, Q.main.items = Array.isArray(n) ? n.filter(Boolean) : [], Q.main.title = String(r || "");
}
-function cn() {
- tn(Q.main), un();
+function rn() {
+ Zt(Q.main), on();
}
-function ln({ x: e = 0, y: t = 0, items: n = [], title: r = "" } = {}) {
+function an({ x: e = 0, y: t = 0, items: n = [], title: r = "" } = {}) {
Q.submenu.open = !0, Q.submenu.x = Number(e) || 0, Q.submenu.y = Number(t) || 0, Q.submenu.items = Array.isArray(n) ? n.filter(Boolean) : [], Q.submenu.title = String(r || "");
}
-function un() {
- tn(Q.submenu);
+function on() {
+ Zt(Q.submenu);
}
-function dn({ x: e = 0, y: t = 0, asset: n = null, onChanged: r = null } = {}) {
- cn(), Q.tags.open = !!n, Q.tags.x = Number(e) || 0, Q.tags.y = Number(t) || 0, Q.tags.asset = n || null, Q.tags.onChanged = typeof r == "function" ? r : null;
+function sn({ x: e = 0, y: t = 0, asset: n = null, onChanged: r = null } = {}) {
+ rn(), Q.tags.open = !!n, Q.tags.x = Number(e) || 0, Q.tags.y = Number(t) || 0, Q.tags.asset = n || null, Q.tags.onChanged = typeof r == "function" ? r : null;
}
-function fn() {
+function cn() {
Q.tags.open = !1, Q.tags.x = 0, Q.tags.y = 0, Q.tags.asset = null, Q.tags.onChanged = null;
}
-function pn() {
- cn(), fn();
+function ln() {
+ rn(), cn();
}
// ui/features/viewer/ViewerContextMenu.ts
-var mn = {
+var un = {
COPY_PATH: "Ctrl+Shift+C",
DOWNLOAD: "S",
OPEN_IN_FOLDER: "Ctrl+Shift+E",
@@ -3060,19 +2983,19 @@ var mn = {
RATING_SUBMENU: "1-5",
RENAME: "F2",
DELETE: "Del"
-}, hn = [
+}, dn = [
"B",
"KB",
"MB",
"GB",
"TB"
-], gn = /* @__PURE__ */ new WeakMap(), _n = 1;
-function vn(e = "viewer-menu-item") {
- return `${e}-${_n++}`;
+], fn = /* @__PURE__ */ new WeakMap(), pn = 1;
+function mn(e = "viewer-menu-item") {
+ return `${e}-${pn++}`;
}
-function yn(e, t, n, r, i = {}) {
+function hn(e, t, n, r, i = {}) {
return {
- id: vn(),
+ id: mn(),
type: "item",
label: String(e || ""),
iconClass: t ? String(t) : "",
@@ -3083,13 +3006,13 @@ function yn(e, t, n, r, i = {}) {
submenu: Array.isArray(i.submenu) ? i.submenu.filter(Boolean) : null
};
}
-function bn() {
+function gn() {
return {
- id: vn("viewer-menu-separator"),
+ id: mn("viewer-menu-separator"),
type: "separator"
};
}
-function xn(e) {
+function _n(e) {
let t = String(e || "").trim();
if (!t) return !1;
if (t.startsWith("/")) return !0;
@@ -3100,7 +3023,7 @@ function xn(e) {
return !1;
}
}
-function Sn(e, t, r) {
+function vn(e, t, r) {
let i = e?.id;
try {
e.rating = t;
@@ -3112,7 +3035,7 @@ function Sn(e, t, r) {
} catch (e) {
console.debug?.(e);
}
- i ? Et(String(i), t, {
+ i ? St(String(i), t, {
successMessage: t > 0 ? `Rating set to ${t} stars` : "Rating cleared",
errorMessage: "Failed to update rating",
warnPrefix: "[ViewerContextMenu]",
@@ -3129,34 +3052,34 @@ function Sn(e, t, r) {
a(e, "[ViewerContextMenu] Rating update", { showToast: !0 });
});
}
-function Cn(e) {
+function yn(e) {
let t = Number(e);
if (!Number.isFinite(t) || t < 0) return "";
let n = 0;
- for (; t >= 1024 && n < hn.length - 1;) t /= 1024, n += 1;
- return `${n === 0 ? `${Math.round(t)}` : t.toFixed(2)} ${hn[n]}`;
+ for (; t >= 1024 && n < dn.length - 1;) t /= 1024, n += 1;
+ return `${n === 0 ? `${Math.round(t)}` : t.toFixed(2)} ${dn[n]}`;
}
-function wn(e, t, n) {
+function bn(e, t, n) {
let r = [
5,
4,
3,
2,
1
- ].map((r) => yn(`${r} Stars`, "pi pi-star", null, async () => {
- Sn(e, r, t);
+ ].map((r) => hn(`${r} Stars`, "pi pi-star", null, async () => {
+ vn(e, r, t);
}, { disabled: !n }));
- return r.push(bn()), r.push(yn(w("ctx.resetRating", "Reset rating"), "pi pi-star", "0", async () => {
- Sn(e, 0, t);
+ return r.push(gn()), r.push(hn(w("ctx.resetRating", "Reset rating"), "pi pi-star", "0", async () => {
+ vn(e, 0, t);
}, { disabled: !n })), r;
}
-function Tn({ asset: n, event: r, getCurrentViewUrl: i, onAssetChanged: o }) {
+function xn({ asset: n, event: r, getCurrentViewUrl: i, onAssetChanged: o }) {
let c = typeof i == "function" ? i(n) : v(n), l = !!(n?.id || n?.filepath);
return [
- yn(w("ctx.openInNewTab", "Open in New Tab"), "pi pi-external-link", null, async () => {
- xn(c) && window.open(c, "_blank", "noopener,noreferrer");
+ hn(w("ctx.openInNewTab", "Open in New Tab"), "pi pi-external-link", null, async () => {
+ _n(c) && window.open(c, "_blank", "noopener,noreferrer");
}),
- yn(w("ctx.copyPath", "Copy path"), "pi pi-copy", mn.COPY_PATH, async () => {
+ hn(w("ctx.copyPath", "Copy path"), "pi pi-copy", un.COPY_PATH, async () => {
let t = n?.filepath ? String(n.filepath) : "";
if (!t) e(w("toast.noFilePath"), "error");
else try {
@@ -3165,18 +3088,18 @@ function Tn({ asset: n, event: r, getCurrentViewUrl: i, onAssetChanged: o }) {
console.error("[ViewerContextMenu] Copy failed:", t), e(w("toast.pathCopyFailed"), "error");
}
}),
- yn(w("ctx.downloadOriginal", "Download Original"), "pi pi-download", mn.DOWNLOAD, async () => {
+ hn(w("ctx.downloadOriginal", "Download Original"), "pi pi-download", un.DOWNLOAD, async () => {
if (!n || !n.filepath) return;
let t = k(n.filepath), r = document.createElement("a");
r.href = t, r.download = n.filename, document.body.appendChild(r), r.click(), document.body.removeChild(r), e(w("toast.downloadingFile", "Downloading {filename}...", { filename: n.filename }), "info", 3e3);
}, { disabled: !n?.filepath }),
- yn(w("ctx.openInFolder", "Open in folder"), "pi pi-folder-open", mn.OPEN_IN_FOLDER, async () => {
+ hn(w("ctx.openInFolder", "Open in folder"), "pi pi-folder-open", un.OPEN_IN_FOLDER, async () => {
let t = await s(n);
t?.ok ? e(w("toast.openedInFolder"), "info", 2e3) : e(t?.error || w("toast.openFolderFailed"), "error");
}, { disabled: !(n?.id || n?.filepath) }),
- yn(w("ctx.addToCollection", "Add to collection"), "pi pi-bookmark", mn.ADD_TO_COLLECTION, async () => {
+ hn(w("ctx.addToCollection", "Add to collection"), "pi pi-bookmark", un.ADD_TO_COLLECTION, async () => {
try {
- await bt({
+ await gt({
x: r?.clientX,
y: r?.clientY,
assets: [n]
@@ -3185,9 +3108,9 @@ function Tn({ asset: n, event: r, getCurrentViewUrl: i, onAssetChanged: o }) {
console.error("[ViewerContextMenu] Add to collection failed:", e);
}
}),
- bn(),
- yn(w("ctx.editTags", "Edit tags"), "pi pi-tags", mn.EDIT_TAGS, async () => {
- dn({
+ gn(),
+ hn(w("ctx.editTags", "Edit tags"), "pi pi-tags", un.EDIT_TAGS, async () => {
+ sn({
x: (Number(r?.clientX) || 0) + 6,
y: (Number(r?.clientY) || 0) + 6,
asset: n,
@@ -3205,13 +3128,13 @@ function Tn({ asset: n, event: r, getCurrentViewUrl: i, onAssetChanged: o }) {
})
});
}, { closeOnSelect: !1 }),
- bn(),
- yn(w("ctx.setRating", "Set rating"), "pi pi-star", `${mn.RATING_SUBMENU} >`, null, {
+ gn(),
+ hn(w("ctx.setRating", "Set rating"), "pi pi-star", `${un.RATING_SUBMENU} >`, null, {
disabled: !l,
closeOnSelect: !1,
- submenu: wn(n, o, l)
+ submenu: bn(n, o, l)
}),
- yn(w("ctx.refreshMetadata", "Refresh metadata"), "pi pi-sync", "R", async () => {
+ hn(w("ctx.refreshMetadata", "Refresh metadata"), "pi pi-sync", "R", async () => {
if (n?.id) try {
let t = await p(n.id, { refresh: !0 });
if (!t?.ok || !t?.data) {
@@ -3227,7 +3150,7 @@ function Tn({ asset: n, event: r, getCurrentViewUrl: i, onAssetChanged: o }) {
} catch (e) {
console.debug?.(e);
}
- let i = [], a = Cn(r?.size_bytes);
+ let i = [], a = yn(r?.size_bytes);
a && i.push(a), r?.mime && i.push(r.mime);
let o = i.length ? ` (${i.join(", ")})` : "";
e(w("toast.metadataRefreshed", "Metadata refreshed{suffix}", { suffix: o }), "success", 3e3);
@@ -3235,12 +3158,12 @@ function Tn({ asset: n, event: r, getCurrentViewUrl: i, onAssetChanged: o }) {
a(e, "[ViewerContextMenu] Metadata refresh", { showToast: !0 });
}
}, { disabled: !n?.id }),
- bn(),
- yn(w("ctx.rename", "Rename"), "pi pi-pencil", mn.RENAME, async () => {
+ gn(),
+ hn(w("ctx.rename", "Rename"), "pi pi-pencil", un.RENAME, async () => {
if (!(n?.id || n?.filepath)) return;
- let t = n.filename || "", r = ut(await L(w("dialog.rename.title", "Rename file"), t), t);
+ let t = n.filename || "", r = ot(await L(w("dialog.rename.title", "Rename file"), t), t);
if (!r || r === t) return;
- let i = st(r);
+ let i = rt(r);
if (!i.valid) e(i.reason, "error");
else try {
let t = await f(n, r);
@@ -3258,8 +3181,8 @@ function Tn({ asset: n, event: r, getCurrentViewUrl: i, onAssetChanged: o }) {
e(w("toast.errorRenaming", "Error renaming file: {error}", { error: t?.message || String(t || "") }), "error");
}
}, { disabled: !(n?.id || n?.filepath) }),
- yn(w("ctx.delete", "Delete"), "pi pi-trash", mn.DELETE, async () => {
- if ((n?.id || n?.filepath) && await mt(1, n?.filename)) try {
+ hn(w("ctx.delete", "Delete"), "pi pi-trash", un.DELETE, async () => {
+ if ((n?.id || n?.filepath) && await ut(1, n?.filename)) try {
let r = await t(n);
r?.ok ? (e(w("toast.fileDeletedSuccess"), "success"), o?.()) : e(r?.error || w("toast.fileDeleteFailed"), "error");
} catch (t) {
@@ -3268,18 +3191,18 @@ function Tn({ asset: n, event: r, getCurrentViewUrl: i, onAssetChanged: o }) {
}, { disabled: !(n?.id || n?.filepath) })
];
}
-function En({ overlayEl: e, getCurrentAsset: t, getCurrentViewUrl: n, onAssetChanged: r } = {}) {
+function Sn({ overlayEl: e, getCurrentAsset: t, getCurrentViewUrl: n, onAssetChanged: r } = {}) {
if (!e || typeof t != "function") return;
- let i = gn.get(e);
+ let i = fn.get(e);
if (typeof i?.unbind == "function") return i.unbind;
let a = async (i) => {
if (!e.contains(i.target)) return;
i.preventDefault(), i.stopPropagation();
let a = t();
- a && sn({
+ a && nn({
x: i.clientX,
y: i.clientY,
- items: Tn({
+ items: xn({
asset: a,
event: i,
getCurrentViewUrl: n,
@@ -3299,23 +3222,23 @@ function En({ overlayEl: e, getCurrentAsset: t, getCurrentViewUrl: n, onAssetCha
console.debug?.(e);
}
try {
- Tt();
+ xt();
let e = globalThis?._ratingDebounceTimers;
e && typeof e.clear == "function" && e.clear();
} catch (e) {
console.debug?.(e);
}
try {
- pn();
+ ln();
} catch (e) {
console.debug?.(e);
}
- gn.delete(e);
+ fn.delete(e);
};
- return gn.set(e, { unbind: o }), o;
+ return fn.set(e, { unbind: o }), o;
}
-function Dn(e) {
- let t = e ? gn.get(e) : null;
+function Cn(e) {
+ let t = e ? fn.get(e) : null;
try {
t?.unbind?.();
} catch (e) {
@@ -3323,11 +3246,11 @@ function Dn(e) {
}
}
// ui/features/viewer/mediaPlayer.ts
-function On(e) {
+function wn(e) {
let t = String(e || "").toLowerCase();
return t === "video" || t === "audio";
}
-function kn({ mode: e, VIEWER_MODES: t, singleView: n, abView: r, sideView: i } = {}) {
+function Tn({ mode: e, VIEWER_MODES: t, singleView: n, abView: r, sideView: i } = {}) {
try {
let a = n;
return e === t?.AB_COMPARE ? a = r : e === t?.SIDE_BY_SIDE && (a = i), a ? Array.from(a.querySelectorAll?.(".mjr-viewer-video-src, .mjr-viewer-audio-src") || []) : [];
@@ -3335,7 +3258,7 @@ function kn({ mode: e, VIEWER_MODES: t, singleView: n, abView: r, sideView: i }
return [];
}
}
-function An(e) {
+function En(e) {
try {
let t = Array.isArray(e) ? e : [];
return t.find((e) => String(e?.dataset?.mjrCompareRole || "") === "A") || t[0] || null;
@@ -3343,11 +3266,11 @@ function An(e) {
return null;
}
}
-function jn(e, t = {}) {
+function Dn(e, t = {}) {
try {
if (!e) return null;
let n = String(t?.mediaKind || "").toLowerCase();
- return Qt(e, {
+ return Jt(e, {
...t,
mediaKind: n
});
@@ -3356,10 +3279,10 @@ function jn(e, t = {}) {
}
}
// ui/features/viewer/ViewerState.ts
-var Mn = "mjr_viewer_prefs_v1";
-function Nn() {
+var On = "mjr_viewer_prefs_v1";
+function kn() {
try {
- let e = y.get(Mn);
+ let e = y.get(On);
if (!e) return {};
let t = JSON.parse(e);
return t && typeof t == "object" ? t : {};
@@ -3367,7 +3290,7 @@ function Nn() {
return {};
}
}
-function Pn(e) {
+function An(e) {
try {
if (!e) return;
let t = {
@@ -3379,13 +3302,13 @@ function Pn(e) {
audioVisualizerMode: String(e.audioVisualizerMode || "artistic"),
abWipePercent: Number.isFinite(Number(e._abWipePercent)) ? Number(e._abWipePercent) : 50
};
- y.set(Mn, JSON.stringify(t));
+ y.set(On, JSON.stringify(t));
} catch (e) {
console.debug?.(e);
}
}
// ui/features/viewer/lifecycle.ts
-function Fn(e) {
+function jn(e) {
if (e) {
try {
e._mjrSyncAbort?.abort?.();
@@ -3458,7 +3381,7 @@ function Fn(e) {
}
}
}
-function In(e) {
+function Mn(e) {
let t = [];
try {
e._mjrViewerUnsubs = t;
@@ -3469,7 +3392,7 @@ function In(e) {
unsubs: t,
safeAddListener: Z,
safeCall: X,
- destroyMediaProcessorsIn: Fn,
+ destroyMediaProcessorsIn: jn,
_observer: null,
disposeAll: () => {
try {
@@ -3518,7 +3441,7 @@ function In(e) {
return n;
}
// ui/components/buttons.ts
-function Ln(e, t) {
+function Nn(e, t) {
let n = document.createElement("button");
n.textContent = e, n.title = t || "";
try {
@@ -3532,7 +3455,7 @@ function Ln(e, t) {
n.disabled || (n.style.background = "transparent");
}, n;
}
-function Rn(e, t) {
+function Pn(e, t) {
let n = document.createElement("button");
n.textContent = e, n.dataset.mode = t;
try {
@@ -3543,7 +3466,7 @@ function Rn(e, t) {
return n.style.cssText = "\n padding: 4px 12px;\n background: linear-gradient(180deg, rgba(206, 211, 218, 0.1), rgba(206, 211, 218, 0.03));\n border: 0.8px solid rgba(196, 202, 210, 0.3);\n color: rgba(230, 233, 238, 0.95);\n border-radius: 4px;\n cursor: pointer;\n font-size: 12px;\n transition: all 0.16s;\n ", n;
}
// ui/features/viewer/toolbarControls.ts
-function zn({ VIEWER_MODES: e, state: t, onToolsChanged: n, onCompareModeChanged: r, onExportFrame: i, onCopyFrame: a, onAudioVizModeChanged: o, getCanAB: s } = {}) {
+function Fn({ VIEWER_MODES: e, state: t, onToolsChanged: n, onCompareModeChanged: r, onExportFrame: i, onCopyFrame: a, onAudioVizModeChanged: o, getCanAB: s } = {}) {
let c = {
channel: "rgb",
exposureEV: 0,
@@ -3837,7 +3760,7 @@ function zn({ VIEWER_MODES: e, state: t, onToolsChanged: n, onCompareModeChanged
label: "Golden"
}
]);
- F.title = Dt(w("tooltip.gridOverlay", "Grid overlay (rule of thirds, center)"), "G");
+ F.title = Ct(w("tooltip.gridOverlay", "Grid overlay (rule of thirds, center)"), "G");
let ne = S("Mask", "Format mask (dim outside)", {
iconClass: "pi-stop",
accentRgb: D.overlay
@@ -3885,7 +3808,7 @@ function zn({ VIEWER_MODES: e, state: t, onToolsChanged: n, onCompareModeChanged
}), ce = S("Focus", "Distraction-free mode (X)", {
iconClass: "pi-window-maximize",
accentRgb: D.overlay
- }), le = S("Gen", Dt("Generation info (prompt/model)", "D"), {
+ }), le = S("Gen", Ct("Generation info (prompt/model)", "D"), {
iconClass: "pi-book",
accentRgb: D.geninfo
}), I = b("A/B Compare Mode", [
@@ -3931,7 +3854,7 @@ function zn({ VIEWER_MODES: e, state: t, onToolsChanged: n, onCompareModeChanged
label: "Artistic"
}]);
L.title = w("tooltip.audioVisualizer", "Audio visualizer mode");
- let ue = Ln("Reset", w("tooltip.resetPlayerControls", "Reset all viewer controls"));
+ let ue = Nn("Reset", w("tooltip.resetPlayerControls", "Reset all viewer controls"));
ue.style.height = "26px", ue.style.fontSize = "11px", ue.style.padding = "0 8px", ue.classList?.add?.("mjr-viewer-tool-btn", "mjr-viewer-tool-btn--reset"), ue.classList?.add?.("mjr-viewer-tools-action", "mjr-viewer-tools-action--primary"), ue.style.marginLeft = "auto";
let de = document.createElement("button");
de.type = "button", de.title = w("tooltip.exportFrame", "Save current frame as PNG"), de.setAttribute("aria-label", w("tooltip.exportFrame", "Save frame as PNG")), de.className = "mjr-viewer-tool-btn mjr-viewer-tool-btn--reset", de.style.cssText = "height:24px; padding:0 8px; display:inline-flex; align-items:center; justify-content:center;";
@@ -3944,32 +3867,32 @@ function zn({ VIEWER_MODES: e, state: t, onToolsChanged: n, onCompareModeChanged
}
let z = document.createElement("button");
z.type = "button", z.title = w("tooltip.copyFrame", "Copy current frame to clipboard"), z.setAttribute("aria-label", w("tooltip.copyFrame", "Copy frame to clipboard")), z.className = "mjr-viewer-tool-btn mjr-viewer-tool-btn--reset", z.style.cssText = "height:24px; padding:0 8px; display:inline-flex; align-items:center; justify-content:center;";
- let fe = document.createElement("span");
- fe.className = "pi pi-copy", fe.setAttribute("aria-hidden", "true"), fe.style.fontSize = "14px", z.appendChild(fe), z.classList?.add?.("mjr-viewer-tools-action");
+ let B = document.createElement("span");
+ B.className = "pi pi-copy", B.setAttribute("aria-hidden", "true"), B.style.fontSize = "14px", z.appendChild(B), z.classList?.add?.("mjr-viewer-tools-action");
try {
z.style.display = "none";
} catch (e) {
console.debug?.(e);
}
- let B = y({
+ let V = y({
key: "channel",
label: "Channel",
accentRgb: D.channel
});
- B.appendChild(C), f.body.appendChild(B);
- let V = y({
+ V.appendChild(C), f.body.appendChild(V);
+ let H = y({
key: "exposure",
label: "EV",
accentRgb: D.exposure
});
- V.appendChild(T.wrap), f.body.appendChild(V);
- let H = y({
+ H.appendChild(T.wrap), f.body.appendChild(H);
+ let U = y({
key: "gamma",
label: "Gamma",
accentRgb: D.gamma
});
- H.appendChild(E.wrap), f.body.appendChild(H);
- let pe = () => {
+ U.appendChild(E.wrap), f.body.appendChild(U);
+ let fe = () => {
try {
t.exposureEV = 0;
} catch (e) {
@@ -3981,7 +3904,7 @@ function zn({ VIEWER_MODES: e, state: t, onToolsChanged: n, onCompareModeChanged
console.debug?.(e);
}
X(n);
- }, U = () => {
+ }, W = () => {
try {
t.gamma = 1;
} catch (e) {
@@ -3993,7 +3916,7 @@ function zn({ VIEWER_MODES: e, state: t, onToolsChanged: n, onCompareModeChanged
console.debug?.(e);
}
X(n);
- }, me = () => {
+ }, pe = () => {
try {
Object.assign(t, c);
} catch (e) {
@@ -4002,7 +3925,7 @@ function zn({ VIEWER_MODES: e, state: t, onToolsChanged: n, onCompareModeChanged
X(r), X(o), X(n);
};
try {
- let e = V.querySelector?.(".mjr-viewer-tools-group-label");
+ let e = H.querySelector?.(".mjr-viewer-tools-group-label");
e && (e.title = w("tooltip.resetExposure", "Reset EV to 0"), e.style.cursor = "pointer", e.style.userSelect = "none");
} catch (e) {
console.debug?.(e);
@@ -4013,7 +3936,7 @@ function zn({ VIEWER_MODES: e, state: t, onToolsChanged: n, onCompareModeChanged
console.debug?.(e);
}
try {
- let e = H.querySelector?.(".mjr-viewer-tools-group-label");
+ let e = U.querySelector?.(".mjr-viewer-tools-group-label");
e && (e.title = w("tooltip.resetGamma", "Reset Gamma to 1.00"), e.style.cursor = "pointer", e.style.userSelect = "none");
} catch (e) {
console.debug?.(e);
@@ -4023,19 +3946,19 @@ function zn({ VIEWER_MODES: e, state: t, onToolsChanged: n, onCompareModeChanged
} catch (e) {
console.debug?.(e);
}
- let he = y({
+ let me = y({
key: "analysis",
label: "Analysis",
accentRgb: D.analysis
});
- he.appendChild(N.b), he.appendChild(ee.b), he.appendChild(P), f.body.appendChild(he);
- let ge = y({
+ me.appendChild(N.b), me.appendChild(ee.b), me.appendChild(P), f.body.appendChild(me);
+ let he = y({
key: "overlay-guides",
label: "Guides",
accentRgb: D.overlay
});
- ge.appendChild(te.b), ge.appendChild(F), ge.appendChild(ne.b), ge.appendChild(re), ge.appendChild(ie.wrap), p.body.appendChild(ge);
- let _e = y({
+ he.appendChild(te.b), he.appendChild(F), he.appendChild(ne.b), he.appendChild(re), he.appendChild(ie.wrap), p.body.appendChild(he);
+ let ge = y({
key: "overlay-inspect",
label: "Inspect",
accentRgb: D.overlay
@@ -4047,30 +3970,30 @@ function zn({ VIEWER_MODES: e, state: t, onToolsChanged: n, onCompareModeChanged
ce.b,
le.b
].forEach((e, t) => {
- t > 0 && (e.style.marginLeft = "4px"), _e.appendChild(e);
- }), m.body.appendChild(_e);
- let W = y({
+ t > 0 && (e.style.marginLeft = "4px"), ge.appendChild(e);
+ }), m.body.appendChild(ge);
+ let G = y({
key: "compare",
label: "Compare",
accentRgb: D.compare
});
- W.style.borderRadius = "8px", W.style.padding = "4px 6px", W.style.border = "1px solid transparent", W.style.transition = "background 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease", W.appendChild(I), p.body.appendChild(W);
- let G = y({
+ G.style.borderRadius = "8px", G.style.padding = "4px 6px", G.style.border = "1px solid transparent", G.style.transition = "background 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease", G.appendChild(I), p.body.appendChild(G);
+ let K = y({
key: "audio-viz",
label: "Audio Viz",
accentRgb: D.audioviz
});
- G.appendChild(L), p.body.appendChild(G), _.appendChild(ue), _.appendChild(de), _.appendChild(z);
- let K = document.createElement("div");
- K.className = "mjr-viewer-tools-group mjr-viewer-tools-group--3d", K.textContent = "LMB rotate | RMB pan | Scroll zoom", K.style.cssText = "display:none;align-items:center;padding:2px 8px;border-radius:999px;border:1px solid rgba(255,255,255,0.12);background:rgba(255,255,255,0.06);color:rgba(255,255,255,0.55);font-size:10px;font-weight:400;letter-spacing:0.01em", v.appendChild(K);
- let ve = document.createElement("div");
- ve.style.cssText = "position: relative; display:inline-flex; align-items:center;", ve.className = "mjr-viewer-tools-action", ve.style.marginLeft = "4px";
- let ye = document.createElement("button");
- ye.type = "button", ye.title = w("tooltip.viewerShortcuts", "Viewer shortcuts"), ye.setAttribute("aria-label", w("tooltip.viewerShortcuts", "Viewer shortcuts")), ye.style.cssText = "\n height: 24px;\n padding: 0 8px;\n border-radius: 6px;\n border: 1px solid rgba(255,255,255,0.14);\n background: rgba(255,255,255,0.08);\n color: rgba(255,255,255,0.92);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n ";
- let q = document.createElement("span");
- q.className = "pi pi-question-circle", q.setAttribute("aria-hidden", "true"), q.style.fontSize = "14px", ye.appendChild(q);
- let be = document.createElement("div");
- be.className = "mjr-viewer-help", be.style.cssText = "\n position: absolute;\n right: 0;\n top: 32px;\n min-width: 260px;\n max-width: 360px;\n padding: 10px 12px;\n border-radius: 8px;\n background: rgba(0,0,0,0.88);\n border: 1px solid rgba(255,255,255,0.16);\n color: rgba(255,255,255,0.92);\n font-size: 12px;\n line-height: 1.4;\n box-shadow: 0 8px 24px rgba(0,0,0,0.35);\n display: none;\n z-index: 10002;\n ";
+ K.appendChild(L), p.body.appendChild(K), _.appendChild(ue), _.appendChild(de), _.appendChild(z);
+ let q = document.createElement("div");
+ q.className = "mjr-viewer-tools-group mjr-viewer-tools-group--3d", q.textContent = "LMB rotate | RMB pan | Scroll zoom", q.style.cssText = "display:none;align-items:center;padding:2px 8px;border-radius:999px;border:1px solid rgba(255,255,255,0.12);background:rgba(255,255,255,0.06);color:rgba(255,255,255,0.55);font-size:10px;font-weight:400;letter-spacing:0.01em", v.appendChild(q);
+ let _e = document.createElement("div");
+ _e.style.cssText = "position: relative; display:inline-flex; align-items:center;", _e.className = "mjr-viewer-tools-action", _e.style.marginLeft = "4px";
+ let ve = document.createElement("button");
+ ve.type = "button", ve.title = w("tooltip.viewerShortcuts", "Viewer shortcuts"), ve.setAttribute("aria-label", w("tooltip.viewerShortcuts", "Viewer shortcuts")), ve.style.cssText = "\n height: 24px;\n padding: 0 8px;\n border-radius: 6px;\n border: 1px solid rgba(255,255,255,0.14);\n background: rgba(255,255,255,0.08);\n color: rgba(255,255,255,0.92);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n ";
+ let J = document.createElement("span");
+ J.className = "pi pi-question-circle", J.setAttribute("aria-hidden", "true"), J.style.fontSize = "14px", ve.appendChild(J);
+ let ye = document.createElement("div");
+ ye.className = "mjr-viewer-help", ye.style.cssText = "\n position: absolute;\n right: 0;\n top: 32px;\n min-width: 260px;\n max-width: 360px;\n padding: 10px 12px;\n border-radius: 8px;\n background: rgba(0,0,0,0.88);\n border: 1px solid rgba(255,255,255,0.16);\n color: rgba(255,255,255,0.92);\n font-size: 12px;\n line-height: 1.4;\n box-shadow: 0 8px 24px rgba(0,0,0,0.35);\n display: none;\n z-index: 10002;\n ";
try {
let e = document.createElement("div");
e.textContent = "Shortcuts", e.style.cssText = "font-weight:600; margin-bottom:6px;";
@@ -4080,11 +4003,11 @@ function zn({ VIEWER_MODES: e, state: t, onToolsChanged: n, onCompareModeChanged
let r = document.createElement("div"), i = document.createElement("span");
i.style.cssText = "opacity:.75;", i.textContent = String(e || ""), r.appendChild(i), r.appendChild(document.createTextNode(` ${String(n || "")}`)), t.appendChild(r);
};
- n("Esc", "Close"), n("Space", "Play/Pause"), n("+", "Zoom In"), n("-", "Zoom Out"), n("Alt+1", "1:1 Zoom"), n("G", "Grid"), n("D", "Gen Info"), n("Z", "Zebra"), n("I", "Probe"), n("L", "Loupe"), n("X", "Focus Mode"), n("C", "Copy Color"), n("[ / ]", "Speed -/+"), n("\\", "Speed 1x"), n("< / >", "Prev/Next"), n("0-5", "Rating"), be.appendChild(e), be.appendChild(t);
+ n("Esc", "Close"), n("Space", "Play/Pause"), n("+", "Zoom In"), n("-", "Zoom Out"), n("Alt+1", "1:1 Zoom"), n("G", "Grid"), n("D", "Gen Info"), n("Z", "Zebra"), n("I", "Probe"), n("L", "Loupe"), n("X", "Focus Mode"), n("C", "Copy Color"), n("[ / ]", "Speed -/+"), n("\\", "Speed 1x"), n("< / >", "Prev/Next"), n("0-5", "Rating"), ye.appendChild(e), ye.appendChild(t);
} catch (e) {
console.debug?.(e);
}
- return ve.appendChild(ye), ve.appendChild(be), v.appendChild(ve), h.body.appendChild(_), g.body.appendChild(v), u.appendChild(f.panel), u.appendChild(p.panel), u.appendChild(m.panel), u.appendChild(h.panel), u.appendChild(g.panel), l.appendChild(u), {
+ return _e.appendChild(ve), _e.appendChild(ye), v.appendChild(_e), h.body.appendChild(_), g.body.appendChild(v), u.appendChild(f.panel), u.appendChild(p.panel), u.appendChild(m.panel), u.appendChild(h.panel), u.appendChild(g.panel), l.appendChild(u), {
toolsRow: l,
gradePanel: f,
overlayPanel: p,
@@ -4093,18 +4016,18 @@ function zn({ VIEWER_MODES: e, state: t, onToolsChanged: n, onCompareModeChanged
infoPanel: g,
toolsActions: _,
toolsMeta: v,
- chGroup: B,
- expGroup: V,
- gamGroup: H,
- anaGroup: he,
- ovGuidesGroup: ge,
- ovInspectGroup: _e,
- cmpGroup: W,
- audGroup: G,
- model3dHint: K,
- helpWrap: ve,
- helpBtn: ye,
- helpPop: be,
+ chGroup: V,
+ expGroup: H,
+ gamGroup: U,
+ anaGroup: me,
+ ovGuidesGroup: he,
+ ovInspectGroup: ge,
+ cmpGroup: G,
+ audGroup: K,
+ model3dHint: q,
+ helpWrap: _e,
+ helpBtn: ve,
+ helpPop: ye,
channelsSelect: C,
exposureCtl: T,
gammaCtl: E,
@@ -4126,9 +4049,9 @@ function zn({ VIEWER_MODES: e, state: t, onToolsChanged: n, onCompareModeChanged
resetGradeBtn: ue,
exportBtn: de,
copyBtn: z,
- resetExposure: pe,
- resetGamma: U,
- resetViewerTools: me,
+ resetExposure: fe,
+ resetGamma: W,
+ resetViewerTools: pe,
ACCENT: D,
setSelectHighlighted: k,
setChannelSelectStyle: A,
@@ -4138,7 +4061,7 @@ function zn({ VIEWER_MODES: e, state: t, onToolsChanged: n, onCompareModeChanged
};
}
// ui/features/viewer/toolbarActions.ts
-function Bn({ unsubs: e, state: t, VIEWER_MODES: n, onMode: r, onClose: i, onToolsChanged: a, onCompareModeChanged: o, onAudioVizModeChanged: s, onExportFrame: c, onCopyFrame: l, singleBtn: u, abBtn: d, sideBtn: f, closeBtn: p, channelsSelect: m, compareModeSelect: h, audioVizModeSelect: g, exposureCtl: _, gammaCtl: v, zebraToggle: y, scopesToggle: b, scopesSelect: x, gridToggle: S, gridModeSelect: C, maskToggle: w, formatSelect: T, maskOpacityCtl: E, probeToggle: D, loupeToggle: O, hudToggle: k, focusToggle: A, genInfoToggle: j, resetGradeBtn: M, exportBtn: N, copyBtn: ee, resetExposure: P, resetGamma: te, resetViewerTools: F, expGroup: ne, gamGroup: re }) {
+function In({ unsubs: e, state: t, VIEWER_MODES: n, onMode: r, onClose: i, onToolsChanged: a, onCompareModeChanged: o, onAudioVizModeChanged: s, onExportFrame: c, onCopyFrame: l, singleBtn: u, abBtn: d, sideBtn: f, closeBtn: p, channelsSelect: m, compareModeSelect: h, audioVizModeSelect: g, exposureCtl: _, gammaCtl: v, zebraToggle: y, scopesToggle: b, scopesSelect: x, gridToggle: S, gridModeSelect: C, maskToggle: w, formatSelect: T, maskOpacityCtl: E, probeToggle: D, loupeToggle: O, hudToggle: k, focusToggle: A, genInfoToggle: j, resetGradeBtn: M, exportBtn: N, copyBtn: ee, resetExposure: P, resetGamma: te, resetViewerTools: F, expGroup: ne, gamGroup: re }) {
e.push(Z(u, "click", () => r?.(n.SINGLE))), e.push(Z(d, "click", () => r?.(n.AB_COMPARE))), e.push(Z(f, "click", () => r?.(n.SIDE_BY_SIDE))), e.push(Z(p, "click", () => i?.())), e.push(Z(m, "change", () => {
try {
t.channel = String(m.value || "rgb");
@@ -4275,7 +4198,7 @@ function Bn({ unsubs: e, state: t, VIEWER_MODES: n, onMode: r, onClose: i, onToo
}
}));
}
-function Vn({ state: e, VIEWER_MODES: t, getCanAB: n, header: r, toolsRow: i, chGroup: a, expGroup: o, gamGroup: s, anaGroup: c, gradePanel: l, overlayPanel: u, inspectPanel: d, infoPanel: f, actionPanel: p, ovGuidesGroup: m, ovInspectGroup: h, model3dHint: g, helpWrap: _, channelsSelect: v, compareModeSelect: y, audioVizModeSelect: b, exposureCtl: x, gammaCtl: S, zebraToggle: C, scopesToggle: w, scopesSelect: T, gridToggle: E, gridModeSelect: D, maskToggle: O, formatSelect: k, maskOpacityCtl: A, probeToggle: j, loupeToggle: M, hudToggle: N, focusToggle: ee, genInfoToggle: P, exportBtn: te, copyBtn: F, resetGradeBtn: ne, cmpGroup: re, audGroup: ie, ACCENT: ae, setSelectHighlighted: oe, setChannelSelectStyle: se, setValueHighlighted: ce, setGroupHighlighted: le }) {
+function Ln({ state: e, VIEWER_MODES: t, getCanAB: n, header: r, toolsRow: i, chGroup: a, expGroup: o, gamGroup: s, anaGroup: c, gradePanel: l, overlayPanel: u, inspectPanel: d, infoPanel: f, actionPanel: p, ovGuidesGroup: m, ovInspectGroup: h, model3dHint: g, helpWrap: _, channelsSelect: v, compareModeSelect: y, audioVizModeSelect: b, exposureCtl: x, gammaCtl: S, zebraToggle: C, scopesToggle: w, scopesSelect: T, gridToggle: E, gridModeSelect: D, maskToggle: O, formatSelect: k, maskOpacityCtl: A, probeToggle: j, loupeToggle: M, hudToggle: N, focusToggle: ee, genInfoToggle: P, exportBtn: te, copyBtn: F, resetGradeBtn: ne, cmpGroup: re, audGroup: ie, ACCENT: ae, setSelectHighlighted: oe, setChannelSelectStyle: se, setValueHighlighted: ce, setGroupHighlighted: le }) {
let I = e?.assets?.[e?.currentIndex] || null, L = String(I?.kind || "").toLowerCase() === "model3d";
try {
let e = L ? "none" : "";
@@ -4485,7 +4408,7 @@ function Vn({ state: e, VIEWER_MODES: t, getCanAB: n, header: r, toolsRow: i, ch
console.debug?.(e);
}
}
-function Hn({ state: e, VIEWER_MODES: t, singleBtn: n, abBtn: r, sideBtn: i, canAB: a, canSide: o }) {
+function Rn({ state: e, VIEWER_MODES: t, singleBtn: n, abBtn: r, sideBtn: i, canAB: a, canSide: o }) {
try {
let s = !!a?.(), c = !!o?.();
r.disabled = !s, i.disabled = !c, r.style.opacity = r.disabled ? "0.35" : e.mode === t.AB_COMPARE ? "1" : "0.6", i.style.opacity = i.disabled ? "0.35" : e.mode === t.SIDE_BY_SIDE ? "1" : "0.6", n.style.opacity = e.mode === t.SINGLE ? "1" : "0.6", n.style.fontWeight = e.mode === t.SINGLE ? "600" : "400";
@@ -4499,7 +4422,7 @@ function Hn({ state: e, VIEWER_MODES: t, singleBtn: n, abBtn: r, sideBtn: i, can
}
}
// ui/features/viewer/toolbar.ts
-function Un({ VIEWER_MODES: e, state: t, lifecycle: n, onClose: r, _onZoomIn: i, _onZoomOut: a, _onZoomReset: o, _onZoomOneToOne: s, onMode: c, onToolsChanged: l, onCompareModeChanged: u, onExportFrame: d, onCopyFrame: f, onAudioVizModeChanged: p, onToggleFullscreen: m, getCanAB: h } = {}) {
+function zn({ VIEWER_MODES: e, state: t, lifecycle: n, onClose: r, _onZoomIn: i, _onZoomOut: a, _onZoomReset: o, _onZoomOneToOne: s, onMode: c, onToolsChanged: l, onCompareModeChanged: u, onExportFrame: d, onCopyFrame: f, onAudioVizModeChanged: p, onToggleFullscreen: m, getCanAB: h } = {}) {
let g = n?.unsubs || [], _ = document.createElement("div");
_.className = "mjr-viewer-header", _.style.cssText = "\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 8px 16px;\n background: linear-gradient(170deg, rgba(24, 27, 33, 0.96), rgba(17, 19, 25, 0.97));\n border-bottom: 0.8px solid rgba(196, 202, 210, 0.2);\n color: white;\n box-sizing: border-box;\n ";
let v = document.createElement("div");
@@ -4522,13 +4445,13 @@ function Un({ VIEWER_MODES: e, state: t, lifecycle: n, onClose: r, _onZoomIn: i,
D.className = "mjr-viewer-badges mjr-viewer-badges--right", D.style.cssText = "display:flex; gap:8px; align-items:center; flex-wrap:wrap; justify-content:flex-end;", b.appendChild(S), b.appendChild(C), x.appendChild(b), T.appendChild(D), T.appendChild(E);
let O = document.createElement("div");
O.className = "mjr-viewer-mode-buttons", O.style.cssText = "display: flex; gap: 4px;";
- let k = Rn("Single", e.SINGLE);
+ let k = Pn("Single", e.SINGLE);
k.title = w("tooltip.singleViewMode", "Single view mode (one image)");
- let A = Rn("A/B", e.AB_COMPARE);
+ let A = Pn("A/B", e.AB_COMPARE);
A.title = w("tooltip.compareOverlayMode", "A/B compare mode (overlay)");
- let j = Rn("Side", e.SIDE_BY_SIDE);
+ let j = Pn("Side", e.SIDE_BY_SIDE);
j.title = w("tooltip.compareSideBySide", "Side-by-side comparison mode"), O.appendChild(k), O.appendChild(A), O.appendChild(j);
- let M = Ln("X", "Close (Esc)");
+ let M = Nn("X", "Close (Esc)");
M.style.fontSize = "18px";
try {
M.classList.add("mjr-viewer-close"), M.textContent = "";
@@ -4537,7 +4460,7 @@ function Un({ VIEWER_MODES: e, state: t, lifecycle: n, onClose: r, _onZoomIn: i,
} catch (e) {
console.debug?.(e);
}
- let N = Ln("[ ]", "Toggle Fullscreen (F)");
+ let N = Nn("[ ]", "Toggle Fullscreen (F)");
try {
N.classList.add("mjr-viewer-fs");
} catch (e) {
@@ -4588,7 +4511,7 @@ function Un({ VIEWER_MODES: e, state: t, lifecycle: n, onClose: r, _onZoomIn: i,
console.debug?.(e);
}
_.appendChild(v), _.appendChild(N), _.appendChild(M);
- let { toolsRow: F, gradePanel: ne, overlayPanel: re, inspectPanel: ie, actionPanel: ae, infoPanel: oe, toolsActions: se, toolsMeta: ce, chGroup: le, expGroup: I, gamGroup: L, anaGroup: ue, ovGuidesGroup: de, ovInspectGroup: R, cmpGroup: z, audGroup: fe, model3dHint: B, helpWrap: V, helpBtn: H, helpPop: pe, channelsSelect: U, exposureCtl: me, gammaCtl: he, zebraToggle: ge, scopesToggle: _e, scopesSelect: W, gridToggle: G, gridModeSelect: K, maskToggle: ve, formatSelect: ye, maskOpacityCtl: q, probeToggle: be, loupeToggle: xe, hudToggle: Se, focusToggle: Ce, genInfoToggle: we, compareModeSelect: Te, audioVizModeSelect: Ee, resetGradeBtn: De, exportBtn: Oe, copyBtn: ke, resetExposure: Ae, resetGamma: je, resetViewerTools: Me, ACCENT: Ne, setSelectHighlighted: Pe, setChannelSelectStyle: Fe, setValueHighlighted: Ie, setGroupHighlighted: J } = zn({
+ let { toolsRow: F, gradePanel: ne, overlayPanel: re, inspectPanel: ie, actionPanel: ae, infoPanel: oe, toolsActions: se, toolsMeta: ce, chGroup: le, expGroup: I, gamGroup: L, anaGroup: ue, ovGuidesGroup: de, ovInspectGroup: R, cmpGroup: z, audGroup: B, model3dHint: V, helpWrap: H, helpBtn: U, helpPop: fe, channelsSelect: W, exposureCtl: pe, gammaCtl: me, zebraToggle: he, scopesToggle: ge, scopesSelect: G, gridToggle: K, gridModeSelect: q, maskToggle: _e, formatSelect: ve, maskOpacityCtl: J, probeToggle: ye, loupeToggle: be, hudToggle: xe, focusToggle: Se, genInfoToggle: Ce, compareModeSelect: we, audioVizModeSelect: Te, resetGradeBtn: Ee, exportBtn: De, copyBtn: Oe, resetExposure: ke, resetGamma: Ae, resetViewerTools: je, ACCENT: Me, setSelectHighlighted: Ne, setChannelSelectStyle: Pe, setValueHighlighted: Fe, setGroupHighlighted: Y } = Fn({
VIEWER_MODES: e,
state: t,
onToolsChanged: l,
@@ -4598,7 +4521,7 @@ function Un({ VIEWER_MODES: e, state: t, lifecycle: n, onClose: r, _onZoomIn: i,
onAudioVizModeChanged: p,
getCanAB: h
});
- _.appendChild(F), Bn({
+ _.appendChild(F), In({
unsubs: g,
state: t,
VIEWER_MODES: e,
@@ -4613,34 +4536,34 @@ function Un({ VIEWER_MODES: e, state: t, lifecycle: n, onClose: r, _onZoomIn: i,
abBtn: A,
sideBtn: j,
closeBtn: M,
- channelsSelect: U,
- compareModeSelect: Te,
- audioVizModeSelect: Ee,
- exposureCtl: me,
- gammaCtl: he,
- zebraToggle: ge,
- scopesToggle: _e,
- scopesSelect: W,
- gridToggle: G,
- gridModeSelect: K,
- maskToggle: ve,
- formatSelect: ye,
- maskOpacityCtl: q,
- probeToggle: be,
- loupeToggle: xe,
- hudToggle: Se,
- focusToggle: Ce,
- genInfoToggle: we,
- resetGradeBtn: De,
- exportBtn: Oe,
- copyBtn: ke,
- resetExposure: Ae,
- resetGamma: je,
- resetViewerTools: Me,
+ channelsSelect: W,
+ compareModeSelect: we,
+ audioVizModeSelect: Te,
+ exposureCtl: pe,
+ gammaCtl: me,
+ zebraToggle: he,
+ scopesToggle: ge,
+ scopesSelect: G,
+ gridToggle: K,
+ gridModeSelect: q,
+ maskToggle: _e,
+ formatSelect: ve,
+ maskOpacityCtl: J,
+ probeToggle: ye,
+ loupeToggle: be,
+ hudToggle: xe,
+ focusToggle: Se,
+ genInfoToggle: Ce,
+ resetGradeBtn: Ee,
+ exportBtn: De,
+ copyBtn: Oe,
+ resetExposure: ke,
+ resetGamma: Ae,
+ resetViewerTools: je,
expGroup: I,
gamGroup: L
});
- let Le = () => Vn({
+ let Ie = () => Ln({
state: t,
VIEWER_MODES: e,
getCanAB: h,
@@ -4657,37 +4580,37 @@ function Un({ VIEWER_MODES: e, state: t, lifecycle: n, onClose: r, _onZoomIn: i,
actionPanel: ae,
ovGuidesGroup: de,
ovInspectGroup: R,
- model3dHint: B,
- helpWrap: V,
- channelsSelect: U,
- compareModeSelect: Te,
- audioVizModeSelect: Ee,
- exposureCtl: me,
- gammaCtl: he,
- zebraToggle: ge,
- scopesToggle: _e,
- scopesSelect: W,
- gridToggle: G,
- gridModeSelect: K,
- maskToggle: ve,
- formatSelect: ye,
- maskOpacityCtl: q,
- probeToggle: be,
- loupeToggle: xe,
- hudToggle: Se,
- focusToggle: Ce,
- genInfoToggle: we,
- exportBtn: Oe,
- copyBtn: ke,
- resetGradeBtn: De,
+ model3dHint: V,
+ helpWrap: H,
+ channelsSelect: W,
+ compareModeSelect: we,
+ audioVizModeSelect: Te,
+ exposureCtl: pe,
+ gammaCtl: me,
+ zebraToggle: he,
+ scopesToggle: ge,
+ scopesSelect: G,
+ gridToggle: K,
+ gridModeSelect: q,
+ maskToggle: _e,
+ formatSelect: ve,
+ maskOpacityCtl: J,
+ probeToggle: ye,
+ loupeToggle: be,
+ hudToggle: xe,
+ focusToggle: Se,
+ genInfoToggle: Ce,
+ exportBtn: De,
+ copyBtn: Oe,
+ resetGradeBtn: Ee,
cmpGroup: z,
- audGroup: fe,
- ACCENT: Ne,
- setSelectHighlighted: Pe,
- setChannelSelectStyle: Fe,
- setValueHighlighted: Ie,
- setGroupHighlighted: J
- }), Re = ({ canAB: n, canSide: r } = {}) => Hn({
+ audGroup: B,
+ ACCENT: Me,
+ setSelectHighlighted: Ne,
+ setChannelSelectStyle: Pe,
+ setValueHighlighted: Fe,
+ setGroupHighlighted: Y
+ }), Le = ({ canAB: n, canSide: r } = {}) => Rn({
state: t,
VIEWER_MODES: e,
singleBtn: k,
@@ -4705,20 +4628,20 @@ function Un({ VIEWER_MODES: e, state: t, lifecycle: n, onClose: r, _onZoomIn: i,
}
e = null;
try {
- pe.style.display = "none";
+ fe.style.display = "none";
} catch (e) {
console.debug?.(e);
}
}, n = () => {
t(), e = new AbortController();
try {
- pe.style.display = "";
+ fe.style.display = "";
} catch (e) {
console.debug?.(e);
}
try {
document.addEventListener("mousedown", (e) => {
- V.contains(e.target) || t();
+ H.contains(e.target) || t();
}, {
capture: !0,
signal: e.signal
@@ -4736,8 +4659,8 @@ function Un({ VIEWER_MODES: e, state: t, lifecycle: n, onClose: r, _onZoomIn: i,
console.debug?.(e);
}
};
- g.push(() => t()), g.push(Z(H, "click", () => {
- pe.style.display === "none" ? n() : t();
+ g.push(() => t()), g.push(Z(U, "click", () => {
+ fe.style.display === "none" ? n() : t();
}));
} catch (e) {
console.debug?.(e);
@@ -4757,12 +4680,12 @@ function Un({ VIEWER_MODES: e, state: t, lifecycle: n, onClose: r, _onZoomIn: i,
titleLineEl: b,
titleWrapEl: x,
modeButtonsEl: O,
- syncToolsUIFromState: Le,
- syncModeButtons: Re
+ syncToolsUIFromState: Ie,
+ syncModeButtons: Le
};
}
// ui/features/viewer/keyboard.ts
-function Wn(e) {
+function Bn(e) {
if (!e) return null;
try {
if (typeof e.prompt == "string" && e.prompt.trim()) return e.prompt.trim();
@@ -4792,7 +4715,7 @@ function Wn(e) {
}
return null;
}
-function Gn({ overlay: t, _content: n, singleView: r, state: i, VIEWER_MODES: a, computeOneToOneZoom: o, setZoom: s, scheduleOverlayRedraw: c, scheduleApplyGrade: l, syncToolsUIFromState: u, applyDistractionFreeUI: f, navigateViewerAssets: p, closeViewer: m, renderBadges: h, updateAssetRating: g, safeDispatchCustomEvent: _, ASSET_RATING_CHANGED_EVENT: v, probeTooltip: y, loupeWrap: b, getVideoControls: x, lifecycle: S, renderGenInfoPanel: C } = {}) {
+function Vn({ overlay: t, _content: n, singleView: r, state: i, VIEWER_MODES: a, computeOneToOneZoom: o, setZoom: s, scheduleOverlayRedraw: c, scheduleApplyGrade: l, syncToolsUIFromState: u, applyDistractionFreeUI: f, navigateViewerAssets: p, closeViewer: m, renderBadges: h, updateAssetRating: g, safeDispatchCustomEvent: _, ASSET_RATING_CHANGED_EVENT: v, probeTooltip: y, loupeWrap: b, getVideoControls: x, lifecycle: S, renderGenInfoPanel: C } = {}) {
let E = S?.unsubs || [], D = null, O = null, k = () => {
try {
D && clearTimeout(D);
@@ -4856,7 +4779,7 @@ function Gn({ overlay: t, _content: n, singleView: r, state: i, VIEWER_MODES: a,
g(), j();
return;
}
- n.key === "Escape" && (g(), Q.tags.open ? fn() : X(m));
+ n.key === "Escape" && (g(), Q.tags.open ? cn() : X(m));
return;
}
} catch (e) {
@@ -4923,7 +4846,7 @@ function Gn({ overlay: t, _content: n, singleView: r, state: i, VIEWER_MODES: a,
}
};
if ((n.ctrlKey || n.metaKey) && (n.key === "c" || n.key === "C")) try {
- let t = Wn(S);
+ let t = Bn(S);
if (t) {
g(), navigator.clipboard?.writeText?.(t).then(() => e(w("toast.promptCopied", "Prompt copied to clipboard"), "success", 1500)).catch(() => e(w("toast.copyFailed", "Copy failed"), "error", 1500));
return;
@@ -4976,7 +4899,7 @@ function Gn({ overlay: t, _content: n, singleView: r, state: i, VIEWER_MODES: a,
case "t":
case "T":
if (!S?.id) break;
- g(), dn({
+ g(), sn({
x: Number(i?._lastPointerX) || Math.round((t?.clientWidth || 0) / 2),
y: Number(i?._lastPointerY) || Math.round((t?.clientHeight || 0) / 2),
asset: S,
@@ -5115,7 +5038,7 @@ function Gn({ overlay: t, _content: n, singleView: r, state: i, VIEWER_MODES: a,
}
break;
case "Escape":
- g(), Q.tags.open ? fn() : X(m);
+ g(), Q.tags.open ? cn() : X(m);
break;
case "ArrowLeft":
if (v && n.target?.closest?.(".mjr-viewer-playerbar")) {
@@ -5191,14 +5114,14 @@ function Gn({ overlay: t, _content: n, singleView: r, state: i, VIEWER_MODES: a,
};
}
// ui/features/viewer/videoSync.ts
-var Kn = () => {
+var Hn = () => {
try {
return !!E?.DEBUG_VIEWER;
} catch {
return !1;
}
};
-function qn(e, t, { threshold: n = .15, correctionCooldownMs: r = 250 } = {}) {
+function Un(e, t, { threshold: n = .15, correctionCooldownMs: r = 250 } = {}) {
let i = new AbortController();
try {
if (!e) return i;
@@ -5428,7 +5351,7 @@ function qn(e, t, { threshold: n = .15, correctionCooldownMs: r = 250 } = {}) {
console.debug?.(e);
}
} catch (e) {
- if (Kn()) try {
+ if (Hn()) try {
console.warn("[Viewer] follower video sync setup failed", e);
} catch (e) {
console.debug?.(e);
@@ -5437,7 +5360,7 @@ function qn(e, t, { threshold: n = .15, correctionCooldownMs: r = 250 } = {}) {
return i;
}
// ui/features/viewer/grid.ts
-function Jn({ gridCanvas: e, content: t, state: n, VIEWER_MODES: r, getPrimaryMedia: i, getViewportRect: a, clearCanvas: o } = {}) {
+function Wn({ gridCanvas: e, content: t, state: n, VIEWER_MODES: r, getPrimaryMedia: i, getViewportRect: a, clearCanvas: o } = {}) {
let s = () => {
try {
let e = n?.mode;
@@ -5850,7 +5773,7 @@ function Jn({ gridCanvas: e, content: t, state: n, VIEWER_MODES: r, getPrimaryMe
};
}
// ui/features/viewer/probe.ts
-function Yn({ overlay: e, content: t, state: n, VIEWER_MODES: r, getPrimaryMedia: i, getMediaNaturalSize: a, _getViewportRect: o, positionOverlayBox: s, probeTooltip: c, loupeWrap: l, onLoupeRedraw: u, lifecycle: d } = {}) {
+function Gn({ overlay: e, content: t, state: n, VIEWER_MODES: r, getPrimaryMedia: i, getMediaNaturalSize: a, _getViewportRect: o, positionOverlayBox: s, probeTooltip: c, loupeWrap: l, onLoupeRedraw: u, lifecycle: d } = {}) {
let f = d?.unsubs || [], p = document.createElement("canvas");
p.width = 1, p.height = 1;
let m = null;
@@ -6027,7 +5950,7 @@ function Yn({ overlay: e, content: t, state: n, VIEWER_MODES: r, getPrimaryMedia
};
}
// ui/features/viewer/loupe.ts
-function Xn({ state: e, loupeCanvas: t, loupeWrap: n, getMediaNaturalSize: r, positionOverlayBox: i } = {}) {
+function Kn({ state: e, loupeCanvas: t, loupeWrap: n, getMediaNaturalSize: r, positionOverlayBox: i } = {}) {
let a = null;
try {
a = t?.getContext?.("2d", { willReadFrequently: !0 });
@@ -6080,7 +6003,7 @@ function Xn({ state: e, loupeCanvas: t, loupeWrap: n, getMediaNaturalSize: r, po
};
}
// ui/features/viewer/metadata.ts
-function Zn({ state: e, VIEWER_MODES: t, APP_CONFIG: n, getAssetMetadata: r, getAssetsBatch: i } = {}) {
+function qn({ state: e, VIEWER_MODES: t, APP_CONFIG: n, getAssetMetadata: r, getAssetsBatch: i } = {}) {
let a = /* @__PURE__ */ new Map(), o = n?.VIEWER_META_TTL_MS ?? 3e4, s = n?.VIEWER_META_MAX_ENTRIES ?? 500, c = 0, l = null, u = () => {
if (a.size <= s) return;
let e = Date.now();
@@ -6212,16 +6135,16 @@ function Zn({ state: e, VIEWER_MODES: t, APP_CONFIG: n, getAssetMetadata: r, get
cleanupCache: () => {
X(u);
},
- _noop: kt
+ _noop: Tt
};
}
// ui/features/viewer/constants.ts
-var Qn = Object.freeze({
+var Jn = Object.freeze({
MIN: .1,
MAX: 16
});
// ui/features/viewer/panzoom.ts
-function $n({ overlay: e, content: t, singleView: n, abView: r, sideView: i, state: a, VIEWER_MODES: o, scheduleOverlayRedraw: s, lifecycle: c } = {}) {
+function Yn({ overlay: e, content: t, singleView: n, abView: r, sideView: i, state: a, VIEWER_MODES: o, scheduleOverlayRedraw: s, lifecycle: c } = {}) {
let l = c?.safeCall || X, u = c?.safeAddListener || Z, d = c?.unsubs || [], f = () => {
try {
return a?.mode === o?.SINGLE && n?.querySelector?.(".mjr-viewer-media") || null;
@@ -6300,7 +6223,7 @@ function $n({ overlay: e, content: t, singleView: n, abView: r, sideView: i, sta
}, _ = () => {
try {
if (!e || e.style.display === "none") return;
- let s = Math.max(Qn.MIN, Math.min(Qn.MAX, Number(a?.zoom) || 1)), c = a?.assets?.[a?.currentIndex], l = Number(c?.width) || 0, u = Number(c?.height) || 0;
+ let s = Math.max(Jn.MIN, Math.min(Jn.MAX, Number(a?.zoom) || 1)), c = a?.assets?.[a?.currentIndex], l = Number(c?.width) || 0, u = Number(c?.height) || 0;
if (l > 0 && u > 0 || (h(), l = Number(a?._mediaW) || 0, u = Number(a?._mediaH) || 0), !(l > 0 && u > 0)) return;
let d = l / u;
if (!Number.isFinite(d) || d <= 0) return;
@@ -6365,7 +6288,7 @@ function $n({ overlay: e, content: t, singleView: n, abView: r, sideView: i, sta
console.debug?.(e);
}
}, v = () => {
- let e = Math.max(Qn.MIN, Math.min(Qn.MAX, Number(a?.zoom) || 1)), t = Number(a?.panX) || 0, n = Number(a?.panY) || 0;
+ let e = Math.max(Jn.MIN, Math.min(Jn.MAX, Number(a?.zoom) || 1)), t = Number(a?.panX) || 0, n = Number(a?.panY) || 0;
return `translate3d(${t / e}px, ${n / e}px, 0) scale(${e})`;
}, y = () => {
try {
@@ -6422,7 +6345,7 @@ function $n({ overlay: e, content: t, singleView: n, abView: r, sideView: i, sta
}
}, x = (e, { clientX: n = null, clientY: r = null } = {}) => {
try {
- let i = Math.max(Qn.MIN, Math.min(Qn.MAX, Number(a?.zoom) || 1)), o = Math.max(Qn.MIN, Math.min(Qn.MAX, Number(e) || i));
+ let i = Math.max(Jn.MIN, Math.min(Jn.MAX, Number(a?.zoom) || 1)), o = Math.max(Jn.MIN, Math.min(Jn.MAX, Number(e) || i));
try {
a._userInteracted = !0;
} catch (e) {
@@ -6494,7 +6417,7 @@ function $n({ overlay: e, content: t, singleView: n, abView: r, sideView: i, sta
try {
let a = S(e, t, n, r);
if (!(a.w > 0 && a.h > 0)) return !1;
- let o = Math.max(Qn.MIN, Math.min(Qn.MAX, Number(i) || 1)), s = a.w * o, c = a.h * o;
+ let o = Math.max(Jn.MIN, Math.min(Jn.MAX, Number(i) || 1)), s = a.w * o, c = a.h * o;
return s > (Number(n) || 0) + 1 || c > (Number(r) || 0) + 1;
} catch {
return !1;
@@ -6510,7 +6433,7 @@ function $n({ overlay: e, content: t, singleView: n, abView: r, sideView: i, sta
let i = S(t, n, r.width, r.height);
if (!(i.w > 0 && i.h > 0)) return null;
let a = t / i.w;
- return !Number.isFinite(a) || a <= 0 ? null : Math.max(Qn.MIN, Math.min(Qn.MAX, a));
+ return !Number.isFinite(a) || a <= 0 ? null : Math.max(Jn.MIN, Math.min(Jn.MAX, a));
} catch {
return null;
}
@@ -6631,7 +6554,7 @@ function $n({ overlay: e, content: t, singleView: n, abView: r, sideView: i, sta
} catch (e) {
console.debug?.(e);
}
- let t = (Number(e.clientX) || 0) - O.startX, n = (Number(e.clientY) || 0) - O.startY, r = Math.max(Qn.MIN, Math.min(Qn.MAX, Number(a?.zoom) || 1)), i = Math.max(1, r);
+ let t = (Number(e.clientX) || 0) - O.startX, n = (Number(e.clientY) || 0) - O.startY, r = Math.max(Jn.MIN, Math.min(Jn.MAX, Number(a?.zoom) || 1)), i = Math.max(1, r);
a.panX = O.startPanX + t * i, a.panY = O.startPanY + n * i;
try {
a._lastPointerX = e.clientX, a._lastPointerY = e.clientY;
@@ -6726,12 +6649,12 @@ function $n({ overlay: e, content: t, singleView: n, abView: r, sideView: i, sta
};
}
// ui/features/viewer/videoProcessorWebGL.ts
-var er = "\nattribute vec2 a_position;\nvarying vec2 v_uv;\nvoid main() {\n // Quad covers -1..1\n gl_Position = vec4(a_position, 0, 1);\n // Map -1..1 to 0..1\n v_uv = a_position * 0.5 + 0.5;\n // In WebGL, textures are usually flipped relative to Image/Video elements if not handled.\n // We'll flip Y in fragment shader or here.\n v_uv.y = 1.0 - v_uv.y;\n}\n", tr = "\nprecision mediump float;\nvarying vec2 v_uv;\nuniform sampler2D u_image;\nuniform float u_exposure_scale;\nuniform float u_gamma_inv;\nuniform int u_channel; // 0=RGB, 1=R, 2=G, 3=B\nuniform int u_analysis; // 0=None, 1=Zebra\nuniform float u_zebra_threshold;\nuniform vec2 u_resolution;\n\nfloat getLuma(vec3 c) { return dot(c, vec3(0.2126, 0.7152, 0.0722)); }\n\nvoid main() {\n vec4 texColor = texture2D(u_image, v_uv);\n vec3 color = texColor.rgb;\n\n // Exposure\n color *= u_exposure_scale;\n\n // Analysis (Zebra) or Gamma\n bool isZebra = false;\n if (u_analysis == 1) {\n float luma = getLuma(color);\n if (luma >= u_zebra_threshold) {\n isZebra = true;\n // Stripe pattern: (x + y) % 16 < 8\n // gl_FragCoord is in window pixels\n float stripe = mod(gl_FragCoord.x + gl_FragCoord.y, 32.0);\n if (stripe < 16.0) {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); // Black\n } else {\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); // White\n }\n }\n }\n\n if (!isZebra) {\n // Gamma\n // fast pow?\n color = pow(clamp(color, 0.0, 1.0), vec3(u_gamma_inv));\n\n // Channel Selector\n if (u_channel == 1) color = vec3(color.r);\n else if (u_channel == 2) color = vec3(color.g);\n else if (u_channel == 3) color = vec3(color.b);\n\n gl_FragColor = vec4(color, texColor.a);\n }\n}\n";
-function nr(e, t, n) {
+var Xn = "\nattribute vec2 a_position;\nvarying vec2 v_uv;\nvoid main() {\n // Quad covers -1..1\n gl_Position = vec4(a_position, 0, 1);\n // Map -1..1 to 0..1\n v_uv = a_position * 0.5 + 0.5;\n // In WebGL, textures are usually flipped relative to Image/Video elements if not handled.\n // We'll flip Y in fragment shader or here.\n v_uv.y = 1.0 - v_uv.y;\n}\n", Zn = "\nprecision mediump float;\nvarying vec2 v_uv;\nuniform sampler2D u_image;\nuniform float u_exposure_scale;\nuniform float u_gamma_inv;\nuniform int u_channel; // 0=RGB, 1=R, 2=G, 3=B\nuniform int u_analysis; // 0=None, 1=Zebra\nuniform float u_zebra_threshold;\nuniform vec2 u_resolution;\n\nfloat getLuma(vec3 c) { return dot(c, vec3(0.2126, 0.7152, 0.0722)); }\n\nvoid main() {\n vec4 texColor = texture2D(u_image, v_uv);\n vec3 color = texColor.rgb;\n\n // Exposure\n color *= u_exposure_scale;\n\n // Analysis (Zebra) or Gamma\n bool isZebra = false;\n if (u_analysis == 1) {\n float luma = getLuma(color);\n if (luma >= u_zebra_threshold) {\n isZebra = true;\n // Stripe pattern: (x + y) % 16 < 8\n // gl_FragCoord is in window pixels\n float stripe = mod(gl_FragCoord.x + gl_FragCoord.y, 32.0);\n if (stripe < 16.0) {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); // Black\n } else {\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); // White\n }\n }\n }\n\n if (!isZebra) {\n // Gamma\n // fast pow?\n color = pow(clamp(color, 0.0, 1.0), vec3(u_gamma_inv));\n\n // Channel Selector\n if (u_channel == 1) color = vec3(color.r);\n else if (u_channel == 2) color = vec3(color.g);\n else if (u_channel == 3) color = vec3(color.b);\n\n gl_FragColor = vec4(color, texColor.a);\n }\n}\n";
+function Qn(e, t, n) {
let r = e.createShader(t);
return e.shaderSource(r, n), e.compileShader(r), e.getShaderParameter(r, e.COMPILE_STATUS) ? r : (console.warn("WebGL Shader Error:", e.getShaderInfoLog(r)), e.deleteShader(r), null);
}
-function rr(e, t, n) {
+function $n(e, t, n) {
let r = e.createProgram();
if (e.attachShader(r, t), e.attachShader(r, n), e.linkProgram(r), !e.getProgramParameter(r, e.LINK_STATUS)) {
console.warn("WebGL Program Error:", e.getProgramInfoLog(r));
@@ -6744,7 +6667,7 @@ function rr(e, t, n) {
}
return r;
}
-function ir() {
+function er() {
try {
let e = document.createElement("canvas");
return !!(window.WebGLRenderingContext && (e.getContext("webgl") || e.getContext("experimental-webgl")));
@@ -6752,7 +6675,7 @@ function ir() {
return !1;
}
}
-function ar(e) {
+function tr(e) {
let { canvas: t, videoEl: n, getGradeParams: r } = e, i = null, a = null, o = 4096, s = !1, c = {
type: "webgl",
ready: !1,
@@ -6823,9 +6746,9 @@ function ar(e) {
}, f = () => {
if (!i) return null;
d();
- let e = nr(i, i.VERTEX_SHADER, er), t = nr(i, i.FRAGMENT_SHADER, tr);
+ let e = Qn(i, i.VERTEX_SHADER, Xn), t = Qn(i, i.FRAGMENT_SHADER, Zn);
if (!e || !t) return e && i.deleteShader(e), t && i.deleteShader(t), null;
- let n = rr(i, e, t);
+ let n = $n(i, e, t);
if (i.deleteShader(e), i.deleteShader(t), !n) return null;
u("setupResources:createProgram");
let r = {
@@ -6901,10 +6824,10 @@ function ar(e) {
};
}
// ui/features/viewer/videoProcessor.ts
-function or({ canvas: e, videoEl: t, disableWebGL: n, pauseDuringExecution: r = null, getGradeParams: i, isDefaultGrade: a, _tonemap: o, maxProcPixelsVideo: s, throttleFps: c, safeAddListener: l, safeCall: u, onReady: d } = {}) {
+function nr({ canvas: e, videoEl: t, disableWebGL: n, pauseDuringExecution: r = null, getGradeParams: i, isDefaultGrade: a, _tonemap: o, maxProcPixelsVideo: s, throttleFps: c, safeAddListener: l, safeCall: u, onReady: d } = {}) {
let f = r == null ? !!E?.VIEWER_PAUSE_DURING_EXECUTION : !!r, p = null;
- if (!n && ir()) try {
- p = ar({
+ if (!n && er()) try {
+ p = tr({
canvas: e,
videoEl: t,
getGradeParams: i,
@@ -7399,11 +7322,11 @@ function or({ canvas: e, videoEl: t, disableWebGL: n, pauseDuringExecution: r =
};
}
// ui/features/viewer/audioVisualizer.ts
-function sr(e, t, n) {
+function rr(e, t, n) {
let r = Number(e);
return Number.isFinite(r) ? Math.max(t, Math.min(n, r)) : t;
}
-function cr(e) {
+function ir(e) {
try {
let t = String(e || "").toLowerCase();
if (t === "simple" || t === "artistic") return t;
@@ -7420,7 +7343,7 @@ function cr(e) {
}
return "simple";
}
-function lr(e) {
+function ar(e) {
let t = e.getContext("2d");
if (!t) return null;
let n = (e, t) => {
@@ -7470,7 +7393,7 @@ function lr(e) {
destroy() {}
};
}
-function ur(e, { pseudo3d: t = !1 } = {}) {
+function or(e, { pseudo3d: t = !1 } = {}) {
let n = null;
try {
n = e.getContext("webgl", {
@@ -7517,7 +7440,7 @@ function ur(e, { pseudo3d: t = !1 } = {}) {
n.viewport(0, 0, e.width || 1, e.height || 1), n.clearColor(0, 0, 0, 0), n.clear(n.COLOR_BUFFER_BIT);
let i = Math.max(48, Math.min(180, Math.floor((e.width || 640) / 7))), o = Number(a) * .001, s = new Float32Array(i * 2);
for (let e = 0; e < i; e++) {
- let n = e / Math.max(1, i - 1), a = n * 2 - 1, c = f(r, n), l = t ? Math.sin(n * Math.PI * 4 + o * 1.1) * .18 : 0, u = t ? 1 / (1 + Math.max(-.7, l) * .8) : 1, d = sr((.18 + c * .32) * u, -.95, .95);
+ let n = e / Math.max(1, i - 1), a = n * 2 - 1, c = f(r, n), l = t ? Math.sin(n * Math.PI * 4 + o * 1.1) * .18 : 0, u = t ? 1 / (1 + Math.max(-.7, l) * .8) : 1, d = rr((.18 + c * .32) * u, -.95, .95);
s[e * 2] = a, s[e * 2 + 1] = d;
}
u(s, [
@@ -7528,7 +7451,7 @@ function ur(e, { pseudo3d: t = !1 } = {}) {
]);
let c = new Float32Array(i * 2);
for (let e = 0; e < i; e++) {
- let n = e / Math.max(1, i - 1), a = n * 2 - 1, s = p(r, n), l = m(r, n), u = s * .62 + l * .38, d = t ? Math.sin(n * Math.PI * 3 + o * 1) * .14 : 0, f = t ? 1 / (1 + Math.max(-.7, d) * .8) : 1, h = sr(-u * .62 * f, -.95, 0);
+ let n = e / Math.max(1, i - 1), a = n * 2 - 1, s = p(r, n), l = m(r, n), u = s * .62 + l * .38, d = t ? Math.sin(n * Math.PI * 3 + o * 1) * .14 : 0, f = t ? 1 / (1 + Math.max(-.7, d) * .8) : 1, h = rr(-u * .62 * f, -.95, 0);
c[e * 2] = a, c[e * 2 + 1] = h;
}
u(c, [
@@ -7565,17 +7488,17 @@ function ur(e, { pseudo3d: t = !1 } = {}) {
}
};
}
-function dr({ canvas: e, audioEl: t, mode: n, pauseDuringExecution: r = null } = {}) {
+function sr({ canvas: e, audioEl: t, mode: n, pauseDuringExecution: r = null } = {}) {
if (!e || !t) return { destroy() {} };
- let i = r == null ? !!E?.VIEWER_PAUSE_DURING_EXECUTION : !!r, a = null, o = !1, s = null, c = null, l = null, u = null, d = null, f = null, p = 0, m = !1, h = 1e3 / sr(E?.VIEWER_AUDIO_VIS_FPS ?? 24, 8, 60), g = cr(n), _ = () => {
+ let i = r == null ? !!E?.VIEWER_PAUSE_DURING_EXECUTION : !!r, a = null, o = !1, s = null, c = null, l = null, u = null, d = null, f = null, p = 0, m = !1, h = 1e3 / rr(E?.VIEWER_AUDIO_VIS_FPS ?? 24, 8, 60), g = ir(n), _ = () => {
try {
- let t = sr(window.devicePixelRatio || 1, 1, 2), n = Math.max(32, Math.floor((e.clientWidth || 640) * t)), r = Math.max(24, Math.floor((e.clientHeight || 140) * t));
+ let t = rr(window.devicePixelRatio || 1, 1, 2), n = Math.max(32, Math.floor((e.clientWidth || 640) * t)), r = Math.max(24, Math.floor((e.clientHeight || 140) * t));
e.width !== n && (e.width = n), e.height !== r && (e.height = r);
} catch (e) {
console.debug?.(e);
}
}, v = (t = g) => {
- g = cr(t);
+ g = ir(t);
try {
f?.destroy?.();
} catch (e) {
@@ -7588,12 +7511,12 @@ function dr({ canvas: e, audioEl: t, mode: n, pauseDuringExecution: r = null } =
console.debug?.(e);
}
try {
- g === "artistic" && !E?.VIEWER_DISABLE_WEBGL_AUDIO && (f = ur(e, { pseudo3d: !0 }));
+ g === "artistic" && !E?.VIEWER_DISABLE_WEBGL_AUDIO && (f = or(e, { pseudo3d: !0 }));
} catch (e) {
console.debug?.(e);
}
if (!f) try {
- f = lr(e);
+ f = ar(e);
} catch (e) {
console.debug?.(e), f = null;
}
@@ -7695,7 +7618,7 @@ function dr({ canvas: e, audioEl: t, mode: n, pauseDuringExecution: r = null } =
};
}
// ui/features/viewer/mediaFactory.ts
-function fr({ overlay: e, state: t, mediaTransform: n, updateMediaNaturalSize: r, clampPanToBounds: i, applyTransform: a, scheduleOverlayRedraw: o, getGradeParams: s, isDefaultGrade: c, tonemap: l, maxProcPixels: u, maxProcPixelsVideo: d, disableWebGL: f, videoGradeThrottleFps: p, safeAddListener: m, safeCall: h } = {}) {
+function cr({ overlay: e, state: t, mediaTransform: n, updateMediaNaturalSize: r, clampPanToBounds: i, applyTransform: a, scheduleOverlayRedraw: o, getGradeParams: s, isDefaultGrade: c, tonemap: l, maxProcPixels: u, maxProcPixelsVideo: d, disableWebGL: f, videoGradeThrottleFps: p, safeAddListener: m, safeCall: h } = {}) {
let g = h || X, _ = m || Z, v = (e) => {
try {
let t = String(e?.ext || "").trim().toLowerCase();
@@ -7803,7 +7726,7 @@ function fr({ overlay: e, state: t, mediaTransform: n, updateMediaNaturalSize: r
}
}, S = (e) => {
try {
- return Nt(e);
+ return kt(e);
} catch {
return null;
}
@@ -7890,7 +7813,7 @@ function fr({ overlay: e, state: t, mediaTransform: n, updateMediaNaturalSize: r
let o = document.createElement("audio");
o.className = "mjr-viewer-audio-src", o.src = n, o.controls = !1, o.autoplay = !0, o.preload = "metadata";
try {
- let e = dr({
+ let e = sr({
canvas: a,
audioEl: o,
mode: t?.audioVisualizerMode,
@@ -7976,7 +7899,7 @@ function fr({ overlay: e, state: t, mediaTransform: n, updateMediaNaturalSize: r
} catch {}
v.style.cssText = "position:absolute; width:1px; height:1px; opacity:0; pointer-events:none;", w(v, e);
try {
- u._mjrProc = or({
+ u._mjrProc = nr({
canvas: u,
videoEl: v,
disableWebGL: f || !!E.VIEWER_DISABLE_WEBGL_VIDEO,
@@ -8156,7 +8079,7 @@ function fr({ overlay: e, state: t, mediaTransform: n, updateMediaNaturalSize: r
} catch {}
h.style.cssText = "position:absolute; width:1px; height:1px; opacity:0; pointer-events:none;", w(h, e);
try {
- m._mjrProc = or({
+ m._mjrProc = nr({
canvas: m,
videoEl: h,
pauseDuringExecution: E.VIEWER_PAUSE_DURING_EXECUTION,
@@ -8257,7 +8180,7 @@ function fr({ overlay: e, state: t, mediaTransform: n, updateMediaNaturalSize: r
};
}
// ui/features/viewer/imagePreloader.ts
-function pr({ buildAssetViewURL: e, IMAGE_PRELOAD_EXTENSIONS: t, state: n }) {
+function lr({ buildAssetViewURL: e, IMAGE_PRELOAD_EXTENSIONS: t, state: n }) {
function r(e) {
if (!e) return null;
if (e.id != null) return `id:${e.id}`;
@@ -8340,7 +8263,7 @@ function pr({ buildAssetViewURL: e, IMAGE_PRELOAD_EXTENSIONS: t, state: n }) {
};
}
// ui/features/metadata/genInfoCompare.ts
-function mr(e, t) {
+function ur(e, t) {
for (let n of t) {
let t = n.split("."), r = e;
for (let e of t) {
@@ -8351,7 +8274,7 @@ function mr(e, t) {
}
return "";
}
-function hr(e) {
+function dr(e) {
if (e == null) return "";
if (typeof e == "string") return e.trim();
if (typeof e == "number" || typeof e == "boolean") return String(e);
@@ -8361,7 +8284,7 @@ function hr(e) {
return String(e);
}
}
-var gr = [
+var fr = [
{
key: "positive",
label: "Positive Prompt",
@@ -8430,9 +8353,9 @@ var gr = [
paths: ["geninfo.workflow_nodes", "workflow.nodes"]
}
];
-function _r(e, t) {
- return gr.map((n) => {
- let r = hr(mr(e, n.paths)), i = hr(mr(t, n.paths));
+function pr(e, t) {
+ return fr.map((n) => {
+ let r = dr(ur(e, n.paths)), i = dr(ur(t, n.paths));
return {
key: n.key,
label: n.label,
@@ -8443,12 +8366,12 @@ function _r(e, t) {
}).filter((e) => e.left || e.right);
}
// ui/features/viewer/metadataCompare.ts
-function vr(e) {
+function mr(e) {
return String(e ?? "").trim() || "-";
}
-function yr(e, t) {
+function hr(e, t) {
let n = document.createElement("div");
- return n.textContent = vr(e), n.style.cssText = [
+ return n.textContent = mr(e), n.style.cssText = [
"min-width:0",
"white-space:pre-wrap",
"overflow-wrap:anywhere",
@@ -8461,8 +8384,8 @@ function yr(e, t) {
"padding:6px 7px"
].join(";"), n;
}
-function br(e, t) {
- let n = _r(e, t).filter((e) => vr(e?.left) !== "-" || vr(e?.right) !== "-");
+function gr(e, t) {
+ let n = pr(e, t).filter((e) => mr(e?.left) !== "-" || mr(e?.right) !== "-");
if (!n.length) return null;
let r = document.createElement("div");
r.style.cssText = "display:flex;flex-direction:column;gap:8px;margin:0 0 14px 0;padding:10px;border:1px solid rgba(144,220,220,0.22);border-radius:10px;background:rgba(90,220,220,0.06);";
@@ -8474,12 +8397,12 @@ function br(e, t) {
let n = document.createElement("div");
n.textContent = String(e?.label || e?.key || "").trim(), n.style.cssText = "font-size:11px;font-weight:650;color:rgba(255,255,255,0.70);padding-top:6px;overflow-wrap:anywhere", t.appendChild(n);
let i = !!e?.changed;
- t.appendChild(yr(e?.left, i)), t.appendChild(yr(e?.right, i)), r.appendChild(t);
+ t.appendChild(hr(e?.left, i)), t.appendChild(hr(e?.right, i)), r.appendChild(t);
}
return r;
}
// ui/features/viewer/viewerInstanceManager.ts
-function xr(e) {
+function _r(e) {
let t = u();
if (t.length) {
let e = t[t.length - 1];
@@ -8506,7 +8429,7 @@ function xr(e) {
return c(n), n._mjrViewerAPI;
}
// ui/features/viewer/playerBarManager.ts
-function Sr({ state: e, APP_CONFIG: t, VIEWER_MODES: n, overlay: r, navBar: i, playerBarHost: a, singleView: o, abView: s, sideView: c, metadataHydrator: l, isPlayableViewerKind: u, collectPlayableMediaElements: d, pickPrimaryPlayableMedia: f, mountUnifiedMediaControls: p, installFollowerVideoSync: m, getViewerInfo: h, scheduleOverlayRedraw: g, viewerInfoCacheGet: _, viewerInfoCacheSet: v }) {
+function vr({ state: e, APP_CONFIG: t, VIEWER_MODES: n, overlay: r, navBar: i, playerBarHost: a, singleView: o, abView: s, sideView: c, metadataHydrator: l, isPlayableViewerKind: u, collectPlayableMediaElements: d, pickPrimaryPlayableMedia: f, mountUnifiedMediaControls: p, installFollowerVideoSync: m, getViewerInfo: h, scheduleOverlayRedraw: g, viewerInfoCacheGet: _, viewerInfoCacheSet: v }) {
function y() {
try {
e._videoControlsDestroy && e._videoControlsDestroy();
@@ -8611,10 +8534,10 @@ function Sr({ state: e, APP_CONFIG: t, VIEWER_MODES: n, overlay: r, navBar: i, p
try {
let e = (e) => {
try {
- let t = Nt(e);
+ let t = kt(e);
return {
fps: t,
- frameCount: Pt(e, t)
+ frameCount: At(e, t)
};
} catch {
return {
@@ -8774,7 +8697,7 @@ function Sr({ state: e, APP_CONFIG: t, VIEWER_MODES: n, overlay: r, navBar: i, p
}
if (E === "video") {
try {
- let t = (e) => Mt(e), n = (e) => {
+ let t = (e) => Ot(e), n = (e) => {
let t = Number(e);
return !Number.isFinite(t) || t <= 0 ? null : Math.floor(t);
}, r = (r) => {
@@ -8870,12 +8793,12 @@ function Sr({ state: e, APP_CONFIG: t, VIEWER_MODES: n, overlay: r, navBar: i, p
};
}
// ui/features/viewer/viewerThemeStyles.ts
-var Cr = "min(400px, 42vw)", wr = `calc(${Cr} + 24px)`, Tr = "mjr-viewer-modern-theme";
-function Er() {
+var yr = "min(400px, 42vw)", br = `calc(${yr} + 24px)`, xr = "mjr-viewer-modern-theme";
+function Sr() {
try {
- if (document.getElementById(Tr)) return;
+ if (document.getElementById(xr)) return;
let e = document.createElement("style");
- e.id = Tr, e.textContent = `
+ e.id = xr, e.textContent = `
.mjr-viewer-overlay {
--mjr-viewer-surface: rgba(14, 18, 24, 0.78);
--mjr-viewer-surface-strong: rgba(10, 13, 18, 0.9);
@@ -8978,7 +8901,7 @@ function Er() {
}
.mjr-viewer-geninfo {
- width: ${Cr} !important;
+ width: ${yr} !important;
top: 16px !important;
bottom: 16px !important;
border-radius: 20px;
@@ -9076,16 +8999,16 @@ function Er() {
}
}
// ui/features/viewer/filmstrip.ts
-var Dr = 84, Or = 56, kr = 74, Ar = .45, jr = "0px 240px 0px 240px", Mr = 3500;
-function Nr(e) {
+var Cr = 84, wr = 56, Tr = 74, Er = .45, Dr = "0px 240px 0px 240px", Or = 3500;
+function kr(e) {
let t = 2166136261, n = String(e || "");
for (let e = 0; e < n.length; e += 1) t ^= n.charCodeAt(e), t = Math.imul(t, 16777619);
return t >>> 0;
}
-function Pr(e, t, n = 18) {
+function Ar(e, t, n = 18) {
let r = document.createElement("div");
r.className = "mjr-filmstrip-audio-waveform";
- let i = Nr(t) || 1;
+ let i = kr(t) || 1;
for (let e = 0; e < n; e += 1) {
i = Math.imul(i ^ i >>> 15, 2246822519) >>> 0;
let t = i % 1e3 / 1e3, a = Math.sin(e / Math.max(1, n - 1) * Math.PI), o = document.createElement("span");
@@ -9093,14 +9016,14 @@ function Pr(e, t, n = 18) {
}
e.appendChild(r);
}
-function Fr(e) {
+function jr(e) {
try {
e?._mjrFilmstripReleaseTimer && (clearTimeout(e._mjrFilmstripReleaseTimer), e._mjrFilmstripReleaseTimer = null);
} catch (e) {
console.debug?.(e);
}
}
-function Ir(e) {
+function Mr(e) {
if (!e) return;
let t = String(e.dataset.lazySrc || "").trim();
if (t) try {
@@ -9109,7 +9032,7 @@ function Ir(e) {
console.debug?.(e);
}
}
-function Lr(e) {
+function Nr(e) {
if (e) try {
let t = e.play?.();
t && typeof t.catch == "function" && t.catch(() => {});
@@ -9117,16 +9040,16 @@ function Lr(e) {
console.debug?.(e);
}
}
-function Rr(e) {
+function Pr(e) {
if (e) try {
e.pause?.();
} catch (e) {
console.debug?.(e);
}
}
-function zr(e, { releaseSrc: t = !0 } = {}) {
+function Fr(e, { releaseSrc: t = !0 } = {}) {
if (e) {
- Fr(e), Rr(e);
+ jr(e), Pr(e);
try {
e._mjrFilmstripInView = !1;
} catch (e) {
@@ -9139,11 +9062,11 @@ function zr(e, { releaseSrc: t = !0 } = {}) {
}
}
}
-function Br({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: r }) {
+function Ir({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: r }) {
let i = document.createElement("div");
i.className = "mjr-filmstrip", i.style.cssText = `
width: 100%;
- height: ${kr}px;
+ height: ${Tr}px;
overflow-x: auto;
overflow-y: hidden;
background: linear-gradient(180deg, rgba(16, 20, 27, 0.82), rgba(10, 13, 18, 0.92));
@@ -9171,20 +9094,20 @@ function Br({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: r }) {
} catch (e) {
console.debug?.(e);
}
- if (i && (Fr(e), Ir(e)), i && r.intersectionRatio >= Ar && t && n ? Lr(e) : Rr(e), !i) {
- Fr(e);
+ if (i && (jr(e), Mr(e)), i && r.intersectionRatio >= Er && t && n ? Nr(e) : Pr(e), !i) {
+ jr(e);
try {
e._mjrFilmstripReleaseTimer = setTimeout(() => {
try {
if (!e.isConnected) {
- zr(e, { releaseSrc: !0 });
+ Fr(e, { releaseSrc: !0 });
return;
}
- e._mjrFilmstripInView || zr(e, { releaseSrc: !0 });
+ e._mjrFilmstripInView || Fr(e, { releaseSrc: !0 });
} catch (e) {
console.debug?.(e);
}
- }, Mr);
+ }, Or);
} catch (e) {
console.debug?.(e);
}
@@ -9192,8 +9115,8 @@ function Br({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: r }) {
}
}, {
root: i,
- rootMargin: jr,
- threshold: [0, Ar]
+ rootMargin: Dr,
+ threshold: [0, Er]
});
} catch {
return null;
@@ -9213,11 +9136,11 @@ function Br({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: r }) {
}
}
}, p = ({ releaseSrc: e = !1 } = {}) => {
- for (let t of Array.from(c)) zr(t, { releaseSrc: e });
+ for (let t of Array.from(c)) Fr(t, { releaseSrc: e });
}, m = () => {
for (let e of Array.from(c)) try {
if (!e?._mjrFilmstripInView || !e?.isConnected) continue;
- Ir(e), Lr(e);
+ Mr(e), Nr(e);
} catch (e) {
console.debug?.(e);
}
@@ -9267,8 +9190,8 @@ function Br({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: r }) {
let r = document.createElement("div");
r.className = "mjr-filmstrip-item", r.dataset.fidx = String(n), r._mjrAsset = e, r.style.cssText = `
position: relative;
- width: ${Dr}px;
- height: ${Or}px;
+ width: ${Cr}px;
+ height: ${wr}px;
border-radius: 14px;
overflow: hidden;
cursor: pointer;
@@ -9291,7 +9214,7 @@ function Br({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: r }) {
}
return e.addEventListener("loadeddata", () => {
try {
- e._mjrFilmstripInView && i.style.display !== "none" && !document.hidden && Lr(e);
+ e._mjrFilmstripInView && i.style.display !== "none" && !document.hidden && Nr(e);
} catch (e) {
console.debug?.(e);
}
@@ -9301,7 +9224,7 @@ function Br({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: r }) {
} catch (e) {
console.debug?.(e);
}
- zr(e, { releaseSrc: !0 }), y(r);
+ Fr(e, { releaseSrc: !0 }), y(r);
}, { once: !0 }), r.appendChild(e), C(r), f(e), r;
}
if (a === "audio") {
@@ -9372,7 +9295,7 @@ function Br({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: r }) {
let t = document.createElement("div");
t.className = "mjr-filmstrip-audio-thumb";
let n = document.createElement("span");
- n.className = "mjr-filmstrip-audio-label", n.textContent = "AUDIO", Pr(t, e?._mjrAsset?.filename || e?.dataset?.mjrId || "audio"), t.appendChild(n);
+ n.className = "mjr-filmstrip-audio-label", n.textContent = "AUDIO", Ar(t, e?._mjrAsset?.filename || e?.dataset?.mjrId || "audio"), t.appendChild(n);
try {
e.appendChild(t);
} catch (e) {
@@ -9476,11 +9399,11 @@ function Br({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: r }) {
};
}
// ui/features/viewer/viewerShell.ts
-function Vr() {
+function Lr() {
let e = document.createElement("div");
return e.className = "mjr-viewer-overlay mjr-assets-manager", e.style.cssText = "\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: linear-gradient(180deg, rgba(6, 8, 12, 0.94), rgba(5, 7, 10, 0.985));\n z-index: 10000;\n pointer-events: auto;\n display: none;\n flex-direction: column;\n box-sizing: border-box;\n overflow: hidden;\n ", e.tabIndex = -1, e.setAttribute("role", "dialog"), e;
}
-function Hr({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: r }) {
+function Rr({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: r }) {
let i = document.createElement("div");
i.className = "mjr-viewer-content-row", i.style.cssText = "\n flex: 1;\n display: flex;\n min-height: 0;\n overflow: hidden;\n min-width: 0;\n ";
let a = document.createElement("div");
@@ -9507,7 +9430,7 @@ function Hr({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: r }) {
top: 16px;
right: 16px;
bottom: 16px;
- width: ${Cr};
+ width: ${yr};
display: none;
flex-direction: column;
overflow: hidden;
@@ -9529,7 +9452,7 @@ function Hr({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: r }) {
top: 16px;
left: 16px;
bottom: 16px;
- width: ${Cr};
+ width: ${yr};
display: none;
flex-direction: column;
overflow: hidden;
@@ -9547,11 +9470,11 @@ function Hr({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: r }) {
x.style.cssText = "\n flex: 1;\n overflow: auto;\n padding: 14px;\n color: rgba(255,255,255,0.92);\n ", v.appendChild(y), v.appendChild(x), i.appendChild(a);
let S = document.createElement("div");
S.className = "mjr-viewer-footer", S.style.cssText = "\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 20px;\n background: rgba(13, 16, 22, 0.78);\n border-top: 1px solid rgba(255, 255, 255, 0.1);\n color: white;\n gap: 14px 20px;\n flex-wrap: wrap;\n ";
- let C = Ln("<", "Previous (Left Arrow)");
+ let C = Nn("<", "Previous (Left Arrow)");
C.classList.add("mjr-viewer-nav-btn", "mjr-viewer-nav-btn--prev"), C.style.fontSize = "24px";
let w = document.createElement("span");
w.className = "mjr-viewer-index", w.style.cssText = "font-size: 14px; font-weight: 500;";
- let T = Ln(">", "Next (Right Arrow)");
+ let T = Nn(">", "Next (Right Arrow)");
T.classList.add("mjr-viewer-nav-btn", "mjr-viewer-nav-btn--next"), T.style.fontSize = "24px";
let E = document.createElement("div");
E.className = "mjr-viewer-nav", E.style.cssText = "display:flex; align-items:center; gap:20px;", E.appendChild(C), E.appendChild(w), E.appendChild(T);
@@ -9579,7 +9502,7 @@ function Hr({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: r }) {
nextBtn: T,
navBar: E,
playerBarHost: D,
- filmstrip: Br({
+ filmstrip: Ir({
state: e,
buildAssetViewURL: t,
onNavigate: n,
@@ -9588,7 +9511,7 @@ function Hr({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: r }) {
};
}
// ui/features/viewer/viewerOverlayDismiss.ts
-function Ur({ overlay: e, requestClose: t }) {
+function zr({ overlay: e, requestClose: t }) {
try {
let n = null;
e.addEventListener("pointerdown", (e) => {
@@ -9608,7 +9531,7 @@ function Ur({ overlay: e, requestClose: t }) {
if (Math.hypot(t, r) > 6 || Date.now() - n.t > 600) return;
}
let r = e.target;
- if (dt(r, ".mjr-viewer-header") || dt(r, ".mjr-viewer-footer") || dt(r, ".mjr-viewer-geninfo") || dt(r, ".mjr-video-controls") || dt(r, ".mjr-context-menu") || dt(r, ".mjr-ab-slider") || dt(r, ".mjr-viewer-loupe") || dt(r, ".mjr-viewer-probe") || dt(r, ".mjr-viewer-media") || r && (r.tagName === "IMG" || r.tagName === "VIDEO" || r.tagName === "CANVAS")) return;
+ if (st(r, ".mjr-viewer-header") || st(r, ".mjr-viewer-footer") || st(r, ".mjr-viewer-geninfo") || st(r, ".mjr-video-controls") || st(r, ".mjr-context-menu") || st(r, ".mjr-ab-slider") || st(r, ".mjr-viewer-loupe") || st(r, ".mjr-viewer-probe") || st(r, ".mjr-viewer-media") || r && (r.tagName === "IMG" || r.tagName === "VIDEO" || r.tagName === "CANVAS")) return;
t?.();
} catch (e) {
console.debug?.(e);
@@ -9619,20 +9542,20 @@ function Ur({ overlay: e, requestClose: t }) {
}
}
// ui/components/ViewerRuntime.ts
-var Wr = null, Gr = null, Kr = null, qr = null, Jr = null, Yr = null;
-function Xr() {
- Wr || import("./abCompare-BUrGm4-x.js").then((e) => {
+var Br = null, Vr = null, Hr = null, Ur = null, Wr = null, Gr = null;
+function Kr() {
+ Br || import("./abCompare-BUrGm4-x.js").then((e) => {
+ Br = e;
+ }), Vr || import("./sideBySide-DEEkMdvW.js").then((e) => {
+ Vr = e;
+ }), Hr || import("./model3dRenderer-BsJ9YHaZ.js").then((e) => e.t).then((e) => {
+ Hr = e;
+ }), Ur || import("./scopes-bvTRS68K.js").then((e) => {
+ Ur = e;
+ }), Wr || import("./genInfo-B60U6rEQ.js").then((e) => e.n).then((e) => {
Wr = e;
- }), Gr || import("./sideBySide-DEEkMdvW.js").then((e) => {
+ }), Gr || import("./frameExport-CnNO7oN6.js").then((e) => {
Gr = e;
- }), Kr || import("./model3dRenderer-BsJ9YHaZ.js").then((e) => e.t).then((e) => {
- Kr = e;
- }), qr || import("./scopes-bvTRS68K.js").then((e) => {
- qr = e;
- }), Jr || import("./genInfo-C3ZF_agc.js").then((e) => e.n).then((e) => {
- Jr = e;
- }), Yr || import("./frameExport-CnNO7oN6.js").then((e) => {
- Yr = e;
});
}
var $ = {
@@ -9640,12 +9563,12 @@ var $ = {
AB_COMPARE: "ab",
SIDE_BY_SIDE: "sidebyside"
};
-function Zr() {
- Xr(), Er();
- let e = Vr(), t = In(e), a = t.unsubs || [], s = te();
+function qr() {
+ Kr(), Sr();
+ let e = Lr(), t = Mn(e), a = t.unsubs || [], s = te();
s.mode = $.SINGLE;
try {
- let e = Nn();
+ let e = kn();
e && typeof e == "object" && (typeof e.analysisMode == "string" && (s.analysisMode = e.analysisMode || "none"), typeof e.loupeEnabled == "boolean" && (s.loupeEnabled = e.loupeEnabled), typeof e.probeEnabled == "boolean" && (s.probeEnabled = e.probeEnabled), typeof e.hudEnabled == "boolean" && (s.hudEnabled = e.hudEnabled), typeof e.genInfoOpen == "boolean" && (s.genInfoOpen = e.genInfoOpen), typeof e.audioVisualizerMode == "string" && (s.audioVisualizerMode = e.audioVisualizerMode || "artistic"), typeof e.abWipePercent == "number" && Number.isFinite(e.abWipePercent) && e.abWipePercent >= 0 && e.abWipePercent <= 100 && (s._abWipePercent = e.abWipePercent));
} catch (e) {
console.debug?.(e);
@@ -9758,7 +9681,7 @@ function Zr() {
function M() {
let e = !1;
try {
- let t = s.mode === $.AB_COMPARE ? V : s.mode === $.SIDE_BY_SIDE ? H : B, n = Array.from(t?.querySelectorAll?.(".mjr-viewer-audio-viz") || []);
+ let t = s.mode === $.AB_COMPARE ? H : s.mode === $.SIDE_BY_SIDE ? U : V, n = Array.from(t?.querySelectorAll?.(".mjr-viewer-audio-viz") || []);
for (let t of n) try {
let n = t?._mjrProc || null;
if (!n?.setMode) continue;
@@ -9784,7 +9707,7 @@ function Zr() {
console.debug?.(e);
}
try {
- N = Un({
+ N = zn({
VIEWER_MODES: $,
state: s,
lifecycle: t,
@@ -9808,8 +9731,8 @@ function Zr() {
onClose: () => ee?.(),
onMode: (e) => {
try {
- if (e === $.AB_COMPARE && !Xe() || e === $.SIDE_BY_SIDE && !Y()) return;
- s.mode = e, Qe();
+ if (e === $.AB_COMPARE && !Xe() || e === $.SIDE_BY_SIDE && !Ze()) return;
+ s.mode = e, $e();
try {
N?.syncToolsUIFromState?.();
} catch (e) {
@@ -9878,21 +9801,21 @@ function Zr() {
},
onCompareModeChanged: () => {
try {
- s.mode === $.AB_COMPARE && (et(), st());
+ s.mode === $.AB_COMPARE && (tt(), st());
} catch (e) {
console.debug?.(e);
}
},
onExportFrame: () => {
try {
- Je({ toClipboard: !1 });
+ qe({ toClipboard: !1 });
} catch (e) {
console.debug?.(e);
}
},
onCopyFrame: () => {
try {
- Je({ toClipboard: !0 });
+ qe({ toClipboard: !0 });
} catch (e) {
console.debug?.(e);
}
@@ -9901,7 +9824,7 @@ function Zr() {
try {
let e = s.assets[s.currentIndex];
if (String(e?.kind || "") !== "audio") return;
- M() || (et(), st());
+ M() || (tt(), st());
} catch (e) {
console.debug?.(e);
}
@@ -9913,35 +9836,35 @@ function Zr() {
console.debug?.(e);
}
try {
- Pn(s);
+ An(s);
} catch (e) {
console.debug?.(e);
}
try {
- Ze();
+ Qe();
} catch (e) {
console.debug?.(e);
}
try {
if (s.mode === $.AB_COMPARE) {
let e = String(s.abCompareMode || "wipe");
- e !== "wipe" && e !== "wipeV" && V?._mjrDiffRequest?.();
+ e !== "wipe" && e !== "wipeV" && H?._mjrDiffRequest?.();
}
} catch (e) {
console.debug?.(e);
}
try {
- s.probeEnabled || (me.style.display = "none");
+ s.probeEnabled || (pe.style.display = "none");
} catch (e) {
console.debug?.(e);
}
try {
- s.loupeEnabled || (he.style.display = "none");
+ s.loupeEnabled || (me.style.display = "none");
} catch (e) {
console.debug?.(e);
}
try {
- J();
+ Y();
} catch (e) {
console.debug?.(e);
}
@@ -9951,7 +9874,7 @@ function Zr() {
console.debug?.(e);
}
try {
- Ke();
+ Ge();
} catch (e) {
console.debug?.(e);
}
@@ -9960,12 +9883,12 @@ function Zr() {
} catch (e) {
console.debug?.(e);
}
- let { contentRow: z, content: fe, singleView: B, abView: V, sideView: H, overlayLayer: pe, gridCanvas: U, probeTooltip: me, loupeWrap: he, loupeCanvas: ge, genInfoOverlay: _e, genInfoTitle: W, genInfoBody: G, genInfoOverlayLeft: K, genInfoTitleLeft: ve, genInfoBodyLeft: ye, footer: q, prevBtn: be, indexInfo: xe, nextBtn: Se, navBar: Ce, playerBarHost: we, filmstrip: Te } = Hr({
+ let { contentRow: z, content: B, singleView: V, abView: H, sideView: U, overlayLayer: fe, gridCanvas: W, probeTooltip: pe, loupeWrap: me, loupeCanvas: he, genInfoOverlay: ge, genInfoTitle: G, genInfoBody: K, genInfoOverlayLeft: q, genInfoTitleLeft: _e, genInfoBodyLeft: ve, footer: J, prevBtn: ye, indexInfo: be, nextBtn: xe, navBar: Se, playerBarHost: Ce, filmstrip: we } = Rr({
state: s,
buildAssetViewURL: v,
onNavigate: (e) => {
try {
- s.compareAsset != null && (s.compareAsset = null, s.mode = $.SINGLE), s.currentIndex = e, Qe();
+ s.compareAsset != null && (s.compareAsset = null, s.mode = $.SINGLE), s.currentIndex = e, $e();
} catch (e) {
console.debug?.(e);
}
@@ -9975,17 +9898,17 @@ function Zr() {
let t = Array.isArray(s.assets) ? s.assets : [], n = t[e];
if (!n || n === t[s.currentIndex]) return;
if (n === s.compareAsset) {
- s.compareAsset = null, s.mode = $.SINGLE, Qe();
+ s.compareAsset = null, s.mode = $.SINGLE, $e();
return;
}
- t.length === 2 ? (s.compareAsset = t[1 - s.currentIndex], s.mode = De() ? $.SIDE_BY_SIDE : $.AB_COMPARE) : (s.compareAsset = n, s.mode = Y() ? $.SIDE_BY_SIDE : $.AB_COMPARE), Qe();
+ t.length === 2 ? (s.compareAsset = t[1 - s.currentIndex], s.mode = Ee() ? $.SIDE_BY_SIDE : $.AB_COMPARE) : (s.compareAsset = n, s.mode = Ze() ? $.SIDE_BY_SIDE : $.AB_COMPARE), $e();
} catch (e) {
console.debug?.(e);
}
}
});
e.appendChild(P), e.appendChild(z);
- function Ee() {
+ function Te() {
try {
if (s.compareAsset) return s.compareAsset;
let e = Array.isArray(s.assets) ? s.assets : [];
@@ -9995,109 +9918,109 @@ function Zr() {
}
return null;
}
- function De() {
+ function Ee() {
try {
let e = s.assets?.[s.currentIndex] || null;
- return (Kr?.isModel3DAsset?.(e) ?? !1) || (Kr?.isModel3DAsset?.(Ee()) ?? !1);
+ return (Hr?.isModel3DAsset?.(e) ?? !1) || (Hr?.isModel3DAsset?.(Te()) ?? !1);
} catch (e) {
console.debug?.(e);
}
return !1;
}
- e.appendChild(Te.el), e.appendChild(q), e.appendChild(_e), e.appendChild(K), Ur({
+ e.appendChild(we.el), e.appendChild(J), e.appendChild(ge), e.appendChild(q), zr({
overlay: e,
requestClose: () => ee()
});
- let Oe = Zn({
+ let De = qn({
state: s,
VIEWER_MODES: $,
APP_CONFIG: E,
getAssetMetadata: o,
getAssetsBatch: r
- }), ke = 3e5, Ae = /* @__PURE__ */ new Map(), je = () => {
+ }), Oe = 3e5, ke = /* @__PURE__ */ new Map(), Ae = () => {
try {
let e = Date.now();
- for (let [t, n] of Ae.entries()) {
+ for (let [t, n] of ke.entries()) {
let r = Number(n?.at) || 0;
- (!r || e - r > ke) && Ae.delete(t);
+ (!r || e - r > Oe) && ke.delete(t);
}
- if (Ae.size <= 256) return;
- let t = Array.from(Ae.entries()).sort((e, t) => (Number(e?.[1]?.at) || 0) - (Number(t?.[1]?.at) || 0)), n = Ae.size - 256;
+ if (ke.size <= 256) return;
+ let t = Array.from(ke.entries()).sort((e, t) => (Number(e?.[1]?.at) || 0) - (Number(t?.[1]?.at) || 0)), n = ke.size - 256;
for (let e = 0; e < n; e += 1) {
let n = t?.[e]?.[0];
- n != null && Ae.delete(n);
+ n != null && ke.delete(n);
}
} catch (e) {
console.debug?.(e);
}
- }, Me = (e) => {
+ }, je = (e) => {
try {
let t = String(e ?? "");
if (!t) return null;
- let n = Ae.get(t);
+ let n = ke.get(t);
if (!n || typeof n != "object") return null;
let r = Number(n?.at) || 0;
- return !r || Date.now() - r > ke ? (Ae.delete(t), null) : n?.data || null;
+ return !r || Date.now() - r > Oe ? (ke.delete(t), null) : n?.data || null;
} catch {
return null;
}
- }, Ne = (e, t) => {
+ }, Me = (e, t) => {
try {
let n = String(e ?? "");
if (!n || !t) return;
- Ae.set(n, {
+ ke.set(n, {
data: t,
at: Date.now()
- }), je();
+ }), Ae();
} catch (e) {
console.debug?.(e);
}
- }, Pe = async () => {
+ }, Ne = async () => {
try {
- await Oe?.hydrateVisibleMetadata?.();
+ await De?.hydrateVisibleMetadata?.();
} catch (e) {
console.debug?.(e);
}
};
try {
- u = $n({
+ u = Yn({
overlay: e,
- content: fe,
- singleView: B,
- abView: V,
- sideView: H,
+ content: B,
+ singleView: V,
+ abView: H,
+ sideView: U,
state: s,
VIEWER_MODES: $,
- scheduleOverlayRedraw: J,
+ scheduleOverlayRedraw: Y,
lifecycle: t
});
} catch {
u = null;
}
- let Fe = (e, t, n) => {
+ let Pe = (e, t, n) => {
try {
e.clearRect(0, 0, t, n);
} catch (e) {
console.debug?.(e);
}
- }, Ie = null;
- function J(t) {
+ }, Fe = null;
+ function Y(t) {
try {
if (e.style.display === "none") return;
if (t === !0) {
- Ie != null && (cancelAnimationFrame(Ie), Ie = null);
+ Fe != null && (cancelAnimationFrame(Fe), Fe = null);
try {
- Re();
+ Le();
} catch (e) {
console.debug?.(e);
}
return;
}
- if (Ie != null) return;
- Ie = requestAnimationFrame(() => {
- Ie = null;
+ if (Fe != null) return;
+ Fe = requestAnimationFrame(() => {
+ Fe = null;
try {
- Re();
+ Le();
} catch (e) {
console.debug?.(e);
}
@@ -10106,24 +10029,24 @@ function Zr() {
console.debug?.(e);
}
}
- let Le = Jn({
- gridCanvas: U,
- content: fe,
+ let Ie = Wn({
+ gridCanvas: W,
+ content: B,
state: s,
VIEWER_MODES: $,
getPrimaryMedia: () => {
try {
- if (s?.mode === $.SINGLE) return B?.querySelector?.(".mjr-viewer-media") || null;
- if (s?.mode === $.AB_COMPARE) return V?.querySelector?.(".mjr-viewer-media") || null;
- if (s?.mode === $.SIDE_BY_SIDE) return H?.querySelector?.(".mjr-viewer-media") || null;
+ if (s?.mode === $.SINGLE) return V?.querySelector?.(".mjr-viewer-media") || null;
+ if (s?.mode === $.AB_COMPARE) return H?.querySelector?.(".mjr-viewer-media") || null;
+ if (s?.mode === $.SIDE_BY_SIDE) return U?.querySelector?.(".mjr-viewer-media") || null;
} catch (e) {
console.debug?.(e);
}
return null;
},
getViewportRect: C,
- clearCanvas: Fe
- }), Re = () => {
+ clearCanvas: Pe
+ }), Le = () => {
let t = (() => {
try {
let e = Number(s?._panHintAt) || 0;
@@ -10134,26 +10057,26 @@ function Zr() {
})();
try {
let e = s?.mode === $.SINGLE && !!s?.hudEnabled, n = String(s?.scopesMode || "off") !== "off", r = !!s?.overlayMaskEnabled;
- U.style.display = s.gridMode === 0 && !r && !t && !e && !n ? "none" : "";
+ W.style.display = s.gridMode === 0 && !r && !t && !e && !n ? "none" : "";
} catch (e) {
console.debug?.(e);
}
- let n = Le.ensureCanvasSize();
+ let n = Ie.ensureCanvasSize();
if (n.w > 0 && n.h > 0) {
if ((() => {
let e = s?.mode === $.SINGLE && !!s?.hudEnabled;
return (Number(s.gridMode) || 0) !== 0 || !!s?.overlayMaskEnabled || e;
- })()) Le.redrawGrid(n);
+ })()) Ie.redrawGrid(n);
else try {
- let e = U.getContext("2d");
- e && Fe(e, n.w, n.h);
+ let e = W.getContext("2d");
+ e && Pe(e, n.w, n.h);
} catch (e) {
console.debug?.(e);
}
if (t) try {
- let e = U.getContext("2d");
+ let e = W.getContext("2d");
if (e) {
- let t = fe?.getBoundingClientRect?.(), r = Number(s?._panHintX), i = Number(s?._panHintY), a = t && Number.isFinite(r) ? r - t.left : n.w / 2, o = t && Number.isFinite(i) ? i - t.top : n.h * .78, c = Math.max(10, Math.min(n.w - 10, a)), l = Math.max(10, Math.min(n.h - 10, o));
+ let t = B?.getBoundingClientRect?.(), r = Number(s?._panHintX), i = Number(s?._panHintY), a = t && Number.isFinite(r) ? r - t.left : n.w / 2, o = t && Number.isFinite(i) ? i - t.top : n.h * .78, c = Math.max(10, Math.min(n.w - 10, a)), l = Math.max(10, Math.min(n.h - 10, o));
e.save(), e.font = "12px var(--comfy-font, ui-sans-serif, system-ui)", e.textAlign = "center", e.textBaseline = "middle";
let u = "Zoom in to pan", d = e.measureText(u), f = Math.min(n.w - 20, Math.max(140, d.width + 26));
e.fillStyle = "rgba(0,0,0,0.65)", e.strokeStyle = "rgba(255,255,255,0.18)", e.lineWidth = 1, e.beginPath();
@@ -10166,12 +10089,12 @@ function Zr() {
try {
let t = String(s?.scopesMode || "off");
if (t !== "off") {
- let r = U.getContext("2d");
+ let r = W.getContext("2d");
if (r) {
- let i = B;
- s?.mode === $.AB_COMPARE ? i = V : s?.mode === $.SIDE_BY_SIDE && (i = H);
+ let i = V;
+ s?.mode === $.AB_COMPARE ? i = H : s?.mode === $.SIDE_BY_SIDE && (i = U);
let a = i?.querySelector?.("canvas.mjr-viewer-media") || e?.querySelector?.("canvas.mjr-viewer-media");
- a && a instanceof HTMLCanvasElement && qr?.drawScopesLight?.(r, {
+ a && a instanceof HTMLCanvasElement && Ur?.drawScopesLight?.(r, {
w: n.w,
h: n.h
}, a, {
@@ -10185,18 +10108,18 @@ function Zr() {
}
if (s.mode !== $.SINGLE) {
try {
- me.style.display = "none";
+ pe.style.display = "none";
} catch (e) {
console.debug?.(e);
}
try {
- he.style.display = "none";
+ me.style.display = "none";
} catch (e) {
console.debug?.(e);
}
}
}
- }, ze = (e) => {
+ }, Re = (e) => {
if (e) {
try {
for (let t of Array.from(e.childNodes || [])) try {
@@ -10213,7 +10136,7 @@ function Zr() {
console.debug?.(e);
}
}
- }, Be = () => {
+ }, ze = () => {
try {
s._genInfoAbort?.abort?.();
} catch (e) {
@@ -10227,10 +10150,10 @@ function Zr() {
}
}, Ve = async (e, { signal: t } = {}) => {
try {
- return await Jr?.ensureViewerMetadataAsset?.(e, {
+ return await Wr?.ensureViewerMetadataAsset?.(e, {
getAssetMetadata: o,
getFileMetadataScoped: m,
- metadataCache: Oe,
+ metadataCache: De,
signal: t
});
} catch {
@@ -10266,27 +10189,27 @@ function Zr() {
}
}, We = () => {
try {
- return !!(G?.childNodes?.length || ye?.childNodes?.length);
+ return !!(K?.childNodes?.length || ve?.childNodes?.length);
} catch {
return !1;
}
- }, Ke = async () => {
- let t = Xe(), n = Y(), r = s.mode, i = !!s?.genInfoOpen && !s?.distractionFree, a = s?.assets?.[s?.currentIndex] || null, o = i && (r === $.AB_COMPARE && t || r === $.SIDE_BY_SIDE && n), c = o && r === $.SIDE_BY_SIDE && !s?.compareAsset && (s?.assets?.length ?? 0) > 2;
+ }, Ge = async () => {
+ let t = Xe(), n = Ze(), r = s.mode, i = !!s?.genInfoOpen && !s?.distractionFree, a = s?.assets?.[s?.currentIndex] || null, o = i && (r === $.AB_COMPARE && t || r === $.SIDE_BY_SIDE && n), c = o && r === $.SIDE_BY_SIDE && !s?.compareAsset && (s?.assets?.length ?? 0) > 2;
try {
- if (_e.style.display = i ? "flex" : "none", K.style.display = o ? "flex" : "none", e.style.paddingRight = i ? wr : "0px", e.style.paddingLeft = o ? wr : "0px", !i) {
- Be();
+ if (ge.style.display = i ? "flex" : "none", q.style.display = o ? "flex" : "none", e.style.paddingRight = i ? br : "0px", e.style.paddingLeft = o ? br : "0px", !i) {
+ ze();
try {
s._genInfoRenderSignature = "";
} catch (e) {
console.debug?.(e);
}
try {
- ze(G);
+ Re(K);
} catch (e) {
console.debug?.(e);
}
try {
- ze(ye);
+ Re(ve);
} catch (e) {
console.debug?.(e);
}
@@ -10314,7 +10237,7 @@ function Zr() {
} catch (e) {
console.debug?.(e);
}
- Be();
+ ze();
let u = (Number(s?._genInfoReqId) || 0) + 1;
try {
s._genInfoReqId = u;
@@ -10326,27 +10249,27 @@ function Zr() {
let f = ({ left: e = null, leftExtra: t = null, right: n = null, rightExtra: r = null, single: i = null } = {}) => {
try {
if (s._genInfoReqId !== u) return;
- ze(G);
+ Re(K);
} catch (e) {
console.debug?.(e);
}
try {
if (s._genInfoReqId !== u) return;
- ze(ye);
+ Re(ve);
} catch (e) {
console.debug?.(e);
}
if (s._genInfoReqId !== u) return;
let a = () => {
try {
- s?.genInfoOpen || (s.genInfoOpen = !0), s._genInfoRenderSignature = "", Ke();
+ s?.genInfoOpen || (s.genInfoOpen = !0), s._genInfoRenderSignature = "", Ge();
} catch (e) {
console.debug?.(e);
}
}, l = (e, t, n, r) => {
if (e) try {
try {
- let i = Jr?.buildViewerMetadataBlocks?.({
+ let i = Wr?.buildViewerMetadataBlocks?.({
title: t,
asset: n,
ui: {
@@ -10394,13 +10317,13 @@ function Zr() {
}
};
if (o) {
- if (e && (ve.textContent = e.title || "Asset A", l(ye, t ? "Asset A" : "", e.asset, e.loading)), t && l(ye, "Asset C", t.asset, t.loading), n && (W.textContent = n.title || "Asset B", l(G, r ? "Asset B" : "", n.asset, n.loading)), r && l(G, "Asset D", r.asset, r.loading), !c && e?.asset && n?.asset && !e.loading && !n.loading) try {
- let t = br(e.asset, n.asset);
- t && G.insertBefore(t, G.firstChild || null);
+ if (e && (_e.textContent = e.title || "Asset A", l(ve, t ? "Asset A" : "", e.asset, e.loading)), t && l(ve, "Asset C", t.asset, t.loading), n && (G.textContent = n.title || "Asset B", l(K, r ? "Asset B" : "", n.asset, n.loading)), r && l(K, "Asset D", r.asset, r.loading), !c && e?.asset && n?.asset && !e.loading && !n.loading) try {
+ let t = gr(e.asset, n.asset);
+ t && K.insertBefore(t, K.firstChild || null);
} catch (e) {
console.debug?.(e);
}
- } else i && (W.textContent = i.title || "Generation Info", l(G, "", i.asset, i.loading));
+ } else i && (G.textContent = i.title || "Generation Info", l(K, "", i.asset, i.loading));
};
try {
if (!a) {
@@ -10409,7 +10332,7 @@ function Zr() {
}
let e = null, t = null, n = null, i = null, l = null;
o ? r === $.SIDE_BY_SIDE ? s?.compareAsset ? (e = a, t = s.compareAsset) : (e = s.assets[0] || null, t = s.assets[1] || null, c && (n = s.assets[2] || null, i = s.assets[3] || null)) : (e = a, t = s?.compareAsset || (s.assets.length === 2 ? s.assets[1 - s.currentIndex] : null)) : l = a;
- let p = (e) => e ? Oe?.getCached?.(e.id)?.data || e : null;
+ let p = (e) => e ? De?.getCached?.(e.id)?.data || e : null;
if (f({
left: o ? {
title: c ? "Assets A & C" : "Asset A",
@@ -10470,21 +10393,21 @@ function Zr() {
} catch (e) {
console.debug?.(e);
}
- }, qe = null;
- function Je(e) {
+ }, Ke = null;
+ function qe(e) {
try {
- return !qe && Yr && (qe = Yr.createFrameExporter({
+ return !Ke && Gr && (Ke = Gr.createFrameExporter({
state: s,
VIEWER_MODES: $,
- singleView: B,
- abView: V,
- sideView: H
- })), qe?.exportCurrentFrame?.(e);
+ singleView: V,
+ abView: H,
+ sideView: U
+ })), Ke?.exportCurrentFrame?.(e);
} catch (e) {
console.debug?.(e);
}
}
- let Ye = () => {
+ let Je = () => {
let e = (e) => {
try {
e && e.replaceChildren();
@@ -10499,19 +10422,19 @@ function Zr() {
n.className = "mjr-viewer-asset-pill", n.style.cssText = "\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 2px 8px;\n border-radius: 999px;\n border: 1px solid rgba(255,255,255,0.14);\n background: rgba(255,255,255,0.08);\n font-size: 12px;\n max-width: 360px;\n overflow: hidden;\n ";
let r = document.createElement("span");
r.textContent = String(e.filename || ""), r.style.cssText = "max-width:200px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; opacity:0.95;";
- let i = Ge(e.filename, e.kind, !!e?._mjrNameCollision);
+ let i = Be(e.filename, e.kind, !!e?._mjrNameCollision);
try {
i.style.position = "static", i.style.top = "", i.style.left = "", i.style.padding = "2px 6px", i.style.fontSize = "10px", i.style.borderRadius = "6px", i.style.pointerEvents = "none";
} catch (e) {
console.debug?.(e);
}
- let a = $e(e.rating || 0);
+ let a = Ye(e.rating || 0);
if (a) try {
a.style.position = "static", a.style.top = "", a.style.right = "", a.style.padding = "2px 6px", a.style.fontSize = "12px";
} catch (e) {
console.debug?.(e);
}
- let o = it(Array.isArray(e.tags) ? e.tags : []);
+ let o = et(Array.isArray(e.tags) ? e.tags : []);
if (o) try {
o.style.position = "static", o.style.bottom = "", o.style.left = "", o.style.maxWidth = "220px", o.style.pointerEvents = "none";
} catch (e) {
@@ -10524,7 +10447,7 @@ function Zr() {
console.debug?.(e);
}
return n;
- }, n = s.mode === $.SINGLE, r = s.mode === $.AB_COMPARE && Xe(), i = s.mode === $.SIDE_BY_SIDE && Y();
+ }, n = s.mode === $.SINGLE, r = s.mode === $.AB_COMPARE && Xe(), i = s.mode === $.SIDE_BY_SIDE && Ze();
if ((r || i) && ie) {
let e = s.assets?.[s.currentIndex] || null, n = i && s.compareAsset != null, a = r ? s.compareAsset == null ? s.assets?.[0] || null : e : n ? e : s.assets?.[0] || null, o = r ? s.compareAsset == null ? s.assets?.[1] || null : s.compareAsset : n ? s.compareAsset : s.assets?.[Math.max(0, (s.assets?.length || 1) - 1)] || null, c = t(a, { showName: !1 }), l = t(o, { showName: !1 });
try {
@@ -10550,13 +10473,13 @@ function Zr() {
}
};
function Xe() {
- return (s.assets.length === 2 || s.compareAsset != null) && !De();
+ return (s.assets.length === 2 || s.compareAsset != null) && !Ee();
}
- function Y() {
+ function Ze() {
let e = s.assets.length;
return e >= 2 && e <= 4 || e >= 1 && s.compareAsset != null;
}
- function Ze() {
+ function Qe() {
let t = !!s?.distractionFree;
try {
P.style.display = t ? "none" : "";
@@ -10564,7 +10487,7 @@ function Zr() {
console.debug?.(e);
}
try {
- q.style.display = t ? "none" : "";
+ J.style.display = t ? "none" : "";
} catch (e) {
console.debug?.(e);
}
@@ -10574,19 +10497,19 @@ function Zr() {
console.debug?.(e);
}
try {
- t && (e.style.paddingRight = "0px", e.style.paddingLeft = "0px", _e.style.display = "none", K.style.display = "none");
+ t && (e.style.paddingRight = "0px", e.style.paddingLeft = "0px", ge.style.display = "none", q.style.display = "none");
} catch (e) {
console.debug?.(e);
}
}
- function Qe() {
+ function $e() {
s.zoom = 1, s.panX = 0, s.panY = 0, s.targetZoom = 1;
try {
s.mode !== $.AB_COMPARE && s.mode !== $.SIDE_BY_SIDE && s.compareAsset != null && (s.compareAsset = null);
} catch (e) {
console.debug?.(e);
}
- let e = s.assets[s.currentIndex], t = s.mode === $.AB_COMPARE && Xe(), n = s.mode === $.SIDE_BY_SIDE && Y(), r = t && s.compareAsset != null, i = n && s.compareAsset != null, a = t ? (r ? e : s.assets?.[0]) || null : n ? (i ? e : s.assets?.[0]) || null : e || null, o = t ? (r ? s.compareAsset : s.assets?.[1]) || null : n ? i ? s.compareAsset : Array.isArray(s.assets) && s.assets.length >= 2 ? s.assets[s.assets.length - 1] : null : null;
+ let e = s.assets[s.currentIndex], t = s.mode === $.AB_COMPARE && Xe(), n = s.mode === $.SIDE_BY_SIDE && Ze(), r = t && s.compareAsset != null, i = n && s.compareAsset != null, a = t ? (r ? e : s.assets?.[0]) || null : n ? (i ? e : s.assets?.[0]) || null : e || null, o = t ? (r ? s.compareAsset : s.assets?.[1]) || null : n ? i ? s.compareAsset : Array.isArray(s.assets) && s.assets.length >= 2 ? s.assets[s.assets.length - 1] : null : null;
try {
F.textContent = a?.filename || "";
} catch (e) {
@@ -10597,46 +10520,46 @@ function Zr() {
} catch (e) {
console.debug?.(e);
}
- s.mode === $.AB_COMPARE && Xe() ? xe.textContent = "2 selected" : s.mode === $.SIDE_BY_SIDE && Y() ? xe.textContent = s.compareAsset == null ? `${s.assets.length} selected` : "2 selected" : xe.textContent = `${s.currentIndex + 1} / ${s.assets.length}`, s.mode === $.AB_COMPARE && !Xe() && (s.mode = Y() ? $.SIDE_BY_SIDE : $.SINGLE), s.mode === $.SIDE_BY_SIDE && !Y() && (s.mode = $.SINGLE);
+ s.mode === $.AB_COMPARE && Xe() ? be.textContent = "2 selected" : s.mode === $.SIDE_BY_SIDE && Ze() ? be.textContent = s.compareAsset == null ? `${s.assets.length} selected` : "2 selected" : be.textContent = `${s.currentIndex + 1} / ${s.assets.length}`, s.mode === $.AB_COMPARE && !Xe() && (s.mode = Ze() ? $.SIDE_BY_SIDE : $.SINGLE), s.mode === $.SIDE_BY_SIDE && !Ze() && (s.mode = $.SINGLE);
try {
N?.syncModeButtons?.({
canAB: Xe,
- canSide: Y
+ canSide: Ze
});
} catch (e) {
console.debug?.(e);
}
- B.style.display = s.mode === $.SINGLE ? "flex" : "none", V.style.display = s.mode === $.AB_COMPARE ? "block" : "none", H.style.display = s.mode === $.SIDE_BY_SIDE ? "flex" : "none";
+ V.style.display = s.mode === $.SINGLE ? "flex" : "none", H.style.display = s.mode === $.AB_COMPARE ? "block" : "none", U.style.display = s.mode === $.SIDE_BY_SIDE ? "flex" : "none";
try {
- s.mode !== $.SINGLE && (Fn(B), B.replaceChildren());
+ s.mode !== $.SINGLE && (jn(V), V.replaceChildren());
} catch (e) {
console.debug?.(e);
}
try {
- s.mode !== $.AB_COMPARE && (Fn(V), V.replaceChildren());
+ s.mode !== $.AB_COMPARE && (jn(H), H.replaceChildren());
} catch (e) {
console.debug?.(e);
}
try {
- s.mode !== $.SIDE_BY_SIDE && (Fn(H), H.replaceChildren());
+ s.mode !== $.SIDE_BY_SIDE && (jn(U), U.replaceChildren());
} catch (e) {
console.debug?.(e);
}
- Ye();
- let c = s.mode === $.AB_COMPARE && Xe() || s.mode === $.SIDE_BY_SIDE && Y();
+ Je();
+ let c = s.mode === $.AB_COMPARE && Xe() || s.mode === $.SIDE_BY_SIDE && Ze();
try {
- be.style.display = c ? "none" : "", Se.style.display = c ? "none" : "";
+ ye.style.display = c ? "none" : "", xe.style.display = c ? "none" : "";
} catch (e) {
console.debug?.(e);
}
- et(), tt(s.assets, s.currentIndex), st();
+ tt(), nt(s.assets, s.currentIndex), st();
try {
N?.syncToolsUIFromState?.();
} catch (e) {
console.debug?.(e);
}
try {
- Ze();
+ Qe();
} catch (e) {
console.debug?.(e);
}
@@ -10645,16 +10568,16 @@ function Zr() {
} catch (e) {
console.debug?.(e);
}
- J();
+ Y();
try {
- Ke();
+ Ge();
} catch (e) {
console.debug?.(e);
}
try {
- Pe().then(() => {
+ Ne().then(() => {
try {
- Ye();
+ Je();
} catch (e) {
console.debug?.(e);
}
@@ -10664,82 +10587,82 @@ function Zr() {
}
try {
let e = s.mode === $.SINGLE;
- Te.sync({ isSingle: e });
+ we.sync({ isSingle: e });
} catch (e) {
console.debug?.(e);
}
}
- function et() {
+ function tt() {
let e = s.assets[s.currentIndex];
if (!e) return;
let t = v(e);
if (t) {
if (s.mode === $.SINGLE) {
try {
- Fn(B);
+ jn(V);
} catch (e) {
console.debug?.(e);
}
- B.innerHTML = "", s._mediaW = 0, s._mediaH = 0;
+ V.innerHTML = "", s._mediaW = 0, s._mediaH = 0;
let n = A(e, t);
- B.appendChild(n);
- } else s.mode === $.AB_COMPARE ? Xe() && Wr?.renderABCompareView?.({
- abView: V,
+ V.appendChild(n);
+ } else s.mode === $.AB_COMPARE ? Xe() && Br?.renderABCompareView?.({
+ abView: H,
state: s,
currentAsset: e,
viewUrl: t,
buildAssetViewURL: v,
createCompareMediaElement: j,
- destroyMediaProcessorsIn: Fn
- }) : s.mode === $.SIDE_BY_SIDE && Y() && Gr?.renderSideBySideView?.({
- sideView: H,
+ destroyMediaProcessorsIn: jn
+ }) : s.mode === $.SIDE_BY_SIDE && Ze() && Vr?.renderSideBySideView?.({
+ sideView: U,
state: s,
currentAsset: e,
viewUrl: t,
buildAssetViewURL: v,
createMediaElement: A,
- destroyMediaProcessorsIn: Fn
+ destroyMediaProcessorsIn: jn
});
g(), y();
} else {
try {
- Fn(B);
+ jn(V);
} catch (e) {
console.debug?.(e);
}
try {
- B.replaceChildren();
+ V.replaceChildren();
let e = document.createElement("div");
- e.className = "mjr-viewer-media", e.style.cssText = "color:#ff9a9a; font-size:13px; padding:16px; text-align:center;", e.textContent = "Cannot open asset: missing or invalid filename/path.", B.appendChild(e);
+ e.className = "mjr-viewer-media", e.style.cssText = "color:#ff9a9a; font-size:13px; padding:16px; text-align:center;", e.textContent = "Cannot open asset: missing or invalid filename/path.", V.appendChild(e);
} catch (e) {
console.debug?.(e);
}
}
}
- let { preloadAdjacentAssets: tt, preloadImageForAsset: nt, trackPreloadRef: rt } = pr({
+ let { preloadAdjacentAssets: nt, preloadImageForAsset: rt, trackPreloadRef: it } = lr({
buildAssetViewURL: v,
IMAGE_PRELOAD_EXTENSIONS: c,
state: s
- }), { destroyPlayerBar: at, syncPlayerBar: ot } = Sr({
+ }), { destroyPlayerBar: at, syncPlayerBar: ot } = vr({
state: s,
APP_CONFIG: E,
VIEWER_MODES: $,
overlay: e,
- navBar: Ce,
- playerBarHost: we,
- singleView: B,
- abView: V,
- sideView: H,
- metadataHydrator: Oe,
- isPlayableViewerKind: On,
- collectPlayableMediaElements: kn,
- pickPrimaryPlayableMedia: An,
- mountUnifiedMediaControls: jn,
- installFollowerVideoSync: qn,
+ navBar: Se,
+ playerBarHost: Ce,
+ singleView: V,
+ abView: H,
+ sideView: U,
+ metadataHydrator: De,
+ isPlayableViewerKind: wn,
+ collectPlayableMediaElements: Tn,
+ pickPrimaryPlayableMedia: En,
+ mountUnifiedMediaControls: Dn,
+ installFollowerVideoSync: Un,
getViewerInfo: p,
- scheduleOverlayRedraw: J,
- viewerInfoCacheGet: Me,
- viewerInfoCacheSet: Ne
+ scheduleOverlayRedraw: Y,
+ viewerInfoCacheGet: je,
+ viewerInfoCacheSet: Me
}), st = () => ot(), ct = E.VIEWER_MAX_PROC_PIXELS ?? 12e6, lt = () => ({
exposureEV: Number(s.exposureEV) || 0,
gamma: Math.max(.1, Math.min(3, Number(s.gamma) || 1)),
@@ -10760,7 +10683,7 @@ function Zr() {
console.debug?.(e);
}
try {
- s?.mode === $.AB_COMPARE && V?._mjrDiffRequest?.();
+ s?.mode === $.AB_COMPARE && H?._mjrDiffRequest?.();
} catch (e) {
console.debug?.(e);
}
@@ -10774,14 +10697,14 @@ function Zr() {
}
}, ft = E.VIEWER_MAX_PROC_PIXELS_VIDEO ?? 3e6, pt = E.VIEWER_VIDEO_GRADE_THROTTLE_FPS ?? 15;
try {
- d = fr({
+ d = cr({
overlay: e,
state: s,
mediaTransform: f,
updateMediaNaturalSize: k,
clampPanToBounds: h,
applyTransform: g,
- scheduleOverlayRedraw: J,
+ scheduleOverlayRedraw: Y,
getGradeParams: lt,
isDefaultGrade: dt,
tonemap: null,
@@ -10795,10 +10718,10 @@ function Zr() {
} catch {
d = null;
}
- a.push(Z(be, "click", () => {
- s.currentIndex > 0 && (s.currentIndex--, Qe());
- })), a.push(Z(Se, "click", () => {
- s.currentIndex < s.assets.length - 1 && (s.currentIndex++, Qe());
+ a.push(Z(ye, "click", () => {
+ s.currentIndex > 0 && (s.currentIndex--, $e());
+ })), a.push(Z(xe, "click", () => {
+ s.currentIndex < s.assets.length - 1 && (s.currentIndex++, $e());
}));
let mt = null, ht = () => {
try {
@@ -10823,7 +10746,7 @@ function Zr() {
}, _t = (e) => {
if (!Array.isArray(s.assets) || s.assets.length === 0) return !1;
let t = s.currentIndex + e;
- return t < 0 || t >= s.assets.length ? !1 : (s.currentIndex = t, Qe(), !0);
+ return t < 0 || t >= s.assets.length ? !1 : (s.currentIndex = t, $e(), !0);
}, vt = (t) => {
if (e.style.display === "none") return;
try {
@@ -10833,12 +10756,12 @@ function Zr() {
console.debug?.(e);
}
try {
- if (!fe.contains(t.target)) return;
+ if (!B.contains(t.target)) return;
} catch (e) {
console.debug?.(e);
}
try {
- if (Kr?.isModel3DInteractionTarget?.(t?.target)) return;
+ if (Hr?.isModel3DInteractionTarget?.(t?.target)) return;
} catch (e) {
console.debug?.(e);
}
@@ -10858,33 +10781,33 @@ function Zr() {
try {
let a = C();
if (!a) return;
- let o = fe.getBoundingClientRect(), s = (Number(t) || 0) - o.left, c = (Number(n) || 0) - o.top, l = Number(e.offsetWidth) || 0, u = Number(e.offsetHeight) || 0, d = s + r, f = c + i;
+ let o = B.getBoundingClientRect(), s = (Number(t) || 0) - o.left, c = (Number(n) || 0) - o.top, l = Number(e.offsetWidth) || 0, u = Number(e.offsetHeight) || 0, d = s + r, f = c + i;
d = Math.max(10, Math.min(d, a.width - l - 10)), f = Math.max(10, Math.min(f, a.height - u - 10)), e.style.left = `${Math.round(d)}px`, e.style.top = `${Math.round(f)}px`;
} catch (e) {
console.debug?.(e);
}
- }, bt = Yn({
+ }, bt = Gn({
overlay: e,
- content: fe,
+ content: B,
state: s,
VIEWER_MODES: $,
getPrimaryMedia: b,
getMediaNaturalSize: S,
getViewportRect: C,
positionOverlayBox: yt,
- probeTooltip: me,
- loupeWrap: he,
- onLoupeRedraw: Xn({
+ probeTooltip: pe,
+ loupeWrap: me,
+ onLoupeRedraw: Kn({
state: s,
- loupeCanvas: ge,
- loupeWrap: he,
+ loupeCanvas: he,
+ loupeWrap: me,
getMediaNaturalSize: S,
positionOverlayBox: yt
}).redraw,
lifecycle: t
});
try {
- if (!fe._mjrOverlayResizeBound && "ResizeObserver" in window) {
+ if (!B._mjrOverlayResizeBound && "ResizeObserver" in window) {
try {
e._mjrResizeObserver?.disconnect?.();
} catch (e) {
@@ -10896,10 +10819,10 @@ function Zr() {
} catch (e) {
console.debug?.(e);
}
- J();
+ Y();
});
try {
- t.observe(fe);
+ t.observe(B);
} catch (e) {
console.debug?.(e);
}
@@ -10909,32 +10832,32 @@ function Zr() {
} catch (e) {
console.debug?.(e);
}
- }), fe._mjrOverlayResizeBound = !0;
+ }), B._mjrOverlayResizeBound = !0;
}
} catch (e) {
console.debug?.(e);
}
- let xt = Gn({
+ let xt = Vn({
overlay: e,
- content: fe,
- singleView: B,
+ content: B,
+ singleView: V,
state: s,
VIEWER_MODES: $,
computeOneToOneZoom: D,
setZoom: _,
- scheduleOverlayRedraw: J,
+ scheduleOverlayRedraw: Y,
scheduleApplyGrade: ht,
syncToolsUIFromState: gt,
- applyDistractionFreeUI: Ze,
+ applyDistractionFreeUI: Qe,
navigateViewerAssets: _t,
closeViewer: Tt,
- renderBadges: Ye,
+ renderBadges: Je,
updateAssetRating: n,
safeDispatchCustomEvent: ce,
ASSET_RATING_CHANGED_EVENT: O,
- probeTooltip: me,
- loupeWrap: he,
- renderGenInfoPanel: Ke,
+ probeTooltip: pe,
+ loupeWrap: me,
+ renderGenInfoPanel: Ge,
getVideoControls: () => {
try {
return s?._videoControlsMounted || null;
@@ -10970,7 +10893,7 @@ function Zr() {
console.debug?.(e);
}
try {
- St.push(Z(fe, "wheel", vt, {
+ St.push(Z(B, "wheel", vt, {
passive: !1,
capture: !0
}));
@@ -10979,7 +10902,7 @@ function Zr() {
}
try {
let e = null;
- St.push(Z(fe, "touchstart", (t) => {
+ St.push(Z(B, "touchstart", (t) => {
try {
if (t.touches?.length !== 1) return;
let n = t.touches[0];
@@ -10991,7 +10914,7 @@ function Zr() {
} catch (e) {
console.debug?.(e);
}
- }, { passive: !0 })), St.push(Z(fe, "touchend", (t) => {
+ }, { passive: !0 })), St.push(Z(B, "touchend", (t) => {
try {
if (!e) return;
if (t.changedTouches?.length !== 1) {
@@ -11004,14 +10927,14 @@ function Zr() {
} catch (e) {
console.debug?.(e);
}
- }, { passive: !0 })), St.push(Z(fe, "touchcancel", () => {
+ }, { passive: !0 })), St.push(Z(B, "touchcancel", () => {
e = null;
}, { passive: !0 }));
} catch (e) {
console.debug?.(e);
}
try {
- St.push(Z(fe, "mousemove", (e) => {
+ St.push(Z(B, "mousemove", (e) => {
try {
s._lastPointerX = e.clientX, s._lastPointerY = e.clientY;
} catch (e) {
@@ -11037,11 +10960,11 @@ function Zr() {
if (t == null) return;
for (let e of s.assets || []) e?.id != null && String(e.id) === String(t) && (e.rating = n);
try {
- Oe?.deleteCached?.(t);
+ De?.deleteCached?.(t);
} catch (e) {
console.debug?.(e);
}
- Ye();
+ Je();
} catch (e) {
console.debug?.(e);
}
@@ -11051,11 +10974,11 @@ function Zr() {
if (t == null) return;
for (let e of s.assets || []) e?.id != null && String(e.id) === String(t) && (e.tags = n);
try {
- Oe?.deleteCached?.(t);
+ De?.deleteCached?.(t);
} catch (e) {
console.debug?.(e);
}
- Ye();
+ Je();
} catch (e) {
console.debug?.(e);
}
@@ -11071,12 +10994,12 @@ function Zr() {
console.debug?.(e);
}
try {
- s.distractionFree = !1, Ze();
+ s.distractionFree = !1, Qe();
} catch (e) {
console.debug?.(e);
}
try {
- Oe?.abort?.();
+ De?.abort?.();
} catch (e) {
console.debug?.(e);
}
@@ -11102,43 +11025,43 @@ function Zr() {
} catch (e) {
console.debug?.(e);
}
- try {
- V?._mjrSyncAbort?.abort?.();
- } catch (e) {
- console.debug?.(e);
- }
- try {
- V?._mjrDiffAbort?.abort?.();
- } catch (e) {
- console.debug?.(e);
- }
- try {
- V._mjrSyncAbort = null;
- } catch (e) {
- console.debug?.(e);
- }
- try {
- V._mjrDiffAbort = null;
- } catch (e) {
- console.debug?.(e);
- }
try {
H?._mjrSyncAbort?.abort?.();
} catch (e) {
console.debug?.(e);
}
+ try {
+ H?._mjrDiffAbort?.abort?.();
+ } catch (e) {
+ console.debug?.(e);
+ }
try {
H._mjrSyncAbort = null;
} catch (e) {
console.debug?.(e);
}
try {
- V?._mjrSliderAbort?.abort?.();
+ H._mjrDiffAbort = null;
} catch (e) {
console.debug?.(e);
}
try {
- V._mjrSliderAbort = null;
+ U?._mjrSyncAbort?.abort?.();
+ } catch (e) {
+ console.debug?.(e);
+ }
+ try {
+ U._mjrSyncAbort = null;
+ } catch (e) {
+ console.debug?.(e);
+ }
+ try {
+ H?._mjrSliderAbort?.abort?.();
+ } catch (e) {
+ console.debug?.(e);
+ }
+ try {
+ H._mjrSliderAbort = null;
} catch (e) {
console.debug?.(e);
}
@@ -11185,17 +11108,17 @@ function Zr() {
console.debug?.(e);
}
try {
- Fn(B), B.replaceChildren();
+ jn(V), V.replaceChildren();
} catch (e) {
console.debug?.(e);
}
try {
- Fn(V), V.replaceChildren();
+ jn(H), H.replaceChildren();
} catch (e) {
console.debug?.(e);
}
try {
- Fn(H), H.replaceChildren();
+ jn(U), U.replaceChildren();
} catch (e) {
console.debug?.(e);
}
@@ -11205,17 +11128,17 @@ function Zr() {
console.debug?.(e);
}
try {
- Be();
+ ze();
} catch (e) {
console.debug?.(e);
}
try {
- _e.style.display = "none", ze(G);
+ ge.style.display = "none", Re(K);
} catch (e) {
console.debug?.(e);
}
try {
- K.style.display = "none", ze(ye);
+ q.style.display = "none", Re(ve);
} catch (e) {
console.debug?.(e);
}
@@ -11237,7 +11160,7 @@ function Zr() {
open(t, n = 0, r = null) {
wt(), s.assets = Array.isArray(t) ? t : [t], s.currentIndex = Math.max(0, Math.min(n, s.assets.length - 1)), s.distractionFree = !1;
try {
- Te.rebuild();
+ we.rebuild();
} catch (e) {
console.debug?.(e);
}
@@ -11247,14 +11170,14 @@ function Zr() {
} catch (e) {
console.debug?.(e);
}
- s._panHintTimer = null, s._lastPointerX = null, s._lastPointerY = null, s._mediaW = 0, s._mediaH = 0, s.compareAsset = r, s.gridMode = 0, Be(), s._probe = null;
+ s._panHintTimer = null, s._lastPointerX = null, s._lastPointerY = null, s._mediaW = 0, s._mediaH = 0, s.compareAsset = r, s.gridMode = 0, ze(), s._probe = null;
try {
- me.style.display = "none";
+ pe.style.display = "none";
} catch (e) {
console.debug?.(e);
}
try {
- he.style.display = "none";
+ me.style.display = "none";
} catch (e) {
console.debug?.(e);
}
@@ -11270,7 +11193,7 @@ function Zr() {
} catch {
s._prevBodyOverflow = "";
}
- document.body.style.overflow = "hidden", s._prevHotkeyScope = l().scope || null, i("viewer"), Qe();
+ document.body.style.overflow = "hidden", s._prevHotkeyScope = l().scope || null, i("viewer"), $e();
try {
gt();
} catch (e) {
@@ -11281,16 +11204,16 @@ function Zr() {
} catch (e) {
console.debug?.(e);
}
- J();
+ Y();
},
close() {
Tt();
},
setMode(e) {
- Object.values($).includes(e) && (s.mode = e, Qe());
+ Object.values($).includes(e) && (s.mode = e, $e());
},
setCompareAsset(e) {
- s.compareAsset = e, Qe();
+ s.compareAsset = e, $e();
},
dispose() {
try {
@@ -11299,27 +11222,27 @@ function Zr() {
console.debug?.(e);
}
try {
- Ae.clear();
+ ke.clear();
} catch (e) {
console.debug?.(e);
}
try {
- Fn(B);
+ jn(V);
} catch (e) {
console.debug?.(e);
}
try {
- Fn(V);
+ jn(H);
} catch (e) {
console.debug?.(e);
}
try {
- Fn(H);
+ jn(U);
} catch (e) {
console.debug?.(e);
}
try {
- Ie != null && cancelAnimationFrame(Ie);
+ Fe != null && cancelAnimationFrame(Fe);
} catch (e) {
console.debug?.(e);
}
@@ -11349,12 +11272,12 @@ function Zr() {
console.debug?.(e);
}
try {
- Oe?.dispose?.();
+ De?.dispose?.();
} catch (e) {
console.debug?.(e);
}
try {
- Dn(e);
+ Cn(e);
} catch (e) {
console.debug?.(e);
}
@@ -11392,13 +11315,13 @@ function Zr() {
}
e._mjrViewerAPI = Et;
try {
- En({
+ Sn({
overlayEl: e,
getCurrentAsset: () => s.assets[s.currentIndex],
getCurrentViewUrl: (e) => v(e),
onAssetChanged: () => {
try {
- Ye();
+ Je();
} catch (e) {
console.debug?.(e);
}
@@ -11409,7 +11332,7 @@ function Zr() {
}
return e;
}
-function Qr() {
- return xr(Zr);
+function Jr() {
+ return _r(qr);
}
-export { $e as A, ze as B, mt as C, ut as D, ft as E, rt as F, we as G, He as H, Ke as I, L as J, le as K, Ue as L, Ze as M, nt as N, st as O, tt as P, Ee as R, vt as S, dt as T, Be as U, Me as V, Te as W, ce as Y, Ot as _, pn as a, bt as b, ln as c, Qt as d, Ft as f, Dt as g, X as h, rn as i, it as j, Qe as k, an as l, Pt as m, qn as n, un as o, Nt as p, I as q, jn as r, on as s, Qr as t, Q as u, Tt as v, pt as w, ht as x, Et as y, Ne as z };
+export { Ye as A, Fe as B, ut as C, ot as D, ct as E, $e as F, le as G, Y as H, Ve as I, ce as J, I as K, Re as L, qe as M, Qe as N, rt as O, Ze as P, Te as R, mt as S, st as T, we as U, Le as V, Ce as W, wt as _, ln as a, gt as b, an as c, Jt as d, jt as f, Ct as g, X as h, $t as i, et as j, Je as k, en as l, At as m, Un as n, on as o, kt as p, L as q, Dn as r, tn as s, Jr as t, Q as u, xt as v, lt as w, dt as x, St as y, Oe as z };
diff --git a/dist/chunks/ViewerPortal-CeOkTVnX.js b/dist/chunks/ViewerPortal-D964vdje.js
similarity index 98%
rename from dist/chunks/ViewerPortal-CeOkTVnX.js
rename to dist/chunks/ViewerPortal-D964vdje.js
index d2c6e89e..5e865bbe 100644
--- a/dist/chunks/ViewerPortal-CeOkTVnX.js
+++ b/dist/chunks/ViewerPortal-D964vdje.js
@@ -1,9 +1,9 @@
import { a as e, i as t } from "./viewerRuntimeHosts-CkUqwo6l.js";
import { r as n } from "./events-B9CSrqJ_.js";
-import { a as r, c as i, i as a, l as o, o as s, s as c, t as l, u } from "./Viewer-BEptWhbV.js";
-import { i as d, r as f } from "./floatingViewerManager-DI520cRz.js";
+import { a as r, c as i, i as a, l as o, o as s, s as c, t as l, u } from "./Viewer-DCWIIJQl.js";
+import { i as d, r as f } from "./floatingViewerManager-B_1xQj1m.js";
import { B as p, C as m, D as h, E as g, G as _, J as v, K as y, L as b, N as x, O as S, T as C, U as w, V as T, dt as E, ft as D, j as O, k, lt as A, rt as j, ut as M, w as N, z as P } from "./mjr-primevue-BRqtdXzb.js";
-import { t as F } from "./TagsEditor-gpBsG4si.js";
+import { t as F } from "./TagsEditor-BydzUbtv.js";
// ui/vue/components/viewer/FloatingViewerHost.vue
var I = /* @__PURE__ */ x({
__name: "FloatingViewerHost",
diff --git a/dist/chunks/floatingViewerManager-DI520cRz.js b/dist/chunks/floatingViewerManager-B_1xQj1m.js
similarity index 99%
rename from dist/chunks/floatingViewerManager-DI520cRz.js
rename to dist/chunks/floatingViewerManager-B_1xQj1m.js
index 75bfc430..f7ce721a 100644
--- a/dist/chunks/floatingViewerManager-DI520cRz.js
+++ b/dist/chunks/floatingViewerManager-B_1xQj1m.js
@@ -96,7 +96,7 @@ var te = /* @__PURE__ */ e({
teardownFloatingViewerManager: () => we
}), v = null, y = null;
async function ne() {
- return v || (y ||= import("./FloatingViewer-Bw0UgjBJ.js").then((e) => (v = e.FloatingViewer, v)), y);
+ return v || (y ||= import("./FloatingViewer-DjWZOB3Z.js").then((e) => (v = e.FloatingViewer, v)), y);
}
var b = null, re = null;
async function ie() {
diff --git a/dist/chunks/genInfo-C3ZF_agc.js b/dist/chunks/genInfo-B60U6rEQ.js
similarity index 99%
rename from dist/chunks/genInfo-C3ZF_agc.js
rename to dist/chunks/genInfo-B60U6rEQ.js
index e5912971..c8b4c4f5 100644
--- a/dist/chunks/genInfo-C3ZF_agc.js
+++ b/dist/chunks/genInfo-B60U6rEQ.js
@@ -1,7 +1,7 @@
import { t as e } from "./rolldown-runtime-CGnMp29N.js";
import { m as t, o as n } from "./events-B9CSrqJ_.js";
-import { h as r } from "./Viewer-BEptWhbV.js";
-import { i, n as a, r as o, t as s, u as c } from "./SidebarWorkflowSection-BjUgGET_.js";
+import { h as r } from "./Viewer-DCWIIJQl.js";
+import { i, n as a, r as o, t as s, u as c } from "./SidebarWorkflowSection-BMRq92Vq.js";
import { D as l, E as u, N as d, O as f, T as p, V as m, dt as h, ft as g, k as _, lt as v } from "./mjr-primevue-BRqtdXzb.js";
// ui/vue/components/viewer/ViewerMetadataBlock.vue?vue&type=script&setup=true&lang.ts
var y = { style: {
diff --git a/dist/chunks/openMajoorSettings-BZtL8v_l.js b/dist/chunks/openMajoorSettings-D92RuxBO.js
similarity index 99%
rename from dist/chunks/openMajoorSettings-BZtL8v_l.js
rename to dist/chunks/openMajoorSettings-D92RuxBO.js
index 888211a0..0afceb27 100644
--- a/dist/chunks/openMajoorSettings-BZtL8v_l.js
+++ b/dist/chunks/openMajoorSettings-D92RuxBO.js
@@ -1,6 +1,6 @@
import { A as e, E as t, S as n, Z as r, b as i, j as a, m as o, z as s } from "./events-B9CSrqJ_.js";
import { a as c, n as l } from "./graphTraversal-DTdQWkn5.js";
-import { S as u, Y as d, b as f, x as p, y as m } from "./SidebarWorkflowSection-BjUgGET_.js";
+import { S as u, Y as d, b as f, x as p, y as m } from "./SidebarWorkflowSection-BMRq92Vq.js";
// ui/features/viewer/floatingViewerProgress.ts
var h = "progress-update", g = "__MJR_MFV_PROGRESS_SERVICE__";
function ee() {
diff --git a/dist/chunks/viewerOpenRequest-B8IT-KHd.js b/dist/chunks/viewerOpenRequest-DaR0P9Y2.js
similarity index 95%
rename from dist/chunks/viewerOpenRequest-B8IT-KHd.js
rename to dist/chunks/viewerOpenRequest-DaR0P9Y2.js
index 0f66beed..a4769ebb 100644
--- a/dist/chunks/viewerOpenRequest-B8IT-KHd.js
+++ b/dist/chunks/viewerOpenRequest-DaR0P9Y2.js
@@ -1,6 +1,6 @@
import { t as e } from "./rolldown-runtime-CGnMp29N.js";
import { r as t } from "./events-B9CSrqJ_.js";
-import { t as n } from "./Viewer-BEptWhbV.js";
+import { t as n } from "./Viewer-DCWIIJQl.js";
// ui/features/viewer/viewerOpenRequest.ts
var r = /* @__PURE__ */ e({ requestViewerOpen: () => o });
function i(e) {
diff --git a/dist/entry.js b/dist/entry.js
index e2779a56..9e4628d3 100644
--- a/dist/entry.js
+++ b/dist/entry.js
@@ -1,13 +1,13 @@
import { $t as e, A as t, B as n, Bt as r, C as i, D as a, E as o, Et as s, G as c, H as l, J as u, Jt as d, L as f, Lt as p, M as m, N as h, O as g, P as _, Rt as v, S as y, U as b, Ut as x, V as S, Vt as C, W as w, Wt as T, Xt as E, Yt as D, _ as O, _t as k, an as A, b as j, bt as M, c as N, d as P, en as ee, f as te, ft as F, g as I, gt as ne, h as re, ht as ie, in as ae, j as oe, jt as se, k as L, l as ce, m as le, mt as ue, nn as de, o as fe, on as pe, pt as me, q as he, qt as ge, rn as _e, s as ve, sn as ye, st as be, tn as xe, u as Se, ut as Ce, vt as we, w as Te, xt as Ee, y as De, yt as Oe, z as ke, zt as Ae } from "./chunks/viewerRuntimeHosts-CkUqwo6l.js";
import { $ as je, A as Me, Ct as Ne, F as Pe, J as Fe, K as Ie, L as Le, Q as Re, St as ze, Tt as Be, U as Ve, W as He, Y as Ue, _ as We, at as Ge, ct as Ke, dt as qe, et as Je, ft as Ye, g as Xe, ht as Ze, j as Qe, lt as $e, m as R, mt as et, n as z, nt as tt, o as B, ot as nt, pt as rt, q as it, r as V, rt as at, st as ot, t as st, tt as ct, ut as lt, wt as ut, xt as dt } from "./chunks/events-B9CSrqJ_.js";
import { a as ft, i as pt, n as mt, t as ht } from "./chunks/graphTraversal-DTdQWkn5.js";
-import { A as gt, B as _t, C as vt, D as yt, E as bt, F as xt, G as St, H as Ct, I as wt, J as Tt, L as Et, M as Dt, N as Ot, O as kt, P as At, R as jt, S as Mt, T as Nt, U as Pt, V as Ft, W as It, Y as Lt, _ as Rt, b as zt, d as Bt, g as Vt, j as Ht, k as Ut, q as Wt, v as Gt, x as Kt, y as qt, z as Jt } from "./chunks/Viewer-BEptWhbV.js";
-import { $ as Yt, A as Xt, B as Zt, C as Qt, D as $t, E as en, F as tn, G as nn, H as rn, I as an, J as on, K as sn, L as cn, M as ln, N as un, O as dn, P as fn, Q as pn, R as mn, T as hn, U as gn, V as _n, W as vn, X as yn, Y as bn, Z as xn, _ as Sn, a as Cn, c as wn, d as Tn, et as En, f as Dn, g as On, h as kn, i as An, j as jn, k as Mn, l as Nn, m as Pn, n as Fn, nt as In, o as Ln, p as Rn, q as zn, s as Bn, t as Vn, tt as Hn, u as Un, w as Wn, z as Gn } from "./chunks/SidebarWorkflowSection-BjUgGET_.js";
-import { _ as Kn, i as qn, n as Jn, p as Yn, t as Xn } from "./chunks/openMajoorSettings-BZtL8v_l.js";
-import { a as Zn, c as Qn, l as $n, o as er, s as tr, u as nr } from "./chunks/floatingViewerManager-DI520cRz.js";
-import { A as rr, B as ir, C as H, D as ar, E as U, G as or, H as sr, I as cr, J as W, K as lr, L as ur, M as dr, N as fr, O as G, P as pr, R as mr, S as hr, T as K, U as gr, V as q, W as _r, Y as vr, at as yr, b as br, ct as xr, dt as Sr, ft as J, it as Cr, j as Y, k as X, lt as Z, nt as wr, q as Tr, rt as Q, tt as Er, ut as Dr, v as Or, w as kr, x as Ar, y as jr, z as Mr } from "./chunks/mjr-primevue-BRqtdXzb.js";
+import { A as gt, B as _t, C as vt, D as yt, E as bt, F as xt, H as St, I as Ct, J as wt, K as Tt, L as Et, M as Dt, N as Ot, O as kt, P as At, R as jt, S as Mt, T as Nt, U as Pt, V as Ft, W as It, _ as Lt, b as Rt, d as zt, g as Bt, j as Vt, k as Ht, q as Ut, v as Wt, x as Gt, y as Kt, z as qt } from "./chunks/Viewer-DCWIIJQl.js";
+import { $ as Jt, A as Yt, B as Xt, C as Zt, D as Qt, E as $t, F as en, G as tn, H as nn, I as rn, J as an, K as on, L as sn, M as cn, N as ln, O as un, P as dn, Q as fn, R as pn, T as mn, U as hn, V as gn, W as _n, X as vn, Y as yn, Z as bn, _ as xn, a as Sn, c as Cn, d as wn, et as Tn, f as En, g as Dn, h as On, i as kn, j as An, k as jn, l as Mn, m as Nn, n as Pn, nt as Fn, o as In, p as Ln, q as Rn, s as zn, t as Bn, tt as Vn, u as Hn, w as Un, z as Wn } from "./chunks/SidebarWorkflowSection-BMRq92Vq.js";
+import { _ as Gn, i as Kn, n as qn, p as Jn, t as Yn } from "./chunks/openMajoorSettings-D92RuxBO.js";
+import { a as Xn, c as Zn, l as Qn, o as $n, s as er, u as tr } from "./chunks/floatingViewerManager-B_1xQj1m.js";
+import { A as nr, B as rr, C as H, D as ir, E as U, G as ar, H as or, I as sr, J as W, K as cr, L as lr, M as ur, N as dr, O as G, P as fr, R as pr, S as mr, T as K, U as hr, V as q, W as gr, Y as _r, at as vr, b as yr, ct as br, dt as xr, ft as J, it as Sr, j as Y, k as X, lt as Z, nt as Cr, ot as wr, q as Tr, rt as Q, tt as Er, ut as Dr, v as Or, w as kr, x as Ar, y as jr, z as Mr } from "./chunks/mjr-primevue-BRqtdXzb.js";
import { n as Nr, r as Pr } from "./chunks/mjr-vue-vendor-mHY_eIVE.js";
-import { t as Fr } from "./chunks/TagsEditor-gpBsG4si.js";
+import { t as Fr } from "./chunks/TagsEditor-BydzUbtv.js";
import { app as Ir } from "../../scripts/app.js";
function Lr(e = null) {
return null;
@@ -869,7 +869,7 @@ var ji = {
}
}, Mi = null;
function Ni() {
- return Mi ||= import("./chunks/viewerOpenRequest-B8IT-KHd.js").then((e) => e.n), Mi;
+ return Mi ||= import("./chunks/viewerOpenRequest-DaR0P9Y2.js").then((e) => e.n), Mi;
}
function Pi(e) {
if (!e) return "";
@@ -907,7 +907,7 @@ function Li(t, n, r) {
e(t?.error || R("toast.ratingUpdateFailed"), "error");
return;
}
- e(R("toast.ratingSetN", { n }), "success", 1500), Lt(st, {
+ e(R("toast.ratingSetN", { n }), "success", 1500), wt(st, {
assetId: String(i),
rating: n
}, { warnPrefix: "[GridKeyboard]" });
@@ -931,7 +931,7 @@ function Ri({ gridContainer: t, getState: n = () => ({}), getSelectedAssets: r =
})).catch((e) => console.debug?.(e));
}, _ = () => {
try {
- nr(t);
+ tr(t);
} catch (e) {
console.debug?.(e);
}
@@ -1069,7 +1069,7 @@ function Ri({ gridContainer: t, getState: n = () => ({}), getSelectedAssets: r =
let e = document.activeElement, n = t.contains(e), r = e && e.contains && e.contains(t), i = e?.closest?.(".mjr-asset-card");
if (!n && !r && !i) return;
} else {
- let e = $n();
+ let e = Qn();
if (e && e !== t) return;
}
let u = () => {
@@ -1165,7 +1165,7 @@ function Ri({ gridContainer: t, getState: n = () => ({}), getSelectedAssets: r =
else if (Fi(r, ji.ADD_TO_COLLECTION) && (d.length > 0 || f)) {
u();
let e = d.length > 0 ? d : [f], n = t.getBoundingClientRect();
- await zt({
+ await Rt({
x: n.left + n.width / 2,
y: n.top + n.height / 2,
assets: e
@@ -1211,7 +1211,7 @@ function Ri({ gridContainer: t, getState: n = () => ({}), getSelectedAssets: r =
t?.ok ? e(R("toast.openedInFolder"), "info", 2e3) : e(t?.error || R("toast.openFolderFailed"), "error");
} else if (Fi(r, ji.RENAME) && f?.id) {
u();
- let t = f.filename || "", n = await Tt(R("dialog.rename.title", "Rename file"), t), r = yt(n, t);
+ let t = f.filename || "", n = await Ut(R("dialog.rename.title", "Rename file"), t), r = yt(n, t);
if (r && r !== t) {
let t = kt(r);
if (!t.valid) {
@@ -1311,7 +1311,7 @@ function Ri({ gridContainer: t, getState: n = () => ({}), getSelectedAssets: r =
if (m && u) {
document.removeEventListener("keydown", u, !0), d && document.removeEventListener("keyup", d, !0), f && document.removeEventListener("dragstart", f, !0), p && (t.removeEventListener("pointerdown", p, !0), t.removeEventListener("focusin", p, !0)), u = null, d = null, f = null, p = null, h = !1;
try {
- Qn(t);
+ Zn(t);
} catch (e) {
console.debug?.(e);
}
@@ -1348,7 +1348,7 @@ function zi(e) {
return t ? Pi(t) : "";
}
// ui/features/workflows/workflowInfoState.ts
-var Bi = wr({
+var Bi = Cr({
open: !1,
workflow: null
});
@@ -1361,10 +1361,10 @@ function Hi() {
// ui/features/contextmenu/GridContextMenu.ts
var Ui = 1, Wi = null, Gi = null;
function Ki() {
- return Wi ||= import("./chunks/viewerOpenRequest-B8IT-KHd.js").then((e) => e.n), Wi;
+ return Wi ||= import("./chunks/viewerOpenRequest-DaR0P9Y2.js").then((e) => e.n), Wi;
}
function qi() {
- return Gi ||= import("./chunks/floatingViewerManager-DI520cRz.js").then((e) => e.n), Gi;
+ return Gi ||= import("./chunks/floatingViewerManager-B_1xQj1m.js").then((e) => e.n), Gi;
}
function Ji(e) {
let t = String(e || "").trim().toLowerCase();
@@ -1529,7 +1529,7 @@ async function ia(e) {
let t = Array.isArray(e) ? e.filter(Boolean) : [], n = await Promise.all(t.map(async (e) => {
let t = ea(e);
if (!t) return null;
- let n = (await Wn({
+ let n = (await Un({
post: L,
endpoint: at.STAGE_TO_INPUT,
payload: t,
@@ -1541,7 +1541,7 @@ async function ia(e) {
droppedExt: String(t.filename || "").split(".").pop() || ""
} : null;
}));
- return hn({
+ return mn({
app: Qe(),
items: n.filter(Boolean),
event: null
@@ -1559,7 +1559,7 @@ var aa = (e) => {
} catch (e) {
console.debug?.(e);
}
- Lt("mjr:selection-changed", { selectedIds: [] }, {
+ wt("mjr:selection-changed", { selectedIds: [] }, {
target: e,
warnPrefix: "[GridContextMenu]"
});
@@ -1696,12 +1696,12 @@ function pa(e, t, n) {
} catch (e) {
console.debug?.(e);
}
- r ? qt(String(r), t, {
+ r ? Kt(String(r), t, {
successMessage: t > 0 ? `Rating set to ${t} stars` : "Rating cleared",
errorMessage: "Failed to update rating",
warnPrefix: "[GridContextMenu]",
onSuccess: () => {
- Lt(st, {
+ wt(st, {
assetId: String(r),
rating: t
}, { warnPrefix: "[GridContextMenu]" });
@@ -1719,7 +1719,7 @@ function ma(e) {
}
function ha() {
try {
- return !!(Hn()?.browser?.showFolders ?? !1);
+ return !!(Vn()?.browser?.showFolders ?? !1);
} catch {
return !1;
}
@@ -1756,13 +1756,13 @@ function ya(e) {
}
async function ba(e) {
if (!e || _a(e)) return null;
- let t = Yn(e);
+ let t = Jn(e);
if (t) return t;
let n = e?.id;
if (n == null || n === "") return null;
try {
let t = await I(n, { timeoutMs: 3e4 }), r = t?.data;
- if (t?.ok && r && typeof r == "object") return Object.assign(e, r), Yn(e);
+ if (t?.ok && r && typeof r == "object") return Object.assign(e, r), Jn(e);
} catch (e) {
console.debug?.(e);
}
@@ -1789,7 +1789,7 @@ async function Sa(t) {
return;
}
let r = Qe();
- if (Le(r) === !0 && !await Wt(R("dialog.workflowLoadReplaceDirty", "Current canvas has unsaved changes. Replace it with this workflow?"), R("tab.workflow", "Workflow"))) return;
+ if (Le(r) === !0 && !await Tt(R("dialog.workflowLoadReplaceDirty", "Current canvas has unsaved changes. Replace it with this workflow?"), R("tab.workflow", "Workflow"))) return;
let i = await y(n, { timeoutMs: 3e4 }), o = i?.data?.workflow || i?.workflow || null;
if (!i?.ok || !o || typeof o != "object") {
e(i?.error || R("toast.workflowLoadFailed", "Failed to load workflow."), "error");
@@ -1825,7 +1825,7 @@ async function wa(t) {
r?.ok ? (e(R("toast.workflowSaved", "Workflow saved"), "success", 1800), Ca("workflow-duplicate")) : e(r?.error || R("toast.workflowSaveFailed", "Failed to save workflow."), "error");
}
async function Ta(t) {
- let n = String(t?.filepath || "").trim(), r = String(t?.display_name || t?.filename || "").replace(/\.json$/i, ""), i = await Tt(R("ctx.renameWorkflow", "Rename workflow"), r, R("tab.workflow", "Workflow")), a = String(i || "").trim();
+ let n = String(t?.filepath || "").trim(), r = String(t?.display_name || t?.filename || "").replace(/\.json$/i, ""), i = await Ut(R("ctx.renameWorkflow", "Rename workflow"), r, R("tab.workflow", "Workflow")), a = String(i || "").trim();
if (!a) return;
let o = await g({
filepath: n,
@@ -1834,7 +1834,7 @@ async function Ta(t) {
o?.ok ? (e(R("toast.workflowUpdated", "Workflow updated"), "success", 1800), Ca("workflow-rename")) : e(o?.error || R("toast.workflowSaveFailed", "Failed to save workflow."), "error");
}
async function Ea(t) {
- let n = String(t?.filepath || "").trim(), r = String(t?.subfolder || "").trim(), i = await Tt(R("dialog.workflowCategory", "Workflow category"), r, R("tab.workflow", "Workflow"));
+ let n = String(t?.filepath || "").trim(), r = String(t?.subfolder || "").trim(), i = await Ut(R("dialog.workflowCategory", "Workflow category"), r, R("tab.workflow", "Workflow"));
if (i == null) return;
let a = await g({
filepath: n,
@@ -1861,7 +1861,7 @@ async function Da(t) {
e(R("toast.workflowThumbnailNoCandidates", "No linked outputs are available for this workflow yet."), "warning", 2600);
return;
}
- let a = await kn({
+ let a = await On({
title: R("ctx.setWorkflowThumbnail", "Set workflow thumbnail"),
workflow: t,
items: i
@@ -1912,7 +1912,7 @@ async function Aa(t) {
e(R("toast.noFilePath"), "error");
return;
}
- let r = await On({
+ let r = await Dn({
title: R("ctx.assignAsWorkflowThumbnail", "Use as workflow thumbnail"),
sourceAsset: t
}), i = String(r?.filepath || "").trim();
@@ -1927,7 +1927,7 @@ async function Aa(t) {
}
async function ja(t) {
let n = String(t?.filepath || "").trim();
- if (!await Wt(R("dialog.deleteWorkflowConfirm", "Delete this workflow JSON and its adjacent thumbnail files?"), R("ctx.deleteWorkflow", "Delete workflow"))) return;
+ if (!await Tt(R("dialog.deleteWorkflowConfirm", "Delete this workflow JSON and its adjacent thumbnail files?"), R("ctx.deleteWorkflow", "Delete workflow"))) return;
let r = await te({ filepath: n }, { timeoutMs: 3e4 });
r?.ok ? (e(R("toast.workflowDeleted", "Workflow deleted"), "success", 1800), Ca("workflow-delete")) : e(r?.error || R("toast.fileDeleteFailed", "Failed to delete file."), "error");
}
@@ -1976,7 +1976,7 @@ function Pa(e, t) {
function Fa({ currentPath: t, gridContainer: n } = {}) {
return [$(R("ctx.createFolderHere", "Create folder here..."), "pi pi-plus", null, async () => {
try {
- let r = await Tt(R("dialog.newFolderName", "New folder name"), ""), i = String(r || "").trim();
+ let r = await Ut(R("dialog.newFolderName", "New folder name"), ""), i = String(r || "").trim();
if (!i) return;
let a = await ke({
op: "create",
@@ -2008,7 +2008,7 @@ function Ia({ asset: t, gridContainer: n, panelState: r } = {}) {
e(R("toast.unableResolveFolderPath"), "error");
return;
}
- let n = await Tt(R("dialog.browserRootLabelOptional"), String(t?.filename || "")), r = await L(at.CUSTOM_ROOTS, {
+ let n = await Ut(R("dialog.browserRootLabelOptional"), String(t?.filename || "")), r = await L(at.CUSTOM_ROOTS, {
path: i,
label: String(n || "").trim() || void 0
});
@@ -2024,7 +2024,7 @@ function Ia({ asset: t, gridContainer: n, panelState: r } = {}) {
})];
return ma(r) && i && a.push(Yi(), $(R("ctx.createFolderHere"), "pi pi-plus", null, async () => {
try {
- let t = await Tt(R("dialog.newFolderName"), ""), r = String(t || "").trim();
+ let t = await Ut(R("dialog.newFolderName"), ""), r = String(t || "").trim();
if (!r) return;
let a = await ke({
op: "create",
@@ -2041,7 +2041,7 @@ function Ia({ asset: t, gridContainer: n, panelState: r } = {}) {
}
}), $(R("ctx.renameFolder"), "pi pi-pencil", null, async () => {
try {
- let r = String(t?.filename || "").trim(), a = await Tt(R("dialog.renameFolder"), r), o = String(a || "").trim();
+ let r = String(t?.filename || "").trim(), a = await Ut(R("dialog.renameFolder"), r), o = String(a || "").trim();
if (!o || o === r) return;
let s = await ke({
op: "rename",
@@ -2058,7 +2058,7 @@ function Ia({ asset: t, gridContainer: n, panelState: r } = {}) {
}
}), $(R("ctx.moveFolder"), "pi pi-arrow-right", null, async () => {
try {
- let t = await Tt(R("dialog.destinationDirectoryPath"), ""), r = String(t || "").trim();
+ let t = await Ut(R("dialog.destinationDirectoryPath"), ""), r = String(t || "").trim();
if (!r) return;
let a = await ke({
op: "move",
@@ -2076,7 +2076,7 @@ function Ia({ asset: t, gridContainer: n, panelState: r } = {}) {
}), $(R("ctx.deleteFolder"), "pi pi-trash", null, async () => {
try {
let r = String(t?.filename || R("label.thisFolder", "this folder"));
- if (!await Wt(R("dialog.deleteFolderRecursive", { name: r }))) return;
+ if (!await Tt(R("dialog.deleteFolderRecursive", { name: r }))) return;
let a = await ke({
op: "delete",
path: i,
@@ -2223,7 +2223,7 @@ function La({ asset: t, card: r, gridContainer: i, panelState: a, pointerX: o, p
await ra(_);
}, { disabled: v < 2 }), $("Add to collection...", "pi pi-bookmark", zi("ADD_TO_COLLECTION"), async () => {
let e = Zi(i), n = e.length ? e : [t];
- await zt({
+ await Rt({
x: o,
y: s,
assets: n
@@ -2262,7 +2262,7 @@ function La({ asset: t, card: r, gridContainer: i, panelState: a, pointerX: o, p
}
}, { disabled: !(t?.filename || t?.id) }), $("Rename...", "pi pi-pencil", zi("RENAME"), async () => {
if (!(t?.id || $i(t))) return;
- let n = t.filename || "", r = await Tt(R("dialog.rename.title", "Rename file"), n), a = yt(r, n);
+ let n = t.filename || "", r = await Ut(R("dialog.rename.title", "Rename file"), n), a = yt(r, n);
if (!a || a === n) return;
let o = kt(a);
if (!o.valid) e(o.reason, "error");
@@ -2317,7 +2317,7 @@ function La({ asset: t, card: r, gridContainer: i, panelState: a, pointerX: o, p
}, { disabled: !(t?.id || $i(t)) })), m;
}
function Ra(e, t, n, r) {
- n && zn({
+ n && Rn({
x: e,
y: t,
asset: n,
@@ -2339,7 +2339,7 @@ function za({ gridContainer: e, getState: t = () => ({}) } = {}) {
if (!ma(r)) return;
let t = String(e?.dataset?.mjrScope || "").toLowerCase(), i = String(e?.dataset?.mjrSubfolder || "").trim(), a = (t === "input" || t === "output") && ha();
if (!i && !a) return;
- n.preventDefault(), n.stopPropagation(), nn({
+ n.preventDefault(), n.stopPropagation(), tn({
x: n.clientX,
y: n.clientY,
items: Fa({
@@ -2365,7 +2365,7 @@ function za({ gridContainer: e, getState: t = () => ({}) } = {}) {
pointerY: n.clientY,
selection: o
});
- nn({
+ tn({
x: n.clientX,
y: n.clientY,
items: s
@@ -2394,12 +2394,12 @@ function za({ gridContainer: e, getState: t = () => ({}) } = {}) {
console.debug?.(e);
}
try {
- Gt();
+ Wt();
} catch (e) {
console.debug?.(e);
}
try {
- _n();
+ gn();
} catch (e) {
console.debug?.(e);
}
@@ -2420,7 +2420,7 @@ function Va(e) {
function Ha(e, t = null) {
if (!e) return [];
try {
- let t = Array.from(Zn(e));
+ let t = Array.from(Xn(e));
if (t.length) return t;
} catch (e) {
console.debug?.(e);
@@ -2785,7 +2785,7 @@ var ho = (e) => {
}
let s = t.filename || t.name;
if (!s) return;
- let c = a ? yo(t) : "", l = ho((c ? ot(c) : "") || i), u = tn(s);
+ let c = a ? yo(t) : "", l = ho((c ? ot(c) : "") || i), u = en(s);
try {
e.setData("text/uri-list", l), e.setData("DownloadURL", `${u}:${s}:${l}`), e.effectAllowed = "copyMove";
} catch (e) {
@@ -2892,14 +2892,14 @@ var ho = (e) => {
},
tags: Array.isArray(t.tags) ? t.tags : []
};
- Mo(e, cn, JSON.stringify(a)), r && Mo(e, "text/uri-list", r);
+ Mo(e, sn, JSON.stringify(a)), r && Mo(e, "text/uri-list", r);
}, Po = (e) => {
let t = e && typeof e == "object" ? e : null;
if (!t) return [];
try {
let e = window?.__MJR_LAST_SELECTION_GRID__, n = typeof e?._mjrGetSelectedAssets == "function" ? e._mjrGetSelectedAssets() : [];
if (Array.isArray(n) && n.length > 1) {
- let e = n.map(jo).filter(an), r = ko(t);
+ let e = n.map(jo).filter(rn), r = ko(t);
if (e.some((e) => ko(e) === r)) return e;
}
} catch (e) {
@@ -2910,7 +2910,7 @@ var ho = (e) => {
try {
let n = typeof e?._mjrGetSelectedAssets == "function" ? e._mjrGetSelectedAssets() : [];
if (!Array.isArray(n) || n.length <= 1) return [];
- let r = n.map(jo).filter(an), i = ko(t);
+ let r = n.map(jo).filter(rn), i = ko(t);
return r.some((e) => ko(e) === i) ? r : [];
} catch (e) {
return console.debug?.(e), [];
@@ -2919,7 +2919,7 @@ var ho = (e) => {
try {
let t = e?.dataTransfer?.getData?.("application/x-mjr-assets") || "";
if (t) {
- let e = JSON.parse(t), n = (Array.isArray(e?.items) ? e.items : Array.isArray(e) ? e : []).map(io).filter(an);
+ let e = JSON.parse(t), n = (Array.isArray(e?.items) ? e.items : Array.isArray(e) ? e : []).map(io).filter(rn);
if (n.length) return n;
}
} catch (e) {
@@ -2929,7 +2929,7 @@ var ho = (e) => {
}, Lo = async (e) => {
let t = Array.isArray(e) ? e.filter(Boolean) : [];
return t.length ? (await Promise.all(t.map(async (e) => {
- let t = (await Wn({
+ let t = (await Un({
post: L,
endpoint: at.STAGE_TO_INPUT,
payload: e,
@@ -3047,9 +3047,9 @@ function ts(e) {
};
try {
let t = Do();
- Mo(n, mn, JSON.stringify(c));
+ Mo(n, pn, JSON.stringify(c));
let o = Fo(e, c);
- o.length > 1 && Mo(n, Gn, JSON.stringify({ items: o })), Mo(n, "text/plain", String(i.filename || ""));
+ o.length > 1 && Mo(n, Wn, JSON.stringify({ items: o })), Mo(n, "text/plain", String(i.filename || ""));
let s = a === "workflow" ? "" : Co(c);
No({
dt: n,
@@ -3183,7 +3183,7 @@ function as() {
e && (a = e.resolvedStart === void 0 ? e.start : e.resolvedStart);
}
t._ghostSegmentId = null, t._ghostTrack = null, t._ghostInitialTimeline = null, t._previewSegments = null, t.render?.();
- let c = String(r || "").toLowerCase(), l = i.has(c), u = await Wn({
+ let c = String(r || "").toLowerCase(), l = i.has(c), u = await Un({
post: L,
endpoint: at.STAGE_TO_INPUT,
payload: n,
@@ -3303,16 +3303,16 @@ function as() {
onDragOver: (e) => {
let t = So();
if (!Array.from(e?.dataTransfer?.types || []).includes("application/x-mjr-asset")) return;
- let n = ao(e, mn);
- if (!an(n)) return;
- let r = un(t, e.clientX, e.clientY), i = r ? ln(t, r, e.clientX, e.clientY) : null, a = String(n?.filename || "").split(".").pop() || "", o = r && !i ? fn(r, n, a) : null, s = r && !i && !o && !!r._timelineEditor;
- r && (i || o || s) ? (e.preventDefault(), s || (e.stopImmediatePropagation?.(), e.stopPropagation()), Xt(t, r, Mn), e.dataTransfer.dropEffect = "copy", i ? to("dragover slot", {
+ let n = ao(e, pn);
+ if (!rn(n)) return;
+ let r = ln(t, e.clientX, e.clientY), i = r ? cn(t, r, e.clientX, e.clientY) : null, a = String(n?.filename || "").split(".").pop() || "", o = r && !i ? dn(r, n, a) : null, s = r && !i && !o && !!r._timelineEditor;
+ r && (i || o || s) ? (e.preventDefault(), s || (e.stopImmediatePropagation?.(), e.stopPropagation()), Yt(t, r, jn), e.dataTransfer.dropEffect = "copy", i ? to("dragover slot", {
node: r?.title,
slot: i.input?.name
}) : s ? to("dragover ltxdirector", { node: r?.title }) : to("dragover widget", {
node: r?.title,
widget: o?.name
- })) : (jn(t, Mn), dn(t, e) && (e.preventDefault(), e.dataTransfer.dropEffect = "copy"));
+ })) : (An(t, jn), un(t, e) && (e.preventDefault(), e.dataTransfer.dropEffect = "copy"));
},
onDrop: async (t) => {
let n = So();
@@ -3320,20 +3320,20 @@ function as() {
try {
if ((t?.target)?.closest?.(".mjr-folder-card")) return;
} catch {}
- let r = ao(t, mn);
- if (!an(r) || !dn(n, t)) return;
+ let r = ao(t, pn);
+ if (!rn(r) || !un(n, t)) return;
fo();
- let i = Oo(), a = i ? Io(t, r) : [r], o = un(n, t.clientX, t.clientY), s = o ? ln(n, o, t.clientX, t.clientY) : null, l = String(r?.filename || "").split(".").pop() || "", u = o && !s ? fn(o, r, l) : null;
+ let i = Oo(), a = i ? Io(t, r) : [r], o = ln(n, t.clientX, t.clientY), s = o ? cn(n, o, t.clientX, t.clientY) : null, l = String(r?.filename || "").split(".").pop() || "", u = o && !s ? dn(o, r, l) : null;
if (o && s) {
- t.preventDefault(), t.stopImmediatePropagation?.(), t.stopPropagation(), jn(n, Mn);
- let i = await Qt({
+ t.preventDefault(), t.stopImmediatePropagation?.(), t.stopPropagation(), An(n, jn);
+ let i = await Zt({
post: L,
endpoint: at.STAGE_TO_INPUT,
payload: r,
index: !1
});
if (!i) return;
- if (en({
+ if ($t({
app: n,
payload: r,
relativePath: i,
@@ -3352,12 +3352,12 @@ function as() {
return;
}
if (o && !s && !u && o._timelineEditor && !i) {
- t.preventDefault(), t.stopImmediatePropagation?.(), t.stopPropagation(), jn(n, Mn), await c(o._timelineEditor, r, l);
+ t.preventDefault(), t.stopImmediatePropagation?.(), t.stopPropagation(), An(n, jn), await c(o._timelineEditor, r, l);
return;
}
if (!o || !u) {
- if (jn(n, Mn), t.preventDefault(), t.stopImmediatePropagation?.(), t.stopPropagation(), i) {
- let i = await Lo(a), o = hn({
+ if (An(n, jn), t.preventDefault(), t.stopImmediatePropagation?.(), t.stopPropagation(), i) {
+ let i = await Lo(a), o = mn({
app: n,
items: i,
event: t
@@ -3377,7 +3377,7 @@ function as() {
e(`Failed to load workflow: "${r?.filename}".`, "error");
return;
}
- let s = !o && !i, c = Wn({
+ let s = !o && !i, c = Un({
post: L,
endpoint: at.STAGE_TO_INPUT,
payload: r,
@@ -3392,7 +3392,7 @@ function as() {
to("drop canvas stage failed"), e(`Failed to load file: "${r?.filename}". Staging failed.`, "error");
return;
}
- if (to("drop canvas staged", { value: p }), hn({
+ if (to("drop canvas staged", { value: p }), mn({
app: n,
items: [{
payload: r,
@@ -3407,14 +3407,14 @@ function as() {
e(`Staged to input: ${p}`, "success", 4e3);
return;
}
- t.preventDefault(), t.stopImmediatePropagation?.(), t.stopPropagation(), jn(n, Mn);
- let d = await Qt({
+ t.preventDefault(), t.stopImmediatePropagation?.(), t.stopPropagation(), An(n, jn);
+ let d = await Zt({
post: L,
endpoint: at.STAGE_TO_INPUT,
payload: r,
index: !1
});
- d && ($t(u, d), Mn(n), to("drop inject", {
+ d && (Qt(u, d), jn(n), to("drop inject", {
node: o?.title,
widget: u?.name,
value: d
@@ -3422,7 +3422,7 @@ function as() {
},
onDragLeave: () => {
let e = So();
- jn(e, Mn), to("dragleave");
+ An(e, jn), to("dragleave");
}
};
}
@@ -3437,7 +3437,7 @@ function os() {
}
wo = !1, To = !1;
try {
- jn(So(), Mn);
+ An(So(), jn);
} catch (e) {
console.debug?.(e);
}
@@ -3631,7 +3631,7 @@ function vs() {
}
return e;
}
-var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ fr({
+var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ dr({
__name: "RatingBadge",
props: { rating: {
type: [Number, String],
@@ -3647,15 +3647,15 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ fr({
key: 0,
class: "mjr-rating-badge",
title: i.value
- }, [(q(!0), X(H, null, gr(n.value, (e) => (q(), X("span", {
+ }, [(q(!0), X(H, null, hr(n.value, (e) => (q(), X("span", {
key: e,
- style: Sr({
+ style: xr({
color: "var(--mjr-rating-color, var(--mjr-star-active, #FFD45A))",
marginRight: e < n.value ? "2px" : "0"
})
}, " ★ ", 4))), 128))], 8, bs)) : G("", !0);
}
-}), Ss = ["title"], Cs = /* @__PURE__ */ fr({
+}), Ss = ["title"], Cs = /* @__PURE__ */ dr({
__name: "TagsBadge",
props: { tags: {
type: [Array, String],
@@ -3686,7 +3686,7 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ fr({
style: { color: "var(--mjr-tag-color, #90CAF9)" }
}, J(a.value), 9, Ss)) : G("", !0);
}
-}), ws = ["title"], Ts = /* @__PURE__ */ fr({
+}), ws = ["title"], Ts = /* @__PURE__ */ dr({
__name: "GenTimeBadge",
props: { genTimeMs: { default: 0 } },
setup(e) {
@@ -3695,7 +3695,7 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ fr({
key: 0,
class: "mjr-gentime-badge",
title: i.value.title,
- style: Sr({ color: a.value })
+ style: xr({ color: a.value })
}, J(i.value.text), 13, ws)) : G("", !0);
}
}), Es = {
@@ -3757,7 +3757,7 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ fr({
opacity: "0.55",
margin: "0 3px"
}
-}, oc = ["title"], sc = { class: "mjr-stack-group-button-count" }, cc = { class: "mjr-dup-stack-count" }, lc = /* @__PURE__ */ fr({
+}, oc = ["title"], sc = { class: "mjr-stack-group-button-count" }, cc = { class: "mjr-dup-stack-count" }, lc = /* @__PURE__ */ dr({
__name: "AssetCardInner",
props: { asset: {} },
emits: ["workflow-action"],
@@ -3908,11 +3908,11 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ fr({
}), ae = K(() => ie.value > 0), oe = K(() => Ot(ie.value)), se = K(() => At(ie.value)), L = K(() => String(p.asset.positive_prompt || "").trim()), ce = K(() => p.asset?._mjrLivePlaceholder === !0 || p.asset?.is_live_placeholder === !0 || String(p.asset?.id || "").trim().toLowerCase().startsWith("live:")), le = K(() => String(p.asset?._mjrLiveLabel || "In progress").trim() || "In progress"), ue = K(() => `${le.value}: waiting for indexed asset data`), de = K(() => {
let { width: e, height: t } = p.asset;
return e && t ? `${e}x${t}` : "";
- }), fe = K(() => p.asset.duration ? wn(p.asset.duration) : ""), pe = K(() => String(p.asset.task || p.asset.workflow_task || "").trim()), me = K(() => String(p.asset.model_family || p.asset.modelFamily || "").trim()), he = K(() => String(p.asset.runs_on || p.asset.runsOn || "").trim()), ge = K(() => Number(p.asset.node_count || p.asset.nodeCount || 0) || 0), _e = K(() => !!p.asset.favorite), ve = K(() => Number(p.asset.subgraph_count || p.asset.subgraphCount || 0) || 0), ye = K(() => Number(p.asset.missing_nodes_count || p.asset.missingNodesCount || 0) || 0), be = K(() => Number(p.asset.missing_models_count || p.asset.missingModelsCount || 0) || 0), xe = K(() => ye.value > 0 || be.value > 0), Se = K(() => {
+ }), fe = K(() => p.asset.duration ? Cn(p.asset.duration) : ""), pe = K(() => String(p.asset.task || p.asset.workflow_task || "").trim()), me = K(() => String(p.asset.model_family || p.asset.modelFamily || "").trim()), he = K(() => String(p.asset.runs_on || p.asset.runsOn || "").trim()), ge = K(() => Number(p.asset.node_count || p.asset.nodeCount || 0) || 0), _e = K(() => !!p.asset.favorite), ve = K(() => Number(p.asset.subgraph_count || p.asset.subgraphCount || 0) || 0), ye = K(() => Number(p.asset.missing_nodes_count || p.asset.missingNodesCount || 0) || 0), be = K(() => Number(p.asset.missing_models_count || p.asset.missingModelsCount || 0) || 0), xe = K(() => ye.value > 0 || be.value > 0), Se = K(() => {
if (!xe.value) return "";
let e = [];
return ye.value > 0 && e.push(`${ye.value} node`), be.value > 0 && e.push(`${be.value} model`), `Missing: ${e.join(" / ")}`;
- }), Ce = K(() => p.asset.generation_time || p.asset.file_creation_time || p.asset.mtime || p.asset.created_at), we = K(() => Ce.value ? Bn(Ce.value) : ""), Te = K(() => Ce.value ? Nn(Ce.value) : ""), Ee = K(() => [
+ }), Ce = K(() => p.asset.generation_time || p.asset.file_creation_time || p.asset.mtime || p.asset.created_at), we = K(() => Ce.value ? zn(Ce.value) : ""), Te = K(() => Ce.value ? Mn(Ce.value) : ""), Ee = K(() => [
de.value ? {
key: "resolution",
className: "mjr-meta-res",
@@ -3952,7 +3952,7 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ fr({
video: "var(--mjr-badge-video, #F44336)",
audio: "var(--mjr-badge-audio, #4CAF50)",
model3d: "var(--mjr-badge-model3d, #9C27B0)"
- }[h.value] || "var(--mjr-badge-image, #888)"), ke = cr("mjrStackService", null), Ae = K(() => !ke || !String(p.asset.stack_id || "").trim() ? !1 : Number(p.asset.stack_asset_count || p.asset._mjrFeedGroupCount || 0) > 1), je = K(() => Number(p.asset.stack_asset_count || p.asset._mjrFeedGroupCount || 0) || 0), Me = K(() => !!p.asset._mjrDupStack && Number(p.asset._mjrDupCount || 0) >= 2), Ne = K(() => Number(p.asset._mjrDupCount || 0) || 0), Pe = K(() => Me.value && !Ae.value), Fe = Q(!1), Ie = Q(!1);
+ }[h.value] || "var(--mjr-badge-image, #888)"), ke = sr("mjrStackService", null), Ae = K(() => !ke || !String(p.asset.stack_id || "").trim() ? !1 : Number(p.asset.stack_asset_count || p.asset._mjrFeedGroupCount || 0) > 1), je = K(() => Number(p.asset.stack_asset_count || p.asset._mjrFeedGroupCount || 0) || 0), Me = K(() => !!p.asset._mjrDupStack && Number(p.asset._mjrDupCount || 0) >= 2), Ne = K(() => Number(p.asset._mjrDupCount || 0) || 0), Pe = K(() => Me.value && !Ae.value), Fe = Q(!1), Ie = Q(!1);
async function Le(e) {
if (e.preventDefault(), e.stopPropagation(), !Fe.value) {
Fe.value = !0;
@@ -3986,13 +3986,13 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ fr({
}
Je = "";
}
- lr(() => g.value ? S.value : _.value ? E.value : "", (e) => {
+ cr(() => g.value ? S.value : _.value ? E.value : "", (e) => {
let t = String(e || "").trim();
t && t !== Ye && (Ue.value = !1, Ye = "");
- }, { immediate: !0 }), lr(() => b.value ? k.value : "", (e) => {
+ }, { immediate: !0 }), cr(() => b.value ? k.value : "", (e) => {
let t = String(e || "").trim();
t && t !== Xe && (We.value = !1, Xe = "");
- }, { immediate: !0 }), lr(() => [_.value ? Ve.value : null, _.value ? E.value : ""], async ([e, t], n, r) => {
+ }, { immediate: !0 }), cr(() => [_.value ? Ve.value : null, _.value ? E.value : ""], async ([e, t], n, r) => {
if (!e || !t || Ue.value) return;
let o = qe += 1, s = new AbortController(), c = !1;
r(() => {
@@ -4018,27 +4018,27 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ fr({
}
Mr(() => {
window.addEventListener("mjr-settings-changed", $e);
- }), lr(Be, (e, t) => {
+ }), cr(Be, (e, t) => {
if (t) try {
f(t);
} catch {}
if (e && ze.value) try {
d(ze.value, e, Qe.value);
} catch {}
- }), lr(Qe, (e) => {
+ }), cr(Qe, (e) => {
let t = Be.value, n = ze.value;
t && n && d(n, t, e);
- }), lr(D, (e, t) => {
+ }), cr(D, (e, t) => {
if (e === t) return;
let n = Be.value, r = ze.value;
n && r && (f(n), d(r, n, Qe.value));
- }, { flush: "post" }), mr(() => {
+ }, { flush: "post" }), pr(() => {
window.removeEventListener("mjr-settings-changed", $e), qe += 1, Ze();
let e = Be.value;
if (e) try {
f(e);
} catch {}
- }), ir(() => {
+ }), rr(() => {
window.removeEventListener("mjr-settings-changed", $e);
}), Tr(() => {
let e = He.value;
@@ -4088,7 +4088,7 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ fr({
});
}
return (t, n) => {
- let r = or("MButton");
+ let r = ar("MButton");
return q(), X(H, null, [
U("div", {
class: Dr(["mjr-thumb", { "mjr-thumb-workflow": g.value }]),
@@ -4099,8 +4099,8 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ fr({
g.value ? (q(), X(H, { key: 1 }, [
U("div", {
class: "mjr-workflow-card-actions",
- onClick: n[1] ||= hr(() => {}, ["stop"]),
- onDblclick: n[2] ||= hr(() => {}, ["stop"])
+ onClick: n[1] ||= mr(() => {}, ["stop"]),
+ onDblclick: n[2] ||= mr(() => {}, ["stop"])
}, [U("button", {
type: "button",
class: Dr(["mjr-workflow-action-btn", { "is-active": _e.value }]),
@@ -4162,9 +4162,9 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ fr({
alt: ""
}, null, 8, Rs)) : G("", !0), U("div", { class: Dr(["mjr-audio-thumb", { "has-poster": k.value }]) }, [
U("div", zs, [n[18] ||= U("span", { class: "mjr-audio-thumb-icon" }, [U("i", { class: "pi pi-volume-up" })], -1), U("span", Bs, J(M.value || "AUDIO"), 1)]),
- U("div", Vs, [(q(!0), X(H, null, gr(ee.value, (e, t) => (q(), X("span", {
+ U("div", Vs, [(q(!0), X(H, null, hr(ee.value, (e, t) => (q(), X("span", {
key: t,
- style: Sr({
+ style: xr({
height: `${e.height}%`,
opacity: e.opacity
})
@@ -4185,7 +4185,7 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ fr({
class: "mjr-file-badge mjr-badge-ext",
"data-mjr-ext": M.value,
"data-mjr-badge-bg": Oe.value,
- style: Sr({
+ style: xr({
position: "absolute",
top: "6px",
left: "6px",
@@ -4261,9 +4261,9 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ fr({
class: "mjr-meta-workflow-missing",
title: Se.value
}, J(Se.value), 9, ic)) : G("", !0)
- ], 64)) : G("", !0), (q(!0), X(H, null, gr(Ee.value, (e, t) => (q(), X(H, { key: e.key }, [t > 0 ? (q(), X("span", ac, "/")) : G("", !0), U("span", {
+ ], 64)) : G("", !0), (q(!0), X(H, null, hr(Ee.value, (e, t) => (q(), X(H, { key: e.key }, [t > 0 ? (q(), X("span", ac, "/")) : G("", !0), U("span", {
class: Dr(e.className),
- style: Sr(e.style || null),
+ style: xr(e.style || null),
title: e.title
}, J(e.text), 15, oc)], 64))), 128))]),
U("div", {
@@ -4278,7 +4278,7 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ fr({
}
}, null, 512)
], 8, $s),
- Ae.value ? (q(), ar(r, {
+ Ae.value ? (q(), ir(r, {
key: 0,
type: "button",
class: "mjr-stack-group-button",
@@ -4290,12 +4290,12 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ fr({
"aria-label": `Open generation group in grid (${je.value} assets)`,
title: `Open generation group in grid (${je.value} assets)`,
onClick: Le,
- onPointerdown: n[3] ||= hr(() => {}, ["stop"]),
- onMousedown: n[4] ||= hr(() => {}, ["stop", "prevent"]),
- onTouchstartPassive: n[5] ||= hr(() => {}, ["stop"]),
- onDblclick: n[6] ||= hr(() => {}, ["stop"]),
- onKeydown: n[7] ||= hr(() => {}, ["stop"]),
- onDragstart: n[8] ||= hr(() => {}, ["stop", "prevent"])
+ onPointerdown: n[3] ||= mr(() => {}, ["stop"]),
+ onMousedown: n[4] ||= mr(() => {}, ["stop", "prevent"]),
+ onTouchstartPassive: n[5] ||= mr(() => {}, ["stop"]),
+ onDblclick: n[6] ||= mr(() => {}, ["stop"]),
+ onKeydown: n[7] ||= mr(() => {}, ["stop"]),
+ onDragstart: n[8] ||= mr(() => {}, ["stop", "prevent"])
}, {
default: W(() => [n[21] ||= U("span", { class: "pi pi-clone" }, null, -1), U("span", sc, J(je.value), 1)]),
_: 1
@@ -4305,7 +4305,7 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ fr({
"aria-label",
"title"
])) : G("", !0),
- Pe.value ? (q(), ar(r, {
+ Pe.value ? (q(), ir(r, {
key: 1,
type: "button",
class: "mjr-dup-stack-button",
@@ -4317,12 +4317,12 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ fr({
"aria-label": `${Ne.value} duplicate${Ne.value > 1 ? "s" : ""} - click to compare all copies`,
title: `${Ne.value} duplicate${Ne.value > 1 ? "s" : ""} - click to compare all copies`,
onClick: Re,
- onPointerdown: n[9] ||= hr(() => {}, ["stop"]),
- onMousedown: n[10] ||= hr(() => {}, ["stop", "prevent"]),
- onTouchstartPassive: n[11] ||= hr(() => {}, ["stop"]),
- onDblclick: n[12] ||= hr(() => {}, ["stop"]),
- onKeydown: n[13] ||= hr(() => {}, ["stop"]),
- onDragstart: n[14] ||= hr(() => {}, ["stop", "prevent"])
+ onPointerdown: n[9] ||= mr(() => {}, ["stop"]),
+ onMousedown: n[10] ||= mr(() => {}, ["stop", "prevent"]),
+ onTouchstartPassive: n[11] ||= mr(() => {}, ["stop"]),
+ onDblclick: n[12] ||= mr(() => {}, ["stop"]),
+ onKeydown: n[13] ||= mr(() => {}, ["stop"]),
+ onDragstart: n[14] ||= mr(() => {}, ["stop", "prevent"])
}, {
default: W(() => [n[22] ||= U("span", { class: "pi pi-copy" }, null, -1), U("span", cc, J(Ne.value), 1)]),
_: 1
@@ -4351,7 +4351,7 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ fr({
let n = e.__vccOpts || e;
for (let [e, r] of t) n[e] = r;
return n;
-})(/* @__PURE__ */ fr({
+})(/* @__PURE__ */ dr({
__name: "FolderCard",
props: {
asset: {},
@@ -4388,9 +4388,9 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ fr({
role: "button",
tabindex: 0,
draggable: "true",
- onDragover: hr(a, ["prevent"]),
+ onDragover: mr(a, ["prevent"]),
onDragleave: o,
- onDrop: hr(s, ["stop", "prevent"]),
+ onDrop: mr(s, ["stop", "prevent"]),
"data-mjr-asset-id": String(e.asset.id ?? ""),
"data-mjr-filename-key": String(e.asset.filename || "").toLowerCase(),
"data-mjr-ext": "FOLDER",
@@ -4433,7 +4433,7 @@ function mc(e) {
return Array.from(e || []).map((e) => String(e || "").trim()).filter(Boolean);
}
function hc() {
- let e = Cr({
+ let e = Sr({
query: "*",
offset: 0,
cursor: null,
@@ -5043,7 +5043,7 @@ async function bl({ fetchPage: e, applyPage: t, getLimit: n, canContinue: r = nu
};
}
function xl({ query: e, collection: t, fetchPage: n, pageSize: r = 80, getPageSize: i = null } = {}) {
- let a = wr({
+ let a = Cr({
offset: 0,
cursor: null,
total: null,
@@ -5387,22 +5387,12 @@ function Pl(e, t) {
].some((t) => Object.prototype.hasOwnProperty.call(e, t));
}
function Fl(e, t) {
- let n = /* @__PURE__ */ new Set(), r = /* @__PURE__ */ new Set(), i = /* @__PURE__ */ new Map(), a = [];
+ let n = /* @__PURE__ */ new Set(), r = /* @__PURE__ */ new Set(), i = [], a = !1;
for (let o of Array.isArray(e?.assets) ? e.assets : []) {
- let e = o?.id == null ? "" : String(o.id), s = t.assetKey(o), c = jt(o?.filename);
- if (!(e && n.has(e)) && !(s && r.has(s))) {
- if (c) {
- let e = i.get(c);
- if (e) {
- let t = Array.isArray(e._mjrDupMembers) ? e._mjrDupMembers : [e], n = new Set(t.map((e) => String(e?.id || ""))), r = [...t, ...[o].filter((e) => !n.has(String(e?.id || "")))];
- e._mjrDupStack = !0, e._mjrDupMembers = r, e._mjrDupCount = r.length, e._mjrNameCollision = !1, delete e._mjrNameCollisionCount, delete e._mjrNameCollisionPaths, o._mjrNameCollision = !1, delete o._mjrNameCollisionCount, delete o._mjrNameCollisionPaths, o._mjrDupStack = !1, o._mjrDupMembers = null, o._mjrDupCount = 0;
- continue;
- }
- }
- e && n.add(e), s && r.add(s), c && i.set(c, o), o._mjrNameCollision = !1, delete o._mjrNameCollisionCount, delete o._mjrNameCollisionPaths, a.push(o);
- }
+ let e = o?.id == null ? "" : String(o.id), s = t.assetKey(o);
+ e && n.has(e) || s && r.has(s) ? a = !0 : (e && n.add(e), s && r.add(s), i.push(o));
}
- e.assets = a, _l(e, { assetKey: t.assetKey });
+ a && (e.assets = i), _l(e, { assetKey: t.assetKey });
}
function Il(e, t) {
let n = t.upsertState.get(e);
@@ -5416,12 +5406,12 @@ function Il(e, t) {
for (let [a, o] of r.entries()) {
let r = Al(o);
i.assetKeyFn = t.assetKey;
- let s = Ct(o, i, t.loadMajoorSettings);
+ let s = Ft(o, i, t.loadMajoorSettings);
if (Array.isArray(s?.removed) && s.removed.length) {
let e = new Set(s.removed);
i.assets = i.assets.filter((t) => {
let n = !e.has(t);
- return n || Pt(i, t, i), n;
+ return n || St(i, t, i), n;
});
try {
i.hiddenPngSiblings = (Number(i.hiddenPngSiblings || 0) || 0) + s.removed.length;
@@ -5452,7 +5442,7 @@ function Il(e, t) {
continue;
}
let [e] = i.assets.splice(d, 1);
- Pt(i, e, i), n = !0;
+ St(i, e, i), n = !0;
}
} else if (d > -1) {
let e = t.assetKey(f);
@@ -5576,7 +5566,7 @@ function Ql(e) {
return e ? typeof e == "object" && "value" in e ? e.value || null : e : null;
}
async function $l() {
- await ur();
+ await lr();
}
function eu(e, t) {
let n = String(e || "Failed to load");
@@ -5853,7 +5843,7 @@ function au({ gridContainerRef: e, state: t, setLoadingMessage: n, clearLoadingM
}
function F() {
try {
- let e = Hn?.() || {}, t = e.grid || {};
+ let e = Vn?.() || {}, t = e.grid || {};
return t.snapshotCacheEnabled === !0 || t.enableSnapshotCache === !0 || e.snapshotCacheEnabled === !0 || e.enableSnapshotCache === !0;
} catch (e) {
return console.debug?.(e), !1;
@@ -5895,12 +5885,12 @@ function au({ gridContainerRef: e, state: t, setLoadingMessage: n, clearLoadingM
}
function ie(e, n) {
let r = _(), i = Array.isArray(n) ? n.length : 0, o = Et(e, n, t, {
- loadMajoorSettings: Hn,
+ loadMajoorSettings: Vn,
clearGridMessage: () => {
a();
},
ensureVirtualGrid: () => t.virtualGrid,
- setFileBadgeCollision: wt,
+ setFileBadgeCollision: Ct,
assetKey: (t) => te(t, e),
ensureDupStackCard: (e, t, n) => $a(e, t, n)
});
@@ -6507,7 +6497,7 @@ function au({ gridContainerRef: e, state: t, setLoadingMessage: n, clearLoadingM
maxBatchSize: Wl,
debounceMs: Ul,
assetKey: (t) => Yl(t) || te(t, e),
- loadMajoorSettings: Hn
+ loadMajoorSettings: Vn
};
}
function De(e) {
@@ -7296,17 +7286,17 @@ function Ou(e, t, n, r, i) {
}
// node_modules/@tanstack/vue-virtual/dist/esm/index.js
function ku(e) {
- let t = new Tu(Z(e)), n = yr(t), r = t._didMount();
- return lr(() => Z(e).getScrollElement(), (e) => {
+ let t = new Tu(Z(e)), n = vr(t), r = t._didMount();
+ return cr(() => Z(e).getScrollElement(), (e) => {
e && t._willUpdate();
- }, { immediate: !0 }), lr(() => Z(e), (e) => {
+ }, { immediate: !0 }), cr(() => Z(e), (e) => {
t.setOptions({
...e,
onChange: (t, r) => {
var i;
- xr(n), (i = e.onChange) == null || i.call(e, t, r);
+ br(n), (i = e.onChange) == null || i.call(e, t, r);
}
- }), t._willUpdate(), xr(n);
+ }), t._willUpdate(), br(n);
}, { immediate: !0 }), Er(r), n;
}
function Au(e) {
@@ -7416,7 +7406,7 @@ function Iu({ rootRef: e, enabled: t = !0, canLoad: n = !0, loadMore: r, rootMar
threshold: a
}), s.observe(t));
}
- return pr() && (Mr(d), mr(l), lr(() => [Z(e), o.value], () => d(), { flush: "post" })), {
+ return fr() && (Mr(d), pr(l), cr(() => [Z(e), o.value], () => d(), { flush: "post" })), {
sentinelRef: o,
connect: d,
disconnect: l,
@@ -7424,36 +7414,77 @@ function Iu({ rootRef: e, enabled: t = !0, canLoad: n = !0, loadMore: r, rootMar
};
}
// ui/vue/grid/useGridDisplayAssets.ts
-function Lu(e) {
+var Lu = ["_mjrNameCollisionCount", "_mjrNameCollisionPaths"];
+function Ru(e) {
let t = jt(e?.filename);
return t ? `${String(e?.source || e?.type || "").trim().toLowerCase()}|${String(e?.root_id || e?.custom_root_id || "").trim().toLowerCase()}|${String(e?.subfolder || "").trim().toLowerCase()}|${t}` : "";
}
-function Ru(e) {
+function zu(e) {
return !!e;
}
-function zu(e) {
- let t = Array.isArray(e) ? e : [], n = /* @__PURE__ */ new Map(), r = [];
- for (let e of t) {
+function Bu(e, t, n) {
+ wr(e)?.[t] !== n && (e[t] = n);
+}
+function Vu(e, t) {
+ let n = wr(e);
+ n && Object.prototype.hasOwnProperty.call(n, t) && delete e[t];
+}
+function Hu(e, t) {
+ if (!Array.isArray(e) || e.length !== t.length) return !1;
+ for (let n = 0; n < t.length; n++) if (wr(e[n]) !== wr(t[n])) return !1;
+ return !0;
+}
+function Uu(e) {
+ Bu(e, "_mjrNameCollision", !1);
+ for (let t of Lu) Vu(e, t);
+ Bu(e, "_mjrDupStack", !1), Bu(e, "_mjrDupMembers", null), Bu(e, "_mjrDupCount", 0);
+}
+function Wu(e, t) {
+ for (let t of Lu) Vu(e, t);
+ Bu(e, "_mjrNameCollision", !1), Bu(e, "_mjrDupStack", !0), Hu(wr(e)?._mjrDupMembers, t) || (e._mjrDupMembers = t.slice()), Bu(e, "_mjrDupCount", t.length), qt(e, t);
+}
+function Gu(e, { collapseDuplicates: t = !0 } = {}) {
+ let n = Array.isArray(e) ? e : [];
+ if (!t) {
+ let e = [];
+ for (let t of n) t && (Uu(t), e.push(t));
+ return e;
+ }
+ let r = /* @__PURE__ */ new Map(), i = [];
+ for (let e of n) {
if (!e) continue;
- let t = Lu(e);
+ let t = Ru(e);
if (!t) {
- e._mjrNameCollision = !1, delete e._mjrNameCollisionCount, delete e._mjrNameCollisionPaths, e._mjrDupStack = !1, e._mjrDupMembers = null, e._mjrDupCount = 0, r.push(e);
+ Uu(e), i.push(e);
continue;
}
- let i = n.get(t);
- i || (i = [], n.set(t, i), r.push(e)), i.push(e);
+ let n = r.get(t);
+ n || (n = [], r.set(t, n), i.push(e)), n.push(e);
}
- for (let e of n.values()) {
- for (let t of e) t._mjrNameCollision = !1, delete t._mjrNameCollisionCount, delete t._mjrNameCollisionPaths, t._mjrDupStack = !1, t._mjrDupMembers = null, t._mjrDupCount = 0;
- if (e.length >= 2) {
- let t = e[0];
- t._mjrDupStack = !0, t._mjrDupMembers = e.slice(), t._mjrDupCount = e.length;
+ for (let e of r.values()) {
+ let t = e[0];
+ for (let n of e) (n !== t || e.length < 2) && Uu(n);
+ e.length >= 2 && Wu(t, e);
+ }
+ return i;
+}
+function Ku(e) {
+ let t = Array.isArray(e) ? e : [], n = [], r = /* @__PURE__ */ new Set();
+ for (let e of t) {
+ if (!e || typeof e != "object") continue;
+ let t = { ...wr(e) };
+ delete t._mjrDupMembers, delete t._mjrDupStack, delete t._mjrDupCount, delete t._mjrDupHidden, delete t._mjrNameCollision, delete t._mjrNameCollisionCount, delete t._mjrNameCollisionPaths;
+ let i = String(t.id ?? "");
+ if (i) {
+ if (r.has(i)) continue;
+ r.add(i);
}
+ n.push(t);
}
- return r;
+ return n;
}
// ui/vue/components/grid/VirtualAssetGridHost.vue?vue&type=script&setup=true&lang.ts
-var Bu = {
+var qu = {
key: 0,
class: "mjr-grid-loading-overlay",
style: {
@@ -7468,19 +7499,19 @@ var Bu = {
background: "rgba(20,22,28,0.55)",
"backdrop-filter": "blur(2px)"
}
-}, Vu = { style: { width: "100%" } }, Hu = { style: {
+}, Ju = { style: { width: "100%" } }, Yu = { style: {
"margin-top": "10px",
"font-size": "12px",
opacity: "0.68",
"text-align": "center"
-} }, Uu = ["data-index"], Wu = [
+} }, Xu = ["data-index"], Zu = [
"aria-expanded",
"title",
"onClick"
-], Gu = {
+], Qu = {
class: "mjr-grid-group-separator-chevron",
"aria-hidden": "true"
-}, Ku = { class: "mjr-grid-group-separator-title" }, qu = [
+}, $u = { class: "mjr-grid-group-separator-title" }, ed = [
"data-mjr-asset-id",
"data-mjr-filename-key",
"data-mjr-ext",
@@ -7496,21 +7527,21 @@ var Bu = {
"onMousedown",
"onClick",
"onDblclick"
-], Ju = {
+], td = {
key: 3,
style: {
display: "flex",
"flex-direction": "column",
width: "100%"
}
-}, Yu = [
+}, nd = [
"aria-expanded",
"title",
"onClick"
-], Xu = {
+], rd = {
class: "mjr-grid-group-separator-chevron",
"aria-hidden": "true"
-}, Zu = { class: "mjr-grid-group-separator-title" }, Qu = [
+}, id = { class: "mjr-grid-group-separator-title" }, ad = [
"data-mjr-asset-id",
"data-mjr-filename-key",
"data-mjr-ext",
@@ -7526,7 +7557,7 @@ var Bu = {
"onMousedown",
"onClick",
"onDblclick"
-], $u = 501, ed = /* @__PURE__ */ fr({
+], od = 501, sd = /* @__PURE__ */ dr({
__name: "VirtualAssetGridHost",
props: {
scrollElement: { default: null },
@@ -7556,10 +7587,10 @@ var Bu = {
Q(!0);
let s = Q(0), c = Q(0), l = /* @__PURE__ */ new WeakMap(), u = 0, d = 0, f = 0, p = 0, m = 0, h = /* @__PURE__ */ new Map(), g = null, _ = null;
function v() {
- return g ||= import("./chunks/viewerOpenRequest-B8IT-KHd.js").then((e) => e.n), g;
+ return g ||= import("./chunks/viewerOpenRequest-DaR0P9Y2.js").then((e) => e.n), g;
}
function b() {
- return _ ||= import("./chunks/floatingViewerManager-DI520cRz.js").then((e) => e.n), _;
+ return _ ||= import("./chunks/floatingViewerManager-B_1xQj1m.js").then((e) => e.n), _;
}
function x(e) {
return (Array.isArray(e) ? e : []).slice().sort((e, t) => {
@@ -7567,7 +7598,7 @@ var Bu = {
return (Number(t?.mtime || t?.created_at || 0) || 0) - n;
});
}
- sr("mjrStackService", {
+ or("mjrStackService", {
openStackGroup: async (e) => {
let t = i.value;
if (!t || !e) return;
@@ -7578,7 +7609,7 @@ var Bu = {
let a = t._mjrStackMembersCache.get(r);
if (!Array.isArray(a)) {
let e = h.get(r);
- e || (e = re(rt(n, { limit: $u }), { timeoutMs: 3e4 }).finally(() => {
+ e || (e = re(rt(n, { limit: od }), { timeoutMs: 3e4 }).finally(() => {
h.delete(r);
}), h.set(r, e));
let i = await e;
@@ -7599,7 +7630,7 @@ var Bu = {
openDupGroup: (e) => {
let t = i.value;
if (!t || !e) return;
- let n = Array.isArray(e._mjrDupMembers) ? e._mjrDupMembers : [e];
+ let n = Ku(Array.isArray(e._mjrDupMembers) ? e._mjrDupMembers : [e]);
t.dispatchEvent(new CustomEvent(V.OPEN_STACK_GROUP, {
bubbles: !0,
detail: {
@@ -7622,12 +7653,12 @@ var Bu = {
function te(e, { align: t = "auto" } = {}) {
let n = String(e || "").trim();
if (!n) return;
- let i = (Array.isArray(be.value) ? be.value : []).findIndex((e) => String(e?.id || "") === n);
+ let i = (Array.isArray(xe.value) ? xe.value : []).findIndex((e) => String(e?.id || "") === n);
if (!(i < 0)) {
if (r.virtualize) {
- let e = Math.floor(i / Math.max(1, ze.value));
+ let e = Math.floor(i / Math.max(1, Be.value));
try {
- Ye.value.scrollToIndex(e, { align: t });
+ Xe.value.scrollToIndex(e, { align: t });
} catch (e) {
console.debug?.(e);
}
@@ -7683,7 +7714,7 @@ var Bu = {
return String(e?.kind || "").toLowerCase() === "workflow";
}
function le() {
- return String(Se.value || "").trim().toLowerCase() === "workflow";
+ return String(Ce.value || "").trim().toLowerCase() === "workflow";
}
function ue(e) {
let t = String(e || "none").trim().toLowerCase();
@@ -7751,7 +7782,7 @@ var Bu = {
let e = i.value;
if (!e) return;
let t = new Set((Array.isArray(S.selectedIds) ? S.selectedIds : []).map((e) => String(e || "").trim()).filter(Boolean));
- er(e, t, S.activeId || "");
+ $n(e, t, S.activeId || "");
try {
t.size ? e.dataset.mjrSelectedAssetId = String(S.activeId || Array.from(t)[0] || "") : delete e.dataset.mjrSelectedAssetId;
} catch (e) {
@@ -7781,57 +7812,57 @@ var Bu = {
}
}
ve._lastSelectionKey = "";
- let ye = K(() => zu(S.assets)), be = K(() => (Array.isArray(ye.value) ? ye.value : []).filter((e) => Ru(e))), xe = Q(/* @__PURE__ */ new Set()), Se = Q(""), Ce = K(() => {
+ let ye = Q(""), be = K(() => Gu(S.assets, { collapseDuplicates: ye.value !== "similar" })), xe = K(() => (Array.isArray(be.value) ? be.value : []).filter((e) => zu(e))), Se = Q(/* @__PURE__ */ new Set()), Ce = Q(""), we = K(() => {
s.value;
let e = ue(B.WORKFLOW_GRID_GROUP_BY);
- return e === "none" || Se.value !== "workflow" ? "none" : e;
- }), we = K(() => {
- let e = Array.isArray(be.value) ? be.value : [];
+ return e === "none" || Ce.value !== "workflow" ? "none" : e;
+ }), Te = K(() => {
+ let e = Array.isArray(xe.value) ? xe.value : [];
if (!e.length) return [];
- let t = Ce.value;
- return t === "none" ? [] : me(e, ze.value, t);
+ let t = we.value;
+ return t === "none" ? [] : me(e, Be.value, t);
});
- lr(() => `${Ce.value}::${we.value.map((e) => `${e.kind}:${e.groupKey}`).join("|")}`, () => {
- if (Ce.value === "none") {
- xe.value = /* @__PURE__ */ new Set();
+ cr(() => `${we.value}::${Te.value.map((e) => `${e.kind}:${e.groupKey}`).join("|")}`, () => {
+ if (we.value === "none") {
+ Se.value = /* @__PURE__ */ new Set();
return;
}
- let e = /* @__PURE__ */ new Set(), t = xe.value;
- for (let n of we.value) {
+ let e = /* @__PURE__ */ new Set(), t = Se.value;
+ for (let n of Te.value) {
if (n?.kind !== "header") continue;
let r = String(n.groupKey || "");
r && t.has(r) && e.add(r);
}
- xe.value = e;
+ Se.value = e;
}, { immediate: !0 });
- function Te(e) {
- let t = String(e || "");
- return t ? xe.value.has(t) : !1;
- }
function Ee(e) {
let t = String(e || "");
- if (!t) return;
- let n = new Set(xe.value);
- n.has(t) ? n.delete(t) : n.add(t), xe.value = n;
+ return t ? Se.value.has(t) : !1;
}
function De(e) {
+ let t = String(e || "");
+ if (!t) return;
+ let n = new Set(Se.value);
+ n.has(t) ? n.delete(t) : n.add(t), Se.value = n;
+ }
+ function Oe(e) {
let t = String(e?.groupKey || e?.title || ""), n = 0;
for (let e = 0; e < t.length; e += 1) n = (n << 5) - n + t.charCodeAt(e) | 0;
return `mjr-grid-group-separator--accent-${Math.abs(n) % 8}`;
}
- let Oe = K(() => {
- let e = Array.isArray(be.value) ? be.value : [];
+ let Ae = K(() => {
+ let e = Array.isArray(xe.value) ? xe.value : [];
if (!e.length) return [];
- if (Ce.value === "none") return Mu(e, ze.value);
- let t = Array.isArray(we.value) ? we.value : [], n = [];
- for (let e of t) e?.kind === "header" ? n.push(e) : Te(String(e?.groupKey || "")) || n.push(e);
+ if (we.value === "none") return Mu(e, Be.value);
+ let t = Array.isArray(Te.value) ? Te.value : [], n = [];
+ for (let e of t) e?.kind === "header" ? n.push(e) : Ee(String(e?.groupKey || "")) || n.push(e);
return n;
});
- function Ae() {
+ function je() {
let e = i.value;
if (!e) return;
let t = {
- count: Array.isArray(be.value) ? be.value.length : 0,
+ count: Array.isArray(xe.value) ? xe.value.length : 0,
total: Number(S.total || 0) || 0
};
try {
@@ -7845,7 +7876,7 @@ var Bu = {
console.debug?.(e);
}
}
- function je(e) {
+ function Me(e) {
if (!e?.id) return;
let t = (Array.isArray(S.assets) ? S.assets : []).find((t) => String(t?.id || "") === String(e.id));
if (t) try {
@@ -7854,27 +7885,27 @@ var Bu = {
console.debug?.(e);
}
}
- function Me() {
+ function Ne() {
try {
window.dispatchEvent(new CustomEvent("mjr:open-sidebar", { detail: { tab: "details" } }));
} catch (e) {
console.debug?.(e);
}
}
- function Ne(e, t = 6) {
+ function Fe(e, t = 6) {
let n = S.cardElements.get(e);
if (n) try {
n.focus?.({ preventScroll: !0 });
} catch (e) {
console.debug?.(e);
}
- else t <= 0 || requestAnimationFrame(() => Ne(e, t - 1));
- }
- function Fe(e) {
- let t = e?.detail || {}, n = String(t.assetId ?? t.id ?? "").trim();
- n && (Array.isArray(be.value) ? be.value : []).some((e) => String(e?.id || "") === n) && (k([n], n), _e(), ve(), te(n, { align: "center" }), setTimeout(() => Ne(n), 0));
+ else t <= 0 || requestAnimationFrame(() => Fe(e, t - 1));
}
function Ie(e) {
+ let t = e?.detail || {}, n = String(t.assetId ?? t.id ?? "").trim();
+ n && (Array.isArray(xe.value) ? xe.value : []).some((e) => String(e?.id || "") === n) && (k([n], n), _e(), ve(), te(n, { align: "center" }), setTimeout(() => Fe(n), 0));
+ }
+ function Re(e) {
if (!e) return;
e._mjrSelectionManagedByVue = !0;
try {
@@ -7883,27 +7914,27 @@ var Bu = {
console.debug?.(e);
}
try {
- pt?.();
+ mt?.();
} catch (e) {
console.debug?.(e);
}
hi(e, { applySettingsClasses: r.applyDefaultSettingsClasses });
try {
- pt = ns(e);
+ mt = ns(e);
} catch (e) {
- console.debug?.(e), pt = null;
+ console.debug?.(e), mt = null;
}
- e._mjrPrimaryPointerSelectionUnbind = () => {}, e._mjrGetAssets = () => Array.isArray(be.value) ? be.value : [], e._mjrSetSelection = (e, t = "") => {
+ e._mjrPrimaryPointerSelectionUnbind = () => {}, e._mjrGetAssets = () => Array.isArray(xe.value) ? xe.value : [], e._mjrSetSelection = (e, t = "") => {
let n = k(e, t);
return _e(), ve(), n.selectedIds;
};
let t = (e, t = {}) => {
let n = I.removeAssets(e, t);
- return Ae(), n;
+ return je(), n;
};
e._mjrRemoveAssets = t, e._mjrGetRenderedCards = () => ee(), e._mjrScrollToAssetId = (e, t = {}) => {
te(e, t);
- }, e._mjrHasAssetId = (e) => (Array.isArray(S.assets) ? S.assets : []).some((t) => String(t?.id || "") === String(e || "")), e._mjrGetGridState = () => S, e._mjrGetSelectedAssets = () => j(), e._mjrGetActiveAsset = () => M(), e._mjrOnKeyboardAssetChanged = (e) => je(e), e._mjrOpenKeyboardDetails = () => Me();
+ }, e._mjrHasAssetId = (e) => (Array.isArray(S.assets) ? S.assets : []).some((t) => String(t?.id || "") === String(e || "")), e._mjrGetGridState = () => S, e._mjrGetSelectedAssets = () => j(), e._mjrGetActiveAsset = () => M(), e._mjrOnKeyboardAssetChanged = (e) => Me(e), e._mjrOpenKeyboardDetails = () => Ne();
let n = () => (r.applyDefaultSettingsClasses && (mi(e), s.value += 1), I.refreshGrid()), i = () => {
I.prepareGridForScopeSwitch(), I.dispose(), S.cardElements.clear(), e._mjrGridApi = null;
};
@@ -7925,38 +7956,38 @@ var Bu = {
getDebugSnapshot: () => I.getDebugSnapshot()
}, e._mjrLoadAssets = (...e) => I.loadAssets(...e), e._mjrLoadAssetsFromList = (...e) => I.loadAssetsFromList(...e), e._mjrPrepareForScopeSwitch = () => I.prepareGridForScopeSwitch(), e._mjrRefreshGrid = n, e._mjrCaptureAnchor = () => I.captureAnchor(), e._mjrRestoreAnchor = (e) => I.restoreAnchor(e), e._mjrHydrateFromSnapshot = (...e) => I.hydrateFromSnapshot(...e), e._mjrUpsertAsset = (e) => I.upsertAsset(e), e._mjrUpsertAssetNow = (e) => I.upsertAssetNow(e), e._mjrGetCanonicalState = () => I.getCanonicalState(), e._mjrGetDebugSnapshot = () => I.getDebugSnapshot(), e._mjrDispose = i;
}
- lr(i, (e) => {
- e && (Ie(e), _e(), Ae());
- }, { immediate: !0 }), lr(() => `${(S.selectedIds || []).join("|")}::${String(S.activeId || "")}`, () => {
+ cr(i, (e) => {
+ e && (Re(e), _e(), je());
+ }, { immediate: !0 }), cr(() => `${(S.selectedIds || []).join("|")}::${String(S.activeId || "")}`, () => {
i.value && (_e(), ve());
- }, { flush: "post" }), lr(() => `${Array.isArray(be.value) ? be.value.length : 0}::${Number(S.total || 0)}::${Number(S.hiddenPngSiblings || 0)}`, () => {
- i.value && Ae();
+ }, { flush: "post" }), cr(() => `${Array.isArray(xe.value) ? xe.value.length : 0}::${Number(S.total || 0)}::${Number(S.hiddenPngSiblings || 0)}`, () => {
+ i.value && je();
}, {
flush: "post",
immediate: !0
});
- function Re() {
+ function ze() {
let e = i.value, t = String(e?.dataset?.mjrBottomFeed || "").toLowerCase() === "true", n = Number(B.GRID_MIN_SIZE || 120) || 120;
return t ? Math.max(80, Number(B.FEED_GRID_MIN_SIZE || n) || n) : le() ? Math.max(180, n) : Math.max(80, n);
}
- let ze = K(() => {
+ let Be = K(() => {
s.value;
- let e = Math.max(0, Number(B.GRID_GAP || 10) || 10), t = Re(), n = Number(o.value || 0) || Number(P.value?.clientWidth || 0) || 0;
+ let e = Math.max(0, Number(B.GRID_GAP || 10) || 10), t = ze(), n = Number(o.value || 0) || Number(P.value?.clientWidth || 0) || 0;
return n <= 0 ? 1 : Math.max(1, Math.floor((n + e) / (t + e)));
- }), Be = K(() => (Number(o.value || 0) || Number(P.value?.clientWidth || 0) || 0) > 0), Ve = K(() => (s.value, Math.max(0, Number(B.GRID_GAP || 10) || 10))), He = K(() => {
- let e = Math.max(1, ze.value), t = Number(o.value || 0) || Number(P.value?.clientWidth || 0) || 0;
- return t <= 0 ? Re() : Math.max(80, Math.floor((t - Ve.value * Math.max(0, e - 1)) / e));
- }), Ue = K(() => {
+ }), Ve = K(() => (Number(o.value || 0) || Number(P.value?.clientWidth || 0) || 0) > 0), He = K(() => (s.value, Math.max(0, Number(B.GRID_GAP || 10) || 10))), Ue = K(() => {
+ let e = Math.max(1, Be.value), t = Number(o.value || 0) || Number(P.value?.clientWidth || 0) || 0;
+ return t <= 0 ? ze() : Math.max(80, Math.floor((t - He.value * Math.max(0, e - 1)) / e));
+ }), We = K(() => {
s.value;
- let e = !!B.GRID_SHOW_DETAILS, t = He.value, n = e ? 82 : 0;
- return Ce.value === "none" ? t + n + Ve.value : Math.max(48, t + n + Ve.value);
- }), We = K(() => r.virtualize ? [] : Array.isArray(Oe.value) ? Oe.value : []);
- function Ge(e) {
+ let e = !!B.GRID_SHOW_DETAILS, t = Ue.value, n = e ? 82 : 0;
+ return we.value === "none" ? t + n + He.value : Math.max(48, t + n + He.value);
+ }), Ge = K(() => r.virtualize ? [] : Array.isArray(Ae.value) ? Ae.value : []);
+ function Ke(e) {
if (!d) try {
d = requestAnimationFrame(() => {
d = 0;
try {
- let t = typeof performance < "u" && typeof performance.now == "function" ? performance.now() : Date.now(), n = Number(e?.scrollTop || 0) || 0, r = Math.max(16, t - Number(m || t)), i = Math.abs(n - Number(p || n)) / Math.max(1, Ue.value) * (16 / r);
+ let t = typeof performance < "u" && typeof performance.now == "function" ? performance.now() : Date.now(), n = Number(e?.scrollTop || 0) || 0, r = Math.max(16, t - Number(m || t)), i = Math.abs(n - Number(p || n)) / Math.max(1, We.value) * (16 / r);
c.value = Math.max(0, Math.min(20, i)), p = n, m = t, f && clearTimeout(f), f = setTimeout(() => {
f = 0, c.value = 0;
}, 140);
@@ -7968,7 +7999,7 @@ var Bu = {
console.debug?.(e), d = 0;
}
}
- function Ke() {
+ function qe() {
if (d) {
try {
cancelAnimationFrame(d);
@@ -7987,52 +8018,52 @@ var Bu = {
}
c.value = 0;
}
- let qe = Pu({
+ let Je = Pu({
scrollRef: P,
- items: be,
- rows: Oe,
- columnCount: ze,
- estimateRowHeight: Ue,
+ items: xe,
+ rows: Ae,
+ columnCount: Be,
+ estimateRowHeight: We,
overscan: K(() => {
- let e = Math.max(1, Ue.value), t = P.value?.clientHeight || 0;
+ let e = Math.max(1, We.value), t = P.value?.clientHeight || 0;
if (t <= 0) return 6;
let n = Math.ceil(t / e), r = Math.ceil(c.value * 3);
return Math.max(3, Math.min(30, n + r));
}),
enabled: K(() => r.virtualize)
- }), Je = qe.rowCount, Ye = qe.virtualizer, Xe = qe.virtualRows, Ze = qe.totalSize, $e = K(() => {
+ }), Ye = Je.rowCount, Xe = Je.virtualizer, Ze = Je.virtualRows, $e = Je.totalSize, et = K(() => {
let e = /* @__PURE__ */ new Map();
- for (let t of Xe.value) e.set(t.index, t.virtual || t);
+ for (let t of Ze.value) e.set(t.index, t.virtual || t);
return e;
- }), et = K(() => (s.value, !!B.GRID_SHOW_DETAILS)), z = K(() => {
- let e = Math.max(1, Number(ze.value || 1));
+ }), z = K(() => (s.value, !!B.GRID_SHOW_DETAILS)), tt = K(() => {
+ let e = Math.max(1, Number(Be.value || 1));
return Math.max(12, Math.min(36, e * 4));
- }), tt = K(() => Array.from({ length: Number(z.value || 12) }, (e, t) => t)), nt = K(() => {
- let e = Math.max(80, Number(Ue.value || 0) - Number(Ve.value || 0)), t = Math.max(80, Number(He.value || 0));
+ }), nt = K(() => Array.from({ length: Number(tt.value || 12) }, (e, t) => t)), it = K(() => {
+ let e = Math.max(80, Number(We.value || 0) - Number(He.value || 0)), t = Math.max(80, Number(Ue.value || 0));
return Math.max(0, e - t);
- }), it = K(() => ({
+ }), at = K(() => ({
display: "grid",
- gridTemplateColumns: `repeat(${Math.max(1, Number(ze.value || 1))}, minmax(0, ${Math.max(80, Number(He.value || 0))}px))`,
- gap: `${Ve.value}px`,
+ gridTemplateColumns: `repeat(${Math.max(1, Number(Be.value || 1))}, minmax(0, ${Math.max(80, Number(Ue.value || 0))}px))`,
+ gap: `${He.value}px`,
justifyContent: "start",
boxSizing: "border-box"
- })), at = K(() => ({
+ })), ot = K(() => ({
width: "100%",
minWidth: "0",
- height: `${Math.max(80, Number(Ue.value || 0) - Number(Ve.value || 0))}px`,
+ height: `${Math.max(80, Number(We.value || 0) - Number(He.value || 0))}px`,
borderRadius: "12px",
border: "1px solid rgba(255,255,255,0.22)",
background: "rgba(192,198,206,0.20)",
overflow: "hidden",
boxShadow: "0 6px 18px rgba(0,0,0,0.24)",
boxSizing: "border-box"
- })), ot = K(() => ({
+ })), st = K(() => ({
width: "100%",
- height: `${Math.max(80, Number(He.value || 0))}px`,
+ height: `${Math.max(80, Number(Ue.value || 0))}px`,
background: "linear-gradient(90deg, rgba(168,174,182,0.40) 0%, rgba(220,225,232,0.54) 50%, rgba(168,174,182,0.40) 100%)",
backgroundSize: "220% 100%",
animation: "mjr-skeleton-shimmer 2.2s ease-in-out infinite"
- })), st = K(() => ({
+ })), ct = K(() => ({
height: "10px",
margin: "10px 10px 6px",
borderRadius: "8px",
@@ -8040,7 +8071,7 @@ var Bu = {
background: "linear-gradient(90deg, rgba(162,168,176,0.38) 0%, rgba(214,219,226,0.52) 50%, rgba(162,168,176,0.38) 100%)",
backgroundSize: "220% 100%",
animation: "mjr-skeleton-shimmer 2.2s ease-in-out infinite"
- })), ct = K(() => ({
+ })), lt = K(() => ({
height: "10px",
margin: "0 10px 10px",
borderRadius: "8px",
@@ -8048,23 +8079,25 @@ var Bu = {
background: "linear-gradient(90deg, rgba(160,166,173,0.34) 0%, rgba(208,214,221,0.48) 50%, rgba(160,166,173,0.34) 100%)",
backgroundSize: "220% 100%",
animation: "mjr-skeleton-shimmer 2.2s ease-in-out infinite"
- })), lt = K(() => ({
- display: et.value ? "block" : "none",
- minHeight: `${Math.max(0, Number(nt.value || 0))}px`
+ })), ut = K(() => ({
+ display: z.value ? "block" : "none",
+ minHeight: `${Math.max(0, Number(it.value || 0))}px`
}));
- function ut() {
+ function dt() {
let e = Number(P.value?.clientWidth || 0) || Number(i.value?.clientWidth || 0) || 0;
e > 0 && (o.value = e);
}
- let dt = null, ft = null, pt = null, mt = !1;
- function ht() {
- let e = String(i.value?.dataset?.mjrScope || "").trim().toLowerCase();
- Se.value !== e && (Se.value = e);
- }
+ let ft = null, pt = null, mt = null, ht = !1;
function gt() {
- zt();
+ let e = String(i.value?.dataset?.mjrScope || "").trim().toLowerCase();
+ Ce.value !== e && (Ce.value = e);
+ let t = String(i.value?.dataset?.mjrViewScope || "").trim().toLowerCase();
+ ye.value !== t && (ye.value = t);
+ }
+ function _t() {
+ Vt();
let e = () => {
- zt(), Gt();
+ Vt(), Kt();
};
try {
requestAnimationFrame(() => {
@@ -8080,52 +8113,52 @@ var Bu = {
]) setTimeout(e, t);
}
Mr(() => {
- gt(), window.addEventListener(V.VIEWER_ACTIVE_ASSET_CHANGED, Fe);
- }), lr(i, (e) => {
+ _t(), window.addEventListener(V.VIEWER_ACTIVE_ASSET_CHANGED, Ie);
+ }), cr(i, (e) => {
+ try {
+ pt?.disconnect?.();
+ } catch (e) {
+ console.debug?.(e);
+ }
+ if (pt = null, e) {
+ gt();
+ try {
+ pt = new MutationObserver(() => {
+ gt();
+ }), pt.observe(e, {
+ attributes: !0,
+ attributeFilter: ["data-mjr-scope", "data-mjr-view-scope"]
+ });
+ } catch (e) {
+ console.debug?.(e), pt = null;
+ }
+ }
+ }, { immediate: !0 }), cr(P, (e, t) => {
try {
ft?.disconnect?.();
} catch (e) {
console.debug?.(e);
}
- if (ft = null, e) {
- ht();
+ if (e) {
+ dt();
try {
- ft = new MutationObserver(() => {
- ht();
- }), ft.observe(e, {
- attributes: !0,
- attributeFilter: ["data-mjr-scope"]
- });
+ ft = new ResizeObserver(() => {
+ dt();
+ }), ft.observe(e);
} catch (e) {
console.debug?.(e), ft = null;
}
}
- }, { immediate: !0 }), lr(P, (e, t) => {
- try {
- dt?.disconnect?.();
- } catch (e) {
- console.debug?.(e);
- }
- if (e) {
- ut();
- try {
- dt = new ResizeObserver(() => {
- ut();
- }), dt.observe(e);
- } catch (e) {
- console.debug?.(e), dt = null;
- }
- }
- }, { immediate: !0 }), lr(() => Je.value, async () => {
- Be.value && (await ur(), bt(), Bt());
- }), lr(() => S.assets, async (e) => {
+ }, { immediate: !0 }), cr(() => Ye.value, async () => {
+ Ve.value && (await lr(), xt(), Ht());
+ }), cr(() => S.assets, async (e) => {
if (!Array.isArray(e) || e.length === 0) {
let e = i.value;
e?._mjrStackMembersCache && e._mjrStackMembersCache.clear();
}
- await ur(), bt();
+ await lr(), xt();
});
- function _t(e, t) {
+ function vt(e, t) {
let n = String(t?.filename || "").trim().toLowerCase(), r = l.get(e);
if (r && r !== n) {
let t = S.renderedFilenameMap.get(r);
@@ -8138,45 +8171,33 @@ var Bu = {
let i = S.renderedFilenameMap.get(n);
i || (i = /* @__PURE__ */ new Set(), S.renderedFilenameMap.set(n, i)), i.add(e), l.set(e, n);
}
- function vt(e) {
+ function yt(e) {
if (!e) return;
let t = l.get(e);
if (!t) return;
let n = S.renderedFilenameMap.get(t);
n && (n.delete(e), n.size || S.renderedFilenameMap.delete(t)), l.delete(e);
}
- function yt(e) {
+ function bt(e) {
let t = String(e || "").trim().toLowerCase();
if (!t) return;
- let n = S.renderedFilenameMap.get(t), r = Array.from(n || []);
- if (!r.length) return;
- let i = (Array.isArray(S.assets) ? S.assets : []).filter((e) => String(e?.filename || "").trim().toLowerCase() === t), a = Math.max(Number(S.filenameCounts?.get?.(t) || 0) || 0, i.length), o = Ft(i), s = r.find((e) => {
- let t = String(e._mjrAsset?.id || ""), n = String(o?.id || "");
- return t && n && t === n;
- }) || r[0] || r[0] || null, c = s?._mjrAsset || o || i[0] || null;
- Jt(c, i);
- for (let e of r) {
- delete e.dataset.mjrDupHidden;
- let t = e._mjrAsset;
- t && (t._mjrNameCollision = !1, delete t._mjrNameCollisionCount, delete t._mjrNameCollisionPaths, t._mjrDupStack = !1, t._mjrDupMembers = null, t._mjrDupCount = 0, t._mjrDupHidden = !1);
- }
- if (!s || !c || a < 2) for (let e of r);
- else c._mjrDupStack = !0, c._mjrDupMembers = i.length ? i : [c], c._mjrDupCount = c._mjrDupMembers.length, c._mjrNameCollision = !1;
+ let n = S.renderedFilenameMap.get(t);
+ for (let e of n || []) e?.dataset?.mjrDupHidden && delete e.dataset.mjrDupHidden;
}
- function bt() {
- for (let e of S.renderedFilenameMap.keys()) yt(e);
+ function xt() {
+ for (let e of S.renderedFilenameMap.keys()) bt(e);
}
- function xt(e, t) {
+ function St(e, t) {
let n = String(e?.id || "").trim();
if (!n) return;
if (!t) {
let e = S.cardElements.get(n), t = e ? l.get(e) : "";
- vt(e), S.cardElements.delete(n), yt(t);
+ yt(e), S.cardElements.delete(n), bt(t);
return;
}
let a = t?.$el ?? t;
if (a instanceof HTMLElement) {
- S.cardElements.set(n, a), a._mjrIsVue = !0, a._mjrAsset = e, a._mjrReactiveAsset = e, a.dataset.mjrKind = String(e?.kind || ""), _t(a, e), yt(String(e?.filename || "").trim().toLowerCase());
+ S.cardElements.set(n, a), a._mjrIsVue = !0, a._mjrAsset = e, a._mjrReactiveAsset = e, a.dataset.mjrKind = String(e?.kind || ""), vt(a, e), bt(String(e?.filename || "").trim().toLowerCase());
try {
r.onCardRendered?.(a, e, i.value);
} catch (e) {
@@ -8184,10 +8205,19 @@ var Bu = {
}
}
}
- function St(e) {
- return (t) => xt(e, t);
+ let Ct = /* @__PURE__ */ new Map();
+ function wt(e) {
+ let t = String(e?.id ?? "").trim();
+ if (!t) return (t) => St(e, t);
+ let n = Ct.get(t);
+ return n || (n = {
+ asset: e,
+ fn: null
+ }, n.fn = (e) => {
+ St(n.asset, e), e || Ct.delete(t);
+ }, Ct.set(t, n)), n.asset = e, n.fn;
}
- function Ct(e, t) {
+ function Et(e, t) {
try {
let n = e?.closest?.("a, button, input, textarea, select, label");
return !!(n && t?.contains?.(n));
@@ -8195,21 +8225,21 @@ var Bu = {
return !1;
}
}
- let wt = {
+ let Dt = {
assetId: "",
at: 0
};
- function Tt(e, t) {
+ function Ot(e, t) {
let n = String(t?.id || "").trim();
if (!n) return;
if (e?.type === "click" && Number(e?.detail || 0) > 0) {
- let e = Date.now() - Number(wt.at || 0);
- if (wt.assetId === n && e >= 0 && e < 500) {
- wt.assetId = "", wt.at = 0;
+ let e = Date.now() - Number(Dt.at || 0);
+ if (Dt.assetId === n && e >= 0 && e < 500) {
+ Dt.assetId = "", Dt.at = 0;
return;
}
}
- if (Ct(e?.target, e?.currentTarget)) return;
+ if (Et(e?.target, e?.currentTarget)) return;
let r = Array.isArray(S.assets) ? S.assets : [], i = r.findIndex((e) => String(e?.id || "") === n), a = Array.isArray(S.selectedIds) ? S.selectedIds.slice() : [];
if (e?.shiftKey && i >= 0) {
let e = String(S.selectionAnchorId || S.activeId || n).trim(), t = r.findIndex((t) => String(t?.id || "") === e), a = t >= 0 ? t : i, o = Math.min(a, i), s = Math.max(a, i), c = r.slice(o, s + 1).map((e) => String(e?.id || "")).filter(Boolean);
@@ -8226,17 +8256,17 @@ var Bu = {
} catch (e) {
console.debug?.(e);
}
- le() && ce(t) && b().then((e) => e?.floatingViewerManager?.isGraphModeVisible?.() ? kt(t) : null).catch((e) => console.debug?.(e));
+ le() && ce(t) && b().then((e) => e?.floatingViewerManager?.isGraphModeVisible?.() ? Mt(t) : null).catch((e) => console.debug?.(e));
}
}
- function Et(e, t) {
+ function kt(e, t) {
if (Number(e?.button ?? 0) !== 0) return;
let n = String(t?.id || "").trim();
if (!n) return;
let r = Array.isArray(S.selectedIds) ? S.selectedIds.map(String).filter(Boolean) : [];
- r.includes(n) && r.length > 1 && !e?.ctrlKey && !e?.metaKey && !e?.shiftKey ? (wt.assetId = n, wt.at = Date.now()) : (wt.assetId = n, wt.at = Date.now(), Tt(e, t));
+ r.includes(n) && r.length > 1 && !e?.ctrlKey && !e?.metaKey && !e?.shiftKey ? (Dt.assetId = n, Dt.at = Date.now()) : (Dt.assetId = n, Dt.at = Date.now(), Ot(e, t));
}
- async function Dt(e) {
+ async function At(e) {
let t = (Array.isArray(S.assets) ? S.assets : []).filter((e) => !L(e)), n = t.findIndex((t) => String(t?.id || "") === String(e?.id || ""));
if (!t.length || n < 0) return;
let { requestViewerOpen: r } = await v();
@@ -8245,7 +8275,7 @@ var Bu = {
index: n
});
}
- function Ot(e, t = null) {
+ function jt(e, t = null) {
let n = String(e?.id || "").trim();
if (!n) return;
let r = S.cardElements.get(n);
@@ -8262,7 +8292,7 @@ var Bu = {
console.debug?.(e);
}
}
- async function kt(e, { select: t = !1 } = {}) {
+ async function Mt(e, { select: t = !1 } = {}) {
try {
let n = String(e?.id || "").trim();
t && n && k([n], n);
@@ -8289,14 +8319,14 @@ var Bu = {
mode: "graph"
});
} catch (e) {
- console.debug?.(e), Me();
+ console.debug?.(e), Ne();
}
}
- async function At(t, n) {
+ async function Nt(t, n) {
let r = String(t?.type || "").trim().toLowerCase();
if (r && String(n?.kind || "").toLowerCase() === "workflow") {
- if (r === "load") await jt(n);
- else if (r === "inspect") await kt(n, { select: !0 });
+ if (r === "load") await Pt(n);
+ else if (r === "inspect") await Mt(n, { select: !0 });
else if (r === "favorite") {
let t = !!n.favorite, r = !t;
try {
@@ -8318,17 +8348,17 @@ var Bu = {
} catch (r) {
console.debug?.(r), n.favorite = t, e(R("toast.workflowFavoriteFailed", "Failed to update workflow favorite."), "error");
}
- } else r === "menu" && Ot(n, t?.event || null);
+ } else r === "menu" && jt(n, t?.event || null);
}
}
- async function jt(t) {
+ async function Pt(t) {
let n = String(t?.filepath || t?.path || t?.full_path || "").trim();
if (!n) {
e(R("toast.workflowMissingPath", "Workflow file path is missing."), "error");
return;
}
let r = Qe();
- if (Le(r) === !0 && !await Wt(R("dialog.workflowLoadReplaceDirty", "Current canvas has unsaved changes. Replace it with this workflow?"), R("tab.workflow", "Workflow"))) return;
+ if (Le(r) === !0 && !await Tt(R("dialog.workflowLoadReplaceDirty", "Current canvas has unsaved changes. Replace it with this workflow?"), R("tab.workflow", "Workflow"))) return;
let i = await y(n, { timeoutMs: 3e4 }), o = i?.data?.workflow || i?.workflow || null;
if (!i?.ok || !o || typeof o != "object") e(i?.error || R("toast.workflowLoadFailed", "Failed to load workflow."), "error");
else if (!Pe(o, r).ok) e(R("toast.workflowImportUnavailable", "ComfyUI workflow import is unavailable in this frontend."), "error");
@@ -8341,7 +8371,7 @@ var Bu = {
e(R("toast.workflowLoaded", "Workflow loaded"), "success", 1800);
}
}
- function Mt(e) {
+ function Ft(e) {
try {
if (typeof r.onCardDblclick == "function") {
r.onCardDblclick({
@@ -8362,9 +8392,9 @@ var Bu = {
} catch (e) {
console.debug?.(e);
}
- else String(e?.kind || "").toLowerCase() === "workflow" ? jt(e) : Dt(e);
+ else String(e?.kind || "").toLowerCase() === "workflow" ? Pt(e) : At(e);
}
- async function Nt({ asset: t, folderPath: n }) {
+ async function It({ asset: t, folderPath: n }) {
let r = String(t?.filepath || "").trim();
if (r && n) try {
let t = await ke({
@@ -8377,21 +8407,21 @@ var Bu = {
e(t?.message || "Failed to move file", "error");
}
}
- let Pt = null, It = null, Lt = 0, Rt = "";
- function zt() {
- ut();
+ let Lt = null, Rt = null, zt = 0, Bt = "";
+ function Vt() {
+ dt();
try {
- Ye.value?.measure?.();
+ Xe.value?.measure?.();
} catch (e) {
console.debug?.(e);
}
}
- function Bt() {
+ function Ht() {
if (!u) try {
u = requestAnimationFrame(() => {
u = 0;
try {
- Ye.value?.measure?.();
+ Xe.value?.measure?.();
} catch (e) {
console.debug?.(e);
}
@@ -8399,34 +8429,34 @@ var Bu = {
} catch (e) {
console.debug?.(e), u = 0;
try {
- Ye.value?.measure?.();
+ Xe.value?.measure?.();
} catch (e) {
console.debug?.(e);
}
}
}
- function Vt() {
- zt(), requestAnimationFrame(() => {
+ function Ut() {
+ Vt(), requestAnimationFrame(() => {
requestAnimationFrame(() => {
- zt(), Gt();
+ Vt(), Kt();
});
}), setTimeout(() => {
- zt(), Gt();
+ Vt(), Kt();
}, 150);
}
- function Ht(e) {
+ function Wt(e) {
if (!e || !r.virtualize) return () => {};
let t = () => {
- Ge(e);
+ Ke(e);
};
e.addEventListener("scroll", t, { passive: !0 });
try {
requestAnimationFrame(() => {
- t(), Gt();
+ t(), Kt();
});
} catch {
setTimeout(() => {
- t(), Gt();
+ t(), Kt();
}, 0);
}
return () => {
@@ -8435,18 +8465,18 @@ var Bu = {
} catch (e) {
console.debug?.(e);
}
- Ke();
+ qe();
};
}
- lr(P, (e) => {
+ cr(P, (e) => {
try {
- Pt?.();
+ Lt?.();
} catch (e) {
console.debug?.(e);
}
- Pt = Ht(e);
+ Lt = Wt(e);
}, { immediate: !0 });
- function Ut(e) {
+ function Gt(e) {
let t = Number(e?.clientHeight || 0) || 0;
if (t > 0) return t;
let n = Number(i.value?.clientHeight || 0) || 0;
@@ -8457,40 +8487,40 @@ var Bu = {
return 0;
}
}
- async function Gt() {
- if (!r.virtualize || !Be.value || S.loading || S.done) return;
+ async function Kt() {
+ if (!r.virtualize || !Ve.value || S.loading || S.done) return;
let e = P.value;
if (!e) return;
- let t = Array.isArray(S.assets) ? S.assets.length : 0, n = `${t}::${ze.value}`;
- if (!It && !(n === Rt && Date.now() - Lt < 500) && (await ur(), (Number(e.scrollHeight || 0) || 0) <= Ut(e) + 40)) {
+ let t = Array.isArray(S.assets) ? S.assets.length : 0, n = `${t}::${Be.value}`;
+ if (!Rt && !(n === Bt && Date.now() - zt < 500) && (await lr(), (Number(e.scrollHeight || 0) || 0) <= Gt(e) + 40)) {
let e = t;
- It = Promise.resolve(I.loadNextPage()).catch((e) => console.debug?.(e)).finally(() => {
+ Rt = Promise.resolve(I.loadNextPage()).catch((e) => console.debug?.(e)).finally(() => {
let t = Array.isArray(S.assets) ? S.assets.length : 0;
- Lt = Date.now(), Rt = t === e ? n : "", It = null, setTimeout(() => {
- Gt();
+ zt = Date.now(), Bt = t === e ? n : "", Rt = null, setTimeout(() => {
+ Kt();
}, 0);
});
}
}
- lr(() => `${Array.isArray(S.assets) ? S.assets.length : 0}::${ze.value}::${S.loading}::${S.done}`, () => {
- Gt();
+ cr(() => `${Array.isArray(S.assets) ? S.assets.length : 0}::${Be.value}::${S.loading}::${S.done}`, () => {
+ Kt();
}, { flush: "post" });
- function Kt(e) {
+ function qt(e) {
if (e && r.virtualize) try {
- Ye.value.measureElement(e);
+ Xe.value.measureElement(e);
} catch (e) {
console.debug?.(e);
}
}
- function qt() {
+ function Jt() {
return {
- width: `${He.value}px`,
- flex: `0 0 ${He.value}px`,
- minWidth: `${He.value}px`
+ width: `${Ue.value}px`,
+ flex: `0 0 ${Ue.value}px`,
+ minWidth: `${Ue.value}px`
};
}
function Yt(e) {
- return $e.value.get(e) || null;
+ return et.value.get(e) || null;
}
function Xt(e) {
let t = Yt(e);
@@ -8501,27 +8531,27 @@ var Bu = {
transform: `translateY(${Number(t?.start || 0)}px)`,
width: "100%",
display: "flex",
- gap: `${Ve.value}px`,
- paddingBottom: `${Ve.value}px`,
+ gap: `${He.value}px`,
+ paddingBottom: `${He.value}px`,
boxSizing: "border-box"
};
}
function Zt() {
return {
display: "flex",
- gap: `${Ve.value}px`,
- paddingBottom: `${Ve.value}px`,
+ gap: `${He.value}px`,
+ paddingBottom: `${He.value}px`,
boxSizing: "border-box"
};
}
function Qt() {
s.value += 1, r.applyDefaultSettingsClasses && i.value && mi(i.value);
}
- return lr(() => r.applyDefaultSettingsClasses, () => {
+ return cr(() => r.applyDefaultSettingsClasses, () => {
i.value && r.applyDefaultSettingsClasses && mi(i.value);
- }, { immediate: !0 }), mr(() => {
+ }, { immediate: !0 }), pr(() => {
try {
- window.removeEventListener(V.VIEWER_ACTIVE_ASSET_CHANGED, Fe);
+ window.removeEventListener(V.VIEWER_ACTIVE_ASSET_CHANGED, Ie);
} catch (e) {
console.debug?.(e);
}
@@ -8535,18 +8565,18 @@ var Bu = {
} catch (e) {
console.debug?.(e);
}
- try {
- dt?.disconnect?.();
- } catch (e) {
- console.debug?.(e);
- }
try {
ft?.disconnect?.();
} catch (e) {
console.debug?.(e);
}
try {
- Pt?.();
+ pt?.disconnect?.();
+ } catch (e) {
+ console.debug?.(e);
+ }
+ try {
+ Lt?.();
} catch (e) {
console.debug?.(e);
}
@@ -8555,30 +8585,30 @@ var Bu = {
} catch (e) {
console.debug?.(e);
}
- u = 0, Ke();
+ u = 0, qe();
try {
I.dispose();
} catch (e) {
console.debug?.(e);
}
try {
- pt?.();
+ mt?.();
} catch (e) {
console.debug?.(e);
}
- pt = null;
+ mt = null;
try {
- window.removeEventListener("mjr-settings-changed", Qt), mt = !1;
+ window.removeEventListener("mjr-settings-changed", Qt), ht = !1;
} catch (e) {
console.debug?.(e);
}
try {
- window.removeEventListener("mjr:keepalive-attached", Vt);
+ window.removeEventListener("mjr:keepalive-attached", Ut);
} catch (e) {
console.debug?.(e);
}
- }), lr(i, (e) => {
- e && (mt ||= (window.addEventListener("mjr-settings-changed", Qt), window.addEventListener("mjr:keepalive-attached", Vt), !0));
+ }), cr(i, (e) => {
+ e && (ht ||= (window.addEventListener("mjr-settings-changed", Qt), window.addEventListener("mjr:keepalive-attached", Ut), !0));
}, { immediate: !0 }), n({
get gridContainer() {
return i.value;
@@ -8645,27 +8675,27 @@ var Bu = {
"min-height": "100%"
}
}, [
- Z(S).loading && !Z(S).assets.length ? (q(), X("div", Bu, [U("div", Vu, [U("div", {
+ Z(S).loading && !Z(S).assets.length ? (q(), X("div", qu, [U("div", Ju, [U("div", {
class: "mjr-grid-skeleton-layout",
- style: Sr(it.value)
- }, [(q(!0), X(H, null, gr(tt.value, (e) => (q(), X("div", {
+ style: xr(at.value)
+ }, [(q(!0), X(H, null, hr(nt.value, (e) => (q(), X("div", {
key: `sk-${e}`,
class: "mjr-grid-skeleton-card",
- style: Sr(at.value)
+ style: xr(ot.value)
}, [U("div", {
class: "mjr-grid-skeleton-thumb mjr-grid-skeleton-shimmer",
- style: Sr(ot.value)
- }, null, 4), U("div", { style: Sr(lt.value) }, [U("div", {
+ style: xr(st.value)
+ }, null, 4), U("div", { style: xr(ut.value) }, [U("div", {
class: "mjr-grid-skeleton-line mjr-grid-skeleton-line--title mjr-grid-skeleton-shimmer",
- style: Sr(st.value)
+ style: xr(ct.value)
}, null, 4), U("div", {
class: "mjr-grid-skeleton-line mjr-grid-skeleton-line--meta mjr-grid-skeleton-shimmer",
- style: Sr(ct.value)
- }, null, 4)], 4)], 4))), 128))], 4), U("div", Hu, J(Z(S).loadingMessage || "Loading assets..."), 1)])])) : G("", !0),
+ style: xr(lt.value)
+ }, null, 4)], 4)], 4))), 128))], 4), U("div", Yu, J(Z(S).loadingMessage || "Loading assets..."), 1)])])) : G("", !0),
Z(S).statusMessage && !Z(S).assets.length && !Z(S).loading ? (q(), X("div", {
key: 1,
class: "mjr-grid-message",
- style: Sr({
+ style: xr({
position: "absolute",
inset: "0",
zIndex: 3,
@@ -8683,36 +8713,36 @@ var Bu = {
}, J(Z(S).statusMessage), 5)) : G("", !0),
t.virtualize ? (q(), X("div", {
key: 2,
- style: Sr({
- height: `${Z(Ze)}px`,
+ style: xr({
+ height: `${Z($e)}px`,
position: "relative",
width: "100%",
gridColumn: "1 / -1"
})
- }, [(q(!0), X(H, null, gr(Z(Xe), (e) => (q(), X("div", {
+ }, [(q(!0), X(H, null, hr(Z(Ze), (e) => (q(), X("div", {
key: e.key,
ref_for: !0,
- ref: Kt,
+ ref: qt,
"data-index": e.index,
- style: Sr(Xt(e.index))
+ style: xr(Xt(e.index))
}, [e.kind === "header" ? (q(), X("button", {
key: 0,
type: "button",
- class: Dr(["mjr-grid-group-separator", De(e)]),
- "aria-expanded": Te(e.groupKey) ? "false" : "true",
- title: `${Te(e.groupKey) ? "Open" : "Close"} group`,
- onClick: (t) => Ee(e.groupKey)
- }, [U("span", Gu, [U("i", { class: Dr(["pi", Te(e.groupKey) ? "pi-chevron-down" : "pi-chevron-up"]) }, null, 2)]), U("span", Ku, J(e.title), 1)], 10, Wu)) : e.items.length ? (q(!0), X(H, { key: 1 }, gr(e.items, (e) => (q(), X(H, { key: String(e.id) }, [L(e) ? (q(), ar(pc, {
+ class: Dr(["mjr-grid-group-separator", Oe(e)]),
+ "aria-expanded": Ee(e.groupKey) ? "false" : "true",
+ title: `${Ee(e.groupKey) ? "Open" : "Close"} group`,
+ onClick: (t) => De(e.groupKey)
+ }, [U("span", Qu, [U("i", { class: Dr(["pi", Ee(e.groupKey) ? "pi-chevron-down" : "pi-chevron-up"]) }, null, 2)]), U("span", $u, J(e.title), 1)], 10, Zu)) : e.items.length ? (q(!0), X(H, { key: 1 }, hr(e.items, (e) => (q(), X(H, { key: String(e.id) }, [L(e) ? (q(), ir(pc, {
key: 0,
ref_for: !0,
- ref: St(e),
+ ref: wt(e),
asset: e,
selected: se(e),
- style: Sr(qt()),
- onMousedown: hr((t) => Et(t, e), ["left"]),
- onClick: (t) => Tt(t, e),
- onDblclick: hr((t) => Mt(e), ["stop"]),
- onDropAsset: Nt
+ style: xr(Jt()),
+ onMousedown: mr((t) => kt(t, e), ["left"]),
+ onClick: (t) => Ot(t, e),
+ onDblclick: mr((t) => Ft(e), ["stop"]),
+ onDropAsset: It
}, null, 8, [
"asset",
"selected",
@@ -8723,7 +8753,7 @@ var Bu = {
])) : (q(), X("div", {
key: 1,
ref_for: !0,
- ref: St(e),
+ ref: wt(e),
class: Dr(["mjr-asset-card mjr-card", {
"is-selected": se(e),
"mjr-live-placeholder": ge(e)
@@ -8731,7 +8761,7 @@ var Bu = {
role: "button",
tabindex: "0",
draggable: "true",
- style: Sr(qt()),
+ style: xr(Jt()),
"data-mjr-asset-id": String(e.id ?? ""),
"data-mjr-filename-key": String(e.filename || "").toLowerCase(),
"data-mjr-ext": ie(e),
@@ -8744,33 +8774,33 @@ var Bu = {
"data-mjr-dup-count": e._mjrDupStack ? String(e._mjrDupCount || 0) : void 0,
"aria-label": `Asset ${e.filename || ""}`,
"aria-selected": se(e) ? "true" : "false",
- onMousedown: hr((t) => Et(t, e), ["left"]),
- onClick: (t) => Tt(t, e),
- onDblclick: hr((t) => Mt(e), ["stop"])
+ onMousedown: mr((t) => kt(t, e), ["left"]),
+ onClick: (t) => Ot(t, e),
+ onDblclick: mr((t) => Ft(e), ["stop"])
}, [Y(lc, {
asset: e,
- onWorkflowAction: (t) => At(t, e)
- }, null, 8, ["asset", "onWorkflowAction"])], 46, qu))], 64))), 128)) : G("", !0)], 12, Uu))), 128))], 4)) : (q(), X("div", Ju, [(q(!0), X(H, null, gr(We.value, (e) => (q(), X("div", {
+ onWorkflowAction: (t) => Nt(t, e)
+ }, null, 8, ["asset", "onWorkflowAction"])], 46, ed))], 64))), 128)) : G("", !0)], 12, Xu))), 128))], 4)) : (q(), X("div", td, [(q(!0), X(H, null, hr(Ge.value, (e) => (q(), X("div", {
key: `${e.kind || "assets"}-${e.groupKey || ""}-${e.index ?? ""}`,
- style: Sr(Zt())
+ style: xr(Zt())
}, [e.kind === "header" ? (q(), X("button", {
key: 0,
type: "button",
- class: Dr(["mjr-grid-group-separator", De(e)]),
- "aria-expanded": Te(e.groupKey) ? "false" : "true",
- title: `${Te(e.groupKey) ? "Open" : "Close"} group`,
- onClick: (t) => Ee(e.groupKey)
- }, [U("span", Xu, [U("i", { class: Dr(["pi", Te(e.groupKey) ? "pi-chevron-down" : "pi-chevron-up"]) }, null, 2)]), U("span", Zu, J(e.title), 1)], 10, Yu)) : (q(!0), X(H, { key: 1 }, gr(e.items, (e) => (q(), X(H, { key: String(e.id) }, [L(e) ? (q(), ar(pc, {
+ class: Dr(["mjr-grid-group-separator", Oe(e)]),
+ "aria-expanded": Ee(e.groupKey) ? "false" : "true",
+ title: `${Ee(e.groupKey) ? "Open" : "Close"} group`,
+ onClick: (t) => De(e.groupKey)
+ }, [U("span", rd, [U("i", { class: Dr(["pi", Ee(e.groupKey) ? "pi-chevron-down" : "pi-chevron-up"]) }, null, 2)]), U("span", id, J(e.title), 1)], 10, nd)) : (q(!0), X(H, { key: 1 }, hr(e.items, (e) => (q(), X(H, { key: String(e.id) }, [L(e) ? (q(), ir(pc, {
key: 0,
ref_for: !0,
- ref: St(e),
+ ref: wt(e),
asset: e,
selected: se(e),
- style: Sr(qt()),
- onMousedown: hr((t) => Et(t, e), ["left"]),
- onClick: (t) => Tt(t, e),
- onDblclick: hr((t) => Mt(e), ["stop"]),
- onDropAsset: Nt
+ style: xr(Jt()),
+ onMousedown: mr((t) => kt(t, e), ["left"]),
+ onClick: (t) => Ot(t, e),
+ onDblclick: mr((t) => Ft(e), ["stop"]),
+ onDropAsset: It
}, null, 8, [
"asset",
"selected",
@@ -8781,7 +8811,7 @@ var Bu = {
])) : (q(), X("div", {
key: 1,
ref_for: !0,
- ref: St(e),
+ ref: wt(e),
class: Dr(["mjr-asset-card mjr-card", {
"is-selected": se(e),
"mjr-live-placeholder": ge(e)
@@ -8789,7 +8819,7 @@ var Bu = {
role: "button",
tabindex: "0",
draggable: "true",
- style: Sr(qt()),
+ style: xr(Jt()),
"data-mjr-asset-id": String(e.id ?? ""),
"data-mjr-filename-key": String(e.filename || "").toLowerCase(),
"data-mjr-ext": ie(e),
@@ -8802,13 +8832,13 @@ var Bu = {
"data-mjr-dup-count": e._mjrDupStack ? String(e._mjrDupCount || 0) : void 0,
"aria-label": `Asset ${e.filename || ""}`,
"aria-selected": se(e) ? "true" : "false",
- onMousedown: hr((t) => Et(t, e), ["left"]),
- onClick: (t) => Tt(t, e),
- onDblclick: hr((t) => Mt(e), ["stop"])
+ onMousedown: mr((t) => kt(t, e), ["left"]),
+ onClick: (t) => Ot(t, e),
+ onDblclick: mr((t) => Ft(e), ["stop"])
}, [Y(lc, {
asset: e,
- onWorkflowAction: (t) => At(t, e)
- }, null, 8, ["asset", "onWorkflowAction"])], 46, Qu))], 64))), 128))], 4))), 128))])),
+ onWorkflowAction: (t) => Nt(t, e)
+ }, null, 8, ["asset", "onWorkflowAction"])], 46, ad))], 64))), 128))], 4))), 128))])),
U("div", {
ref_key: "infiniteSentinelRef",
ref: ne,
@@ -8822,14 +8852,14 @@ var Bu = {
}, null, 512)
], 512));
}
-}), td = 240, nd = 120, rd = 80, id = null, ad = null;
-function od() {
- return id ||= import("./chunks/viewerOpenRequest-B8IT-KHd.js").then((e) => e.n), id;
+}), cd = 240, ld = 120, ud = 80, dd = null, fd = null;
+function pd() {
+ return dd ||= import("./chunks/viewerOpenRequest-DaR0P9Y2.js").then((e) => e.n), dd;
}
-function sd() {
- return ad ||= import("./chunks/floatingViewerManager-DI520cRz.js").then((e) => e.n), ad;
+function md() {
+ return fd ||= import("./chunks/floatingViewerManager-B_1xQj1m.js").then((e) => e.n), fd;
}
-function cd(e) {
+function hd(e) {
let t = document.createElement("button");
t.type = "button", t.className = "mjr-asset-card mjr-card mjr-feed-group-member-card", t.style.cssText = "display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-end;min-height:110px;padding:8px;border:1px solid var(--mjr-border,#444);border-radius:8px;background:var(--mjr-surface,#202020);color:inherit;text-align:left;overflow:hidden;";
try {
@@ -8840,7 +8870,7 @@ function cd(e) {
let n = document.createElement("div");
return n.className = "mjr-feed-group-member-name", n.style.cssText = "font-size:11px;font-weight:600;line-height:1.3;word-break:break-word;", n.textContent = String(e?.filename || "Asset"), t.appendChild(n), t;
}
-function ld(e) {
+function gd(e) {
try {
if (typeof e?._mjrGetRenderedCards == "function") {
let t = e._mjrGetRenderedCards();
@@ -8855,11 +8885,11 @@ function ld(e) {
return console.debug?.(e), [];
}
}
-function ud(e, t, n = "") {
+function _d(e, t, n = "") {
let r = Array.isArray(t) ? t.map(String).filter(Boolean) : [];
- return tr(e, r, { activeId: n || r[0] || "" }, ld);
+ return er(e, r, { activeId: n || r[0] || "" }, gd);
}
-function dd(e) {
+function vd(e) {
let t = e?.grid;
if (!t) return;
let n = (e) => {
@@ -8875,16 +8905,16 @@ function dd(e) {
} catch (e) {
console.debug?.(e);
}
- let a = ld(t), o = a.indexOf(n), s = Zn(t);
+ let a = gd(t), o = a.indexOf(n), s = Xn(t);
if (e.shiftKey && o >= 0) {
let n = Number.isFinite(Number(t._mjrLastSelectedIndex)) ? Number(t._mjrLastSelectedIndex) : o, r = Math.min(n, o), s = Math.max(n, o), c = a.slice(r, s + 1).map((e) => String(e?.dataset?.mjrAssetId || "").trim()).filter(Boolean);
- ud(t, c, i), t._mjrLastSelectedIndex = o, e.preventDefault(), e.stopPropagation();
+ _d(t, c, i), t._mjrLastSelectedIndex = o, e.preventDefault(), e.stopPropagation();
} else if (e.ctrlKey || e.metaKey) {
s.has(i) ? s.delete(i) : s.add(i);
let n = Array.from(s);
- ud(t, n, s.has(i) ? i : n[0] || ""), o >= 0 && (t._mjrLastSelectedIndex = o), e.preventDefault(), e.stopPropagation();
+ _d(t, n, s.has(i) ? i : n[0] || ""), o >= 0 && (t._mjrLastSelectedIndex = o), e.preventDefault(), e.stopPropagation();
} else {
- ud(t, [i], i), o >= 0 && (t._mjrLastSelectedIndex = o);
+ _d(t, [i], i), o >= 0 && (t._mjrLastSelectedIndex = o);
try {
n.focus?.({ preventScroll: !0 });
} catch (e) {
@@ -8901,23 +8931,23 @@ function dd(e) {
}
};
}
-var fd = {
+var yd = {
hosts: /* @__PURE__ */ new Set(),
pendingAssets: /* @__PURE__ */ new Map()
};
-function pd(e) {
- if (!B.EXECUTION_GROUPING_ENABLED) return Od(e);
+function bd(e) {
+ if (!B.EXECUTION_GROUPING_ENABLED) return Fd(e);
let t = String(e?.stack_id || "").trim();
if (t) return `stack:${t}`;
let n = String(e?.job_id || "").trim();
- return n ? `job:${n}` : Od(e);
+ return n ? `job:${n}` : Fd(e);
}
-function md(e) {
+function xd(e) {
let t = /* @__PURE__ */ new Map();
for (let n of Array.isArray(e) ? e : []) {
- let e = Ad(n);
+ let e = Ld(n);
if (!e) continue;
- let r = pd(e), i = t.get(r);
+ let r = bd(e), i = t.get(r);
i || (i = {
key: r,
members: []
@@ -8942,16 +8972,16 @@ function md(e) {
return (Number(t?.mtime || t?.created_at || 0) || 0) - n;
}), n;
}
-function hd(e) {
+function Sd(e) {
return Array.from(e?.assetsByKey?.values?.() || []);
}
-function gd(e) {
+function Cd(e) {
return String(e ?? "").trim().toLowerCase();
}
-function _d(e) {
+function wd(e) {
return e?._mjrLivePlaceholder === !0 || e?.is_live_placeholder === !0 || String(e?.id || "").trim().toLowerCase().startsWith("live:");
}
-function vd(e) {
+function Td(e) {
if (!e || typeof e != "object") return e;
try {
delete e._mjrLivePlaceholder, delete e._mjrLiveStatus, delete e._mjrLiveLabel, delete e.is_live_placeholder;
@@ -8960,19 +8990,19 @@ function vd(e) {
}
return e;
}
-function yd(e) {
+function Ed(e) {
if (!e || typeof e != "object") return "";
- let t = gd(e?.type || e?.source || "output"), n = gd(e?.root_id || e?.custom_root_id || ""), r = gd(e?.subfolder || ""), i = gd(e?.filename || "");
+ let t = Cd(e?.type || e?.source || "output"), n = Cd(e?.root_id || e?.custom_root_id || ""), r = Cd(e?.subfolder || ""), i = Cd(e?.filename || "");
if (i) return `${t}|${n}|${r}|${i}`;
- let a = gd(e?.filepath || e?.path || e?.fullpath || e?.full_path || "");
+ let a = Cd(e?.filepath || e?.path || e?.fullpath || e?.full_path || "");
return a ? `${t}|${n}|path|${a}` : "";
}
-function bd(e, t) {
- let n = Ad(t);
+function Dd(e, t) {
+ let n = Ld(t);
if (!e || typeof e.set != "function" || !n) return null;
- let r = Od(n), i = yd(n), a = "";
+ let r = Fd(n), i = Ed(n), a = "";
if (i) {
- for (let [t, n] of e.entries()) if (yd(n) === i) {
+ for (let [t, n] of e.entries()) if (Ed(n) === i) {
a = t;
break;
}
@@ -8981,17 +9011,17 @@ function bd(e, t) {
...o,
...n
} : n;
- return _d(n) || vd(s), a && a !== r && e.delete(a), e.set(r, s), s;
+ return wd(n) || Td(s), a && a !== r && e.delete(a), e.set(r, s), s;
}
-function xd(e, t) {
- return e ? (e.assetsByKey ||= /* @__PURE__ */ new Map(), bd(e.assetsByKey, t)) : null;
+function Od(e, t) {
+ return e ? (e.assetsByKey ||= /* @__PURE__ */ new Map(), Dd(e.assetsByKey, t)) : null;
}
-function Sd(e) {
+function kd(e) {
e?.grid && e.loaded && (e._renderTimer ||= setTimeout(() => {
- e._renderTimer = null, Dd(e);
- }, rd));
+ e._renderTimer = null, Pd(e);
+ }, ud));
}
-function Cd(e, t, n = 0) {
+function Ad(e, t, n = 0) {
let r = Array.isArray(t?._mjrFeedGroupAssets) ? t._mjrFeedGroupAssets.filter(Boolean) : [t].filter(Boolean);
if (!r.length) return;
let i = Math.max(0, Math.min(n, r.length - 1)), a = r[i] || null, o = String(a?.id || "").trim();
@@ -9001,14 +9031,14 @@ function Cd(e, t, n = 0) {
} catch (e) {
console.debug?.(e);
}
- ud(e.grid, [o], o);
+ _d(e.grid, [o], o);
}
- od().then((e) => e.requestViewerOpen({
+ pd().then((e) => e.requestViewerOpen({
assets: r,
index: i
})).catch((e) => console.debug?.(e));
}
-function wd(e, t) {
+function jd(e, t) {
let n = document.createElement("div");
n.className = "mjr-popover mjr-feed-group-popover", n.style.cssText = "display:none; width:min(440px, 92vw); padding:10px;";
let r = document.createElement("div");
@@ -9017,14 +9047,14 @@ function wd(e, t) {
i.className = "mjr-feed-group-popover-grid", i.style.cssText = "display:grid; grid-template-columns:repeat(auto-fill, minmax(110px, 1fr)); gap:8px; max-height:360px; overflow-y:auto; overscroll-behavior:contain;";
let a = Array.isArray(t?._mjrFeedGroupAssets) ? t._mjrFeedGroupAssets : [];
for (let r = 0; r < a.length; r += 1) {
- let o = a[r], s = cd(o);
+ let o = a[r], s = hd(o);
s.classList.add("mjr-feed-group-member-card"), r === 0 && s.classList.add("mjr-feed-group-member-card--cover"), s.addEventListener("click", (i) => {
- i.preventDefault(), i.stopPropagation(), e.popoverManager?.close?.(n), Cd(e, t, r);
+ i.preventDefault(), i.stopPropagation(), e.popoverManager?.close?.(n), Ad(e, t, r);
}), i.appendChild(s);
}
return n.appendChild(i), e.root.appendChild(n), n;
}
-function Td(e, t, n) {
+function Md(e, t, n) {
if (!t || !n) return;
let r = Number(n?._mjrFeedGroupCount || 0) || 0;
if (r <= 1 || (t.dataset.mjrFeedGrouped = "true", t.dataset.mjrFeedGroupCount = String(r), t.dataset.mjrStacked = "true", t.dataset.mjrStackCount = String(r), t.querySelector(".mjr-feed-group-button"))) return;
@@ -9034,19 +9064,19 @@ function Td(e, t, n) {
a.className = "mjr-feed-group-button-icon pi pi-clone", i.appendChild(a);
let o = document.createElement("span");
o.className = "mjr-feed-group-button-count", o.textContent = String(r), i.appendChild(o), i.style.cssText = "position:absolute; top:34px; right:6px; z-index:11;", qa(i);
- let s = wd(e, n);
+ let s = jd(e, n);
i.addEventListener("click", (t) => {
t.preventDefault(), t.stopPropagation(), e.popoverManager?.toggle?.(s, i);
}), t.appendChild(i);
}
-function Ed(e, t) {
+function Nd(e, t) {
let n = new Map((Array.isArray(t) ? t : []).map((e) => [String(e?.id || "").trim(), e]).filter(([e]) => !!e));
- for (let t of ld(e?.grid)) {
+ for (let t of gd(e?.grid)) {
let r = String(t?.dataset?.mjrAssetId || "").trim(), i = n.get(r);
- i && Td(e, t, i);
+ i && Md(e, t, i);
}
}
-async function Dd(e) {
+async function Pd(e) {
if (!e?.grid) return;
try {
e.popoverManager?.closeAll?.();
@@ -9059,19 +9089,19 @@ async function Dd(e) {
} catch (e) {
console.debug?.(e);
}
- let t = md(hd(e)), n = await yi(e.grid, t, {
+ let t = xd(Sd(e)), n = await yi(e.grid, t, {
title: R("bottomFeed.title", "Generated Feed"),
reset: !0
});
- Ed(e, t), Number(n?.count || 0) <= 0 ? (e.empty.textContent = R("bottomFeed.empty", "No generated assets yet."), e.empty.style.display = "") : e.empty.style.display = "none";
+ Nd(e, t), Number(n?.count || 0) <= 0 ? (e.empty.textContent = R("bottomFeed.empty", "No generated assets yet."), e.empty.style.display = "") : e.empty.style.display = "none";
}
-function Od(e) {
+function Fd(e) {
let t = String(e?.id || "").trim();
if (t) return `id:${t}`;
let n = String(e?.filename || "").trim(), r = String(e?.subfolder || "").trim();
return `file:${String(e?.source || e?.type || "").trim()}:${r}:${n}`;
}
-function kd(e) {
+function Id(e) {
let t = String(e || "").split(".").pop()?.toUpperCase() ?? "", n = /* @__PURE__ */ new Set([
"MP4",
"WEBM",
@@ -9098,41 +9128,41 @@ function kd(e) {
]);
return n.has(t) ? "video" : r.has(t) ? "audio" : i.has(t) ? "model3d" : "image";
}
-function Ad(e) {
+function Ld(e) {
if (!e || typeof e != "object") return null;
let t = { ...e };
- return !t.type && t.source && (t.type = t.source), !t.source && t.type && (t.source = t.type), t.kind ||= kd(t.ext || t.filename || ""), t;
+ return !t.type && t.source && (t.type = t.source), !t.source && t.type && (t.source = t.type), t.kind ||= Id(t.ext || t.filename || ""), t;
}
-function jd(e) {
- let t = Ad(e);
+function Rd(e) {
+ let t = Ld(e);
if (!t) return null;
- let n = Od(t);
+ let n = Fd(t);
if (!n) return null;
- let r = yd(t), i = null;
- if (r) for (let [e, t] of fd.pendingAssets.entries()) e !== n && yd(t) === r && (i = t, fd.pendingAssets.delete(e));
- let a = fd.pendingAssets.get(n) || i || null, o = a ? {
+ let r = Ed(t), i = null;
+ if (r) for (let [e, t] of yd.pendingAssets.entries()) e !== n && Ed(t) === r && (i = t, yd.pendingAssets.delete(e));
+ let a = yd.pendingAssets.get(n) || i || null, o = a ? {
...a,
...t
} : t;
- if (_d(t) || vd(o), fd.pendingAssets.set(n, o), fd.pendingAssets.size > 64) {
- let e = fd.pendingAssets.keys().next().value;
- e && fd.pendingAssets.delete(e);
+ if (wd(t) || Td(o), yd.pendingAssets.set(n, o), yd.pendingAssets.size > 64) {
+ let e = yd.pendingAssets.keys().next().value;
+ e && yd.pendingAssets.delete(e);
}
return o;
}
-function Md() {
- return Array.from(fd.pendingAssets.values());
+function zd() {
+ return Array.from(yd.pendingAssets.values());
}
-async function Nd(e) {
+async function Bd(e) {
if (e?.grid) {
e.empty.style.display = "none", e.empty.textContent = R("bottomFeed.loading", "Loading recent assets...");
try {
e.assetsByKey = /* @__PURE__ */ new Map();
let t = [], n = 0;
- for (; n < td;) {
+ for (; n < cd;) {
let r = qe({
q: "*",
- limit: Math.min(nd, td - n),
+ limit: Math.min(ld, cd - n),
offset: n,
scope: "output",
sort: "mtime_desc",
@@ -9142,19 +9172,19 @@ async function Nd(e) {
let a = Array.isArray(i?.data?.assets) ? i.data.assets : [];
if (!a.length) break;
for (let n of a) {
- let r = xd(e, n);
+ let r = Od(e, n);
r && t.push(r);
}
- if (a.length < nd) break;
+ if (a.length < ld) break;
n += a.length;
}
- for (let t of Md()) xd(e, t);
- fd.pendingAssets.clear();
- let r = md(hd(e)), i = await yi(e.grid, r, {
+ for (let t of zd()) Od(e, t);
+ yd.pendingAssets.clear();
+ let r = xd(Sd(e)), i = await yi(e.grid, r, {
title: R("bottomFeed.title", "Generated Feed"),
reset: !0
});
- Ed(e, r), Number(i?.count || 0) <= 0 ? (e.empty.textContent = R("bottomFeed.empty", "No generated assets yet."), e.empty.style.display = "") : e.empty.style.display = "none";
+ Nd(e, r), Number(i?.count || 0) <= 0 ? (e.empty.textContent = R("bottomFeed.empty", "No generated assets yet."), e.empty.style.display = "") : e.empty.style.display = "none";
} catch (t) {
console.debug?.(t), e.empty.textContent = R("bottomFeed.loadFailed", "Failed to load generated assets."), e.empty.style.display = "";
} finally {
@@ -9162,21 +9192,21 @@ async function Nd(e) {
}
}
}
-async function Pd() {
- for (let e of Array.from(fd.hosts)) try {
- await Nd(e);
+async function Vd() {
+ for (let e of Array.from(yd.hosts)) try {
+ await Bd(e);
} catch (e) {
console.debug?.(e);
}
}
-function Fd() {
- Pd();
+function Hd() {
+ Vd();
}
-function Id(e) {
+function Ud(e) {
let t = document.createElement("div");
t.textContent = R("bottomFeed.loading", "Loading recent assets..."), t.style.cssText = "font-size:11px; opacity:0.65; padding:4px 2px 8px 2px;", e.root.appendChild(t), e.empty = t;
}
-function Ld(e) {
+function Wd(e) {
if (!e) return;
let t = [
e,
@@ -9194,14 +9224,14 @@ function Ld(e) {
console.debug?.(e);
}
}
-function Rd(e) {
+function Gd(e) {
if (!e) return;
let t = (t, n) => {
n ? e.classList.add(t) : e.classList.remove(t);
};
t("mjr-feed-show-info", B.FEED_SHOW_INFO), t("mjr-feed-show-filename", B.FEED_SHOW_FILENAME), t("mjr-feed-show-dimensions", B.FEED_SHOW_DIMENSIONS), t("mjr-feed-show-date", B.FEED_SHOW_DATE), t("mjr-feed-show-gentime", B.FEED_SHOW_GENTIME), t("mjr-show-hover-info", B.GRID_SHOW_HOVER_INFO), t("mjr-feed-show-dot", B.FEED_SHOW_WORKFLOW_DOT), t("mjr-feed-show-badges-ext", B.FEED_SHOW_BADGES_EXTENSION), t("mjr-feed-show-badges-rating", B.FEED_SHOW_BADGES_RATING), t("mjr-feed-show-badges-tags", B.FEED_SHOW_BADGES_TAGS);
}
-function zd(e, t = null) {
+function Kd(e, t = null) {
let n = t || document.createElement("div");
n.classList.add("mjr-am-grid-scroll"), n.style.position = "relative", n.style.flex = "1 1 auto", n.style.minHeight = "0", n.style.height = "100%", n.style.overflow = "auto", n.style.scrollbarGutter = "stable", n.style.overscrollBehavior = "contain", n.style.webkitOverflowScrolling = "touch";
let r = () => {
@@ -9219,14 +9249,14 @@ function zd(e, t = null) {
}
}, a = document.createElement("div");
n.appendChild(a), e.root.appendChild(n);
- let { app: o } = Un(ed, {
+ let { app: o } = Hn(sd, {
scrollElement: n,
virtualize: !1,
applyDefaultSettingsClasses: !1,
emitWindowSelectionEvents: !0,
onCardRendered: (t, n) => {
try {
- Td(e, t, n);
+ Md(e, t, n);
} catch (e) {
console.debug?.(e);
}
@@ -9245,7 +9275,7 @@ function zd(e, t = null) {
else if (t === "c") {
e.preventDefault?.(), e.stopPropagation?.(), r();
try {
- sd().then(async ({ floatingViewerManager: e }) => {
+ md().then(async ({ floatingViewerManager: e }) => {
await e.open(), e.toggleCompareAB();
}).catch((e) => console.debug?.(e));
} catch (e) {
@@ -9266,19 +9296,19 @@ function zd(e, t = null) {
}
};
}
-function Bd(e) {
+function qd(e) {
let t = e?.grid;
if (!t) return [];
- let n = Zn(t);
- return n.size ? hd(e).filter((e) => n.has(String(e?.id || ""))) : [];
+ let n = Xn(t);
+ return n.size ? Sd(e).filter((e) => n.has(String(e?.id || ""))) : [];
}
-function Vd(e) {
+function Jd(e) {
let t = e?.grid;
if (!t) return null;
let n = String(t.dataset?.mjrSelectedAssetId || "").trim();
- return n ? hd(e).find((e) => String(e?.id || "") === n) || null : Bd(e)[0] || null;
+ return n ? Sd(e).find((e) => String(e?.id || "") === n) || null : qd(e)[0] || null;
}
-function Hd(e) {
+function Yd(e) {
let t = String(e ?? "");
try {
if (typeof CSS < "u" && typeof CSS.escape == "function") return CSS.escape(t);
@@ -9287,23 +9317,23 @@ function Hd(e) {
}
return t.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1");
}
-function Ud(e) {
+function Xd(e) {
let t = e?.grid;
if (!t) return;
let n = () => {
try {
- Sd(e);
+ kd(e);
} catch (e) {
console.debug?.(e);
}
};
e.keyboard = Ri({
gridContainer: t,
- getState: () => ({ assets: md(hd(e)) }),
- getSelectedAssets: () => Bd(e),
- getActiveAsset: () => Vd(e),
+ getState: () => ({ assets: xd(Sd(e)) }),
+ getSelectedAssets: () => qd(e),
+ getActiveAsset: () => Jd(e),
onOpenTagsEditor: (e) => {
- let r = t.querySelector?.(`.mjr-asset-card[data-mjr-asset-id="${Hd(e?.id || "")}"]`) || null, i = null;
+ let r = t.querySelector?.(`.mjr-asset-card[data-mjr-asset-id="${Yd(e?.id || "")}"]`) || null, i = null;
try {
i = r?.getBoundingClientRect?.() || t.getBoundingClientRect();
} catch (e) {
@@ -9317,9 +9347,9 @@ function Ud(e) {
createRatingBadge: gt
}), e.ratingHotkeys.bind();
}
-var Wd = 60, Gd = 600, Kd = 10;
-function qd(e, t) {
- let n = Math.max(Wd, Math.min(Gd, Math.round(Number(t) / Kd) * Kd));
+var Zd = 60, Qd = 600, $d = 10;
+function ef(e, t) {
+ let n = Math.max(Zd, Math.min(Qd, Math.round(Number(t) / $d) * $d));
if (e?.grid) try {
e.grid.style.setProperty("--mjr-grid-min-size", `${n}px`);
} catch (e) {
@@ -9327,8 +9357,8 @@ function qd(e, t) {
}
B.FEED_GRID_MIN_SIZE = n;
try {
- let e = Hn();
- e.feed.minSize = n, In(e), En(e);
+ let e = Vn();
+ e.feed.minSize = n, Fn(e), Tn(e);
} catch (e) {
console.debug?.(e);
}
@@ -9345,27 +9375,27 @@ function qd(e, t) {
}
return n;
}
-function Jd(e) {
- let t = Math.max(Wd, Number(B.FEED_GRID_MIN_SIZE || 120) || 120), n = document.createElement("div");
+function tf(e) {
+ let t = Math.max(Zd, Number(B.FEED_GRID_MIN_SIZE || 120) || 120), n = document.createElement("div");
n.className = "mjr-feed-toolbar", n.style.cssText = "display:flex; align-items:center; gap:5px; padding:0 2px 5px 2px; flex-shrink:0; user-select:none;";
let r = document.createElement("span");
r.textContent = R("bottomFeed.cardSize", "Cards:"), r.style.cssText = "font-size:11px; opacity:0.65; white-space:nowrap; flex-shrink:0;", n.appendChild(r);
let i = document.createElement("button");
i.type = "button", i.className = "mjr-feed-size-btn", i.textContent = "-", i.title = R("bottomFeed.cardSizeDecrease", "Decrease card size"), i.style.cssText = "width:20px; height:20px; padding:0; border:1px solid var(--mjr-border,#555); border-radius:4px; background:var(--mjr-surface,#2a2a2a); color:inherit; cursor:pointer; font-size:14px; line-height:1; flex-shrink:0; display:flex; align-items:center; justify-content:center;", n.appendChild(i);
let a = document.createElement("input");
- a.type = "range", a.className = "mjr-feed-size-slider", a.min = String(Wd), a.max = String(Gd), a.step = String(Kd), a.value = String(t), a.title = R("bottomFeed.cardSizeSlider", "Card size"), a.style.cssText = "flex:1 1 auto; min-width:40px; max-width:180px; height:4px; cursor:pointer; accent-color:var(--mjr-accent,#64b5f6);", n.appendChild(a);
+ a.type = "range", a.className = "mjr-feed-size-slider", a.min = String(Zd), a.max = String(Qd), a.step = String($d), a.value = String(t), a.title = R("bottomFeed.cardSizeSlider", "Card size"), a.style.cssText = "flex:1 1 auto; min-width:40px; max-width:180px; height:4px; cursor:pointer; accent-color:var(--mjr-accent,#64b5f6);", n.appendChild(a);
let o = document.createElement("button");
o.type = "button", o.className = "mjr-feed-size-btn", o.textContent = "+", o.title = R("bottomFeed.cardSizeIncrease", "Increase card size"), o.style.cssText = i.style.cssText, n.appendChild(o);
let s = document.createElement("span");
s.className = "mjr-feed-size-display", s.textContent = `${t}px`, s.style.cssText = "font-size:11px; opacity:0.65; white-space:nowrap; min-width:36px; text-align:right; flex-shrink:0; font-variant-numeric:tabular-nums;", n.appendChild(s), i.addEventListener("click", () => {
- qd(e, Number(a.value) - Kd);
+ ef(e, Number(a.value) - $d);
}), o.addEventListener("click", () => {
- qd(e, Number(a.value) + Kd);
+ ef(e, Number(a.value) + $d);
}), a.addEventListener("input", () => {
- qd(e, Number(a.value));
+ ef(e, Number(a.value));
}), e.root.appendChild(n), e._sizeToolbar = n;
}
-function Yd(e, t = {}) {
+function nf(e, t = {}) {
let n = document.createElement("div");
n.className = "mjr-assets-manager mjr-bottom-feed", n.style.cssText = "padding:6px; height:100%; min-height:0; box-sizing:border-box; display:flex; flex-direction:column; overflow:hidden;", e.replaceChildren(n);
let r = {
@@ -9377,13 +9407,13 @@ function Yd(e, t = {}) {
assetsByKey: /* @__PURE__ */ new Map(),
popoverManager: null
};
- Jd(r), Id(r), zd(r, t.gridWrapper ?? null), dd(r), r.popoverManager = Ai(n), r._disposeContextMenu = za({
+ tf(r), Ud(r), Kd(r, t.gridWrapper ?? null), vd(r), r.popoverManager = Ai(n), r._disposeContextMenu = za({
gridContainer: r.grid,
getState: () => ({ scope: "output" })
- }), Ud(r), Rd(r.grid);
+ }), Xd(r), Gd(r.grid);
let i = () => {
try {
- Rd(r.grid);
+ Gd(r.grid);
} catch (e) {
console.debug?.(e);
}
@@ -9396,26 +9426,26 @@ function Yd(e, t = {}) {
}
}, r;
}
-function Xd(e) {
- let t = jd(e);
- if (t) for (let e of Array.from(fd.hosts)) try {
- if (!e?.grid || (xd(e, t), !e.loaded)) continue;
- e.empty.style.display = "none", Sd(e);
+function rf(e) {
+ let t = Rd(e);
+ if (t) for (let e of Array.from(yd.hosts)) try {
+ if (!e?.grid || (Od(e, t), !e.loaded)) continue;
+ e.empty.style.display = "none", kd(e);
} catch (e) {
console.debug?.(e);
}
}
-function Zd(e, t = {}) {
- Ld(e);
- let n = Yd(e, t);
+function af(e, t = {}) {
+ Wd(e);
+ let n = nf(e, t);
try {
e._mjrGeneratedFeedHost = n;
} catch (e) {
console.debug?.(e);
}
- return fd.hosts.add(n), Nd(n), n;
+ return yd.hosts.add(n), Bd(n), n;
}
-function Qd(e) {
+function of(e) {
let t = e?._mjrGeneratedFeedHost || e || null;
if (!t) return;
let n = t.container || null;
@@ -9429,7 +9459,7 @@ function Qd(e) {
}
console.debug?.(e);
}
- fd.hosts.delete(t);
+ yd.hosts.delete(t);
try {
t._disposeSelection?.();
} catch (e) {
@@ -9487,24 +9517,24 @@ function Qd(e) {
}
}
// ui/features/stacks/executionAssetBuffer.ts
-function $d(e) {
+function sf(e) {
return String(e || "").trim();
}
-function ef(e) {
+function cf(e) {
let t = String(e?.filename || "").trim(), n = String(e?.subfolder || "").trim();
return `${String(e?.type || "output").trim().toLowerCase()}|${String(e?.root_id || e?.custom_root_id || "").trim()}|${n}|${t}`;
}
-function tf() {
+function lf() {
let e = /* @__PURE__ */ new Map();
function t(t, n) {
- let r = $d(t);
+ let r = sf(t);
if (!r) return [];
let i = Array.isArray(n) ? n : [];
if (!i.length) return [];
let a = e.get(r);
a || (a = /* @__PURE__ */ new Map(), e.set(r, a));
for (let e of i) {
- let t = ef(e);
+ let t = cf(e);
t && a.set(t, {
...a.get(t) || {},
...e || {}
@@ -9513,13 +9543,13 @@ function tf() {
return Array.from(a.values());
}
function n(t) {
- let n = $d(t);
+ let n = sf(t);
if (!n) return [];
let r = e.get(n);
return e.delete(n), Array.from(r?.values?.() || []);
}
function r(t) {
- let n = $d(t);
+ let n = sf(t);
n && e.delete(n);
}
return {
@@ -9530,7 +9560,7 @@ function tf() {
};
}
// ui/features/stacks/finalizeQueue.ts
-function nf({ defaultDelayMs: e = 900, postJob: t } = {}) {
+function uf({ defaultDelayMs: e = 900, postJob: t } = {}) {
let n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Set(), i = !1;
async function a() {
if (!i) {
@@ -9567,27 +9597,27 @@ function nf({ defaultDelayMs: e = 900, postJob: t } = {}) {
};
}
// ui/features/stacks/liveAssetGate.ts
-function rf(e) {
+function df(e) {
return String(e || "").trim();
}
-function af(e) {
+function ff(e) {
let t = String(e?.filename || "").trim(), n = String(e?.filepath || "").trim(), r = String(e?.subfolder || "").trim();
return `${String(e?.type || e?.source || "output").trim().toLowerCase()}|${String(e?.root_id || e?.custom_root_id || "").trim()}|${r}|${t || n}`;
}
-function of(e, t) {
+function pf(e, t) {
return !t || String(e?.job_id || "").trim() === t ? e : {
...e || {},
job_id: t
};
}
-function sf() {
+function mf() {
let e = /* @__PURE__ */ new Map();
function t(t, { files: n = [], expectedCount: r = null } = {}) {
- let i = rf(t);
+ let i = df(t);
if (!i) return;
let a = /* @__PURE__ */ new Set();
for (let e of Array.isArray(n) ? n : []) {
- let t = af(e);
+ let t = ff(e);
t && a.add(t);
}
e.set(i, {
@@ -9597,13 +9627,13 @@ function sf() {
});
}
function n(t) {
- let n = rf(t);
+ let n = df(t);
n && e.delete(n);
}
function r(t) {
- let n = rf(t?.job_id);
+ let n = df(t?.job_id);
if (n) return n;
- let r = af(t);
+ let r = ff(t);
if (!r) return "";
let i = "", a = Infinity;
for (let [t, n] of e.entries()) n?.fileKeys?.has?.(r) && (n.markedAt ?? Infinity) < a && (a = n.markedAt ?? Infinity, i = t);
@@ -9616,7 +9646,7 @@ function sf() {
jobId: "",
defer: !1
};
- let i = of(t, n), a = e.get(n);
+ let i = pf(t, n), a = e.get(n);
if (!a) return {
detail: i,
jobId: n,
@@ -9638,20 +9668,20 @@ function sf() {
};
}
// ui/features/stacks/executionRuntimeController.ts
-var cf = 2e3, lf = 2e3, uf = /* @__PURE__ */ new Set([
+var hf = 2e3, gf = 2e3, _f = /* @__PURE__ */ new Set([
"DB_MAINTENANCE",
"TIMEOUT",
"NETWORK_ERROR",
"SERVICE_UNAVAILABLE"
-]), df = 8, ff = 1200, pf = 15e3, mf = 6e5, hf = 500, gf = 6, _f = 3e4, vf = 500;
-function yf({ post: e, ENDPOINTS: t, reportError: n, extractOutputFiles: r, ensureExecutionRuntime: i, emitRuntimeStatus: a, refreshGeneratedFeedHosts: o, getActiveGridContainer: s }) {
+]), vf = 8, yf = 1200, bf = 15e3, xf = 6e5, Sf = 500, Cf = 6, wf = 3e4, Tf = 500;
+function Ef({ post: e, ENDPOINTS: t, reportError: n, extractOutputFiles: r, ensureExecutionRuntime: i, emitRuntimeStatus: a, refreshGeneratedFeedHosts: o, getActiveGridContainer: s }) {
let c = ye({
- ttlMs: cf,
- maxSize: lf
+ ttlMs: hf,
+ maxSize: gf
}), l = ye({
- ttlMs: mf,
- maxSize: hf
- }), u = Math.max(0, Number(B.EXECUTION_IDLE_GRACE_MS) || 6e3), d = /* @__PURE__ */ new Map(), f = tf(), p = sf(), m = "", h = 0, g = null;
+ ttlMs: xf,
+ maxSize: Sf
+ }), u = Math.max(0, Number(B.EXECUTION_IDLE_GRACE_MS) || 6e3), d = /* @__PURE__ */ new Map(), f = lf(), p = mf(), m = "", h = 0, g = null;
function _() {
try {
return typeof window > "u" ? !1 : window.__MJR_DEBUG_JOB_TRACKING__ === !0 || String(window.localStorage?.getItem("mjr.debug.jobTracking") || "").trim() === "1";
@@ -9723,7 +9753,7 @@ function yf({ post: e, ENDPOINTS: t, reportError: n, extractOutputFiles: r, ensu
console.debug?.(e);
}
}
- let S = nf({
+ let S = uf({
defaultDelayMs: 900,
async postJob(r) {
v("auto-stack:start", { job_id: r });
@@ -9761,7 +9791,7 @@ function yf({ post: e, ENDPOINTS: t, reportError: n, extractOutputFiles: r, ensu
}
function T(e) {
let t = Math.max(1, Number(e) || 1), n = Math.min(6, t - 1);
- return Math.min(pf, ff * 2 ** n);
+ return Math.min(bf, yf * 2 ** n);
}
function E() {
g &&= (clearTimeout(g), null);
@@ -9779,7 +9809,7 @@ function yf({ post: e, ENDPOINTS: t, reportError: n, extractOutputFiles: r, ensu
}
function O(e) {
let t = String(e?.code || "").trim().toUpperCase();
- return uf.has(t);
+ return _f.has(t);
}
function k(r, i = 1, a = {}) {
let o = Array.isArray(r) ? r : [];
@@ -9794,7 +9824,7 @@ function yf({ post: e, ENDPOINTS: t, reportError: n, extractOutputFiles: r, ensu
files: o.map((e) => String(e?.filename || e?.filepath || ""))
}), e(t.INDEX_FILES, s).then((e) => {
if (!e?.ok) {
- if (O(e) && i < df) {
+ if (O(e) && i < vf) {
let e = T(i);
setTimeout(() => k(o, i + 1, a), e);
} else try {
@@ -9829,7 +9859,7 @@ function yf({ post: e, ENDPOINTS: t, reportError: n, extractOutputFiles: r, ensu
let a = d.get(i);
a?.timer && clearTimeout(a.timer);
let o = a?.firstAttemptAt ?? Date.now();
- if (Date.now() - o >= _f) {
+ if (Date.now() - o >= wf) {
k(r, 1, t);
return;
}
@@ -9874,7 +9904,7 @@ function yf({ post: e, ENDPOINTS: t, reportError: n, extractOutputFiles: r, ensu
file_count: Array.isArray(e) ? e.length : 0,
files: Array.isArray(e) ? e.map((e) => String(e?.filename || e?.filepath || "")) : []
}), !r) {
- if (n < gf) {
+ if (n < Cf) {
M(e, t, n);
return;
}
@@ -10008,7 +10038,7 @@ function yf({ post: e, ENDPOINTS: t, reportError: n, extractOutputFiles: r, ensu
reason: String(e?.type || "")
}), E(), f.clear(r), n.allowLiveStackFinalize && p.clearPendingJob(r), P()), String(e?.type || "") === "execution_success" && D(() => {
r && N(r), F(r);
- }, I(r) ? Math.min(u, vf) : u);
+ }, I(r) ? Math.min(u, Tf) : u);
}
function se(e) {
if (!y()) return;
@@ -10033,7 +10063,7 @@ function yf({ post: e, ENDPOINTS: t, reportError: n, extractOutputFiles: r, ensu
};
}
// ui/utils/extractOutputFiles.ts
-function bf(e) {
+function Df(e) {
let t = [], n = /* @__PURE__ */ new Set(), r = 2e3, i = /\.(png|jpe?g|webp|gif|bmp|tiff?|avif|heic|heif|apng|hdr|svg|mp4|webm|mov|mkv|avi|m4v|mp3|wav|flac|ogg|glb|gltf|obj|fbx|ply|stl)$/i, a = typeof WeakSet < "u" ? /* @__PURE__ */ new WeakSet() : null, o = ({ type: e, subfolder: t, filename: n, path: r }) => r ? `path|${String(r).trim().toLowerCase()}` : `${e || ""}|${t || ""}|${n || ""}`.toLowerCase(), s = (e) => {
if (!e) return;
let r = e.path || e.filepath || e.fullpath || e.fullPath || e.full_path, i = e.filename;
@@ -10114,15 +10144,15 @@ function bf(e) {
return u(e, 0), t;
}
// ui/features/runtime/sidebarAssetBadge.ts
-var xf = "mjr-sidebar-asset-badge", Sf = "mjr-sidebar-tab-has-badge", Cf = "mjr-sidebar-asset-badge-style", wf = 99, Tf = 0, Ef = "majoor-assets", Df = !1, Of = /* @__PURE__ */ new Set();
-function kf() {
- if (typeof document > "u" || document.getElementById(Cf)) return;
+var Of = "mjr-sidebar-asset-badge", kf = "mjr-sidebar-tab-has-badge", Af = "mjr-sidebar-asset-badge-style", jf = 99, Mf = 0, Nf = "majoor-assets", Pf = !1, Ff = /* @__PURE__ */ new Set();
+function If() {
+ if (typeof document > "u" || document.getElementById(Af)) return;
let e = document.createElement("style");
- e.id = Cf, e.textContent = `
- .${Sf} {
+ e.id = Af, e.textContent = `
+ .${kf} {
position: relative !important;
}
- .${xf} {
+ .${Of} {
position: absolute;
top: 3px;
right: 3px;
@@ -10146,7 +10176,7 @@ function kf() {
}
`, document.head?.appendChild(e);
}
-function Af(e) {
+function Lf(e) {
let t = String(e || "").trim();
if (!t) return [];
let n = (() => {
@@ -10165,91 +10195,91 @@ function Af(e) {
`[href="#${n}"]`
];
}
-function jf(e) {
+function Rf(e) {
let t = `${e?.textContent || ""} ${e?.title || ""} ${e?.getAttribute?.("aria-label") || ""}`;
return /assets\s*manager|majoor/i.test(t);
}
-function Mf(e) {
+function zf(e) {
return !e || typeof e != "object" ? !1 : typeof HTMLElement < "u" ? e instanceof HTMLElement : typeof e.querySelector == "function" && typeof e.appendChild == "function";
}
-function Nf() {
+function Bf() {
if (typeof document > "u") return null;
- for (let e of Af(Ef)) {
+ for (let e of Lf(Nf)) {
let t = document.querySelector(e);
- if (Mf(t)) return t;
+ if (zf(t)) return t;
}
let e = Array.from(document.querySelectorAll(".pi-folder, .pi-folder-open"));
for (let t of e) {
let e = t.closest?.("button,[role='tab'],a,.p-button,.comfyui-button,.sidebar-tab");
- if (Mf(e) && jf(e)) return e;
+ if (zf(e) && Rf(e)) return e;
}
- return Array.from(document.querySelectorAll("button,[role='tab'],a,.p-button,.comfyui-button,.sidebar-tab")).find((e) => Mf(e) && jf(e)) || null;
+ return Array.from(document.querySelectorAll("button,[role='tab'],a,.p-button,.comfyui-button,.sidebar-tab")).find((e) => zf(e) && Rf(e)) || null;
}
-function Pf() {
- kf();
- let e = Nf();
+function Vf() {
+ If();
+ let e = Bf();
if (!e) return !1;
- let t = e.querySelector(`:scope > .${xf}`);
- return !If() || Tf <= 0 ? (t?.remove(), e.classList.remove(Sf), !0) : (t || (t = document.createElement("span"), t.className = xf, t.setAttribute("aria-hidden", "true"), e.appendChild(t)), e.classList.add(Sf), t.textContent = Tf > wf ? `${wf}+` : String(Tf), !0);
+ let t = e.querySelector(`:scope > .${Of}`);
+ return !Uf() || Mf <= 0 ? (t?.remove(), e.classList.remove(kf), !0) : (t || (t = document.createElement("span"), t.className = Of, t.setAttribute("aria-hidden", "true"), e.appendChild(t)), e.classList.add(kf), t.textContent = Mf > jf ? `${jf}+` : String(Mf), !0);
}
-function Ff() {
- Pf(), typeof requestAnimationFrame == "function" && requestAnimationFrame(() => Pf()), setTimeout(() => Pf(), 250), setTimeout(() => Pf(), 1e3);
+function Hf() {
+ Vf(), typeof requestAnimationFrame == "function" && requestAnimationFrame(() => Vf()), setTimeout(() => Vf(), 250), setTimeout(() => Vf(), 1e3);
}
-function If() {
+function Uf() {
return B.SIDEBAR_ASSET_BADGE_ENABLED !== !1;
}
-function Lf(e = null) {
+function Wf(e = null) {
let t = String(e?.id || e?.asset_id || "").trim();
if (t) return `id:${t}`;
let n = String(e?.type || e?.source || "output").trim().toLowerCase(), r = String(e?.root_id || e?.custom_root_id || "").trim().toLowerCase(), i = String(e?.subfolder || e?.sub_folder || e?.subFolder || "").trim().toLowerCase(), a = String(e?.filename || "").trim().toLowerCase(), o = String(e?.filepath || e?.path || e?.fullpath || e?.full_path || "").trim().toLowerCase(), s = a || o;
return s ? `file:${n}|${r}|${i}|${s}` : "";
}
-function Rf(e) {
+function Gf(e) {
if (!e) return !0;
- if (Of.has(e)) return !1;
- if (Of.add(e), Of.size > 1e3) {
- let e = Array.from(Of).slice(-500);
- Of.clear();
- for (let t of e) Of.add(t);
+ if (Ff.has(e)) return !1;
+ if (Ff.add(e), Ff.size > 1e3) {
+ let e = Array.from(Ff).slice(-500);
+ Ff.clear();
+ for (let t of e) Ff.add(t);
}
return !0;
}
-function zf({ sidebarTabId: e } = {}) {
+function Kf({ sidebarTabId: e } = {}) {
let t = String(e || "").trim();
- t && (Ef = t), !Df && typeof window < "u" && (Df = !0, window.addEventListener?.("mjr-settings-changed", (e) => {
- e?.detail?.key === "sidebar.assetBadgeEnabled" && (If() || (Tf = 0, Of.clear()), Ff());
- })), Ff();
+ t && (Nf = t), !Pf && typeof window < "u" && (Pf = !0, window.addEventListener?.("mjr-settings-changed", (e) => {
+ e?.detail?.key === "sidebar.assetBadgeEnabled" && (Uf() || (Mf = 0, Ff.clear()), Hf());
+ })), Hf();
}
-function Bf(e = null) {
- If() && Rf(Lf(e)) && (Tf += 1, Ff());
+function qf(e = null) {
+ Uf() && Gf(Wf(e)) && (Mf += 1, Hf());
}
-function Vf() {
- Tf = 0, Of.clear(), Ff();
+function Jf() {
+ Mf = 0, Ff.clear(), Hf();
}
// ui/features/runtime/pendingGeneratedAssets.ts
-var Hf = 0;
-function Uf(e = 1) {
+var Yf = 0;
+function Xf(e = 1) {
let t = Math.max(1, Number(e) || 1);
- Hf += t;
+ Yf += t;
try {
- window.__mjrPendingGeneratedAssetCount = Hf;
+ window.__mjrPendingGeneratedAssetCount = Yf;
} catch {}
- return Hf;
+ return Yf;
}
-function Wf() {
- let e = Hf;
- Hf = 0;
+function Zf() {
+ let e = Yf;
+ Yf = 0;
try {
window.__mjrPendingGeneratedAssetCount = 0;
} catch {}
return e;
}
// ui/features/runtime/registerRealtimeListeners.ts
-var Gf = 3e4, Kf = /* @__PURE__ */ new Map(), qf = "live";
-function Jf(e) {
+var Qf = 3e4, $f = /* @__PURE__ */ new Map(), ep = "live";
+function tp(e) {
return e === !0 || e === 1 || e === "1" ? !0 : e === !1 || e === 0 || e === "0" ? !1 : null;
}
-function Yf(e) {
+function np(e) {
let t = [
e?.has_ai_vector,
e?.hasAiVector,
@@ -10259,25 +10289,25 @@ function Yf(e) {
e?.vectorIndexed
];
for (let e of t) {
- let t = Jf(e);
+ let t = tp(e);
if (t !== null) return t;
}
return !1;
}
-function Xf(e) {
- let t = Date.now(), n = Number(Kf.get(e) || 0);
- if (n > 0 && t - n < Gf) return !0;
- if (Kf.set(e, t), Kf.size > 500) {
- let e = t - 5 * Gf;
- for (let [t, n] of Kf.entries()) Number(n) < e && Kf.delete(t);
+function rp(e) {
+ let t = Date.now(), n = Number($f.get(e) || 0);
+ if (n > 0 && t - n < Qf) return !0;
+ if ($f.set(e, t), $f.size > 500) {
+ let e = t - 5 * Qf;
+ for (let [t, n] of $f.entries()) Number(n) < e && $f.delete(t);
}
return !1;
}
-function Zf(e) {
+function ip(e) {
let t = String(e?.id || "").trim();
- t && (Yf(e) || Xf(t) || ge(t).catch((e) => console.debug?.("[Majoor] auto vector index failed", e)));
+ t && (np(e) || rp(t) || ge(t).catch((e) => console.debug?.("[Majoor] auto vector index failed", e)));
}
-function Qf(e) {
+function ap(e) {
let t = String(e?.kind || "").trim().toLowerCase();
if (t) return t;
let n = String(e?.filename || e?.filepath || e?.path || e?.fullpath || "").trim(), r = n.includes(".") && n.split(".").pop()?.toLowerCase?.() || "";
@@ -10325,8 +10355,8 @@ function Qf(e) {
"spz"
].includes(r) ? "model3d" : "unknown" : "";
}
-function $f(e, { jobId: t = "" } = {}) {
- let n = String(e?.filename || "").trim(), r = String(e?.filepath || e?.path || e?.fullpath || e?.full_path || "").trim(), i = String(e?.subfolder || e?.sub_folder || e?.subFolder || "").trim(), a = String(e?.type || e?.source || "output").trim().toLowerCase(), o = String(e?.root_id || e?.custom_root_id || "").trim(), s = Qf(e);
+function op(e, { jobId: t = "" } = {}) {
+ let n = String(e?.filename || "").trim(), r = String(e?.filepath || e?.path || e?.fullpath || e?.full_path || "").trim(), i = String(e?.subfolder || e?.sub_folder || e?.subFolder || "").trim(), a = String(e?.type || e?.source || "output").trim().toLowerCase(), o = String(e?.root_id || e?.custom_root_id || "").trim(), s = ap(e);
if (!s || !n && !r) return null;
let c = n || r.split(/[/\\]/).filter(Boolean).pop() || "";
if (!c) return null;
@@ -10337,7 +10367,7 @@ function $f(e, { jobId: t = "" } = {}) {
c
].map((e) => String(e || "").trim().toLowerCase()).join("|"), d = Date.now() / 1e3, f = String(e?.job_id || t || "").trim();
return {
- id: `${qf}:${u || l.toLowerCase()}`,
+ id: `${ep}:${u || l.toLowerCase()}`,
filename: c,
filepath: l,
path: l,
@@ -10360,7 +10390,7 @@ function $f(e, { jobId: t = "" } = {}) {
_mjrLiveLabel: "In progress"
};
}
-function ep(e) {
+function sp(e) {
let t = String(e || "");
try {
if (typeof CSS < "u" && typeof CSS.escape == "function") return CSS.escape(t);
@@ -10369,11 +10399,11 @@ function ep(e) {
}
return t.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1");
}
-function tp(e, t) {
+function cp(e, t) {
let n = String(e || "").trim().toLowerCase();
return n === "delete_db" ? t("btn.deleteDb", "Delete DB") : n === "reset_index" ? t("btn.resetIndex", "Reset index") : n === "restore_db" ? t("btn.dbRestore", "Restore DB") : t("btn.maintenance", "Maintenance");
}
-function np(e, t) {
+function lp(e, t) {
let n = String(e || "").trim().toLowerCase(), r = String(t || "").trim().toLowerCase(), i = {
delete_db: [
"started",
@@ -10407,7 +10437,7 @@ function np(e, t) {
label: r.replace(/[_-]+/g, " ")
};
}
-async function rp({ api: e, runtime: t, executionRuntime: n, appRef: r, liveStreamModule: i, ensureExecutionRuntime: a, emitRuntimeStatus: o, getActiveGridContainer: s, pushGeneratedAsset: c, upsertAsset: l, upsertAssetNow: u, removeAssetsFromGrid: d, getEnrichmentState: f, setEnrichmentState: p, comfyToast: m, t: h, reportError: g, registerCleanableListener: _, syncExecutionBackendState: v }) {
+async function up({ api: e, runtime: t, executionRuntime: n, appRef: r, liveStreamModule: i, ensureExecutionRuntime: a, emitRuntimeStatus: o, getActiveGridContainer: s, pushGeneratedAsset: c, upsertAsset: l, upsertAssetNow: u, removeAssetsFromGrid: d, getEnrichmentState: f, setEnrichmentState: p, comfyToast: m, t: h, reportError: g, registerCleanableListener: _, syncExecutionBackendState: v }) {
e._mjrExecutedHandler = (e) => {
try {
n.handleExecutedEvent(e, { appRef: r });
@@ -10471,7 +10501,7 @@ async function rp({ api: e, runtime: t, executionRuntime: n, appRef: r, liveStre
function b(e, t, { immediate: n = !1, force: r = !1 } = {}) {
let i = String(t?.id || "").trim(), a = String(t?.kind || "").trim(), o = String(t?.filename || "").trim(), s = String(t?.filepath || "").trim(), c = !!a && (!!o || !!s), d = !1;
if (i) try {
- d = typeof e?._mjrHasAssetId == "function" ? !!e._mjrHasAssetId(i) : !!e.querySelector(`.mjr-asset-card[data-mjr-asset-id="${ep(i)}"]`);
+ d = typeof e?._mjrHasAssetId == "function" ? !!e._mjrHasAssetId(i) : !!e.querySelector(`.mjr-asset-card[data-mjr-asset-id="${sp(i)}"]`);
} catch (e) {
console.debug?.(e);
}
@@ -10500,7 +10530,7 @@ async function rp({ api: e, runtime: t, executionRuntime: n, appRef: r, liveStre
if (n !== "output" && n !== "all") return;
let r = Array.isArray(e?.detail?.files) ? e.detail.files : [], i = String(e?.detail?.prompt_id || e?.detail?.promptId || "").trim();
for (let e of r) {
- let n = $f(e, { jobId: i });
+ let n = op(e, { jobId: i });
n && b(t, n, {
immediate: !0,
force: !0
@@ -10515,19 +10545,19 @@ async function rp({ api: e, runtime: t, executionRuntime: n, appRef: r, liveStre
let t = n.prepareLiveAssetEvent(e.detail), r = t?.detail || e.detail;
if (t?.defer) return;
let i = n.isRenderableLiveAsset(r);
- i && c(r), Zf(r);
+ i && c(r), ip(r);
let a = s();
if (!a) {
- i && Uf();
+ i && Xf();
return;
}
let o = a.dataset?.mjrScope || "output";
if (o !== "output" && o !== "all") {
- i && Uf();
+ i && Xf();
return;
}
let l = a.dataset?.mjrQuery || "*";
- String(l).trim() === "*" && i ? b(a, r, { immediate: !0 }) || Uf() : i && Uf();
+ String(l).trim() === "*" && i ? b(a, r, { immediate: !0 }) || Xf() : i && Xf();
} catch (e) {
g(e, "entry.asset_added");
}
@@ -10621,7 +10651,7 @@ async function rp({ api: e, runtime: t, executionRuntime: n, appRef: r, liveStre
if (window.dispatchEvent(new CustomEvent(V.ASSET_INDEXED, { detail: t })), !t) return;
let r = n.prepareLiveAssetEvent(t), i = r?.detail || t;
if (r?.defer) return;
- n.isRenderableLiveAsset(i) && (c(i), Bf(i)), Zf(i);
+ n.isRenderableLiveAsset(i) && (c(i), qf(i)), ip(i);
let a = s();
if (!a) return;
b(a, i, {
@@ -10656,11 +10686,11 @@ async function rp({ api: e, runtime: t, executionRuntime: n, appRef: r, liveStre
if (!s) return;
let c = r === "error" || n === "failed" ? "error" : n === "done" ? "success" : "info", l = { history: {
trackId: `maintenance:${String(i || "db_restore").trim().toLowerCase() || "db_restore"}`,
- title: tp(i, h),
+ title: cp(i, h),
detail: s,
status: n,
operation: String(i || "db_restore").trim().toLowerCase(),
- progress: np(i, n),
+ progress: lp(i, n),
source: String(t?.name || "").trim() || "maintenance",
forceStore: !0
} };
@@ -10690,7 +10720,7 @@ async function rp({ api: e, runtime: t, executionRuntime: n, appRef: r, liveStre
_(t, window, V.ASSETS_DELETED, S), t && typeof t == "object" && (t.api = e, t.assetsDeletedHandler = S), console.debug("[Majoor] Real-time listener registered");
}
// ui/features/runtime/entryDebugApi.ts
-function ip({ resolveNodeStreamModule: e }) {
+function dp({ resolveNodeStreamModule: e }) {
typeof window < "u" && (window.MajoorDebug = {
exportMetrics: () => window.MajoorMetrics?.exportMetrics?.(),
getMetrics: () => window.MajoorMetrics?.getMetricsReport?.(),
@@ -10705,16 +10735,16 @@ function ip({ resolveNodeStreamModule: e }) {
}, console.debug?.("[Majoor] NodeStream API: window.MajoorNodeStream.mode, .listAdapters(), .getKnownNodeSets()"));
}
// ui/features/runtime/benignConsoleNoise.ts
-var ap = ["ResizeObserver loop completed with undelivered notifications.", "ResizeObserver loop limit exceeded"];
-function op(e) {
+var fp = ["ResizeObserver loop completed with undelivered notifications.", "ResizeObserver loop limit exceeded"];
+function pp(e) {
try {
let t = String(e?.message || e || "");
- return ap.some((e) => t.includes(e));
+ return fp.some((e) => t.includes(e));
} catch {
return !1;
}
}
-function sp() {
+function mp() {
if (typeof window > "u") return null;
try {
window.__MJR_BENIGN_CONSOLE_NOISE_FILTER__?.abort?.();
@@ -10729,7 +10759,7 @@ function sp() {
}
let t = (e) => {
try {
- if (!op(e?.message || e?.error)) return;
+ if (!pp(e?.message || e?.error)) return;
e.preventDefault?.(), e.stopImmediatePropagation?.();
} catch (e) {
console.debug?.(e);
@@ -10754,7 +10784,7 @@ function sp() {
return window.__MJR_BENIGN_CONSOLE_NOISE_FILTER__ = r, r;
}
// ui/features/geninfo/genInfoOverridePicker.ts
-var cp = "Majoor.GenInfoOverridePicker", lp = "MajoorGenInfoOverride", up = R("genInfoOverride.autoFillFromWorkflow", "Auto fill from workflow"), dp = R("genInfoOverride.pick", "Pick"), fp = {
+var hp = "Majoor.GenInfoOverridePicker", gp = "MajoorGenInfoOverride", _p = R("genInfoOverride.autoFillFromWorkflow", "Auto fill from workflow"), vp = R("genInfoOverride.pick", "Pick"), yp = {
positive_prompt: [
"positive_prompt",
"prompt",
@@ -10777,7 +10807,7 @@ var cp = "Majoor.GenInfoOverridePicker", lp = "MajoorGenInfoOverride", up = R("g
],
vae: ["vae", "vae_name"],
clip: ["clip", "clip_name"]
-}, pp = [
+}, bp = [
{
field: "positive_prompt",
label: "prompt"
@@ -10822,14 +10852,14 @@ var cp = "Majoor.GenInfoOverridePicker", lp = "MajoorGenInfoOverride", up = R("g
field: "denoise",
label: "denoise"
}
-], mp = 0x10000000000000000, hp = !1, gp = !1;
-function _p(e, t) {
+], xp = 0x10000000000000000, Sp = !1, Cp = !1;
+function wp(e, t) {
let n = (e.widgets ?? []).find((e) => e?.name === t);
if (n && n.value !== void 0 && n.value !== null && String(n.value).trim() !== "") return n.value;
let r = Array.isArray(e.widgets_values) ? e.widgets_values : [], i = (Array.isArray(e.widgets) ? e.widgets : []).findIndex((e) => e?.name === t);
return i >= 0 ? r[i] : void 0;
}
-function vp(e, t, n, r, i) {
+function Tp(e, t, n, r, i) {
if (r == null || String(r).trim() === "") return;
let a = `${n}:${String(r).trim()}`;
t.has(a) || (t.add(a), e.push({
@@ -10839,42 +10869,42 @@ function vp(e, t, n, r, i) {
source: i
}));
}
-function yp(e, t, n) {
+function Ep(e, t, n) {
let r = t.toLowerCase();
- return !!((fp[e] ?? [e]).some((e) => r === e || r.includes(e)) || e === "positive_prompt" && r === "text" && n.toLowerCase().includes("positive") || e === "negative_prompt" && (r.includes("negative") || n.toLowerCase().includes("negative")));
+ return !!((yp[e] ?? [e]).some((e) => r === e || r.includes(e)) || e === "positive_prompt" && r === "text" && n.toLowerCase().includes("positive") || e === "negative_prompt" && (r.includes("negative") || n.toLowerCase().includes("negative")));
}
-function bp(e, t = null) {
+function Dp(e, t = null) {
let n = [], r = /* @__PURE__ */ new Set();
for (let { graph: i, label: a } of ht(e)) for (let e of pt(i)) {
- if (String(e?.comfyClass || e?.type || "") === lp) continue;
+ if (String(e?.comfyClass || e?.type || "") === gp) continue;
let i = String(e?.title || e?.comfyClass || e?.type || `Node ${e?.id ?? ""}`).trim(), o = a === "Workflow" ? i : `${a} / ${i}`;
- for (let [t, i] of Object.entries(fp)) for (let a of i) vp(n, r, t, _p(e, a), o);
+ for (let [t, i] of Object.entries(yp)) for (let a of i) Tp(n, r, t, wp(e, a), o);
let s = Array.isArray(e.widgets) ? e.widgets : [], c = Array.isArray(e.widgets_values) ? e.widgets_values : [];
s.forEach((e, a) => {
let s = String(e?.name || "").toLowerCase(), l = e?.value ?? c[a];
- s.includes("positive") || s === "text" && String(i).toLowerCase().includes("positive") ? vp(n, r, "positive_prompt", l, o) : s.includes("negative") && vp(n, r, "negative_prompt", l, o), t && yp(t, s, i) && vp(n, r, t, l, `${o} / ${e?.name || `widget ${a + 1}`}`);
+ s.includes("positive") || s === "text" && String(i).toLowerCase().includes("positive") ? Tp(n, r, "positive_prompt", l, o) : s.includes("negative") && Tp(n, r, "negative_prompt", l, o), t && Ep(t, s, i) && Tp(n, r, t, l, `${o} / ${e?.name || `widget ${a + 1}`}`);
});
}
return t ? n.filter((e) => e.field === t).slice(0, 120) : n.slice(0, 80);
}
-function xp(e, t) {
+function Op(e, t) {
return (e.widgets ?? []).find((e) => e?.name === t);
}
-function Sp(e) {
- let t = xp(e, "seed");
+function kp(e) {
+ let t = Op(e, "seed");
t && (t.options = {
...t.options ?? {},
min: -1,
- max: mp,
+ max: xp,
control_after_generate: !1
});
}
-function Cp(e, t) {
+function Ap(e, t) {
return t === "positive_prompt" ? e?.prompt ?? e?.positive_prompt : t === "negative_prompt" ? e?.negative_prompt ?? e?.negative : t === "loras_json" && Array.isArray(e?.loras) ? JSON.stringify(e.loras) : t === "custom_info_json" && Array.isArray(e?.custom_info) ? JSON.stringify(e.custom_info) : e?.[t];
}
-function wp(e, t) {
+function jp(e, t) {
if (!e || !t || typeof t != "object") return 0;
- Sp(e);
+ kp(e);
let n = 0;
for (let r of [
"positive_prompt",
@@ -10892,16 +10922,16 @@ function wp(e, t) {
"workflow_notes",
"custom_info_json"
]) {
- let i = Cp(t, r);
+ let i = Ap(t, r);
if (i == null) continue;
- let a = xp(e, r);
- a && (Tp(a, i, e, r), Ep(a, i), n += 1);
+ let a = Op(e, r);
+ a && (Mp(a, i, e, r), Np(a, i), n += 1);
}
return n;
}
-function Tp(e, t, n, r) {
+function Mp(e, t, n, r) {
if (r !== "seed") {
- qn(e, t, n);
+ Kn(e, t, n);
return;
}
let i = Number(t);
@@ -10909,7 +10939,7 @@ function Tp(e, t, n, r) {
e.options = {
...e.options ?? {},
min: -1,
- max: mp,
+ max: xp,
control_after_generate: !1
}, e.value = Math.trunc(i);
try {
@@ -10917,7 +10947,7 @@ function Tp(e, t, n, r) {
} catch {}
}
}
-function Ep(e, t) {
+function Np(e, t) {
let n = String(t ?? ""), r = [
e?.inputEl,
e?.element,
@@ -10930,60 +10960,60 @@ function Ep(e, t) {
e.value = n;
} catch {}
}
-function Dp(e, t, n) {
- let r = Mp({ detail: { output: t } });
- if (r && wp(e, r)) try {
+function Pp(e, t, n) {
+ let r = zp({ detail: { output: t } });
+ if (r && jp(e, r)) try {
e.setSize?.(e.computeSize?.()), e.graph?.setDirtyCanvas?.(!0, !0), e.graph?.change?.(), n?.graph?.setDirtyCanvas?.(!0, !0), n?.graph?.change?.(), n?.canvas?.setDirty?.(!0, !0), n?.canvas?.draw?.(!0, !0);
} catch {}
}
-function Op(e, t, n = null) {
- let r = n || t.field, i = xp(e, r);
- i && (Tp(i, t.value, e, r), Ep(i, t.value));
+function Fp(e, t, n = null) {
+ let r = n || t.field, i = Op(e, r);
+ i && (Mp(i, t.value, e, r), Np(i, t.value));
}
-function kp(e) {
+function Ip(e) {
return !e || e.value === void 0 || e.value === null || String(e.value).trim() === "";
}
-function Ap(t, n) {
- let r = bp(n), i = 0;
- for (let e of Object.keys(fp)) {
- let n = xp(t, e);
- if (!n || !kp(n)) continue;
+function Lp(t, n) {
+ let r = Dp(n), i = 0;
+ for (let e of Object.keys(yp)) {
+ let n = Op(t, e);
+ if (!n || !Ip(n)) continue;
let a = r.find((t) => t.field === e);
- a && (Tp(n, a.value, t, e), Ep(n, a.value), i += 1);
+ a && (Mp(n, a.value, t, e), Np(n, a.value), i += 1);
}
return n?.graph?.setDirtyCanvas?.(!0, !0), n?.graph?.change?.(), e({
summary: "Majoor Gen Info",
detail: i ? `Filled ${i} empty override fields.` : "No empty matching fields found."
}, i ? "success" : "warning", 3e3), i;
}
-function jp(e, t) {
- if (e && String(e?.comfyClass || e?.type || "") === lp && (Sp(e), !(e.widgets ?? []).some((e) => e?.name === up) && typeof e.addWidget == "function")) {
- e.addWidget("button", up, null, () => Ap(e, t));
- for (let n of pp) {
- let r = `${dp} ${n.label}`;
- (e.widgets ?? []).some((e) => e?.name === r) || e.addWidget("button", r, null, () => Pp(e, t, n.field));
+function Rp(e, t) {
+ if (e && String(e?.comfyClass || e?.type || "") === gp && (kp(e), !(e.widgets ?? []).some((e) => e?.name === _p) && typeof e.addWidget == "function")) {
+ e.addWidget("button", _p, null, () => Lp(e, t));
+ for (let n of bp) {
+ let r = `${vp} ${n.label}`;
+ (e.widgets ?? []).some((e) => e?.name === r) || e.addWidget("button", r, null, () => Vp(e, t, n.field));
}
try {
e.setSize?.(e.computeSize?.()), t?.graph?.setDirtyCanvas?.(!0, !0);
} catch {}
}
}
-function Mp(e) {
+function zp(e) {
let t = e?.detail?.output, n = t?.majoor_geninfo_override ?? t?.ui?.majoor_geninfo_override, r = Array.isArray(n) ? n[0] : n;
return r && typeof r == "object" ? r : null;
}
-function Np(e) {
- if (gp) return;
+function Bp(e) {
+ if (Cp) return;
let t = e?.api;
- t && typeof t.addEventListener == "function" && (gp = !0, t.addEventListener("executed", (t) => {
+ t && typeof t.addEventListener == "function" && (Cp = !0, t.addEventListener("executed", (t) => {
let n = t?.detail?.node ?? t?.detail?.display_node;
if (!n) return;
let r = mt(e, n);
- r && String(r?.comfyClass || r?.type || "") === lp && Dp(r, t?.detail?.output, e);
+ r && String(r?.comfyClass || r?.type || "") === gp && Pp(r, t?.detail?.output, e);
}));
}
-function Pp(t, n, r = null) {
- let i = bp(n, r);
+function Vp(t, n, r = null) {
+ let i = Dp(n, r);
if (!i.length) {
e({
summary: "Majoor Gen Info",
@@ -11004,45 +11034,45 @@ function Pp(t, n, r = null) {
for (let e of i) {
let n = document.createElement("button");
n.type = "button", n.style.cssText = "width:100%;display:grid;grid-template-columns:130px 1fr 150px;gap:8px;text-align:left;background:#2b2b2b;color:#eee;border:1px solid #3d3d3d;border-radius:5px;padding:7px;margin:5px 0;cursor:pointer", n.innerHTML = `${e.label}`, n.children[1].textContent = String(e.value), n.children[2].textContent = e.source, n.onclick = () => {
- Op(t, e, r), a.remove();
+ Fp(t, e, r), a.remove();
}, o.appendChild(n);
}
a.appendChild(o), o.querySelector("[data-close]")?.addEventListener("click", () => a.remove()), a.addEventListener("click", (e) => {
e.target === a && a.remove();
}), document.body.appendChild(a);
}
-function Fp(e, t) {
- if (String(e?.comfyClass || e?.type || "") !== lp) return [];
+function Hp(e, t) {
+ if (String(e?.comfyClass || e?.type || "") !== gp) return [];
let n = [{
content: R("genInfoOverride.pickFromWorkflow", "Pick Gen Info from workflow"),
- callback: () => Pp(e, t)
+ callback: () => Vp(e, t)
}];
- for (let r of pp) n.push({
+ for (let r of bp) n.push({
content: `Pick ${r.label}`,
- callback: () => Pp(e, t, r.field)
+ callback: () => Vp(e, t, r.field)
});
return n.push({
- content: up,
- callback: () => Ap(e, t)
+ content: _p,
+ callback: () => Lp(e, t)
}), n;
}
-function Ip(e = null) {
- if (hp) return;
+function Up(e = null) {
+ if (Sp) return;
let t = e || Qe();
- !t || typeof t.registerExtension != "function" ? setTimeout(() => Ip(e), 100) : (hp = !0, Np(t), t.registerExtension({
- name: cp,
+ !t || typeof t.registerExtension != "function" ? setTimeout(() => Up(e), 100) : (Sp = !0, Bp(t), t.registerExtension({
+ name: hp,
async nodeCreated(e) {
- jp(e, t);
+ Rp(e, t);
},
getNodeMenuItems(e) {
- return Fp(e, t);
+ return Hp(e, t);
}
}), setTimeout(() => {
- for (let { graph: e } of ht(t)) for (let n of pt(e)) jp(n, t);
+ for (let { graph: e } of ht(t)) for (let n of pt(e)) Rp(n, t);
}, 0));
}
// ui/vue/composables/useDragDrop.ts
-function Lp() {
+function Wp() {
let e = null;
Mr(() => {
try {
@@ -11050,7 +11080,7 @@ function Lp() {
} catch (e) {
console.warn("[Majoor] useDragDrop: init failed", e);
}
- }), ir(() => {
+ }), rr(() => {
try {
e?.({ force: !0 });
} catch (e) {
@@ -11065,10 +11095,10 @@ function Lp() {
});
}
// ui/vue/GlobalRuntime.vue
-var Rp = /* @__PURE__ */ fr({
+var Gp = /* @__PURE__ */ dr({
__name: "GlobalRuntime",
setup(e) {
- let t = dr(() => import("./chunks/ViewerPortal-CeOkTVnX.js")), n = Q(!1), r = [
+ let t = ur(() => import("./chunks/ViewerPortal-D964vdje.js")), n = Q(!1), r = [
V.OPEN_VIEWER,
V.MFV_OPEN,
V.MFV_TOGGLE,
@@ -11081,7 +11111,7 @@ var Rp = /* @__PURE__ */ fr({
if (n.value) return;
n.value = !0;
let t = String(e?.type || ""), r = e?.detail ?? null;
- t && t !== V.OPEN_VIEWER && ur(() => {
+ t && t !== V.OPEN_VIEWER && lr(() => {
try {
window.dispatchEvent(new CustomEvent(t, { detail: r }));
} catch (e) {
@@ -11089,21 +11119,21 @@ var Rp = /* @__PURE__ */ fr({
}
});
}
- return Lp(), Mr(() => {
+ return Wp(), Mr(() => {
for (let e of r) try {
window.addEventListener(e, i, { once: !1 });
} catch (e) {
console.debug?.(e);
}
- }), ir(() => {
+ }), rr(() => {
for (let e of r) try {
window.removeEventListener(e, i);
} catch (e) {
console.debug?.(e);
}
- }), (e, r) => n.value ? (q(), ar(Z(t), { key: 0 })) : G("", !0);
+ }), (e, r) => n.value ? (q(), ir(Z(t), { key: 0 })) : G("", !0);
}
-}), zp = {
+}), Kp = {
gridRenderCount: 0,
gridRenderTotalMs: 0,
searchQueryCount: 0,
@@ -11114,20 +11144,20 @@ var Rp = /* @__PURE__ */ fr({
thumbnailLoadCount: 0,
thumbnailLoadFailures: 0,
errorCounts: {}
-}, Bp = /* @__PURE__ */ new Map();
-function Vp(e) {
+}, qp = /* @__PURE__ */ new Map();
+function Jp(e) {
let t = performance.now();
- Bp.set(e, t);
+ qp.set(e, t);
try {
performance.mark(`${e}-start`);
} catch {}
}
-function Hp(e, t) {
- let n = Bp.get(e);
+function Yp(e, t) {
+ let n = qp.get(e);
if (!n) return console.warn(`[Majoor Metrics] Timer not found: ${e}`), 0;
let r = performance.now() - n;
- if (Bp.delete(e), t) {
- let e = `${t}Count`, n = `${t}TotalMs`, i = zp;
+ if (qp.delete(e), t) {
+ let e = `${t}Count`, n = `${t}TotalMs`, i = Kp;
typeof i[e] == "number" && (i[e]++, i[n] += r);
}
r > 100 && console.log(`[Majoor Metrics] ${e}: ${r.toFixed(2)}ms`);
@@ -11136,15 +11166,15 @@ function Hp(e, t) {
} catch {}
return r;
}
-function Up(e) {
- return Bp.has(e);
+function Xp(e) {
+ return qp.has(e);
}
-function Wp(e) {
+function Zp(e) {
try {
performance.mark(`${e}-start`);
} catch {}
}
-function Gp(e) {
+function Qp(e) {
try {
performance.mark(`${e}-end`), performance.measure(e, `${e}-start`, `${e}-end`);
let t = performance.getEntriesByName(e)[0]?.duration || 0;
@@ -11153,47 +11183,47 @@ function Gp(e) {
return null;
}
}
-function Kp(e, t = !1) {
- zp.apiCallCount++, zp.apiCallTotalMs += e, t && zp.apiErrorCount++;
+function $p(e, t = !1) {
+ Kp.apiCallCount++, Kp.apiCallTotalMs += e, t && Kp.apiErrorCount++;
}
-function qp(e) {
- zp.gridRenderCount++, zp.gridRenderTotalMs += e;
+function em(e) {
+ Kp.gridRenderCount++, Kp.gridRenderTotalMs += e;
}
-function Jp(e) {
- zp.searchQueryCount++, zp.searchQueryTotalMs += e;
+function tm(e) {
+ Kp.searchQueryCount++, Kp.searchQueryTotalMs += e;
}
-function Yp(e) {
- zp.thumbnailLoadCount++, e || zp.thumbnailLoadFailures++;
+function nm(e) {
+ Kp.thumbnailLoadCount++, e || Kp.thumbnailLoadFailures++;
}
-function Xp(e, t) {
- zp.errorCounts[e] = (zp.errorCounts[e] || 0) + 1;
+function rm(e, t) {
+ Kp.errorCounts[e] = (Kp.errorCounts[e] || 0) + 1;
}
-function Zp() {
+function im() {
return {
- ...zp,
+ ...Kp,
averages: {
- gridRenderMs: zp.gridRenderCount > 0 ? zp.gridRenderTotalMs / zp.gridRenderCount : 0,
- searchQueryMs: zp.searchQueryCount > 0 ? zp.searchQueryTotalMs / zp.searchQueryCount : 0,
- apiCallMs: zp.apiCallCount > 0 ? zp.apiCallTotalMs / zp.apiCallCount : 0
+ gridRenderMs: Kp.gridRenderCount > 0 ? Kp.gridRenderTotalMs / Kp.gridRenderCount : 0,
+ searchQueryMs: Kp.searchQueryCount > 0 ? Kp.searchQueryTotalMs / Kp.searchQueryCount : 0,
+ apiCallMs: Kp.apiCallCount > 0 ? Kp.apiCallTotalMs / Kp.apiCallCount : 0
},
rates: {
- apiErrorRate: zp.apiCallCount > 0 ? (zp.apiErrorCount / zp.apiCallCount * 100).toFixed(2) + "%" : "0%",
- thumbnailFailureRate: zp.thumbnailLoadCount > 0 ? (zp.thumbnailLoadFailures / zp.thumbnailLoadCount * 100).toFixed(2) + "%" : "0%"
+ apiErrorRate: Kp.apiCallCount > 0 ? (Kp.apiErrorCount / Kp.apiCallCount * 100).toFixed(2) + "%" : "0%",
+ thumbnailFailureRate: Kp.thumbnailLoadCount > 0 ? (Kp.thumbnailLoadFailures / Kp.thumbnailLoadCount * 100).toFixed(2) + "%" : "0%"
}
};
}
-function Qp(e) {
- let t = `${e}Count`, n = `${e}TotalMs`, r = zp, i = r[t], a = r[n];
+function am(e) {
+ let t = `${e}Count`, n = `${e}TotalMs`, r = Kp, i = r[t], a = r[n];
return i > 0 ? a / i : 0;
}
-function $p() {
- let e = zp;
+function om() {
+ let e = Kp;
Object.keys(e).forEach((t) => {
typeof e[t] == "number" ? e[t] = 0 : typeof e[t] == "object" && (e[t] = {});
- }), Bp.clear(), console.log("[Majoor Metrics] Metrics reset");
+ }), qp.clear(), console.log("[Majoor Metrics] Metrics reset");
}
-function em() {
- let e = Zp();
+function sm() {
+ let e = im();
console.group("[Majoor Assets Manager] Performance Metrics"), console.table({
"Grid Renders": e.gridRenderCount,
"Avg Grid Render": `${e.averages.gridRenderMs.toFixed(2)}ms`,
@@ -11206,26 +11236,26 @@ function em() {
"Thumbnail Loads": e.thumbnailLoadCount,
"Thumbnail Failures": e.thumbnailLoadFailures,
"Failure Rate": e.rates.thumbnailFailureRate
- }), Object.keys(zp.errorCounts).length > 0 && console.log("Error Counts:", zp.errorCounts), console.groupEnd();
+ }), Object.keys(Kp.errorCounts).length > 0 && console.log("Error Counts:", Kp.errorCounts), console.groupEnd();
}
typeof window < "u" && (window.MajoorMetrics = {
- startTimer: Vp,
- endTimer: Hp,
- hasTimer: Up,
- mark: Wp,
- measure: Gp,
- trackApiCall: Kp,
- trackGridRender: qp,
- trackSearchQuery: Jp,
- trackThumbnailLoad: Yp,
- trackError: Xp,
- getMetricsReport: Zp,
- getAverageDuration: Qp,
- resetMetrics: $p,
- exportMetrics: em
+ startTimer: Jp,
+ endTimer: Yp,
+ hasTimer: Xp,
+ mark: Zp,
+ measure: Qp,
+ trackApiCall: $p,
+ trackGridRender: em,
+ trackSearchQuery: tm,
+ trackThumbnailLoad: nm,
+ trackError: rm,
+ getMetricsReport: im,
+ getAverageDuration: am,
+ resetMetrics: om,
+ exportMetrics: sm
});
// ui/features/status/StatusDot.ts
-var tm = [{
+var cm = [{
key: "exiftool",
labelKey: "tool.exiftool",
hintKey: "tool.exiftool.hint"
@@ -11233,24 +11263,24 @@ var tm = [{
key: "ffprobe",
labelKey: "tool.ffprobe",
hintKey: "tool.ffprobe.hint"
-}], nm = !1, rm = null, im = null, am = "__MJR_STATUS_DOT_CACHE__", om = {
+}], lm = !1, um = null, dm = null, fm = "__MJR_STATUS_DOT_CACHE__", pm = {
ACTIVE: "active",
COOLDOWN: "cooldown",
IDLE: "idle"
-}, sm = {
- [om.ACTIVE]: 2e3,
- [om.COOLDOWN]: 1e4,
- [om.IDLE]: 6e4
+}, mm = {
+ [pm.ACTIVE]: 2e3,
+ [pm.COOLDOWN]: 1e4,
+ [pm.IDLE]: 6e4
};
-function cm(e) {
- nm = !!e;
+function hm(e) {
+ lm = !!e;
try {
- globalThis._mjrMaintenanceActive = nm;
+ globalThis._mjrMaintenanceActive = lm;
} catch (e) {
console.debug?.(e);
}
}
-function lm(e) {
+function gm(e) {
let t = Number(e);
if (!Number.isFinite(t) || t <= 0) return "0 B";
let n = [
@@ -11264,7 +11294,7 @@ function lm(e) {
let a = r >= 100 ? 0 : r >= 10 ? 1 : 2;
return `${r.toFixed(a)} ${n[i]}`;
}
-function um(e, t, n = null) {
+function _m(e, t, n = null) {
if (e && (e.replaceChildren(), (Array.isArray(t) ? t.filter((e) => e != null && String(e).trim() !== "") : []).forEach((t, n) => {
n > 0 && e.appendChild(document.createElement("br")), e.appendChild(document.createTextNode(String(t)));
}), n != null && String(n).trim() !== "")) {
@@ -11273,7 +11303,7 @@ function um(e, t, n = null) {
t.style.fontSize = "11px", t.style.opacity = "0.6", t.textContent = String(n), e.appendChild(t);
}
}
-function dm(e, t = []) {
+function vm(e, t = []) {
if (!e) return;
let n = Array.isArray(t) ? t.filter((e) => e && String(e.label || "").trim()) : [];
if (!n.length) return;
@@ -11293,7 +11323,7 @@ function dm(e, t = []) {
}
e.appendChild(r);
}
-function fm(e, { totalAssets: t = 0, withWorkflows: n = 0, withGenerationData: r = 0 } = {}) {
+function ym(e, { totalAssets: t = 0, withWorkflows: n = 0, withGenerationData: r = 0 } = {}) {
let i = Math.max(0, Number(t || e?.total_assets || 0) || 0);
if (i <= 0) return [];
let a = (e, t = i) => {
@@ -11339,13 +11369,13 @@ function fm(e, { totalAssets: t = 0, withWorkflows: n = 0, withGenerationData: r
} : null
].filter(Boolean);
}
-function pm(e, t, n) {
+function bm(e, t, n) {
if (!e) return;
e.replaceChildren(), e.appendChild(document.createTextNode(String(t || ""))), e.appendChild(document.createElement("br"));
let r = document.createElement("span");
r.style.fontSize = "11px", r.style.opacity = "0.7", r.textContent = String(n || ""), e.appendChild(r);
}
-function mm(t, n = "neutral", r = {}) {
+function xm(t, n = "neutral", r = {}) {
if (!t) return;
let i = r?.toast !== !1, a = {
neutral: {
@@ -11411,23 +11441,23 @@ function mm(t, n = "neutral", r = {}) {
}
}
}
-function hm(e) {
+function Sm(e) {
let t = String(e || "").toLowerCase();
return t === "all" ? R("scope.allFull", "All (Inputs + Outputs)") : t === "input" || t === "inputs" ? R("scope.input", "Inputs") : t === "custom" ? R("scope.custom", "Browser") : t === "workflow" ? R("scope.workflow", "Workflow") : R("scope.output", "Outputs");
}
-function gm(e, t = "") {
- if (!e || typeof e != "object") return t ? R("status.watcher.disabledScoped", "Watcher: disabled ({scope})", { scope: hm(t) }) : R("status.watcher.disabled", "Watcher: disabled");
+function Cm(e, t = "") {
+ if (!e || typeof e != "object") return t ? R("status.watcher.disabledScoped", "Watcher: disabled ({scope})", { scope: Sm(t) }) : R("status.watcher.disabled", "Watcher: disabled");
let n = !!e.enabled, r = e.scope ? String(e.scope) : "";
- return n ? r ? R("status.watcher.enabledScoped", `Watcher: enabled (${r})`, { scope: hm(r) }) : R("status.watcher.enabled", "Watcher: enabled") : r || t ? R("status.watcher.disabledScoped", "Watcher: disabled ({scope})", { scope: hm(t && r && r !== t ? t : r || t) }) : R("status.watcher.disabled", "Watcher: disabled");
+ return n ? r ? R("status.watcher.enabledScoped", `Watcher: enabled (${r})`, { scope: Sm(r) }) : R("status.watcher.enabled", "Watcher: enabled") : r || t ? R("status.watcher.disabledScoped", "Watcher: disabled ({scope})", { scope: Sm(t && r && r !== t ? t : r || t) }) : R("status.watcher.disabled", "Watcher: disabled");
}
-function _m(e = "status-action") {
+function wm(e = "status-action") {
try {
window?.dispatchEvent?.(new CustomEvent("mjr:reload-grid", { detail: { reason: String(e || "status-action") } }));
} catch (e) {
console.debug?.(e);
}
}
-function vm(e = "status-action", t = {}) {
+function Tm(e = "status-action", t = {}) {
try {
window?.dispatchEvent?.(new CustomEvent("mjr-grid-dirty", { detail: {
reason: String(e || "status-action"),
@@ -11437,14 +11467,14 @@ function vm(e = "status-action", t = {}) {
console.debug?.(e);
}
}
-async function ym(e = "") {
- return await Wt(R("dialog.vectorsReset.keepQuestion", "Keep existing AI vectors?\n\nConfirm = keep vectors\nCancel = continue without vectors"), e || R("dialog.vectorsReset.title", "AI vectors"));
+async function Em(e = "") {
+ return await Tt(R("dialog.vectorsReset.keepQuestion", "Keep existing AI vectors?\n\nConfirm = keep vectors\nCancel = continue without vectors"), e || R("dialog.vectorsReset.title", "AI vectors"));
}
-function bm(t = {}) {
+function Dm(t = {}) {
let n = typeof t?.getScanContext == "function" ? t.getScanContext : null;
- cm(!1);
+ hm(!1);
let r = document.createElement("div");
- r.style.cssText = "margin-bottom: 20px; padding: 12px; background: var(--bg-color, #1a1a1a); border-radius: 6px; border: 1px solid var(--border-color, #333); cursor: pointer; transition: all 0.2s;", mm(r, "info", { toast: !1 });
+ r.style.cssText = "margin-bottom: 20px; padding: 12px; background: var(--bg-color, #1a1a1a); border-radius: 6px; border: 1px solid var(--border-color, #333); cursor: pointer; transition: all 0.2s;", xm(r, "info", { toast: !1 });
let i = document.createElement("div");
i.style.cssText = "display: flex; align-items: center; gap: 10px; margin-bottom: 8px;";
let a = document.createElement("span");
@@ -11490,7 +11520,7 @@ function bm(t = {}) {
for (let t of n) {
let n = String(t?.name || "");
if (!n) continue;
- let i = Number(t?.mtime || 0), a = Number(t?.size_bytes || 0), o = i > 0 ? (/* @__PURE__ */ new Date(i * 1e3)).toLocaleString() : "", s = `${n}${o ? ` (${o}` : ""}${a > 0 ? `, ${lm(a)}` : ""}${o ? ")" : ""}`, c = document.createElement("option");
+ let i = Number(t?.mtime || 0), a = Number(t?.size_bytes || 0), o = i > 0 ? (/* @__PURE__ */ new Date(i * 1e3)).toLocaleString() : "", s = `${n}${o ? ` (${o}` : ""}${a > 0 ? `, ${gm(a)}` : ""}${o ? ")" : ""}`, c = document.createElement("option");
c.value = n, c.textContent = s, e && e === n && (c.selected = !0, r = !0), h.appendChild(c);
}
g = h.childNodes.length > 0, h.disabled = !g, g && !r && h.childNodes[0] && (h.value = String(h.childNodes[0]?.value || "")), _ && (_.disabled = !g);
@@ -11501,16 +11531,16 @@ function bm(t = {}) {
y(), m.appendChild(h);
let b = document.createElement("button");
b.type = "button", b.textContent = R("btn.dbSave", "Save DB"), b.title = R("status.dbSaveHint", "Save a DB snapshot into archive folder"), b.style.cssText = "\n padding: 5px 10px;\n font-size: 11px;\n border-radius: 6px;\n border: 1px solid rgba(120,200,255,0.35);\n background: transparent;\n color: inherit;\n cursor: pointer;\n ", b.onclick = async (t) => {
- t.stopPropagation(), cm(!0);
+ t.stopPropagation(), hm(!0);
let i = b.textContent, o = !!_?.disabled;
- b.disabled = !0, _ && (_.disabled = !0), b.textContent = R("btn.saving", "Saving..."), a.style.background = "var(--mjr-status-info, #64B5F6)", mm(r, "info");
+ b.disabled = !0, _ && (_.disabled = !0), b.textContent = R("btn.saving", "Saving..."), a.style.background = "var(--mjr-status-info, #64B5F6)", xm(r, "info");
try {
let t = await Ee();
if (t?.ok) {
let n = String(t?.data?.name || "").trim(), r = Number(t?.data?.size_bytes || 0);
e(R("toast.dbSaveSuccess", "Database backup saved"), "success", 2200, { history: {
title: R("btn.dbSave", "Save DB"),
- detail: n ? `${n}${r > 0 ? ` | ${lm(r)}` : ""}` : R("toast.dbSaveSuccess", "Database backup saved"),
+ detail: n ? `${n}${r > 0 ? ` | ${gm(r)}` : ""}` : R("toast.dbSaveSuccess", "Database backup saved"),
operation: "save_db",
source: n || "archive",
forceStore: !0
@@ -11519,10 +11549,10 @@ function bm(t = {}) {
} catch (t) {
e(t?.message || R("toast.dbSaveFailed", "Failed to save DB backup"), "error");
} finally {
- cm(!1), b.disabled = !1, _ && (_.disabled = o || !g), b.textContent = i;
+ hm(!1), b.disabled = !1, _ && (_.disabled = o || !g), b.textContent = i;
try {
let e = n ? n() : null;
- await km(a, d, f, e, null, { force: !0 });
+ await Im(a, d, f, e, null, { force: !0 });
} catch (e) {
console.debug?.(e);
}
@@ -11534,7 +11564,7 @@ function bm(t = {}) {
e(R("toast.dbRestoreSelect", "Select a DB backup first"), "warning", 2e3);
return;
}
- if (!await Wt(`${R("dialog.dbRestore.confirm", "Restore selected DB backup? Current DB will be replaced.")}\n\n${i}`, R("btn.dbRestore", "Restore DB"))) return;
+ if (!await Tt(`${R("dialog.dbRestore.confirm", "Restore selected DB backup? Current DB will be replaced.")}\n\n${i}`, R("btn.dbRestore", "Restore DB"))) return;
e(R("toast.dbRestoreStarted", "DB restore started"), "info", 1800, { history: {
trackId: "maintenance:restore_db",
title: R("btn.dbRestore", "Restore DB"),
@@ -11543,9 +11573,9 @@ function bm(t = {}) {
source: i,
status: "started",
forceStore: !0
- } }), cm(!0);
+ } }), hm(!0);
let o = _.textContent, s = !!b.disabled;
- _.disabled = !0, b.disabled = !0, h.disabled = !0, _.textContent = R("btn.restoring", "Restoring..."), a.style.background = "var(--mjr-status-warning, #FFA726)", mm(r, "warning");
+ _.disabled = !0, b.disabled = !0, h.disabled = !0, _.textContent = R("btn.restoring", "Restoring..."), a.style.background = "var(--mjr-status-warning, #FFA726)", xm(r, "warning");
try {
let t = await M({
name: i,
@@ -11555,10 +11585,10 @@ function bm(t = {}) {
} catch (t) {
e(t?.message || R("toast.dbRestoreFailed", "Failed to restore DB backup"), "error");
} finally {
- cm(!1), _.disabled = !g, b.disabled = s, h.disabled = !g, _.textContent = o, _m("db-restore");
+ hm(!1), _.disabled = !g, b.disabled = s, h.disabled = !g, _.textContent = o, wm("db-restore");
try {
let e = n ? n() : null;
- await km(a, d, f, e, null, { force: !0 });
+ await Im(a, d, f, e, null, { force: !0 });
} catch (e) {
console.debug?.(e);
}
@@ -11578,11 +11608,11 @@ function bm(t = {}) {
D.style.borderColor = "rgba(255,255,255,0.25)", D.style.background = "transparent";
}, D.onclick = async (e) => {
e.stopPropagation();
- let t = await ym(R("btn.resetIndex", "Reset index"));
- if (!await Wt(t ? R("dialog.resetIndex.confirmKeepVectors", "This will reset index data and rescan files while keeping existing AI vectors.\n\nContinue?") : R("dialog.resetIndex.msg", "This will delete the database and rescan all files. Continue?"), R("dialog.resetIndex.title", "Reset index?"))) return;
- cm(!0);
+ let t = await Em(R("btn.resetIndex", "Reset index"));
+ if (!await Tt(t ? R("dialog.resetIndex.confirmKeepVectors", "This will reset index data and rescan files while keeping existing AI vectors.\n\nContinue?") : R("dialog.resetIndex.msg", "This will delete the database and rescan all files. Continue?"), R("dialog.resetIndex.title", "Reset index?"))) return;
+ hm(!0);
let i = D.textContent;
- D.disabled = !0, E.disabled = !0, D.textContent = R("btn.resetting"), a.style.background = "var(--mjr-status-info, #64B5F6)", mm(r, "info");
+ D.disabled = !0, E.disabled = !0, D.textContent = R("btn.resetting"), a.style.background = "var(--mjr-status-info, #64B5F6)", xm(r, "info");
try {
let e = n ? n() : {}, i = String(e?.scope || "output").toLowerCase(), o = e?.customRootId || e?.custom_root_id || e?.root_id || null, s = i === "custom" && !o;
(await Oe({
@@ -11597,14 +11627,14 @@ function bm(t = {}) {
clear_assets: !t,
preserve_vectors: t,
rebuild_fts: !0
- }))?.ok ? (a.style.background = "var(--mjr-status-success, #4CAF50)", mm(r, "success")) : (a.style.background = "var(--mjr-status-error, #f44336)", mm(r, "error"));
+ }))?.ok ? (a.style.background = "var(--mjr-status-success, #4CAF50)", xm(r, "success")) : (a.style.background = "var(--mjr-status-error, #f44336)", xm(r, "error"));
} catch {
- a.style.background = "var(--mjr-status-error, #f44336)", mm(r, "error");
+ a.style.background = "var(--mjr-status-error, #f44336)", xm(r, "error");
} finally {
- cm(!1), D.disabled = !1, E.disabled = !1, D.textContent = i, _m("index-reset");
+ hm(!1), D.disabled = !1, E.disabled = !1, D.textContent = i, wm("index-reset");
try {
let e = n ? n() : null;
- await km(a, d, f, e, null, { force: !0 });
+ await Im(a, d, f, e, null, { force: !0 });
} catch (e) {
console.debug?.(e);
}
@@ -11622,14 +11652,14 @@ function bm(t = {}) {
e(R("status.customBrowserScanDisabledHint", "Use Outputs, Inputs, or All to run indexing scans"), "warning", 2600), T("Backfill skipped - Browser scope has no selected custom root.", "warning");
return;
}
- let c = o || "output", l = hm(c), u = { history: {
+ let c = o || "output", l = Sm(c), u = { history: {
trackId: `vector-backfill:status:${c}:${s || "default"}`,
title: "Vector Backfill",
source: l,
operation: "vector_backfill",
forceStore: !0
} };
- cm(!0);
+ hm(!0);
let p = O.textContent, m = D.textContent;
O.disabled = !0, D.disabled = !0, E.disabled = !0, O.textContent = "Backfilling...", T(`Backfill started (${l})...`, "info"), xe({
summary: "Vector Backfill",
@@ -11638,7 +11668,7 @@ function bm(t = {}) {
...u.history,
status: "started",
detail: `Started (${l})`
- } }), a.style.background = "var(--mjr-status-info, #64B5F6)", mm(r, "info");
+ } }), a.style.background = "var(--mjr-status-info, #64B5F6)", xm(r, "info");
try {
let t = {
scope: c,
@@ -11705,7 +11735,7 @@ function bm(t = {}) {
errors: d,
label: "running"
}
- } }), T(`Backfill running in background - candidates ${s}, indexed ${c}, skipped ${l}, errors ${d}`, "info"), a.style.background = "var(--mjr-status-info, #64B5F6)", mm(r, "info");
+ } }), T(`Backfill running in background - candidates ${s}, indexed ${c}, skipped ${l}, errors ${d}`, "info"), a.style.background = "var(--mjr-status-info, #64B5F6)", xm(r, "info");
} else e(R("toast.vectorBackfillComplete", "Vector backfill complete! Processed: {processed}, Indexed: {indexed}, Skipped: {skipped}", {
processed: s,
indexed: c,
@@ -11723,7 +11753,7 @@ function bm(t = {}) {
errors: d,
label: "done"
}
- } }), T(`Backfill OK - processed ${s}, indexed ${c}, skipped ${l}`, "success"), a.style.background = "var(--mjr-status-success, #4CAF50)", mm(r, "success");
+ } }), T(`Backfill OK - processed ${s}, indexed ${c}, skipped ${l}`, "success"), a.style.background = "var(--mjr-status-success, #4CAF50)", xm(r, "success");
} else {
let t = String(n?.error || R("toast.vectorBackfillFailedGeneric", "Backfill failed")), i = String(n?.code || "").trim(), o = Number(n?.status || 0) || 0, s = [
i ? `code=${i}` : "",
@@ -11738,7 +11768,7 @@ function bm(t = {}) {
label: "failed",
errors: 1
}
- } }), T(`Backfill ? - ${s}\nSee console for full payload.`, "error"), console.error("[Majoor] Vector backfill failed response", n), a.style.background = "var(--mjr-status-error, #f44336)", mm(r, "error");
+ } }), T(`Backfill ? - ${s}\nSee console for full payload.`, "error"), console.error("[Majoor] Vector backfill failed response", n), a.style.background = "var(--mjr-status-error, #f44336)", xm(r, "error");
}
} catch (t) {
let n = String(t?.message || t || "Backfill failed");
@@ -11750,12 +11780,12 @@ function bm(t = {}) {
label: "failed",
errors: 1
}
- } }), T(`Backfill EXCEPTION - ${n}\nSee console for stack trace.`, "error"), console.error("[Majoor] Vector backfill exception", t), a.style.background = "var(--mjr-status-error, #f44336)", mm(r, "error");
+ } }), T(`Backfill EXCEPTION - ${n}\nSee console for stack trace.`, "error"), console.error("[Majoor] Vector backfill exception", t), a.style.background = "var(--mjr-status-error, #f44336)", xm(r, "error");
} finally {
- cm(!1), O.disabled = !1, D.disabled = !1, E.disabled = !1, O.textContent = p, D.textContent = m, _m("vector-backfill");
+ hm(!1), O.disabled = !1, D.disabled = !1, E.disabled = !1, O.textContent = p, D.textContent = m, wm("vector-backfill");
try {
let e = n ? n() : null;
- await km(a, d, f, e, null, { force: !0 });
+ await Im(a, d, f, e, null, { force: !0 });
} catch (e) {
console.debug?.(e);
}
@@ -11767,24 +11797,24 @@ function bm(t = {}) {
}, E.onclick = async (t) => {
t.stopPropagation();
let i = E.textContent;
- E.disabled = !0, O.disabled = !0, D.disabled = !0, E.textContent = R("btn.memoryPurging", "Purging..."), T(R("status.memoryPurgeStarted", "Memory purge started..."), "info"), a.style.background = "var(--mjr-status-info, #64B5F6)", mm(r, "info");
+ E.disabled = !0, O.disabled = !0, D.disabled = !0, E.textContent = R("btn.memoryPurging", "Purging..."), T(R("status.memoryPurgeStarted", "Memory purge started..."), "info"), a.style.background = "var(--mjr-status-info, #64B5F6)", xm(r, "info");
try {
let t = await C();
if (t?.ok) {
let n = t?.data?.comfy_models ? R("toast.memoryPurgeComplete", "Memory purge complete. Majoor AI and ComfyUI model caches were released.") : R("toast.memoryPurgeCompleteMajoorOnly", "Memory purge complete. Majoor AI caches were released.");
- e(n, "success", 3200), T(n, "success"), a.style.background = "var(--mjr-status-success, #4CAF50)", mm(r, "success");
+ e(n, "success", 3200), T(n, "success"), a.style.background = "var(--mjr-status-success, #4CAF50)", xm(r, "success");
} else {
let n = String(t?.error || "Memory purge failed");
- e(n, "error", 4500), T(n, "error"), a.style.background = "var(--mjr-status-error, #f44336)", mm(r, "error");
+ e(n, "error", 4500), T(n, "error"), a.style.background = "var(--mjr-status-error, #f44336)", xm(r, "error");
}
} catch (t) {
let n = String(t?.message || t || "Memory purge failed");
- e(n, "error", 4500), T(n, "error"), a.style.background = "var(--mjr-status-error, #f44336)", mm(r, "error");
+ e(n, "error", 4500), T(n, "error"), a.style.background = "var(--mjr-status-error, #f44336)", xm(r, "error");
} finally {
E.disabled = !1, O.disabled = !1, D.disabled = !1, E.textContent = i;
try {
let e = n ? n() : null;
- await km(a, d, f, e, null, { force: !0 });
+ await Im(a, d, f, e, null, { force: !0 });
} catch (e) {
console.debug?.(e);
}
@@ -11797,11 +11827,11 @@ function bm(t = {}) {
k.style.borderColor = "rgba(255,80,80,0.4)", k.style.background = "transparent";
}, k.onclick = async (e) => {
e.stopPropagation();
- let t = await ym(R("btn.deleteDb", "Delete DB"));
- if (!await Wt(t ? R("dialog.dbDelete.keepVectorsConfirm", "This will reset index data and keep existing AI vectors. Database files will not be force-deleted.\n\nContinue?") : R("dialog.dbDelete.confirm", "This will permanently delete the index database and rebuild it from scratch. All ratings, tags, and cached metadata will be lost.\n\nContinue?"), R("btn.deleteDb", "Delete DB"))) return;
- cm(!0);
+ let t = await Em(R("btn.deleteDb", "Delete DB"));
+ if (!await Tt(t ? R("dialog.dbDelete.keepVectorsConfirm", "This will reset index data and keep existing AI vectors. Database files will not be force-deleted.\n\nContinue?") : R("dialog.dbDelete.confirm", "This will permanently delete the index database and rebuild it from scratch. All ratings, tags, and cached metadata will be lost.\n\nContinue?"), R("btn.deleteDb", "Delete DB"))) return;
+ hm(!0);
let i = k.textContent;
- k.disabled = !0, k.textContent = t ? R("btn.resetting", "Resetting...") : R("btn.deletingDb"), D.disabled = !0, E.disabled = !0, a.style.background = "var(--mjr-status-info, #64B5F6)", mm(r, "info");
+ k.disabled = !0, k.textContent = t ? R("btn.resetting", "Resetting...") : R("btn.deletingDb"), D.disabled = !0, E.disabled = !0, a.style.background = "var(--mjr-status-info, #64B5F6)", xm(r, "info");
try {
(t ? await Oe({
scope: "all",
@@ -11814,14 +11844,14 @@ function bm(t = {}) {
clear_assets: !1,
preserve_vectors: !0,
rebuild_fts: !0
- }) : await c())?.ok ? (globalThis._mjrCorruptToastShown = !1, a.style.background = "var(--mjr-status-success, #4CAF50)", mm(r, "success")) : (a.style.background = "var(--mjr-status-error, #f44336)", mm(r, "error"));
+ }) : await c())?.ok ? (globalThis._mjrCorruptToastShown = !1, a.style.background = "var(--mjr-status-success, #4CAF50)", xm(r, "success")) : (a.style.background = "var(--mjr-status-error, #f44336)", xm(r, "error"));
} catch {
- a.style.background = "var(--mjr-status-error, #f44336)", mm(r, "error");
+ a.style.background = "var(--mjr-status-error, #f44336)", xm(r, "error");
} finally {
- cm(!1), k.disabled = !1, k.textContent = i, D.disabled = !1, E.disabled = !1, _m(t ? "index-reset-preserve-vectors" : "db-force-delete");
+ hm(!1), k.disabled = !1, k.textContent = i, D.disabled = !1, E.disabled = !1, wm(t ? "index-reset-preserve-vectors" : "db-force-delete");
try {
let e = n ? n() : null;
- await km(a, d, f, e, null, { force: !0 });
+ await Im(a, d, f, e, null, { force: !0 });
} catch (e) {
console.debug?.(e);
}
@@ -11833,34 +11863,34 @@ function bm(t = {}) {
let t = r.querySelector("#mjr-status-body");
if (!t) return;
let n = t.style.display === "none";
- Em(r, !n);
- }), Em(r, !0), r.onmouseenter = () => {
+ Nm(r, !n);
+ }), Nm(r, !0), r.onmouseenter = () => {
r.style.transform = "translateY(-1px)";
}, r.onmouseleave = () => {
- r.style.transform = "", mm(r, r.dataset?.mjrStatusTone || "neutral", { toast: !1 });
+ r.style.transform = "", xm(r, r.dataset?.mjrStatusTone || "neutral", { toast: !1 });
};
let j = async (e) => {
try {
let t = e?.detail || {}, i = String(t?.step || "");
if (!i) return;
let o = i === "started" || i === "stopping_workers" || i === "resetting_db" || i === "delete_db" || i === "recreate_db" || i === "replacing_files" || i === "restarting_scan";
- if (o ? cm(!0) : (i === "failed" || i === "done") && cm(!1), !r?.isConnected || !a?.isConnected || !d?.isConnected) return;
+ if (o ? hm(!0) : (i === "failed" || i === "done") && hm(!1), !r?.isConnected || !a?.isConnected || !d?.isConnected) return;
if (o) {
- a.style.background = "var(--mjr-status-info, #64B5F6)", mm(r, "info", { toast: !1 }), pm(d, R("status.pending", "Pending..."), R("status.dbRestoreInProgress", "Database restore in progress"));
+ a.style.background = "var(--mjr-status-info, #64B5F6)", xm(r, "info", { toast: !1 }), bm(d, R("status.pending", "Pending..."), R("status.dbRestoreInProgress", "Database restore in progress"));
return;
}
if (i === "failed") {
- a.style.background = "var(--mjr-status-error, #f44336)", mm(r, "error", { toast: !1 }), um(d, [R("status.error", "Error"), String(t?.message || R("toast.dbRestoreFailed", "Failed to restore DB backup"))]);
+ a.style.background = "var(--mjr-status-error, #f44336)", xm(r, "error", { toast: !1 }), _m(d, [R("status.error", "Error"), String(t?.message || R("toast.dbRestoreFailed", "Failed to restore DB backup"))]);
return;
}
if (i === "done") {
- a.style.background = "var(--mjr-status-success, #4CAF50)", mm(r, "success", { toast: !1 });
+ a.style.background = "var(--mjr-status-success, #4CAF50)", xm(r, "success", { toast: !1 });
let e = String(t?.operation || ""), i = e === "delete_db" ? R("toast.dbDeleteSuccess", "Database deleted and rebuilt. Files are being reindexed.") : e === "reset_index" ? R("toast.resetStarted", "Index reset started. Files will be reindexed in the background.") : R("toast.dbRestoreSuccess", "Database backup restored");
- pm(d, R("status.ready", "Ready"), i);
+ bm(d, R("status.ready", "Ready"), i);
try {
let e = n ? n() : null;
setTimeout(() => {
- km(a, d, f, e, null, { force: !0 });
+ Im(a, d, f, e, null, { force: !0 });
}, 600);
} catch (e) {
console.debug?.(e);
@@ -11871,8 +11901,8 @@ function bm(t = {}) {
}
};
try {
- let e = rm;
- typeof e == "function" && window.removeEventListener("mjr-db-restore-status", e), rm = j, r._mjrDbRestoreStatusHandler = j, window.addEventListener("mjr-db-restore-status", j);
+ let e = um;
+ typeof e == "function" && window.removeEventListener("mjr-db-restore-status", e), um = j, r._mjrDbRestoreStatusHandler = j, window.addEventListener("mjr-db-restore-status", j);
} catch (e) {
console.debug?.(e);
}
@@ -11889,27 +11919,27 @@ function bm(t = {}) {
].filter(Boolean);
if (!s.length) return;
let c = d?.querySelector?.("span");
- c ? c.textContent = s.join(" | ") : pm(d, R("status.ready", "Ready"), s.join(" | "));
+ c ? c.textContent = s.join(" | ") : bm(d, R("status.ready", "Ready"), s.join(" | "));
} catch (e) {
console.debug?.(e);
}
};
try {
- let e = im;
- typeof e == "function" && window.removeEventListener(V.RUNTIME_STATUS, e), im = N, window.addEventListener(V.RUNTIME_STATUS, N);
+ let e = dm;
+ typeof e == "function" && window.removeEventListener(V.RUNTIME_STATUS, e), dm = N, window.addEventListener(V.RUNTIME_STATUS, N);
} catch (e) {
console.debug?.(e);
}
return r;
}
-async function xm(t, n, r = null, i = null) {
- if (nm) {
+async function Om(t, n, r = null, i = null) {
+ if (lm) {
e(R("status.maintenanceBusy", "Database maintenance in progress. Please wait."), "warning", 2200);
return;
}
let a = n?.closest?.("#mjr-status-body")?.parentElement || n?.closest?.("div"), o = String(i?.scope || "output").toLowerCase(), s = i?.customRootId || i?.custom_root_id || i?.root_id || null;
if (o === "custom" && !s) {
- t.style.background = "var(--mjr-status-info, #64B5F6)", mm(a, "info"), pm(n, R("status.customBrowserScanDisabled", "Custom browser mode: scan is disabled"), R("status.customBrowserScanDisabledHint", "Use Outputs, Inputs, or All to run indexing scans"));
+ t.style.background = "var(--mjr-status-info, #64B5F6)", xm(a, "info"), bm(n, R("status.customBrowserScanDisabled", "Custom browser mode: scan is disabled"), R("status.customBrowserScanDisabledHint", "Use Outputs, Inputs, or All to run indexing scans"));
return;
}
try {
@@ -11917,7 +11947,7 @@ async function xm(t, n, r = null, i = null) {
if (t && typeof t == "object") {
let r = e - Number(t.at || 0);
if (r >= 0 && r < 6e5) {
- pm(n, R("status.scanInProgress", "Scan already running..."), R("status.scanInProgressHint", "Please wait for the current scan to finish"));
+ bm(n, R("status.scanInProgress", "Scan already running..."), R("status.scanInProgressHint", "Please wait for the current scan to finish"));
return;
}
}
@@ -11945,7 +11975,7 @@ async function xm(t, n, r = null, i = null) {
if (!l) {
let e = await re(at.CONFIG);
if (!e.ok) {
- t.style.background = "var(--mjr-status-error, #f44336)", mm(a, "error"), n.textContent = R("status.errorGetConfig"), c();
+ t.style.background = "var(--mjr-status-error, #f44336)", xm(a, "error"), n.textContent = R("status.errorGetConfig"), c();
return;
}
l = { output_directory: e.data.output_directory };
@@ -11956,7 +11986,7 @@ async function xm(t, n, r = null, i = null) {
let e = Array.isArray(l?.custom_roots) ? l.custom_roots : [], t = s ? e.find((e) => e?.id === s) : null;
d = t?.path ? ` (${t.path})` : "";
} else o === "output" && (d = l?.output_directory ? ` (${l.output_directory})` : "");
- t.style.background = "var(--mjr-status-info, #64B5F6)", mm(a, "info"), pm(n, R("status.scanningScope", `Scanning ${u}${d}...`, {
+ t.style.background = "var(--mjr-status-info, #64B5F6)", xm(a, "info"), bm(n, R("status.scanningScope", `Scanning ${u}${d}...`, {
scope: u,
detail: d
}), R("status.scanningHint", "This may take a while"));
@@ -11964,12 +11994,12 @@ async function xm(t, n, r = null, i = null) {
scope: o,
recursive: !0,
incremental: !0,
- fast: !!(Hn()?.scan?.fastMode ?? !0),
+ fast: !!(Vn()?.scan?.fastMode ?? !0),
background_metadata: !0
};
if (o === "custom") {
if (!s) {
- t.style.background = "var(--mjr-status-error, #f44336)", mm(a, "error"), n.textContent = R("status.selectCustomFolder"), c();
+ t.style.background = "var(--mjr-status-error, #f44336)", xm(a, "error"), n.textContent = R("status.selectCustomFolder"), c();
return;
}
f.custom_root_id = s;
@@ -11982,73 +12012,73 @@ async function xm(t, n, r = null, i = null) {
}
if (p?.ok) {
let e = p.data;
- t.style.background = "var(--mjr-status-success, #4CAF50)", mm(a, "success"), pm(n, R("toast.scanComplete"), R("status.scanStats", `Added: ${e.added || 0} - Updated: ${e.updated || 0} - Skipped: ${e.skipped || 0}`, {
+ t.style.background = "var(--mjr-status-success, #4CAF50)", xm(a, "success"), bm(n, R("toast.scanComplete"), R("status.scanStats", `Added: ${e.added || 0} - Updated: ${e.updated || 0} - Skipped: ${e.skipped || 0}`, {
added: e.added || 0,
updated: e.updated || 0,
skipped: e.skipped || 0
- })), vm("scan-complete", { stats: {
+ })), Tm("scan-complete", { stats: {
added: e.added || 0,
updated: e.updated || 0,
skipped: e.skipped || 0
} }), setTimeout(() => {
- km(t, n, r);
+ Im(t, n, r);
}, 2e3);
- } else t.style.background = "var(--mjr-status-error, #f44336)", mm(a, "error"), um(n, [R("toast.scanFailed") + `: ${p?.error || "Unknown error"}`]), setTimeout(() => {
- km(t, n, r);
+ } else t.style.background = "var(--mjr-status-error, #f44336)", xm(a, "error"), _m(n, [R("toast.scanFailed") + `: ${p?.error || "Unknown error"}`]), setTimeout(() => {
+ Im(t, n, r);
}, 3e3);
}
-function Sm(e, t, n) {
+function km(e, t, n) {
let r = document.createElement("span");
return r.style.cssText = "\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 6px;\n border-radius: 999px;\n background: rgba(255, 255, 255, 0.05);\n border: 1px solid rgba(255, 255, 255, 0.1);\n ", r.textContent = `${t ? "OK" : "ERR"} ${e}`, r.title = t ? R("status.toolAvailable", `${e} available`, { tool: e }) : n || R("status.toolUnavailable", `${e} unavailable`, { tool: e }), r.style.opacity = t ? "1" : "0.75", r;
}
-function Cm(e, t = {}, n = {}) {
+function Am(e, t = {}, n = {}) {
if (!e) return;
if (e.replaceChildren(), !t || Object.keys(t).length === 0) {
e.textContent = R("status.discoveringTools");
return;
}
let r = document.createElement("div");
- r.style.display = "flex", r.style.flexWrap = "wrap", r.style.gap = "10px", r.style.alignItems = "flex-start", tm.forEach(({ key: e, labelKey: i, hintKey: a }) => {
+ r.style.display = "flex", r.style.flexWrap = "wrap", r.style.gap = "10px", r.style.alignItems = "flex-start", cm.forEach(({ key: e, labelKey: i, hintKey: a }) => {
let o = !!t[e], s = n[e], c = R(i, e), l = R(a, "");
- r.appendChild(Tm({
+ r.appendChild(Mm({
label: c,
hint: l
}, o, s));
}), e.appendChild(r);
}
-function wm(e, t = null, n = {}) {
+function jm(e, t = null, n = {}) {
if (!e) return;
let r = e.parentElement;
if (!r) return;
let i = r.querySelector("#mjr-tools-status");
if (!i) return;
let a = n && Object.keys(n).length > 0;
- i.textContent = !t && !a ? R("status.toolStatusChecking", "Tool status: checking...") : tm.map(({ key: e, labelKey: r }) => {
+ i.textContent = !t && !a ? R("status.toolStatusChecking", "Tool status: checking...") : cm.map(({ key: e, labelKey: r }) => {
let i = R(r, e), a = t && e in t ? t[e] : void 0, o = e in n ? n[e] : void 0, s = a === void 0 ? o : a, c = s == null ? R("status.unknown", "unknown") : s ? R("status.available", "available") : R("status.missing", "missing"), l = t?.versions?.[e];
return l ? `${i}: ${c} - ${l}` : `${i}: ${c}`;
}).join(" | ");
}
-function Tm({ label: e, hint: t }, n, r) {
+function Mm({ label: e, hint: t }, n, r) {
let i = document.createElement("div");
i.style.cssText = "\n display: flex;\n flex-direction: column;\n gap: 3px;\n padding: 6px 8px;\n border-radius: 8px;\n background: rgba(255, 255, 255, 0.03);\n border: 1px solid rgba(255, 255, 255, 0.08);\n min-width: 170px;\n ";
- let a = Sm(e, n, t);
+ let a = km(e, n, t);
a.style.fontWeight = "500", i.appendChild(a);
let o = document.createElement("span");
return o.style.fontSize = "10px", o.style.opacity = "0.7", o.style.wordBreak = "break-all", o.textContent = R("status.path", "Path") + `: ${r || R("status.pathAuto", "auto / not configured")}`, i.appendChild(o), i;
}
-function Em(e, t) {
+function Nm(e, t) {
let n = e.querySelector("#mjr-status-body"), r = e.querySelector("#mjr-status-title-indicator");
n && r && (t ? (n.style.display = "none", r.textContent = ">") : (n.style.display = "", r.textContent = "v"));
}
-function Dm(e, t) {
+function Pm(e, t) {
let n = !!e?.database?.available, r = t?.diagnostics || {}, i = !!r?.malformed, a = !!r?.locked;
return !n || i ? R("status.dbHealthError", "DB health: error") : a ? R("status.dbHealthLocked", "DB health: locked") : R("status.dbHealthOk", "DB health: ok");
}
-function Om(e, t) {
+function Fm(e, t) {
let n = Number(e?.total_assets || 0), r = e?.last_index_end, i = e?.last_scan_end, a = t === "all" ? R("scope.all", "Inputs + Outputs") : t === "input" ? R("scope.input", "Inputs") : t === "custom" ? R("scope.custom", "Custom") : t === "workflow" ? R("scope.workflow", "Workflow") : R("scope.output", "Outputs");
return !Number.isFinite(n) || n <= 0 ? `${R("status.indexHealthEmpty", "Index health: empty")} (${a})` : !r && !i ? `${R("status.indexHealthPartial", "Index health: partial")} (${a})` : `${R("status.indexHealthOk", "Index health: ok")} (${a})`;
}
-async function km(t, n, r = null, i = null, a = null, o = {}) {
+async function Im(t, n, r = null, i = null, a = null, o = {}) {
let s = n?.closest?.("#mjr-status-body")?.parentElement || n?.closest?.("div"), c = o?.signal || null, l = !!o?.force;
try {
if (!t?.isConnected || !n?.isConnected) return null;
@@ -12056,7 +12086,7 @@ async function km(t, n, r = null, i = null, a = null, o = {}) {
console.debug?.(e);
}
try {
- if (!l && nm) return null;
+ if (!l && lm) return null;
} catch (e) {
console.debug?.(e);
}
@@ -12090,10 +12120,10 @@ async function km(t, n, r = null, i = null, a = null, o = {}) {
if (a && typeof a == "object" && (a.lastCode = _?.code || null, a.lastStatus = typeof _?.status == "number" ? _.status : null), _.ok) {
let e = _.data;
a && typeof a == "object" && (a._scanAuxBackoffUntil = e?.scan_active ? Date.now() + 3e4 : 0);
- let i = e.total_assets || 0, o = e.with_workflows - 0, l = e.with_generation_data - 0, d = Math.max(0, Number(o || 0) || 0), m = e.last_scan_end, h = m ? new Date(m).toLocaleString() : "N/A", g = e.tool_availability || {}, x = e.tool_paths || {}, S = R("status.dbSize", "Database size: {size}", { size: lm(e.db_size_bytes || 0) }), C = v?.ok && v?.data && v.data.vector || {}, w = C?.enabled !== !1, T = !!C?.loaded, E = !!C?.degraded, D = String(C?.last_error || "").trim(), O = w ? E ? `AI vector: degraded${D ? ` (${D})` : ""}` : T ? "AI vector: loaded" : "AI vector: initializing" : "AI vector: disabled", k = Dm(v?.data || null, y?.data || null), A = Om(e, p ? "all" : u), j = !!(v?.ok && v?.data?.database?.available), M = y?.ok && y?.data?.diagnostics || {}, N = !!M?.malformed, P = !!M?.locked, ee = !!M?.maintenance_active;
- cm(ee);
- let te = Math.max(0, Number(e?.enrichment_queue_length || 0) || 0), F = It().active || te > 0;
- St(F, te);
+ let i = e.total_assets || 0, o = e.with_workflows - 0, l = e.with_generation_data - 0, d = Math.max(0, Number(o || 0) || 0), m = e.last_scan_end, h = m ? new Date(m).toLocaleString() : "N/A", g = e.tool_availability || {}, x = e.tool_paths || {}, S = R("status.dbSize", "Database size: {size}", { size: gm(e.db_size_bytes || 0) }), C = v?.ok && v?.data && v.data.vector || {}, w = C?.enabled !== !1, T = !!C?.loaded, E = !!C?.degraded, D = String(C?.last_error || "").trim(), O = w ? E ? `AI vector: degraded${D ? ` (${D})` : ""}` : T ? "AI vector: loaded" : "AI vector: initializing" : "AI vector: disabled", k = Pm(v?.data || null, y?.data || null), A = Fm(e, p ? "all" : u), j = !!(v?.ok && v?.data?.database?.available), M = y?.ok && y?.data?.diagnostics || {}, N = !!M?.malformed, P = !!M?.locked, ee = !!M?.maintenance_active;
+ hm(ee);
+ let te = Math.max(0, Number(e?.enrichment_queue_length || 0) || 0), F = Pt().active || te > 0;
+ It(F, te);
let I = Number(i) > 0, ne = !!(e?.last_index_end || e?.last_scan_end), re = I && ne, ie = "success";
ee || F ? ie = "info" : !j || N ? ie = "error" : (P || !re || E) && (ie = "warning");
let ae = u === "workflow", oe = p && ie !== "error" ? "browser" : ae && ie !== "error" ? "workflow" : ie, se = e.watcher;
@@ -12109,15 +12139,15 @@ async function km(t, n, r = null, i = null, a = null, o = {}) {
} catch (e) {
console.debug?.(e);
}
- let L = ae ? R("status.watcher.disabledScoped", "Watcher: disabled ({scope})", { scope: R("scope.workflow", "Workflow") }) : p ? R("status.watcher.disabledScoped", "Watcher: disabled ({scope})", { scope: R("scope.customBrowser", "Browser") }) : gm(se, u), ce = F ? R("status.enrichmentQueue", "Metadata enrichment queue: {count}", { count: te }) : R("status.enrichmentIdle", "Metadata enrichment: idle");
- Cm(r, g, x), wm(r, b, g);
+ let L = ae ? R("status.watcher.disabledScoped", "Watcher: disabled ({scope})", { scope: R("scope.workflow", "Workflow") }) : p ? R("status.watcher.disabledScoped", "Watcher: disabled ({scope})", { scope: R("scope.customBrowser", "Browser") }) : Cm(se, u), ce = F ? R("status.enrichmentQueue", "Metadata enrichment queue: {count}", { count: te }) : R("status.enrichmentIdle", "Metadata enrichment: idle");
+ Am(r, g, x), jm(r, b, g);
let le = u === "all" ? R("scope.allFull", "All (Inputs + Outputs)") : u === "input" ? R("scope.input", "Inputs") : u === "custom" ? R("scope.customBrowser", "Browser") : u === "workflow" ? R("scope.workflow", "Workflow") : R("scope.output", "Outputs");
- return ie === "error" ? (t.style.background = "var(--mjr-status-error, #f44336)", mm(s, "error"), pm(n, R("status.dbCorrupted", "Database appears corrupted or unavailable."), [
+ return ie === "error" ? (t.style.background = "var(--mjr-status-error, #f44336)", xm(s, "error"), bm(n, R("status.dbCorrupted", "Database appears corrupted or unavailable."), [
k,
A,
S,
L
- ].filter(Boolean).join(" | ")), e) : p ? (t.style.background = "var(--mjr-status-browser, #26A69A)", mm(s, "browser"), pm(n, R("status.ready", "Ready"), [R("status.browserMetricsHidden", "Browser mode: global DB/index metrics hidden"), L].filter(Boolean).join(" | ")), e) : ae ? (t.style.background = "#d481c3", mm(s, oe), um(n, [
+ ].filter(Boolean).join(" | ")), e) : p ? (t.style.background = "var(--mjr-status-browser, #26A69A)", xm(s, "browser"), bm(n, R("status.ready", "Ready"), [R("status.browserMetricsHidden", "Browser mode: global DB/index metrics hidden"), L].filter(Boolean).join(" | ")), e) : ae ? (t.style.background = "#d481c3", xm(s, oe), _m(n, [
R("status.workflowsIndexed", `${d.toLocaleString()} workflows indexed (${le})`, {
count: d.toLocaleString(),
scope: le
@@ -12129,19 +12159,19 @@ async function km(t, n, r = null, i = null, a = null, o = {}) {
A,
S,
L
- ], R("status.lastScan", `Last scan: ${h}`, { date: h })), e) : (i === 0 ? (t.style.background = oe === "browser" ? "var(--mjr-status-browser, #26A69A)" : ie === "info" ? "var(--mjr-status-info, #64B5F6)" : ie === "warning" ? "var(--mjr-status-warning, #FFA726)" : "var(--mjr-status-success, #4CAF50)", mm(s, oe), pm(n, R("status.noAssets", `No assets indexed yet (${le})`, { scope: le }), [
+ ], R("status.lastScan", `Last scan: ${h}`, { date: h })), e) : (i === 0 ? (t.style.background = oe === "browser" ? "var(--mjr-status-browser, #26A69A)" : ie === "info" ? "var(--mjr-status-info, #64B5F6)" : ie === "warning" ? "var(--mjr-status-warning, #FFA726)" : "var(--mjr-status-success, #4CAF50)", xm(s, oe), bm(n, R("status.noAssets", `No assets indexed yet (${le})`, { scope: le }), [
R("status.clickToScan", "Click the dot to start a scan"),
O,
k,
A,
S,
L
- ].filter(Boolean).join(" | "))) : (t.style.background = oe === "browser" ? "var(--mjr-status-browser, #26A69A)" : ie === "info" ? "var(--mjr-status-info, #64B5F6)" : ie === "warning" ? "var(--mjr-status-warning, #FFA726)" : "var(--mjr-status-success, #4CAF50)", mm(s, oe), um(n, [
+ ].filter(Boolean).join(" | "))) : (t.style.background = oe === "browser" ? "var(--mjr-status-browser, #26A69A)" : ie === "info" ? "var(--mjr-status-info, #64B5F6)" : ie === "warning" ? "var(--mjr-status-warning, #FFA726)" : "var(--mjr-status-success, #4CAF50)", xm(s, oe), _m(n, [
R("status.assetsIndexed", `${i.toLocaleString()} assets indexed (${le})`, {
count: i.toLocaleString(),
scope: le
}),
- Fm(e),
+ Hm(e),
R("status.withWorkflows", `With workflows: ${o} - Generation data: ${l}`, {
workflows: o,
gendata: l
@@ -12152,34 +12182,34 @@ async function km(t, n, r = null, i = null, a = null, o = {}) {
A,
S,
L
- ], R("status.lastScan", `Last scan: ${h}`, { date: h })), dm(n, fm(e, {
+ ], R("status.lastScan", `Last scan: ${h}`, { date: h })), vm(n, ym(e, {
totalAssets: i,
withWorkflows: o,
withGenerationData: l
}))), e);
}
- if (Cm(r, {}, {}), wm(r, b), t.style.background = "var(--mjr-status-error, #f44336)", mm(s, "error"), _?.code === "INVALID_RESPONSE" && _?.status === 404) pm(n, R("status.apiNotFound", "Majoor API endpoints not found (404)"), R("status.apiNotFoundHint", "Backend routes are not loaded. Restart ComfyUI and check the terminal for Majoor import errors."));
+ if (Am(r, {}, {}), jm(r, b), t.style.background = "var(--mjr-status-error, #f44336)", xm(s, "error"), _?.code === "INVALID_RESPONSE" && _?.status === 404) bm(n, R("status.apiNotFound", "Majoor API endpoints not found (404)"), R("status.apiNotFoundHint", "Backend routes are not loaded. Restart ComfyUI and check the terminal for Majoor import errors."));
else {
let t = String(_?.error || "").toLowerCase();
- t.includes("malform") || t.includes("corrupt") || t.includes("disk image") ? (pm(n, R("status.dbCorrupted"), R("status.dbCorruptedHint")), globalThis._mjrCorruptToastShown || (globalThis._mjrCorruptToastShown = !0, e(R("toast.resetFailedCorrupt"), "error", 8e3))) : um(n, [_.error || R("status.errorChecking", "Error checking status")]);
+ t.includes("malform") || t.includes("corrupt") || t.includes("disk image") ? (bm(n, R("status.dbCorrupted"), R("status.dbCorruptedHint")), globalThis._mjrCorruptToastShown || (globalThis._mjrCorruptToastShown = !0, e(R("toast.resetFailedCorrupt"), "error", 8e3))) : _m(n, [_.error || R("status.errorChecking", "Error checking status")]);
}
if (_.code === "SERVICE_UNAVAILABLE") {
- let e = Am(t, n, r, i);
+ let e = Lm(t, n, r, i);
n.appendChild(document.createElement("br")), n.appendChild(e);
}
return null;
}
-function Am(e, t, n = null, r = null) {
+function Lm(e, t, n = null, r = null) {
let i = document.createElement("button");
return i.textContent = R("btn.retryServices"), i.style.cssText = "\n padding: 4px 10px;\n margin-top: 6px;\n font-size: 11px;\n border-radius: 4px;\n border: 1px solid rgba(255,255,255,0.3);\n background: transparent;\n color: white;\n cursor: pointer;\n ", i.onclick = async () => {
i.disabled = !0, i.textContent = R("btn.retrying");
let a = await L(at.RETRY_SERVICES, {});
- i.disabled = !1, i.textContent = R("btn.retryServices"), a.ok ? km(e, t, n, r) : (um(t, [a.error || R("status.retryFailed", "Retry failed")]), t.appendChild(document.createElement("br")), t.appendChild(i));
+ i.disabled = !1, i.textContent = R("btn.retryServices"), a.ok ? Im(e, t, n, r) : (_m(t, [a.error || R("status.retryFailed", "Retry failed")]), t.appendChild(document.createElement("br")), t.appendChild(i));
}, i;
}
-function jm() {
+function Rm() {
try {
- let e = localStorage?.getItem?.(am);
+ let e = localStorage?.getItem?.(fm);
if (!e) return null;
let t = JSON.parse(e);
return t && typeof t == "object" ? t : null;
@@ -12187,15 +12217,15 @@ function jm() {
return console.debug?.(e), null;
}
}
-function Mm(e) {
+function zm(e) {
try {
if (!e || typeof e != "object") return;
- localStorage?.setItem?.(am, JSON.stringify(e));
+ localStorage?.setItem?.(fm, JSON.stringify(e));
} catch (e) {
console.debug?.(e);
}
}
-function Nm(e) {
+function Bm(e) {
let t = [], n = (e, r = 0) => {
if (!(!e || r > 2)) {
if (typeof e == "number" && Number.isFinite(e)) t.push(e);
@@ -12208,23 +12238,23 @@ function Nm(e) {
};
return n(e, 0), t;
}
-function Pm(e) {
+function Vm(e) {
if (!e || typeof e != "object") return !1;
- if (nm) return !0;
+ if (lm) return !0;
try {
- if (It()?.active) return !0;
+ if (Pt()?.active) return !0;
} catch (e) {
console.debug?.(e);
}
- return Nm(e).some((e) => Number(e) > 0);
+ return Bm(e).some((e) => Number(e) > 0);
}
-function Fm(e) {
+function Hm(e) {
let t = [];
e.images && t.push(`Images: ${e.images}`), e.videos && t.push(`Videos: ${e.videos}`), e.audio && t.push(`Audio: ${e.audio}`);
let n = e.model3d || e.by_kind?.model3d || 0;
return n && t.push(`3D: ${n}`), t.length ? t.join(" - ") : "Images: 0 - Videos: 0";
}
-function Im(e) {
+function Um(e) {
if (!e || typeof e != "object") return "";
let t = (e) => e == null ? null : typeof e == "number" ? Number.isFinite(e) ? e : null : typeof e == "boolean" || typeof e == "string" ? e : null;
return JSON.stringify({
@@ -12242,23 +12272,23 @@ function Im(e) {
}
});
}
-function Lm(e, t, n) {
- let r = jm();
+function Wm(e, t, n) {
+ let r = Rm();
if (!r) return !1;
try {
- Cm(n, r.tool_availability || {}, r.tool_paths || {});
+ Am(n, r.tool_availability || {}, r.tool_paths || {});
} catch (e) {
console.debug?.(e);
}
try {
- return e.style.background = "var(--mjr-status-info, #64B5F6)", pm(t, R("status.cached", "Last known status"), R("status.checking", "Checking status...")), !0;
+ return e.style.background = "var(--mjr-status-info, #64B5F6)", bm(t, R("status.cached", "Last known status"), R("status.checking", "Checking status...")), !0;
} catch (e) {
return console.debug?.(e), !1;
}
}
-function Rm(e, t, n) {
- let r = Im(t), i = r && r !== String(n?.lastSignature || ""), a = Pm(t), o = e || om.ACTIVE, s = Number(n?.cooldownStablePolls || 0) || 0;
- return a || i ? (o = om.ACTIVE, s = 0) : o === om.ACTIVE ? (o = om.COOLDOWN, s = 0) : o === om.COOLDOWN ? (s += 1, s >= 3 && (o = om.IDLE, s = 0)) : (o = i ? om.ACTIVE : om.IDLE, s = 0), {
+function Gm(e, t, n) {
+ let r = Um(t), i = r && r !== String(n?.lastSignature || ""), a = Vm(t), o = e || pm.ACTIVE, s = Number(n?.cooldownStablePolls || 0) || 0;
+ return a || i ? (o = pm.ACTIVE, s = 0) : o === pm.ACTIVE ? (o = pm.COOLDOWN, s = 0) : o === pm.COOLDOWN ? (s += 1, s >= 3 && (o = pm.IDLE, s = 0)) : (o = i ? pm.ACTIVE : pm.IDLE, s = 0), {
nextState: o,
signature: r,
hasChange: i,
@@ -12266,14 +12296,14 @@ function Rm(e, t, n) {
cooldownStablePolls: s
};
}
-function zm(e, t, n, r = null, i = null, a = null) {
+function Km(e, t, n, r = null, i = null, a = null) {
let o = "__MJR_STATUS_POLL_DISPOSE__", s = {
lastCode: null,
lastStatus: null,
_pollTick: 0,
_auxCached: !1
}, c = {
- mode: om.ACTIVE,
+ mode: pm.ACTIVE,
cooldownStablePolls: 0,
lastSignature: ""
}, l = typeof AbortController < "u" ? new AbortController() : null, u = async () => {
@@ -12283,14 +12313,14 @@ function zm(e, t, n, r = null, i = null, a = null) {
console.debug?.(e);
}
s._pollTick = Number(s._pollTick || 0) + 1;
- let n = s._pollTick > 1 && s._pollTick % 4 != 0, o = await km(e, t, r, typeof a == "function" ? a() : null, s, {
+ let n = s._pollTick > 1 && s._pollTick % 4 != 0, o = await Im(e, t, r, typeof a == "function" ? a() : null, s, {
signal: l?.signal || null,
lightweight: n,
- force: !!nm || s._pollTick <= 1
+ force: !!lm || s._pollTick <= 1
});
if (o && typeof o == "object") {
- Mm(o);
- let e = Rm(c.mode, o, c);
+ zm(o);
+ let e = Gm(c.mode, o, c);
c.mode = e.nextState, c.lastSignature = e.signature, c.cooldownStablePolls = e.cooldownStablePolls;
}
if (o && typeof i == "function") try {
@@ -12300,7 +12330,7 @@ function zm(e, t, n, r = null, i = null, a = null) {
}
return o;
};
- Lm(e, t, r), u();
+ Wm(e, t, r), u();
try {
n._mjrStatusPollDispose?.();
} catch (e) {
@@ -12321,7 +12351,7 @@ function zm(e, t, n, r = null, i = null, a = null) {
}
return 1;
}, h = () => {
- let e = sm[c.mode] || Math.max(250, Number(B.STATUS_POLL_INTERVAL) || 2e3), t = p ? Math.max(3e4, e) : f > 0 ? Math.min(6e4, Math.round(e * Math.min(8, 1 + f))) : e, r = Math.min(12e4, Math.round(t * m()));
+ let e = mm[c.mode] || Math.max(250, Number(B.STATUS_POLL_INTERVAL) || 2e3), t = p ? Math.max(3e4, e) : f > 0 ? Math.min(6e4, Math.round(e * Math.min(8, 1 + f))) : e, r = Math.min(12e4, Math.round(t * m()));
d = setTimeout(async () => {
try {
if (l?.signal?.aborted) return;
@@ -12329,7 +12359,7 @@ function zm(e, t, n, r = null, i = null, a = null) {
console.debug?.(e);
}
let e = await u();
- if (p = s.lastCode === "INVALID_RESPONSE" && s.lastStatus === 404, e ? f = 0 : p ? f = Math.min(999, f + 1) : (f = Math.min(999, f + 1), c.mode = om.ACTIVE, c.cooldownStablePolls = 0), p && f >= 3) try {
+ if (p = s.lastCode === "INVALID_RESPONSE" && s.lastStatus === 404, e ? f = 0 : p ? f = Math.min(999, f + 1) : (f = Math.min(999, f + 1), c.mode = pm.ACTIVE, c.cooldownStablePolls = 0), p && f >= 3) try {
n._mjrStatusPollDispose?.();
} catch (e) {
console.debug?.(e);
@@ -12352,54 +12382,54 @@ function zm(e, t, n, r = null, i = null, a = null) {
}
h();
for (let i of n.querySelectorAll("#mjr-status-dot, #mjr-status-scan")) i.onclick = (n) => {
- n.stopPropagation(), xm(e, t, r, typeof a == "function" ? a() : null);
+ n.stopPropagation(), Om(e, t, r, typeof a == "function" ? a() : null);
}, i.title = R("btn.scan", "Scan");
}
// ui/vue/composables/useActiveAsset.ts
-var Bm = yr(null), Vm = yr(null);
-function Hm() {
+var qm = vr(null), Jm = vr(null);
+function Ym() {
return {
- activeAsset: Bm,
- onUpdateCallback: Vm
+ activeAsset: qm,
+ onUpdateCallback: Jm
};
}
-function Um(e, t) {
- Vm.value = typeof t == "function" ? t : null, Bm.value = e ?? null;
+function Xm(e, t) {
+ Jm.value = typeof t == "function" ? t : null, qm.value = e ?? null;
}
-function Wm() {
- Bm.value = null, Vm.value = null;
+function Zm() {
+ qm.value = null, Jm.value = null;
}
-function Gm(e, t) {
- if (Bm.value && e) {
- Bm.value = {
- ...Bm.value,
+function Qm(e, t) {
+ if (qm.value && e) {
+ qm.value = {
+ ...qm.value,
...e
};
try {
- let e = t ?? Vm.value;
- typeof e == "function" && e(Bm.value);
+ let e = t ?? Jm.value;
+ typeof e == "function" && e(qm.value);
} catch {}
}
}
// ui/components/sidebar/SidebarView.ts
-var Km = 360, qm = 240, Jm = 640;
-function Ym() {
+var $m = 360, eh = 240, th = 640;
+function nh() {
try {
- let e = Hn(), t = Number(e?.sidebar?.widthPx);
- return Number.isFinite(t) ? Math.max(qm, Math.min(Jm, Math.round(t))) : Km;
+ let e = Vn(), t = Number(e?.sidebar?.widthPx);
+ return Number.isFinite(t) ? Math.max(eh, Math.min(th, Math.round(t))) : $m;
} catch {
- return Km;
+ return $m;
}
}
-function Xm(e, t) {
+function rh(e, t) {
if (!e) return;
let n = String(e?.dataset?.position || "right").toLowerCase() === "left", r = "var(--mjr-border, rgba(255,255,255,0.12))";
if (t) {
- let t = `${Ym()}px`;
+ let t = `${nh()}px`;
e.style.flex = `0 0 ${t}`, e.style.width = t, e.style.maxWidth = t, e.style.minWidth = "0", e.style.overflow = "hidden", e.style.borderLeft = n ? "none" : `1px solid ${r}`, e.style.borderRight = n ? `1px solid ${r}` : "none";
} else e.style.flex = "0 0 0px", e.style.width = "0", e.style.maxWidth = "0", e.style.minWidth = "0", e.style.overflow = "hidden", e.style.borderLeft = "none", e.style.borderRight = "none";
}
-function Zm(e) {
+function ih(e) {
if (e == null) return !1;
let t = e;
if (typeof e == "string") {
@@ -12418,10 +12448,10 @@ function Zm(e) {
}
return !1;
}
-function Qm(e) {
- return e ? !!(e.geninfo || e.prompt || Zm(e.metadata_raw)) : !1;
+function ah(e) {
+ return e ? !!(e.geninfo || e.prompt || ih(e.metadata_raw)) : !1;
}
-async function $m(e, t, n) {
+async function oh(e, t, n) {
if (!e || !t) return;
let r = String(t?.kind || "").toLowerCase() === "folder";
try {
@@ -12430,7 +12460,7 @@ async function $m(e, t, n) {
console.debug?.(e);
}
let i = e._requestSeq = (e._requestSeq || 0) + 1;
- e._currentFetchAbortController?.abort?.(), e._currentFetchAbortController = null, e.classList.add("is-open"), Xm(e, !0), e._currentAsset = t, e._currentFullAsset = t, e._ratingTagsSection = null, Um(t, n);
+ e._currentFetchAbortController?.abort?.(), e._currentFetchAbortController = null, e.classList.add("is-open"), rh(e, !0), e._currentAsset = t, e._currentFullAsset = t, e._ratingTagsSection = null, Xm(t, n);
let a = () => {
e._currentFetchAbortController?.abort?.();
let t = typeof AbortController < "u" ? new AbortController() : null;
@@ -12439,7 +12469,7 @@ async function $m(e, t, n) {
e._requestSeq === i && e._currentAsset === t && (e._currentFullAsset = {
...e._currentFullAsset ?? t,
...r
- }, Gm(r, n));
+ }, Qm(r, n));
};
(async () => {
if (e._requestSeq !== i || e._currentAsset !== t) return;
@@ -12461,7 +12491,7 @@ async function $m(e, t, n) {
}
let c = () => e._currentFullAsset ?? t;
try {
- if (t.id && !Qm(c())) {
+ if (t.id && !ah(c())) {
let e = await I(t.id, n);
if (s?.aborted) return;
e?.ok && e.data && o(e.data);
@@ -12470,7 +12500,7 @@ async function $m(e, t, n) {
s?.aborted || console.warn("Failed to load full asset metadata:", e);
}
if (!s?.aborted) {
- if (!Qm(c())) {
+ if (!ah(c())) {
let e = String(c()?.filename || "").trim(), t = String(c()?.type || "output").trim().toLowerCase(), r = String(c()?.subfolder || "").trim(), i = String(c()?.root_id || c()?.rootId || "").trim();
if (e) try {
let a = await De({
@@ -12499,9 +12529,9 @@ async function $m(e, t, n) {
}
})();
}
-function eh(e) {
+function sh(e) {
if (e) {
- e._requestSeq = (e._requestSeq || 0) + 1, e.classList.remove("is-open"), Xm(e, !1), e._currentAsset = null, e._currentFullAsset = null, e._currentFetchAbortController?.abort?.(), e._currentFetchAbortController = null, Wm();
+ e._requestSeq = (e._requestSeq || 0) + 1, e.classList.remove("is-open"), rh(e, !1), e._currentAsset = null, e._currentFullAsset = null, e._currentFetchAbortController?.abort?.(), e._currentFetchAbortController = null, Zm();
try {
e.dispatchEvent?.(new CustomEvent("mjr:sidebar-closed", { bubbles: !0 }));
} catch (e) {
@@ -12510,14 +12540,14 @@ function eh(e) {
}
}
// ui/stores/usePanelStore.ts
-var th = "mjr_panel_state", nh = /* @__PURE__ */ new Set([
+var ch = "mjr_panel_state", lh = /* @__PURE__ */ new Set([
"output",
"input",
"all",
"custom",
"workflow"
]);
-function rh(e, t = !1) {
+function uh(e, t = !1) {
if (typeof e == "boolean") return e;
if (typeof e == "string") {
let t = e.trim().toLowerCase();
@@ -12536,71 +12566,71 @@ function rh(e, t = !1) {
}
return !!t;
}
-function ih(e, t = 0) {
+function dh(e, t = 0) {
let n = Number(e);
return Number.isFinite(n) ? n : t;
}
-function ah(e, t = "") {
+function fh(e, t = "") {
return e == null ? t : String(e);
}
-function oh(e, t = 0, n = Infinity) {
- return Math.max(t, Math.min(n, Math.floor(ih(e, t))));
+function ph(e, t = 0, n = Infinity) {
+ return Math.max(t, Math.min(n, Math.floor(dh(e, t))));
}
-function sh(e) {
- let t = ah(e || "output").toLowerCase(), n = t === "outputs" ? "output" : t === "inputs" ? "input" : t;
- return nh.has(n) ? n : "output";
+function mh(e) {
+ let t = fh(e || "output").toLowerCase(), n = t === "outputs" ? "output" : t === "inputs" ? "input" : t;
+ return lh.has(n) ? n : "output";
}
-function ch(e) {
+function hh(e) {
if (!e || typeof e != "object") return {};
let t = e;
return {
- scope: sh(t.scope),
- customRootId: ah(t.customRootId),
- customRootLabel: ah(t.customRootLabel),
- currentFolderRelativePath: ah(t.currentFolderRelativePath || t.subfolder),
- collectionId: ah(t.collectionId),
- collectionName: ah(t.collectionName),
- kindFilter: ah(t.kindFilter),
- dateRangeFilter: ah(t.dateRangeFilter),
- dateExactFilter: ah(t.dateExactFilter),
- workflowOnly: rh(t.workflowOnly, !1),
- minRating: oh(t.minRating, 0, 5),
- minSizeMB: Math.max(0, ih(t.minSizeMB, 0)),
- maxSizeMB: Math.max(0, ih(t.maxSizeMB, 0)),
+ scope: mh(t.scope),
+ customRootId: fh(t.customRootId),
+ customRootLabel: fh(t.customRootLabel),
+ currentFolderRelativePath: fh(t.currentFolderRelativePath || t.subfolder),
+ collectionId: fh(t.collectionId),
+ collectionName: fh(t.collectionName),
+ kindFilter: fh(t.kindFilter),
+ dateRangeFilter: fh(t.dateRangeFilter),
+ dateExactFilter: fh(t.dateExactFilter),
+ workflowOnly: uh(t.workflowOnly, !1),
+ minRating: ph(t.minRating, 0, 5),
+ minSizeMB: Math.max(0, dh(t.minSizeMB, 0)),
+ maxSizeMB: Math.max(0, dh(t.maxSizeMB, 0)),
resolutionCompare: t.resolutionCompare === "lte" ? "lte" : "gte",
- minWidth: oh(t.minWidth),
- minHeight: oh(t.minHeight),
- maxWidth: oh(t.maxWidth),
- maxHeight: oh(t.maxHeight),
- workflowType: ah(t.workflowType),
- workflowId: ah(t.workflowId || t.workflow_id),
- workflowModelFilter: ah(t.workflowModelFilter || t.workflowModel || t.workflow_model),
- workflowRunsOnFilter: ah(t.workflowRunsOnFilter || t.workflowRunsOn || t.runs_on),
- sort: ah(t.sort || "mtime_desc"),
- searchQuery: ah(t.searchQuery),
+ minWidth: ph(t.minWidth),
+ minHeight: ph(t.minHeight),
+ maxWidth: ph(t.maxWidth),
+ maxHeight: ph(t.maxHeight),
+ workflowType: fh(t.workflowType),
+ workflowId: fh(t.workflowId || t.workflow_id),
+ workflowModelFilter: fh(t.workflowModelFilter || t.workflowModel || t.workflow_model),
+ workflowRunsOnFilter: fh(t.workflowRunsOnFilter || t.workflowRunsOn || t.runs_on),
+ sort: fh(t.sort || "mtime_desc"),
+ searchQuery: fh(t.searchQuery),
metadataSearchMode: String(t.metadataSearchMode || "AND").toUpperCase() === "OR" ? "OR" : "AND",
- scrollTop: oh(t.scrollTop),
- activeAssetId: ah(t.activeAssetId),
- selectedAssetIds: Array.isArray(t.selectedAssetIds) ? t.selectedAssetIds.map((e) => ah(e).trim()).filter(Boolean).slice(0, 5e3) : [],
- sidebarOpen: rh(t.sidebarOpen, !1)
+ scrollTop: ph(t.scrollTop),
+ activeAssetId: fh(t.activeAssetId),
+ selectedAssetIds: Array.isArray(t.selectedAssetIds) ? t.selectedAssetIds.map((e) => fh(e).trim()).filter(Boolean).slice(0, 5e3) : [],
+ sidebarOpen: uh(t.sidebarOpen, !1)
};
}
-function lh() {
+function gh() {
try {
- let e = localStorage.getItem(th);
- if (e) return ch(JSON.parse(e));
+ let e = localStorage.getItem(ch);
+ if (e) return hh(JSON.parse(e));
} catch {}
return {};
}
-function uh(e) {
+function _h(e) {
try {
let t = { ...e };
- delete t.lastGridCount, delete t.lastGridTotal, delete t.viewScope, delete t.similarResults, delete t.similarTitle, delete t.similarSourceAssetId, localStorage.setItem(th, JSON.stringify(t));
+ delete t.lastGridCount, delete t.lastGridTotal, delete t.viewScope, delete t.similarResults, delete t.similarTitle, delete t.similarSourceAssetId, localStorage.setItem(ch, JSON.stringify(t));
} catch {}
}
-var dh = Nr("mjr-panel", () => {
- let e = lh(), t = Q(e.scope || "output"), n = Q(e.customRootId || ""), r = Q(e.customRootLabel || ""), i = Q(e.currentFolderRelativePath || ""), a = Q(e.collectionId || ""), o = Q(e.collectionName || ""), s = Q(e.kindFilter || ""), c = Q(e.dateRangeFilter || ""), l = Q(e.dateExactFilter || ""), u = Q(e.workflowOnly || !1), d = Q(e.minRating || 0), f = Q(e.minSizeMB || 0), p = Q(e.maxSizeMB || 0), m = Q(e.resolutionCompare || "gte"), h = Q(e.minWidth || 0), g = Q(e.minHeight || 0), _ = Q(e.maxWidth || 0), v = Q(e.maxHeight || 0), y = Q(e.workflowType || ""), b = Q(e.workflowId || ""), x = Q(e.workflowModelFilter || ""), S = Q(e.workflowRunsOnFilter || ""), C = Q(e.sort || "mtime_desc"), w = Q(e.searchQuery || ""), T = Q(e.metadataSearchMode || "AND"), E = Q(e.scrollTop || 0), D = Q(e.activeAssetId || ""), O = Q(e.selectedAssetIds || []), k = Q(e.sidebarOpen || !1), A = Q(0), j = Q(0), M = Q(""), N = Q([]), P = Q(""), ee = Q(""), te = null;
- lr([
+var vh = Nr("mjr-panel", () => {
+ let e = gh(), t = Q(e.scope || "output"), n = Q(e.customRootId || ""), r = Q(e.customRootLabel || ""), i = Q(e.currentFolderRelativePath || ""), a = Q(e.collectionId || ""), o = Q(e.collectionName || ""), s = Q(e.kindFilter || ""), c = Q(e.dateRangeFilter || ""), l = Q(e.dateExactFilter || ""), u = Q(e.workflowOnly || !1), d = Q(e.minRating || 0), f = Q(e.minSizeMB || 0), p = Q(e.maxSizeMB || 0), m = Q(e.resolutionCompare || "gte"), h = Q(e.minWidth || 0), g = Q(e.minHeight || 0), _ = Q(e.maxWidth || 0), v = Q(e.maxHeight || 0), y = Q(e.workflowType || ""), b = Q(e.workflowId || ""), x = Q(e.workflowModelFilter || ""), S = Q(e.workflowRunsOnFilter || ""), C = Q(e.sort || "mtime_desc"), w = Q(e.searchQuery || ""), T = Q(e.metadataSearchMode || "AND"), E = Q(e.scrollTop || 0), D = Q(e.activeAssetId || ""), O = Q(e.selectedAssetIds || []), k = Q(e.sidebarOpen || !1), A = Q(0), j = Q(0), M = Q(""), N = Q([]), P = Q(""), ee = Q(""), te = null;
+ cr([
t,
n,
r,
@@ -12632,7 +12662,7 @@ var dh = Nr("mjr-panel", () => {
k
], () => {
te && clearTimeout(te), te = setTimeout(() => {
- te = null, uh({
+ te = null, _h({
scope: t.value,
customRootId: n.value,
customRootLabel: r.value,
@@ -12666,8 +12696,8 @@ var dh = Nr("mjr-panel", () => {
}, 750);
}, { deep: !0 });
let F = (e) => {
- if (e.key === th && e.newValue) try {
- let n = ch(JSON.parse(e.newValue));
+ if (e.key === ch && e.newValue) try {
+ let n = hh(JSON.parse(e.newValue));
n.scope !== void 0 && (t.value = n.scope), n.customRootLabel !== void 0 && (r.value = n.customRootLabel), n.searchQuery !== void 0 && (w.value = n.searchQuery), n.metadataSearchMode !== void 0 && (T.value = n.metadataSearchMode), n.sort !== void 0 && (C.value = n.sort), n.sidebarOpen !== void 0 && (k.value = n.sidebarOpen);
} catch {}
};
@@ -12747,16 +12777,16 @@ var dh = Nr("mjr-panel", () => {
};
});
// ui/stores/getOptionalPanelStore.ts
-function fh() {
+function yh() {
try {
- return Pr() ? dh() : null;
+ return Pr() ? vh() : null;
} catch {
return null;
}
}
// ui/stores/panelStateBridge.ts
-function ph(e, t = []) {
- let n = fh();
+function bh(e, t = []) {
+ let n = yh();
return {
panelStore: n,
hydrateStoreFromLegacy: () => {},
@@ -12783,12 +12813,12 @@ function ph(e, t = []) {
};
}
// ui/features/panel/messages/messageCenter.ts
-var mh = "mjr_panel_messages_v1", hh = "mjr_panel_messages_last_read_v1", gh = "mjr_panel_messages_dismissed_builtin_ids_v1", _h = 120, vh = "/mjr/am/user-guide", yh = /* @__PURE__ */ new Set([
+var xh = "mjr_panel_messages_v1", Sh = "mjr_panel_messages_last_read_v1", Ch = "mjr_panel_messages_dismissed_builtin_ids_v1", wh = 120, Th = "/mjr/am/user-guide", Eh = /* @__PURE__ */ new Set([
"info",
"success",
"warning",
"error"
-]), bh = "mjr:panel-messages-changed", xh = !1, Sh = [], Ch = Object.freeze([
+]), Dh = "mjr:panel-messages-changed", Oh = !1, kh = [], Ah = Object.freeze([
{
id: "whats-new-2026-07-09-version-2-5-0",
title: "New Version 2.5.0",
@@ -12911,7 +12941,7 @@ var mh = "mjr_panel_messages_v1", hh = "mjr_panel_messages_last_read_v1", gh = "
bodyKey: "msg.whatsNew.body.localUserGuide",
actionLabel: "User Guide",
actionLabelKey: "label.userGuide",
- actionUrl: vh
+ actionUrl: Th
},
{
id: "tip-2026-04-07-output-folder-override",
@@ -13093,27 +13123,27 @@ var mh = "mjr_panel_messages_v1", hh = "mjr_panel_messages_last_read_v1", gh = "
actionLabelKey: "label.settingsGuide",
actionUrl: "docs/SETTINGS_CONFIGURATION.md"
}
-]), wh = new Set(Ch.map((e) => String(e?.id || "").trim()).filter(Boolean));
-function Th(e, t = 0) {
+]), jh = new Set(Ah.map((e) => String(e?.id || "").trim()).filter(Boolean));
+function Mh(e, t = 0) {
let n = Number(e);
return Number.isFinite(n) ? n : t;
}
-function Eh() {
+function Nh() {
return Date.now();
}
-function Dh() {
- return Ne(`msg-${Eh()}-`, 6);
+function Ph() {
+ return Ne(`msg-${Nh()}-`, 6);
}
-function Oh(e) {
+function Fh(e) {
let t = String(e || "").trim().toLowerCase();
- return t === "warn" ? "warning" : t === "danger" ? "error" : yh.has(t) ? t : "info";
+ return t === "warn" ? "warning" : t === "danger" ? "error" : Eh.has(t) ? t : "info";
}
-function kh(e) {
- return wh.has(String(e || "").trim());
+function Ih(e) {
+ return jh.has(String(e || "").trim());
}
-function Ah(e = {}) {
+function Lh(e = {}) {
return {
- id: String(e?.id || "").trim() || Dh(),
+ id: String(e?.id || "").trim() || Ph(),
title: String(e?.title || "").trim() || "Info",
titleKey: String(e?.titleKey || "").trim(),
emoji: String(e?.emoji || "").trim(),
@@ -13121,14 +13151,14 @@ function Ah(e = {}) {
bodyKey: String(e?.bodyKey || "").trim(),
category: String(e?.category || "").trim() || "Info",
categoryKey: String(e?.categoryKey || "").trim(),
- createdAt: Th(e?.createdAt, Eh()),
- level: Oh(e?.level),
+ createdAt: Mh(e?.createdAt, Nh()),
+ level: Fh(e?.level),
actionLabel: String(e?.actionLabel || "").trim(),
actionLabelKey: String(e?.actionLabelKey || "").trim(),
actionUrl: String(e?.actionUrl || "").trim()
};
}
-function jh(e, t) {
+function Rh(e, t) {
try {
let n = localStorage.getItem(e);
return n ? JSON.parse(n) : t;
@@ -13136,87 +13166,87 @@ function jh(e, t) {
return t;
}
}
-function Mh(e, t) {
+function zh(e, t) {
try {
localStorage.setItem(e, JSON.stringify(t));
} catch {}
}
-function Nh() {
+function Bh() {
try {
- return Th(localStorage.getItem(hh), 0);
+ return Mh(localStorage.getItem(Sh), 0);
} catch {
return 0;
}
}
-function Ph(e) {
+function Vh(e) {
try {
- localStorage.setItem(hh, String(Th(e, Eh())));
+ localStorage.setItem(Sh, String(Mh(e, Nh())));
} catch {}
}
-function Fh() {
- let e = jh(gh, []);
- return new Set((Array.isArray(e) ? e : []).map((e) => String(e || "").trim()).filter((e) => kh(e)));
+function Hh() {
+ let e = Rh(Ch, []);
+ return new Set((Array.isArray(e) ? e : []).map((e) => String(e || "").trim()).filter((e) => Ih(e)));
}
-function Ih() {
- Sh.sort((e, t) => Number(t.createdAt || 0) - Number(e.createdAt || 0)), Sh.length > _h && (Sh = Sh.slice(0, _h));
+function Uh() {
+ kh.sort((e, t) => Number(t.createdAt || 0) - Number(e.createdAt || 0)), kh.length > wh && (kh = kh.slice(0, wh));
}
-function Lh() {
- Mh(mh, Sh);
+function Wh() {
+ zh(xh, kh);
}
-function Rh() {
- let e = Fh(), t = !1;
- for (let n of Ch) {
- let r = Ah(n);
+function Gh() {
+ let e = Hh(), t = !1;
+ for (let n of Ah) {
+ let r = Lh(n);
if (e.has(r.id)) continue;
- let i = Sh.findIndex((e) => e.id === r.id);
+ let i = kh.findIndex((e) => e.id === r.id);
if (i < 0) {
- Sh.push(r), t = !0;
+ kh.push(r), t = !0;
continue;
}
- let a = Sh[i], o = {
+ let a = kh[i], o = {
...a,
...r,
- createdAt: Th(a?.createdAt, r.createdAt)
+ createdAt: Mh(a?.createdAt, r.createdAt)
};
- JSON.stringify(a) !== JSON.stringify(o) && (Sh[i] = o, t = !0);
+ JSON.stringify(a) !== JSON.stringify(o) && (kh[i] = o, t = !0);
}
- return t ? (Ih(), Lh(), !0) : !1;
+ return t ? (Uh(), Wh(), !0) : !1;
}
-function zh() {
+function Kh() {
try {
- window.dispatchEvent(new CustomEvent(bh, { detail: {
- total: Sh.length,
- unread: Uh()
+ window.dispatchEvent(new CustomEvent(Dh, { detail: {
+ total: kh.length,
+ unread: Xh()
} }));
} catch (e) {
console.debug?.(e);
}
}
-function Bh() {
- if (xh) return;
- xh = !0;
- let e = jh(mh, []);
- Sh = (Array.isArray(e) ? e : []).map(Ah), Ih();
+function qh() {
+ if (Oh) return;
+ Oh = !0;
+ let e = Rh(xh, []);
+ kh = (Array.isArray(e) ? e : []).map(Lh), Uh();
}
-function Vh() {
- Bh(), Rh() && zh();
+function Jh() {
+ qh(), Gh() && Kh();
}
-function Hh() {
- return Bh(), Sh.map((e) => ({ ...e }));
+function Yh() {
+ return qh(), kh.map((e) => ({ ...e }));
}
-function Uh() {
- Bh();
- let e = Nh();
- return Sh.reduce((t, n) => t + +(Number(n.createdAt || 0) > e), 0);
+function Xh() {
+ qh();
+ let e = Bh();
+ return kh.reduce((t, n) => t + +(Number(n.createdAt || 0) > e), 0);
}
-function Wh() {
- return Bh(), Nh();
+function Zh() {
+ return qh(), Bh();
}
-function Gh({ upTo: e = Eh() } = {}) {
- Bh(), Ph(Th(e, Eh())), zh();
+function Qh({ upTo: e = Nh() } = {}) {
+ qh(), Vh(Mh(e, Nh())), Kh();
}
// ui/features/panel/messages/shortcutGuide.ts
-var Kh = Object.freeze([
+var $h = Object.freeze([
{
id: "panel",
titleKey: "msg.shortcuts.section.panel",
@@ -13425,18 +13455,18 @@ var Kh = Object.freeze([
])
}
]);
-function qh() {
- return Kh.map((e) => ({
+function eg() {
+ return $h.map((e) => ({
...e,
items: Array.isArray(e.items) ? e.items.map((e) => ({ ...e })) : []
}));
}
-function Jh() {
+function tg() {
let e = document.createElement("div");
e.className = "mjr-shortcut-guide";
let t = document.createElement("div");
t.className = "mjr-shortcut-guide-intro", t.textContent = R("msg.shortcuts.intro", "Current keyboard shortcuts grouped by section for quick reference."), e.appendChild(t);
- for (let t of qh()) {
+ for (let t of eg()) {
let n = document.createElement("section");
n.className = "mjr-shortcut-section";
let r = document.createElement("div");
@@ -13456,18 +13486,18 @@ function Jh() {
return e;
}
// ui/features/panel/messages/messagePopoverController.ts
-var Yh = /* @__PURE__ */ new Set([
+var ng = /* @__PURE__ */ new Set([
"info",
"success",
"warning",
"error"
-]), Xh = 2200, Zh = /* @__PURE__ */ new Set([
+]), rg = 2200, ig = /* @__PURE__ */ new Set([
"started",
"queued",
"running",
"pending",
"in_progress"
-]), Qh = /* @__PURE__ */ new Set([
+]), ag = /* @__PURE__ */ new Set([
"succeeded",
"success",
"complete",
@@ -13478,7 +13508,7 @@ var Yh = /* @__PURE__ */ new Set([
"cancelled",
"canceled"
]);
-function $h(e) {
+function og(e) {
let t = Number(e);
if (!Number.isFinite(t) || t <= 0) return "";
try {
@@ -13493,15 +13523,15 @@ function $h(e) {
return "";
}
}
-function eg(e, t, n, r) {
+function sg(e, t, n, r) {
let i = String(e?.[t] || "").trim(), a = String(e?.[n] || r || "").trim() || String(r || "");
return i ? R(i, a) : a;
}
-function tg(e) {
+function cg(e) {
let t = String(e || "").trim().toLowerCase();
- return t === "warn" ? "warning" : t === "danger" ? "error" : Yh.has(t) ? t : "info";
+ return t === "warn" ? "warning" : t === "danger" ? "error" : ng.has(t) ? t : "info";
}
-function ng(e) {
+function lg(e) {
let t = String(e || "").trim();
if (!t) return "";
try {
@@ -13511,13 +13541,13 @@ function ng(e) {
return "";
}
}
-function rg(e) {
+function ug(e) {
let t = String(e?.emoji || "").trim();
if (t) return t;
- let n = tg(e?.level);
+ let n = cg(e?.level);
return n === "success" ? "OK" : n === "warning" ? "WARN" : n === "error" ? "ERR" : "INFO";
}
-function ig(e) {
+function dg(e) {
switch (String(e || "").toLowerCase()) {
case "success": return "OK";
case "warning": return "WARN";
@@ -13525,22 +13555,22 @@ function ig(e) {
default: return "Tip";
}
}
-function ag(e) {
+function fg(e) {
if (e?.persistent) return "persistent";
let t = Number(e?.durationMs);
return !Number.isFinite(t) || t <= 0 ? "" : t < 1e4 ? `${(t / 1e3).toFixed(1)}s` : `${Math.round(t / 1e3)}s`;
}
-function og(e) {
+function pg(e) {
let t = String(e || "").trim().toLowerCase();
return t ? t.replace(/[_-]+/g, " ") : "";
}
-function sg(e) {
+function mg(e) {
let t = e?.progress;
if (!t || typeof t != "object") return "";
let n = String(t.label || "").trim(), r = Number(t.current), i = Number(t.total), a = Number(t.indexed), o = Number(t.skipped), s = Number(t.errors), c = [];
return n && c.push(n), Number.isFinite(r) && Number.isFinite(i) && i > 0 && c.push(`${r}/${i}`), Number.isFinite(a) && c.push(`indexed ${a}`), Number.isFinite(o) && c.push(`skipped ${o}`), Number.isFinite(s) && s > 0 && c.push(`errors ${s}`), c.join(" | ");
}
-function cg(e) {
+function hg(e) {
let t = e?.progress;
if (!t || typeof t != "object") return null;
let n = Number(t.percent);
@@ -13548,14 +13578,14 @@ function cg(e) {
let r = Number(t.current), i = Number(t.total);
return Number.isFinite(r) && Number.isFinite(i) && i > 0 ? Math.max(0, Math.min(100, Math.round(r / i * 100))) : null;
}
-function lg(e) {
+function gg(e) {
return String(e?.trackId || "").trim() || [
String(e?.operation || "").trim(),
String(e?.source || "").trim(),
String(e?.title || "").trim()
].filter(Boolean).join(":");
}
-function ug({ activeTab: e = "messages", title: t = null, messagePopover: n = null, messageTabBtn: r = null, historyTabBtn: i = null, shortcutsTabBtn: a = null, messageList: o = null, historyPanel: s = null, shortcutsPanel: c = null, markReadBtn: l = null } = {}) {
+function _g({ activeTab: e = "messages", title: t = null, messagePopover: n = null, messageTabBtn: r = null, historyTabBtn: i = null, shortcutsTabBtn: a = null, messageList: o = null, historyPanel: s = null, shortcutsPanel: c = null, markReadBtn: l = null } = {}) {
let u = e === "messages", d = e === "history", f = e === "shortcuts", p = u ? R("label.messages", "Messages") : d ? R("label.toastHistory", "History") : R("msg.shortcuts.title", "Shortcut Guide");
try {
r?.classList.toggle("is-active", u), r?.setAttribute("aria-selected", u ? "true" : "false"), r?.setAttribute("tabindex", u ? "0" : "-1"), i?.classList.toggle("is-active", d), i?.setAttribute("aria-selected", d ? "true" : "false"), i?.setAttribute("tabindex", d ? "0" : "-1"), a?.classList.toggle("is-active", f), a?.setAttribute("aria-selected", f ? "true" : "false"), a?.setAttribute("tabindex", f ? "0" : "-1");
@@ -13568,8 +13598,8 @@ function ug({ activeTab: e = "messages", title: t = null, messagePopover: n = nu
console.debug?.(e);
}
}
-function dg({ messageBtn: e = null, messagePopover: t = null, title: n = null, messageList: r = null, historyTabBtn: i = null, historyTabBadge: a = null, historyTabCount: o = null, historyPanel: s = null, shortcutsPanel: c = null, messageTabBtn: l = null, messageTabBadge: u = null, shortcutsTabBtn: d = null, markReadBtn: f = null, popovers: p = null, onBeforeToggle: m = null, signal: h = null } = {}) {
- Vh();
+function vg({ messageBtn: e = null, messagePopover: t = null, title: n = null, messageList: r = null, historyTabBtn: i = null, historyTabBadge: a = null, historyTabCount: o = null, historyPanel: s = null, shortcutsPanel: c = null, messageTabBtn: l = null, messageTabBadge: u = null, shortcutsTabBtn: d = null, markReadBtn: f = null, popovers: p = null, onBeforeToggle: m = null, signal: h = null } = {}) {
+ Jh();
let g = "messages", _ = !1, v = null, y = /* @__PURE__ */ new Set(), b = () => {
if (v) {
try {
@@ -13583,13 +13613,13 @@ function dg({ messageBtn: e = null, messagePopover: t = null, title: n = null, m
if (!_ || g !== "history" || t?.style?.display !== "block") return;
let e = A();
for (let n of e) {
- let e = lg(n);
+ let e = gg(n);
if (!e || !y.has(e)) continue;
let r = String(n?.status || "").trim().toLowerCase();
- if (Qh.has(r)) {
+ if (ag.has(r)) {
b(), v = setTimeout(() => {
v = null, _ && g === "history" && t?.style?.display === "block" && (p?.close?.(t), _ = !1, y.clear(), S(), k());
- }, Xh);
+ }, rg);
return;
}
}
@@ -13607,14 +13637,14 @@ function dg({ messageBtn: e = null, messagePopover: t = null, title: n = null, m
}
}, C = () => {
if (!r) return;
- let e = Hh(), t = Wh();
+ let e = Yh(), t = Zh();
if (r.replaceChildren(), !e.length) {
let e = document.createElement("div");
e.className = "mjr-messages-empty", e.textContent = R("msg.noMessages", "No messages for now."), r.appendChild(e);
} else for (let n of e) {
let e = document.createElement("article");
e.className = "mjr-message-item";
- let i = tg(n?.level);
+ let i = cg(n?.level);
e.classList.add(`mjr-message-item--${i}`);
let a = Number(n?.createdAt || 0);
a > Number(t || 0) && e.classList.add("mjr-message-item--unread");
@@ -13623,16 +13653,16 @@ function dg({ messageBtn: e = null, messagePopover: t = null, title: n = null, m
let s = document.createElement("div");
s.className = "mjr-message-item-title-wrap";
let c = document.createElement("span");
- c.className = "mjr-message-item-emoji", c.textContent = rg(n), c.setAttribute("aria-hidden", "true");
+ c.className = "mjr-message-item-emoji", c.textContent = ug(n), c.setAttribute("aria-hidden", "true");
let l = document.createElement("div");
- l.className = "mjr-message-item-title", l.textContent = eg(n, "titleKey", "title", R("label.info", "Info"));
+ l.className = "mjr-message-item-title", l.textContent = sg(n, "titleKey", "title", R("label.info", "Info"));
let u = document.createElement("span");
- u.className = "mjr-message-item-category", u.textContent = eg(n, "categoryKey", "category", R("label.info", "Info")), s.appendChild(c), s.appendChild(l), o.appendChild(s), o.appendChild(u);
+ u.className = "mjr-message-item-category", u.textContent = sg(n, "categoryKey", "category", R("label.info", "Info")), s.appendChild(c), s.appendChild(l), o.appendChild(s), o.appendChild(u);
let d = document.createElement("div");
- d.className = "mjr-message-item-meta", d.textContent = $h(a);
+ d.className = "mjr-message-item-meta", d.textContent = og(a);
let f = document.createElement("div");
- f.className = "mjr-message-item-body", f.textContent = eg(n, "bodyKey", "body", ""), e.appendChild(o), d.textContent && e.appendChild(d), f.textContent && e.appendChild(f);
- let p = ng(n?.actionUrl), m = eg(n, "actionLabelKey", "actionLabel", R("label.readMe", "Read Me"));
+ f.className = "mjr-message-item-body", f.textContent = sg(n, "bodyKey", "body", ""), e.appendChild(o), d.textContent && e.appendChild(d), f.textContent && e.appendChild(f);
+ let p = lg(n?.actionUrl), m = sg(n, "actionLabelKey", "actionLabel", R("label.readMe", "Read Me"));
if (p && m) {
let t = document.createElement("a");
t.className = "mjr-message-item-action", t.href = p, t.target = "_blank", t.rel = "noopener noreferrer", t.textContent = m, e.appendChild(t);
@@ -13659,7 +13689,7 @@ function dg({ messageBtn: e = null, messagePopover: t = null, title: n = null, m
let e = document.createElement("div");
e.className = `mjr-history-item mjr-history-item--${String(n.type || "info")}`;
let r = document.createElement("span");
- r.className = "mjr-history-item-icon", r.textContent = ig(n.type), r.setAttribute("aria-hidden", "true");
+ r.className = "mjr-history-item-icon", r.textContent = dg(n.type), r.setAttribute("aria-hidden", "true");
let i = document.createElement("div");
i.className = "mjr-history-item-content";
let a = String(n.title || "").trim(), o = String(n.detail || "").trim(), s = String(n.message || "").trim(), c = a || s, l = a && o ? o : a ? "" : o, u = document.createElement("div");
@@ -13669,14 +13699,14 @@ function dg({ messageBtn: e = null, messagePopover: t = null, title: n = null, m
let f = document.createElement("div");
f.className = "mjr-history-item-meta";
let p = document.createElement("span");
- p.className = "mjr-history-item-time", p.textContent = $h(n.createdAt);
+ p.className = "mjr-history-item-time", p.textContent = og(n.createdAt);
let m = document.createElement("span");
- m.className = "mjr-history-item-chip", m.textContent = ag(n);
+ m.className = "mjr-history-item-chip", m.textContent = fg(n);
let h = document.createElement("span");
h.className = "mjr-history-item-chip", h.textContent = String(n.source || "").trim();
let g = document.createElement("span");
- g.className = "mjr-history-item-chip", g.textContent = og(n.status), i.appendChild(u), d.textContent && i.appendChild(d), p.textContent && f.appendChild(p), m.textContent && f.appendChild(m), g.textContent && f.appendChild(g), h.textContent && f.appendChild(h), f.childNodes.length && i.appendChild(f);
- let _ = sg(n), v = cg(n);
+ g.className = "mjr-history-item-chip", g.textContent = pg(n.status), i.appendChild(u), d.textContent && i.appendChild(d), p.textContent && f.appendChild(p), m.textContent && f.appendChild(m), g.textContent && f.appendChild(g), h.textContent && f.appendChild(h), f.childNodes.length && i.appendChild(f);
+ let _ = mg(n), v = hg(n);
if (_ || v !== null) {
let e = document.createElement("div");
if (e.className = "mjr-history-item-progress", _) {
@@ -13691,7 +13721,7 @@ function dg({ messageBtn: e = null, messagePopover: t = null, title: n = null, m
}
i.appendChild(e);
}
- let y = ng(n?.actionUrl), b = String(n?.actionLabel || "").trim();
+ let y = lg(n?.actionUrl), b = String(n?.actionLabel || "").trim();
if (y && b) {
let e = document.createElement("a");
e.className = "mjr-history-item-action", e.href = y, e.target = "_blank", e.rel = "noopener noreferrer", e.textContent = b, i.appendChild(e);
@@ -13706,13 +13736,13 @@ function dg({ messageBtn: e = null, messagePopover: t = null, title: n = null, m
let e = ae();
a && (a.style.display = e > 0 ? "inline-block" : "none"), T(o, e);
}, D = () => {
- c && (c.childNodes.length > 0 || c.replaceChildren(Jh()));
+ c && (c.childNodes.length > 0 || c.replaceChildren(tg()));
}, O = () => {
if (!f) return;
- let e = Math.max(0, Number(Uh() || 0) || 0);
+ let e = Math.max(0, Number(Xh() || 0) || 0);
f.disabled = e <= 0, f.title = e > 0 ? R("tooltip.markMessagesRead", "Mark all messages as read") : R("tooltip.noUnreadMessages", "No unread messages");
}, k = () => {
- let t = Math.max(0, Number(Uh() || 0) || 0);
+ let t = Math.max(0, Number(Xh() || 0) || 0);
if (e) {
let n = e.querySelector(".mjr-message-badge"), r = t > 0 ? R("tooltip.openMessagesUnread", "Messages ({count} unread)", { count: t }) : R("tooltip.openMessages", "Messages and updates");
e.classList.toggle("mjr-message-has-unread", t > 0), e.title = r, e.setAttribute("aria-label", r), n && (t <= 0 ? (n.style.display = "none", n.textContent = "") : (n.style.display = "inline-flex", n.textContent = t > 9 ? "9+" : String(t)));
@@ -13722,7 +13752,7 @@ function dg({ messageBtn: e = null, messagePopover: t = null, title: n = null, m
k(), E(), t?.style?.display === "block" && (g === "messages" && C(), g === "history" && w());
}, M = h ? { signal: h } : void 0;
try {
- window.addEventListener(bh, j, M);
+ window.addEventListener(Dh, j, M);
} catch (e) {
console.debug?.(e);
}
@@ -13730,8 +13760,8 @@ function dg({ messageBtn: e = null, messagePopover: t = null, title: n = null, m
window.addEventListener(de, () => {
if (E(), t?.style?.display === "block" && g === "history" && w(), _) {
for (let e of A()) {
- let t = String(e?.status || "").trim().toLowerCase(), n = lg(e);
- n && Zh.has(t) && y.add(n);
+ let t = String(e?.status || "").trim().toLowerCase(), n = gg(e);
+ n && ig.has(t) && y.add(n);
}
x();
}
@@ -13758,7 +13788,7 @@ function dg({ messageBtn: e = null, messagePopover: t = null, title: n = null, m
} catch (e) {
console.debug?.(e);
}
- k(), E(), S(), ug({
+ k(), E(), S(), _g({
activeTab: g,
title: n,
messagePopover: t,
@@ -13771,7 +13801,7 @@ function dg({ messageBtn: e = null, messagePopover: t = null, title: n = null, m
markReadBtn: f
});
let P = () => {
- g = "messages", ug({
+ g = "messages", _g({
activeTab: g,
title: n,
messagePopover: t,
@@ -13782,9 +13812,9 @@ function dg({ messageBtn: e = null, messagePopover: t = null, title: n = null, m
historyPanel: s,
shortcutsPanel: c,
markReadBtn: f
- }), C(), Gh(), k();
+ }), C(), Qh(), k();
}, ee = () => {
- g = "history", ug({
+ g = "history", _g({
activeTab: g,
title: n,
messagePopover: t,
@@ -13797,7 +13827,7 @@ function dg({ messageBtn: e = null, messagePopover: t = null, title: n = null, m
markReadBtn: f
}), w(), pe(), E();
}, te = () => {
- g = "shortcuts", ug({
+ g = "shortcuts", _g({
activeTab: g,
title: n,
messagePopover: t,
@@ -13823,8 +13853,8 @@ function dg({ messageBtn: e = null, messagePopover: t = null, title: n = null, m
}
ee(), _ = !0, b(), y.clear();
for (let e of A()) {
- let t = String(e?.status || "").trim().toLowerCase(), n = lg(e);
- n && Zh.has(t) && y.add(n);
+ let t = String(e?.status || "").trim().toLowerCase(), n = gg(e);
+ n && ig.has(t) && y.add(n);
}
x(), S(), k();
}
@@ -13856,7 +13886,7 @@ function dg({ messageBtn: e = null, messagePopover: t = null, title: n = null, m
};
return e?.addEventListener("click", (a) => {
if (t && p && e) {
- a.stopPropagation(), _ = !1, y.clear(), b(), g = "messages", C(), D(), ug({
+ a.stopPropagation(), _ = !1, y.clear(), b(), g = "messages", C(), D(), _g({
activeTab: g,
title: n,
messagePopover: t,
@@ -13873,7 +13903,7 @@ function dg({ messageBtn: e = null, messagePopover: t = null, title: n = null, m
} catch (e) {
console.debug?.(e);
}
- p.toggle(t, e), t?.style?.display === "block" && Gh(), S(), k();
+ p.toggle(t, e), t?.style?.display === "block" && Qh(), S(), k();
}
}, M), l?.addEventListener("click", (e) => {
e.preventDefault(), e.stopPropagation(), P();
@@ -13882,7 +13912,7 @@ function dg({ messageBtn: e = null, messagePopover: t = null, title: n = null, m
}, M), i?.addEventListener("keydown", (e) => re(e, "history"), M), d?.addEventListener("click", (e) => {
e.preventDefault(), e.stopPropagation(), te();
}, M), d?.addEventListener("keydown", (e) => re(e, "shortcuts"), M), f?.addEventListener("click", (e) => {
- e.preventDefault(), e.stopPropagation(), Gh(), C(), k();
+ e.preventDefault(), e.stopPropagation(), Qh(), C(), k();
}, M), {
refresh: j,
render: C,
@@ -13897,7 +13927,7 @@ function dg({ messageBtn: e = null, messagePopover: t = null, title: n = null, m
};
}
// ui/features/panel/controllers/query.ts
-function fg(e) {
+function yg(e) {
let t = e;
for (let e = 0; e < 3 && t && typeof t == "object" && "value" in t; e += 1) {
let e = t.value;
@@ -13906,8 +13936,8 @@ function fg(e) {
}
return t;
}
-function pg(e) {
- let t = fg(e);
+function bg(e) {
+ let t = yg(e);
if (!t) return null;
let n = String(t?.tagName || "").toUpperCase();
if (n === "INPUT" || n === "TEXTAREA") return t;
@@ -13921,13 +13951,13 @@ function pg(e) {
}
return null;
}
-function mg(e) {
- let t = pg(e), n = t ? t.value : typeof e?.value == "string" ? e.value : "";
+function xg(e) {
+ let t = bg(e), n = t ? t.value : typeof e?.value == "string" ? e.value : "";
return String(n || "").trim() || "*";
}
// ui/features/panel/controllers/gridController.ts
-function hg({ gridContainer: t, loadAssets: n, loadAssetsFromList: r, getCollectionAssets: i, disposeGrid: a, getQuery: o, searchInputEl: s, state: c }) {
- let { read: l, write: u } = ph(c, /* @__PURE__ */ "scope.customRootId.currentFolderRelativePath.kindFilter.workflowOnly.minRating.minSizeMB.maxSizeMB.resolutionCompare.minWidth.minHeight.maxWidth.maxHeight.workflowType.workflowId.workflowModelFilter.workflowRunsOnFilter.dateRangeFilter.dateExactFilter.sort.activeAssetId.selectedAssetIds.collectionId.collectionName.viewScope.similarResults.similarTitle.similarSourceAssetId.lastGridCount.lastGridTotal".split(".")), f = !1, p = !1, m = {}, h = 0, g = 0, _ = 3e4, v = async (e, t = _) => {
+function Sg({ gridContainer: t, loadAssets: n, loadAssetsFromList: r, getCollectionAssets: i, disposeGrid: a, getQuery: o, searchInputEl: s, state: c }) {
+ let { read: l, write: u } = bh(c, /* @__PURE__ */ "scope.customRootId.currentFolderRelativePath.kindFilter.workflowOnly.minRating.minSizeMB.maxSizeMB.resolutionCompare.minWidth.minHeight.maxWidth.maxHeight.workflowType.workflowId.workflowModelFilter.workflowRunsOnFilter.dateRangeFilter.dateExactFilter.sort.activeAssetId.selectedAssetIds.collectionId.collectionName.viewScope.similarResults.similarTitle.similarSourceAssetId.lastGridCount.lastGridTotal".split(".")), f = !1, p = !1, m = {}, h = 0, g = 0, _ = 3e4, v = async (e, t = _) => {
let n = null;
try {
let r = new Promise((e, r) => {
@@ -13948,7 +13978,7 @@ function hg({ gridContainer: t, loadAssets: n, loadAssetsFromList: r, getCollect
}
}, b = () => {
try {
- return !!(Hn()?.ai?.vectorSearchEnabled ?? !0);
+ return !!(Vn()?.ai?.vectorSearchEnabled ?? !0);
} catch {
return !0;
}
@@ -14152,8 +14182,8 @@ function hg({ gridContainer: t, loadAssets: n, loadAssetsFromList: r, getCollect
}) };
}
// ui/features/panel/controllers/browserNavigationController.ts
-function gg({ state: e, gridContainer: t, folderBreadcrumb: n, folderBreadcrumbController: r = null, customSelect: i, reloadGrid: a, clearSelection: o = null, onContextChanged: s = null, lifecycleSignal: c = null } = {}) {
- let { read: l, write: u } = ph(e, [
+function Cg({ state: e, gridContainer: t, folderBreadcrumb: n, folderBreadcrumbController: r = null, customSelect: i, reloadGrid: a, clearSelection: o = null, onContextChanged: s = null, lifecycleSignal: c = null } = {}) {
+ let { read: l, write: u } = bh(e, [
"scope",
"customRootId",
"currentFolderRelativePath"
@@ -14386,8 +14416,8 @@ function gg({ state: e, gridContainer: t, folderBreadcrumb: n, folderBreadcrumbC
};
}
// ui/features/panel/controllers/scopeController.ts
-function _g({ state: e, tabButtons: t, customMenuBtn: n, customPopover: r, popovers: i, reloadGrid: a, reconcileSelection: o = null, onChanged: s = null, onScopeChanged: c = null, onBeforeReload: l = null }) {
- let u = 0, { panelStore: d, read: f, write: p, controllerState: m } = ph(e, [
+function wg({ state: e, tabButtons: t, customMenuBtn: n, customPopover: r, popovers: i, reloadGrid: a, reconcileSelection: o = null, onChanged: s = null, onScopeChanged: c = null, onBeforeReload: l = null }) {
+ let u = 0, { panelStore: d, read: f, write: p, controllerState: m } = bh(e, [
"scope",
"customRootId",
"currentFolderRelativePath",
@@ -14502,21 +14532,21 @@ function _g({ state: e, tabButtons: t, customMenuBtn: n, customPopover: r, popov
};
}
// ui/features/panel/controllers/contextController.ts
-var vg = (e, t) => {
+var Tg = (e, t) => {
if (e) try {
e.value = t;
} catch (e) {
console.debug?.(e);
}
-}, yg = (e, t) => {
+}, Eg = (e, t) => {
if (e) try {
e.checked = !!t;
} catch (e) {
console.debug?.(e);
}
};
-function bg({ state: e, gridContainer: t, filterBtn: n, sortBtn: r, collectionsBtn: i, searchInputEl: a, kindSelect: o, wfCheckbox: s, workflowTypeSelect: c, workflowIdInput: l, workflowModelInput: u, workflowRunsOnSelect: d, ratingSelect: f, minSizeInput: p, maxSizeInput: m, minWidthInput: h, minHeightInput: g, maxWidthInput: _, maxHeightInput: v, resolutionPresetSelect: y, dateRangeSelect: b, dateExactInput: x, scopeController: S, sortController: C, updateSummaryBar: w, reloadGrid: T, extraActions: E = null, getExtraContext: D = null } = {}) {
- let O = e && typeof e == "object" ? e : {}, { read: k, write: A, controllerState: j } = ph(e, /* @__PURE__ */ "searchQuery.scope.collectionId.collectionName.customRootId.customRootLabel.currentFolderRelativePath.kindFilter.workflowOnly.minRating.minSizeMB.maxSizeMB.minWidth.minHeight.maxWidth.maxHeight.resolutionCompare.workflowType.workflowId.workflowModelFilter.workflowRunsOnFilter.dateRangeFilter.dateExactFilter.sort.viewScope.similarResults.similarTitle.similarSourceAssetId".split(".")), M = (e, t) => {
+function Dg({ state: e, gridContainer: t, filterBtn: n, sortBtn: r, collectionsBtn: i, searchInputEl: a, kindSelect: o, wfCheckbox: s, workflowTypeSelect: c, workflowIdInput: l, workflowModelInput: u, workflowRunsOnSelect: d, ratingSelect: f, minSizeInput: p, maxSizeInput: m, minWidthInput: h, minHeightInput: g, maxWidthInput: _, maxHeightInput: v, resolutionPresetSelect: y, dateRangeSelect: b, dateExactInput: x, scopeController: S, sortController: C, updateSummaryBar: w, reloadGrid: T, extraActions: E = null, getExtraContext: D = null } = {}) {
+ let O = e && typeof e == "object" ? e : {}, { read: k, write: A, controllerState: j } = bh(e, /* @__PURE__ */ "searchQuery.scope.collectionId.collectionName.customRootId.customRootLabel.currentFolderRelativePath.kindFilter.workflowOnly.minRating.minSizeMB.maxSizeMB.minWidth.minHeight.maxWidth.maxHeight.resolutionCompare.workflowType.workflowId.workflowModelFilter.workflowRunsOnFilter.dateRangeFilter.dateExactFilter.sort.viewScope.similarResults.similarTitle.similarSourceAssetId".split(".")), M = (e, t) => {
A(e, t);
}, N = (e, t = "") => k(e, t), P = () => ({
...O || {},
@@ -14539,7 +14569,7 @@ function bg({ state: e, gridContainer: t, filterBtn: n, sortBtn: r, collectionsB
}, F = {
clearQuery: async () => {
try {
- vg(a, ""), M("searchQuery", "");
+ Tg(a, ""), M("searchQuery", "");
} catch (e) {
console.debug?.(e);
}
@@ -14608,7 +14638,7 @@ function bg({ state: e, gridContainer: t, filterBtn: n, sortBtn: r, collectionsB
},
clearKind: async () => {
try {
- M("kindFilter", ""), vg(o, "");
+ M("kindFilter", ""), Tg(o, "");
} catch (e) {
console.debug?.(e);
}
@@ -14620,7 +14650,7 @@ function bg({ state: e, gridContainer: t, filterBtn: n, sortBtn: r, collectionsB
},
clearMinRating: async () => {
try {
- M("minRating", 0), vg(f, "0");
+ M("minRating", 0), Tg(f, "0");
} catch (e) {
console.debug?.(e);
}
@@ -14632,7 +14662,7 @@ function bg({ state: e, gridContainer: t, filterBtn: n, sortBtn: r, collectionsB
},
clearWorkflowOnly: async () => {
try {
- M("workflowOnly", !1), yg(s, !1);
+ M("workflowOnly", !1), Eg(s, !1);
} catch (e) {
console.debug?.(e);
}
@@ -14644,7 +14674,7 @@ function bg({ state: e, gridContainer: t, filterBtn: n, sortBtn: r, collectionsB
},
clearWorkflowType: async () => {
try {
- M("workflowType", ""), vg(c, "");
+ M("workflowType", ""), Tg(c, "");
} catch (e) {
console.debug?.(e);
}
@@ -14656,7 +14686,7 @@ function bg({ state: e, gridContainer: t, filterBtn: n, sortBtn: r, collectionsB
},
clearWorkflowId: async () => {
try {
- M("workflowId", ""), vg(l, "");
+ M("workflowId", ""), Tg(l, "");
} catch (e) {
console.debug?.(e);
}
@@ -14668,7 +14698,7 @@ function bg({ state: e, gridContainer: t, filterBtn: n, sortBtn: r, collectionsB
},
clearWorkflowModel: async () => {
try {
- M("workflowModelFilter", ""), vg(u, "");
+ M("workflowModelFilter", ""), Tg(u, "");
} catch (e) {
console.debug?.(e);
}
@@ -14680,7 +14710,7 @@ function bg({ state: e, gridContainer: t, filterBtn: n, sortBtn: r, collectionsB
},
clearWorkflowRunsOn: async () => {
try {
- M("workflowRunsOnFilter", ""), vg(d, "");
+ M("workflowRunsOnFilter", ""), Tg(d, "");
} catch (e) {
console.debug?.(e);
}
@@ -14692,7 +14722,7 @@ function bg({ state: e, gridContainer: t, filterBtn: n, sortBtn: r, collectionsB
},
clearSize: async () => {
try {
- M("minSizeMB", 0), M("maxSizeMB", 0), vg(p, ""), vg(m, "");
+ M("minSizeMB", 0), M("maxSizeMB", 0), Tg(p, ""), Tg(m, "");
} catch (e) {
console.debug?.(e);
}
@@ -14704,7 +14734,7 @@ function bg({ state: e, gridContainer: t, filterBtn: n, sortBtn: r, collectionsB
},
clearResolution: async () => {
try {
- M("minWidth", 0), M("minHeight", 0), M("maxWidth", 0), M("maxHeight", 0), vg(h, ""), vg(g, ""), vg(_, ""), vg(v, ""), vg(y, "");
+ M("minWidth", 0), M("minHeight", 0), M("maxWidth", 0), M("maxHeight", 0), Tg(h, ""), Tg(g, ""), Tg(_, ""), Tg(v, ""), Tg(y, "");
} catch (e) {
console.debug?.(e);
}
@@ -14716,7 +14746,7 @@ function bg({ state: e, gridContainer: t, filterBtn: n, sortBtn: r, collectionsB
},
clearDateRange: async () => {
try {
- M("dateRangeFilter", ""), vg(b, "");
+ M("dateRangeFilter", ""), Tg(b, "");
} catch (e) {
console.debug?.(e);
}
@@ -14728,7 +14758,7 @@ function bg({ state: e, gridContainer: t, filterBtn: n, sortBtn: r, collectionsB
},
clearDateExact: async () => {
try {
- M("dateExactFilter", ""), vg(x, "");
+ M("dateExactFilter", ""), Tg(x, "");
} catch (e) {
console.debug?.(e);
}
@@ -14753,7 +14783,7 @@ function bg({ state: e, gridContainer: t, filterBtn: n, sortBtn: r, collectionsB
clearAll: async () => {
let e = !1;
try {
- vg(a, "");
+ Tg(a, "");
} catch (e) {
console.debug?.(e);
}
@@ -14769,7 +14799,7 @@ function bg({ state: e, gridContainer: t, filterBtn: n, sortBtn: r, collectionsB
console.debug?.(e);
}
try {
- vg(o, ""), yg(s, !1), vg(c, ""), vg(l, ""), vg(u, ""), vg(d, ""), vg(f, "0"), vg(p, ""), vg(m, ""), vg(h, ""), vg(g, ""), vg(_, ""), vg(v, ""), vg(y, ""), vg(b, ""), vg(x, "");
+ Tg(o, ""), Eg(s, !1), Tg(c, ""), Tg(l, ""), Tg(u, ""), Tg(d, ""), Tg(f, "0"), Tg(p, ""), Tg(m, ""), Tg(h, ""), Tg(g, ""), Tg(_, ""), Tg(v, ""), Tg(y, ""), Tg(b, ""), Tg(x, "");
} catch (e) {
console.debug?.(e);
}
@@ -14795,7 +14825,7 @@ function bg({ state: e, gridContainer: t, filterBtn: n, sortBtn: r, collectionsB
}
return {
update: () => {
- let e = String(a?.value || "").trim(), o = mg(a), s = P(), c = !!(N("kindFilter", "") || N("workflowOnly", !1) || (Number(N("minRating", 0) || 0) || 0) > 0 || (Number(N("minSizeMB", 0) || 0) || 0) > 0 || (Number(N("maxSizeMB", 0) || 0) || 0) > 0 || (Number(N("minWidth", 0) || 0) || 0) > 0 || (Number(N("minHeight", 0) || 0) || 0) > 0 || (Number(N("maxWidth", 0) || 0) || 0) > 0 || (Number(N("maxHeight", 0) || 0) || 0) > 0 || String(N("workflowType", "") || "").trim().length > 0 || String(N("workflowId", "") || "").trim().length > 0 || String(N("workflowModelFilter", "") || "").trim().length > 0 || String(N("workflowRunsOnFilter", "") || "").trim().length > 0 || N("dateRangeFilter", "") || N("dateExactFilter", "")), l = String(N("sort", "mtime_desc") || "mtime_desc") !== "mtime_desc", u = !!N("collectionId", "");
+ let e = String(a?.value || "").trim(), o = xg(a), s = P(), c = !!(N("kindFilter", "") || N("workflowOnly", !1) || (Number(N("minRating", 0) || 0) || 0) > 0 || (Number(N("minSizeMB", 0) || 0) || 0) > 0 || (Number(N("maxSizeMB", 0) || 0) || 0) > 0 || (Number(N("minWidth", 0) || 0) || 0) > 0 || (Number(N("minHeight", 0) || 0) || 0) > 0 || (Number(N("maxWidth", 0) || 0) || 0) > 0 || (Number(N("maxHeight", 0) || 0) || 0) > 0 || String(N("workflowType", "") || "").trim().length > 0 || String(N("workflowId", "") || "").trim().length > 0 || String(N("workflowModelFilter", "") || "").trim().length > 0 || String(N("workflowRunsOnFilter", "") || "").trim().length > 0 || N("dateRangeFilter", "") || N("dateExactFilter", "")), l = String(N("sort", "mtime_desc") || "mtime_desc") !== "mtime_desc", u = !!N("collectionId", "");
try {
n?.classList?.toggle?.("mjr-context-active", c), r?.classList?.toggle?.("mjr-context-active", l), i?.classList?.toggle?.("mjr-context-active", u);
} catch (e) {
@@ -14821,8 +14851,8 @@ function bg({ state: e, gridContainer: t, filterBtn: n, sortBtn: r, collectionsB
};
}
// ui/features/panel/controllers/customRootsController.ts
-function xg({ state: e, customSelect: t, customRemoveBtn: n, comfyConfirm: r, comfyPrompt: i, comfyToast: a, get: o, post: s, ENDPOINTS: c, reloadGrid: l, onRootChanged: u = null }) {
- let d = e && typeof e == "object" ? e : {}, { read: f, write: p } = ph(e, [
+function Og({ state: e, customSelect: t, customRemoveBtn: n, comfyConfirm: r, comfyPrompt: i, comfyToast: a, get: o, post: s, ENDPOINTS: c, reloadGrid: l, onRootChanged: u = null }) {
+ let d = e && typeof e == "object" ? e : {}, { read: f, write: p } = bh(e, [
"customRootId",
"customRootLabel",
"currentFolderRelativePath"
@@ -14954,8 +14984,8 @@ function xg({ state: e, customSelect: t, customRemoveBtn: n, comfyConfirm: r, co
};
}
// ui/features/panel/controllers/sortController.ts
-function Sg({ state: e, sortBtn: t, sortMenu: n, sortPopover: r, popovers: i, reloadGrid: a, onChanged: o = null }) {
- let { read: s, write: c } = ph(e, ["sort"]), l = () => [
+function kg({ state: e, sortBtn: t, sortMenu: n, sortPopover: r, popovers: i, reloadGrid: a, onChanged: o = null }) {
+ let { read: s, write: c } = bh(e, ["sort"]), l = () => [
{
key: "mtime_desc",
label: R("sort.newest")
@@ -15040,19 +15070,19 @@ function Sg({ state: e, sortBtn: t, sortMenu: n, sortPopover: r, popovers: i, re
};
}
// ui/features/panel/controllers/sidebarController.ts
-var Cg = "_mjrRescanning", wg = 1500, Tg = (e) => /^\d+$/.test(String(e ?? "").trim());
-async function Eg({ card: t, asset: n, sidebar: r, onAssetUpdated: i }) {
+var Ag = "_mjrRescanning", jg = 1500, Mg = (e) => /^\d+$/.test(String(e ?? "").trim());
+async function Ng({ card: t, asset: n, sidebar: r, onAssetUpdated: i }) {
if (!t || !n || globalThis._mjrMaintenanceActive) return;
try {
let e = Date.now();
- if (e - (Number(t[Cg] || 0) || 0) < wg) return;
- t[Cg] = e;
+ if (e - (Number(t[Ag] || 0) || 0) < jg) return;
+ t[Ag] = e;
} catch (e) {
console.debug?.(e);
}
let a = t.querySelector(".mjr-workflow-dot");
try {
- a && (Ut(a, "pending", "Pending: metadata refresh in progress", { asset: n }), a.classList.add("mjr-pulse-animation"), a.style.cursor = "progress", a.title = R("tooltip.pendingRefresh", "Pending: metadata refresh in progress"));
+ a && (Ht(a, "pending", "Pending: metadata refresh in progress", { asset: n }), a.classList.add("mjr-pulse-animation"), a.style.cursor = "progress", a.title = R("tooltip.pendingRefresh", "Pending: metadata refresh in progress"));
} catch (e) {
console.debug?.(e);
}
@@ -15071,7 +15101,7 @@ async function Eg({ card: t, asset: n, sidebar: r, onAssetUpdated: i }) {
if (c = !!(await L(at.INDEX_FILES, {
files: [o],
incremental: !1
- }))?.ok, !c && a && (Ut(a, "error", "Error: metadata refresh failed", { asset: n }), a.classList.remove("mjr-pulse-animation"), a.style.cursor = ""), Tg(n?.id)) {
+ }))?.ok, !c && a && (Ht(a, "error", "Error: metadata refresh failed", { asset: n }), a.classList.remove("mjr-pulse-animation"), a.style.cursor = ""), Mg(n?.id)) {
l = !0;
try {
u = !!(await ge(n.id))?.ok;
@@ -15088,7 +15118,7 @@ async function Eg({ card: t, asset: n, sidebar: r, onAssetUpdated: i }) {
}
} catch {
try {
- a && (Ut(a, "error", "Error: metadata refresh failed", { asset: n }), a.classList.remove("mjr-pulse-animation"), a.style.cursor = "");
+ a && (Ht(a, "error", "Error: metadata refresh failed", { asset: n }), a.classList.remove("mjr-pulse-animation"), a.style.cursor = "");
} catch (e) {
console.debug?.(e);
}
@@ -15126,7 +15156,7 @@ async function Eg({ card: t, asset: n, sidebar: r, onAssetUpdated: i }) {
}
return s;
}
-function Dg(e, t) {
+function Pg(e, t) {
if (e) {
try {
let n = e.querySelector(".mjr-asset-card.is-selected");
@@ -15162,7 +15192,7 @@ function Dg(e, t) {
}
}
}
-var Og = (e) => {
+var Fg = (e) => {
if (e == null) return "";
try {
if (typeof CSS < "u" && typeof CSS.escape == "function") return CSS.escape(String(e));
@@ -15171,32 +15201,32 @@ var Og = (e) => {
}
return String(e).replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1");
};
-function kg(e, t) {
+function Ig(e, t) {
if (!e || !t) return null;
try {
- return e.querySelector(`.mjr-asset-card[data-mjr-asset-id="${Og(t)}"]`);
+ return e.querySelector(`.mjr-asset-card[data-mjr-asset-id="${Fg(t)}"]`);
} catch (e) {
console.debug?.(e);
}
try {
- return e.querySelector(`.mjr-asset-card[data-mjr-asset-id="${Og(t)}"]`);
+ return e.querySelector(`.mjr-asset-card[data-mjr-asset-id="${Fg(t)}"]`);
} catch (e) {
console.debug?.(e);
}
return null;
}
-function Ag(e) {
+function Lg(e) {
if (!e) return null;
let t = e.dataset?.mjrSelectedAssetId;
if (t) {
- let n = kg(e, t);
+ let n = Ig(e, t);
if (n) return n;
}
let n = e.dataset?.mjrSelectedAssetIds;
if (n) try {
let t = JSON.parse(n);
if (Array.isArray(t) && t.length) {
- let n = kg(e, t[0]);
+ let n = Ig(e, t[0]);
if (n) return n;
}
} catch (e) {
@@ -15204,7 +15234,7 @@ function Ag(e) {
}
return e.querySelector(".mjr-asset-card.is-selected");
}
-function jg(e, { preventScroll: t = !0 } = {}) {
+function Rg(e, { preventScroll: t = !0 } = {}) {
if (e) try {
e.focus?.({ preventScroll: t });
} catch {
@@ -15215,14 +15245,14 @@ function jg(e, { preventScroll: t = !0 } = {}) {
}
}
}
-function Mg(e, { force: t = !1 } = {}) {
+function zg(e, { force: t = !1 } = {}) {
if (!e || !t && !e._mjrFocusWithin) return;
- let n = Ag(e);
- n && (jg(n), e._mjrFocusWithin = !0);
+ let n = Lg(e);
+ n && (Rg(n), e._mjrFocusWithin = !0);
}
-function Ng(e) {
+function Bg(e) {
if (e) try {
- let t = Ag(e);
+ let t = Lg(e);
if (!t) return;
let n = e.parentElement;
if (n && typeof n.getBoundingClientRect == "function" && typeof t.getBoundingClientRect == "function") {
@@ -15237,7 +15267,7 @@ function Ng(e) {
console.debug?.(e);
}
}
-function Pg(e) {
+function Vg(e) {
if (e) try {
e._mjrAutoRevealSelectionUntil = Date.now() + 900;
} catch (e) {
@@ -15245,12 +15275,12 @@ function Pg(e) {
}
let t = () => {
try {
- Ng(e);
+ Bg(e);
} catch (e) {
console.debug?.(e);
}
try {
- Mg(e);
+ zg(e);
} catch (e) {
console.debug?.(e);
}
@@ -15265,10 +15295,10 @@ function Pg(e) {
t();
}
}
-function Fg(e, t) {
+function Hg(e, t) {
e && (t ? (e.classList.add("is-selected"), e.setAttribute?.("aria-selected", "true")) : (e.classList.remove("is-selected"), e.setAttribute?.("aria-selected", "false")));
}
-function Ig(e) {
+function Ug(e) {
try {
if (typeof e?._mjrGetRenderedCards == "function") {
let t = e._mjrGetRenderedCards();
@@ -15283,15 +15313,15 @@ function Ig(e) {
return [];
}
}
-function Lg(e) {
+function Wg(e) {
if (e) try {
- let t = Ig(e).filter((e) => e?.classList?.contains?.("is-selected")).map((e) => e?.dataset?.mjrAssetId).filter(Boolean);
+ let t = Ug(e).filter((e) => e?.classList?.contains?.("is-selected")).map((e) => e?.dataset?.mjrAssetId).filter(Boolean);
t.length ? (e.dataset.mjrSelectedAssetIds = JSON.stringify(t), !e.dataset.mjrSelectedAssetId && t[0] && (e.dataset.mjrSelectedAssetId = String(t[0]))) : (delete e.dataset.mjrSelectedAssetIds, delete e.dataset.mjrSelectedAssetId);
} catch (e) {
console.debug?.(e);
}
}
-function Rg(e, t, n = "") {
+function Gg(e, t, n = "") {
if (!e) return [];
let r = Array.from(t || []).map(String).filter(Boolean);
try {
@@ -15305,9 +15335,9 @@ function Rg(e, t, n = "") {
console.debug?.(e);
}
try {
- for (let t of Ig(e)) {
+ for (let t of Ug(e)) {
let e = t?.dataset?.mjrAssetId;
- Fg(t, !!(e && r.includes(String(e))));
+ Hg(t, !!(e && r.includes(String(e))));
}
} catch (e) {
console.debug?.(e);
@@ -15322,7 +15352,7 @@ function Rg(e, t, n = "") {
}
return r;
}
-function zg({ gridContainer: e, state: t, activeId: n, readState: r = null, writeState: i = null } = {}) {
+function Kg({ gridContainer: e, state: t, activeId: n, readState: r = null, writeState: i = null } = {}) {
if ((t || i) && e) try {
let a = [];
if (e.dataset?.mjrSelectedAssetIds) try {
@@ -15331,7 +15361,7 @@ function zg({ gridContainer: e, state: t, activeId: n, readState: r = null, writ
} catch (e) {
console.debug?.(e);
}
- else a = e.dataset?.mjrSelectedAssetId ? [String(e.dataset.mjrSelectedAssetId)].filter(Boolean) : Ig(e).filter((e) => e?.classList?.contains?.("is-selected")).map((e) => e?.dataset?.mjrAssetId).filter(Boolean).map(String);
+ else a = e.dataset?.mjrSelectedAssetId ? [String(e.dataset.mjrSelectedAssetId)].filter(Boolean) : Ug(e).filter((e) => e?.classList?.contains?.("is-selected")).map((e) => e?.dataset?.mjrAssetId).filter(Boolean).map(String);
typeof i == "function" ? i("selectedAssetIds", a) : t.selectedAssetIds = a;
let o = String(typeof r == "function" ? r("activeAssetId", "") || "" : t?.activeAssetId || "");
n == null ? o && a.includes(o) || (typeof i == "function" ? i("activeAssetId", a[0] || "") : t.activeAssetId = a[0] || "") : typeof i == "function" ? i("activeAssetId", String(n)) : t.activeAssetId = String(n);
@@ -15339,8 +15369,8 @@ function zg({ gridContainer: e, state: t, activeId: n, readState: r = null, writ
console.debug?.(e);
}
}
-function Bg({ gridContainer: e, sidebar: t, createRatingBadge: n, createTagsBadge: r, showAssetInSidebar: i, closeSidebar: a, state: o }) {
- let { read: s, write: c } = ph(o, [
+function qg({ gridContainer: e, sidebar: t, createRatingBadge: n, createTagsBadge: r, showAssetInSidebar: i, closeSidebar: a, state: o }) {
+ let { read: s, write: c } = bh(o, [
"activeAssetId",
"selectedAssetIds",
"sidebarOpen"
@@ -15375,9 +15405,9 @@ function Bg({ gridContainer: e, sidebar: t, createRatingBadge: n, createTagsBadg
}
}, a = () => {
n && cancelAnimationFrame(n), r && clearTimeout(r), n = requestAnimationFrame(() => {
- n = null, i() && Ng(e);
+ n = null, i() && Bg(e);
}), r = setTimeout(() => {
- r = null, i() && Ng(e);
+ r = null, i() && Bg(e);
}, 160);
}, o = new ResizeObserver(() => a());
t && o.observe(t), o.observe(e), e._mjrSelectionResizeObserver = o;
@@ -15417,14 +15447,14 @@ function Bg({ gridContainer: e, sidebar: t, createRatingBadge: n, createTagsBadg
if (!a) return;
n.preventDefault(), n.stopPropagation();
let l = r?.dataset?.mjrAssetId || "";
- Rg(e, l ? [l] : [], l), zg({
+ Gg(e, l ? [l] : [], l), Kg({
gridContainer: e,
state: o,
activeId: l,
readState: s,
writeState: c
});
- let u = await Eg({
+ let u = await Ng({
card: r,
asset: a,
sidebar: t,
@@ -15443,7 +15473,7 @@ function Bg({ gridContainer: e, sidebar: t, createRatingBadge: n, createTagsBadg
let u = r._mjrAsset;
if (u) {
if (e?._mjrSelectionManagedByVue) {
- zg({
+ Kg({
gridContainer: e,
state: o,
activeId: String(r?.dataset?.mjrAssetId || "").trim(),
@@ -15463,7 +15493,7 @@ function Bg({ gridContainer: e, sidebar: t, createRatingBadge: n, createTagsBadg
console.debug?.(e);
}
} else if (n.preventDefault(), n.stopPropagation(), n.ctrlKey || n.metaKey || n.shiftKey) {
- let t = Ig(e), i = t.indexOf(r);
+ let t = Ug(e), i = t.indexOf(r);
if (n.shiftKey) {
let t = [];
try {
@@ -15475,7 +15505,7 @@ function Bg({ gridContainer: e, sidebar: t, createRatingBadge: n, createTagsBadg
let n = r?.dataset?.mjrAssetId || "", i = t.findIndex((e) => String(e?.id || "") === String(n)), a = Number(e._mjrLastSelectedIndex), l = Number.isFinite(a) ? a : i;
if (i >= 0 && l >= 0) {
let r = Math.min(l, i), a = Math.max(l, i), u = t.slice(r, a + 1).map((e) => String(e?.id || "")).filter(Boolean);
- Rg(e, u, n || u[0] || ""), e._mjrLastSelectedIndex = i, zg({
+ Gg(e, u, n || u[0] || ""), e._mjrLastSelectedIndex = i, Kg({
gridContainer: e,
state: o,
activeId: n || "",
@@ -15510,7 +15540,7 @@ function Bg({ gridContainer: e, sidebar: t, createRatingBadge: n, createTagsBadg
}
a && (l.has(a) ? l.delete(a) : l.add(a));
let u = Array.from(l), d = l.has(a) ? a : u[0] || "";
- Rg(e, u, d), zg({
+ Gg(e, u, d), Kg({
gridContainer: e,
state: o,
activeId: d,
@@ -15520,7 +15550,7 @@ function Bg({ gridContainer: e, sidebar: t, createRatingBadge: n, createTagsBadg
} else {
{
if (r.classList.contains("is-selected")) {
- Rg(e, [], ""), zg({
+ Gg(e, [], ""), Kg({
gridContainer: e,
state: o,
activeId: "",
@@ -15530,7 +15560,7 @@ function Bg({ gridContainer: e, sidebar: t, createRatingBadge: n, createTagsBadg
return;
}
let n = r?.dataset?.mjrAssetId;
- Rg(e, n ? [n] : [], n || ""), zg({
+ Gg(e, n ? [n] : [], n || ""), Kg({
gridContainer: e,
state: o,
activeId: n || "",
@@ -15544,7 +15574,7 @@ function Bg({ gridContainer: e, sidebar: t, createRatingBadge: n, createTagsBadg
}
}
try {
- Ng(e), r?.focus?.({ preventScroll: !0 });
+ Bg(e), r?.focus?.({ preventScroll: !0 });
} catch (e) {
console.debug?.(e);
}
@@ -15555,10 +15585,10 @@ function Bg({ gridContainer: e, sidebar: t, createRatingBadge: n, createTagsBadg
let p = async () => {
let n = String(s("activeAssetId", "") || ""), r = null;
if (n) try {
- r = e.querySelector(`.mjr-asset-card[data-mjr-asset-id="${Og(n)}"]`);
+ r = e.querySelector(`.mjr-asset-card[data-mjr-asset-id="${Fg(n)}"]`);
} catch {
try {
- r = e.querySelector(`.mjr-asset-card[data-mjr-asset-id="${Og(n)}"]`);
+ r = e.querySelector(`.mjr-asset-card[data-mjr-asset-id="${Fg(n)}"]`);
} catch (e) {
console.debug?.(e);
}
@@ -15566,7 +15596,7 @@ function Bg({ gridContainer: e, sidebar: t, createRatingBadge: n, createTagsBadg
r ||= e.querySelector(".mjr-asset-card.is-selected");
let l = r?._mjrAsset;
if (l) {
- Dg(e, r), Lg(e), zg({
+ Pg(e, r), Wg(e), Kg({
gridContainer: e,
state: o,
activeId: r?.dataset?.mjrAssetId,
@@ -15582,7 +15612,7 @@ function Bg({ gridContainer: e, sidebar: t, createRatingBadge: n, createTagsBadg
} catch (e) {
console.debug?.(e);
}
- Mg(e, { force: !0 }), Pg(e);
+ zg(e, { force: !0 }), Vg(e);
return;
}
} catch (e) {
@@ -15595,7 +15625,7 @@ function Bg({ gridContainer: e, sidebar: t, createRatingBadge: n, createTagsBadg
} catch (e) {
console.debug?.(e);
}
- Pg(e), r?.focus?.({ preventScroll: !0 });
+ Vg(e), r?.focus?.({ preventScroll: !0 });
} catch (e) {
console.debug?.(e);
}
@@ -15610,7 +15640,7 @@ function Bg({ gridContainer: e, sidebar: t, createRatingBadge: n, createTagsBadg
if (!n) return !1;
let r = null;
try {
- r = kg(e, n);
+ r = Ig(e, n);
} catch (e) {
console.debug?.(e);
}
@@ -15647,7 +15677,7 @@ function Bg({ gridContainer: e, sidebar: t, createRatingBadge: n, createTagsBadg
let _ = (t) => {
if (t.defaultPrevented || (t.key?.toLowerCase?.() || "") !== "d" || t.ctrlKey || t.metaKey || t.altKey || t.target?.isContentEditable || t.target?.closest?.("input, textarea, select, [contenteditable='true']")) return;
let n = Nt(t.target, ".mjr-asset-card");
- n && n._mjrAsset && (t.preventDefault(), t.stopPropagation(), Dg(e, n), Lg(e), zg({
+ n && n._mjrAsset && (t.preventDefault(), t.stopPropagation(), Pg(e, n), Wg(e), Kg({
gridContainer: e,
state: o,
activeId: n?.dataset?.mjrAssetId,
@@ -15733,7 +15763,7 @@ function Bg({ gridContainer: e, sidebar: t, createRatingBadge: n, createTagsBadg
};
}
// ui/features/panel/controllers/panelHotkeysController.ts
-function Vg({ onTriggerScan: e, getScanContext: t, onToggleDetails: n, onToggleFloatingViewer: r, onFocusSearch: i, onClearSearch: a, allowListKeys: o } = {}) {
+function Jg({ onTriggerScan: e, getScanContext: t, onToggleDetails: n, onToggleFloatingViewer: r, onFocusSearch: i, onClearSearch: a, allowListKeys: o } = {}) {
let s = !1, c = !1, l = null, u = o instanceof Set ? o : /* @__PURE__ */ new Set([
" ",
"ArrowUp",
@@ -15768,7 +15798,7 @@ function Vg({ onTriggerScan: e, getScanContext: t, onToggleDetails: n, onToggleF
console.debug?.(e);
}
try {
- let e = $n();
+ let e = Qn();
return e && (document.activeElement === document.body || e.contains?.(document.activeElement)) || !1;
} catch (e) {
return console.debug?.(e), !1;
@@ -15887,17 +15917,17 @@ function Vg({ onTriggerScan: e, getScanContext: t, onToggleDetails: n, onToggleF
};
}
// ui/vue/composables/useGridSelection.ts
-function Hg(e) {
+function Yg(e) {
return Array.isArray(e) ? e.map((e) => String(e || "").trim()).filter(Boolean) : [];
}
-function Ug({ gridContainer: e, readSelectedAssetIds: t = () => [], readActiveAssetId: n = () => "", writeSelectedAssetIds: r = (e) => {}, writeActiveAssetId: i = (e) => {}, onSelectionChanged: a = () => {}, lifecycleSignal: o = null } = {}) {
+function Xg({ gridContainer: e, readSelectedAssetIds: t = () => [], readActiveAssetId: n = () => "", writeSelectedAssetIds: r = (e) => {}, writeActiveAssetId: i = (e) => {}, onSelectionChanged: a = () => {}, lifecycleSignal: o = null } = {}) {
if (!e) return {
restoreSelectionState() {},
dispose() {}
};
let s = (e) => {
try {
- let t = e?.detail || {}, n = Hg(t.selectedIds);
+ let t = e?.detail || {}, n = Yg(t.selectedIds);
r(n), i(String(t.activeId || n[0] || "").trim());
} catch (e) {
console.debug?.(e);
@@ -15915,7 +15945,7 @@ function Ug({ gridContainer: e, readSelectedAssetIds: t = () => [], readActiveAs
}
return {
restoreSelectionState: ({ scrollTop: r = 0 } = {}) => {
- let i = Hg(t()), a = String(n() || i[0] || "").trim();
+ let i = Yg(t()), a = String(n() || i[0] || "").trim();
if (i.length || a) {
try {
typeof e?._mjrSetSelection == "function" && e._mjrSetSelection(i, a);
@@ -15952,7 +15982,7 @@ function Ug({ gridContainer: e, readSelectedAssetIds: t = () => [], readActiveAs
};
}
// ui/vue/composables/useAssetsQuery.ts
-function Wg(e) {
+function Zg(e) {
try {
if (typeof requestAnimationFrame == "function") {
requestAnimationFrame(e);
@@ -15963,10 +15993,10 @@ function Wg(e) {
}
setTimeout(e, 0);
}
-function Gg(e = {}, t = "*") {
+function Qg(e = {}, t = "*") {
return e.scope === "output" && !e.collectionId && t === "*" && !e.kindFilter && !e.workflowOnly && !(Number(e.minRating || 0) > 0) && !(Number(e.minSizeMB || 0) > 0) && !(Number(e.maxSizeMB || 0) > 0) && !(Number(e.minWidth || 0) > 0) && !(Number(e.minHeight || 0) > 0) && !(Number(e.maxWidth || 0) > 0) && !(Number(e.maxHeight || 0) > 0) && !String(e.workflowType || "").trim() && !String(e.workflowId || "").trim() && !e.dateRangeFilter && !e.dateExactFilter;
}
-function Kg({ gridContainer: e, gridWrapper: t, readScrollElement: n = () => null, gridController: r, captureAnchor: i, restoreAnchor: a, restoreGridUiState: o = null, readScrollTop: s = () => 0, restoreSelectionState: c = () => {}, readActiveAssetId: l = () => "", isSidebarOpen: u = () => !1, toggleSidebarDetails: d = () => {}, getQuery: f = () => "*", getScope: p = () => "output", loadAssets: m = null, lifecycleSignal: h = null } = {}) {
+function $g({ gridContainer: e, gridWrapper: t, readScrollElement: n = () => null, gridController: r, captureAnchor: i, restoreAnchor: a, restoreGridUiState: o = null, readScrollTop: s = () => 0, restoreSelectionState: c = () => {}, readActiveAssetId: l = () => "", isSidebarOpen: u = () => !1, toggleSidebarDetails: d = () => {}, getQuery: f = () => "*", getScope: p = () => "output", loadAssets: m = null, lifecycleSignal: h = null } = {}) {
let g = 0, _ = !1, v = null, y = null, b = null, x = 0, S = !0, C = "", w = Date.now(), T = () => {
try {
return yc(e, (typeof n == "function" ? n() : t) || t || null);
@@ -16058,7 +16088,7 @@ function Kg({ gridContainer: e, gridWrapper: t, readScrollElement: n = () => nul
} catch (e) {
console.debug?.(e);
}
- Wg(() => {
+ Zg(() => {
let e = Number(s() || 0) || 0;
if (e > 0) try {
t.scrollTop = e;
@@ -16105,7 +16135,7 @@ function Kg({ gridContainer: e, gridWrapper: t, readScrollElement: n = () => nul
c = !0, a = e.last_scan_end, o = e.last_index_end, s = Number(e.total_assets ?? null);
return;
}
- let l = e.last_scan_end && e.last_scan_end !== a, u = e.last_index_end && e.last_index_end !== o, d = Number(e.total_assets ?? null), f = Gg(t, String(n() || "*").trim() || "*"), p = Date.now() - w < 8e3, m = Number.isFinite(d) && Number.isFinite(s) ? d - s : 0, h = Math.max(0, Number(i?.__mjrLastAssetUpsertCount || 0) || 0), g = m >= 20;
+ let l = e.last_scan_end && e.last_scan_end !== a, u = e.last_index_end && e.last_index_end !== o, d = Number(e.total_assets ?? null), f = Qg(t, String(n() || "*").trim() || "*"), p = Date.now() - w < 8e3, m = Number.isFinite(d) && Number.isFinite(s) ? d - s : 0, h = Math.max(0, Number(i?.__mjrLastAssetUpsertCount || 0) || 0), g = m >= 20;
if (Number.isFinite(d) && (s = d), !f || p && D() && !u && !g) {
a = e.last_scan_end, o = e.last_index_end;
return;
@@ -16215,7 +16245,7 @@ function Kg({ gridContainer: e, gridWrapper: t, readScrollElement: n = () => nul
};
}
// ui/features/panel/panelBootstrap.ts
-function qg(e, { useComfyThemeUI: t }) {
+function e_(e, { useComfyThemeUI: t }) {
t ? e.classList.add("mjr-assets-manager") : e.classList.remove("mjr-assets-manager");
let n = e.parentElement || null, r = n ? {
height: n.style.height,
@@ -16227,7 +16257,7 @@ function qg(e, { useComfyThemeUI: t }) {
} catch (e) {
console.debug?.(e);
}
- Qn();
+ Zn();
for (let t of [
() => e._eventCleanup?.(),
() => e._mjrPopoverManager?.dispose?.(),
@@ -16254,10 +16284,10 @@ function qg(e, { useComfyThemeUI: t }) {
};
}
// ui/features/panel/panelSettingsSync.ts
-function Jg({ container: e, state: t, sidebar: n, browseSection: i, gridWrapper: a, similarBtn: o, setSemanticEnabled: s, similarEnabledTitle: c, similarDisabledTitle: l, refreshGridFn: u, isSidebarOpen: d, readActiveAssetId: f, getSidebarController: m, panelLifecycleAC: h }) {
+function t_({ container: e, state: t, sidebar: n, browseSection: i, gridWrapper: a, similarBtn: o, setSemanticEnabled: s, similarEnabledTitle: c, similarDisabledTitle: l, refreshGridFn: u, isSidebarOpen: d, readActiveAssetId: f, getSidebarController: m, panelLifecycleAC: h }) {
let g = "", _ = () => {
try {
- return !!(Hn()?.ai?.vectorSearchEnabled ?? !0);
+ return !!(Vn()?.ai?.vectorSearchEnabled ?? !0);
} catch {
return !0;
}
@@ -16316,7 +16346,7 @@ function Jg({ container: e, state: t, sidebar: n, browseSection: i, gridWrapper:
}
}
}, b = async (e) => {
- let n = String(e || t.scope || "output").toLowerCase(), i = !!Hn()?.watcher?.enabled;
+ let n = String(e || t.scope || "output").toLowerCase(), i = !!Vn()?.watcher?.enabled;
if (n === "custom") try {
await r(!1);
} catch (e) {
@@ -16340,9 +16370,9 @@ function Jg({ container: e, state: t, sidebar: n, browseSection: i, gridWrapper:
}, x = (e) => {
let n = String(e?.detail?.key || "").trim(), r = n === "__init__", i = r || n.startsWith("grid.") || n.startsWith("infiniteScroll.") || n.startsWith("siblings.") || n.startsWith("search.") || n.startsWith("rtHydrate.") || n.startsWith("workflowMinimap."), a = r || n.startsWith("sidebar.") || n.startsWith("ai."), o = r || n.startsWith("watcher.");
try {
- let e = Hn(), t = !!(e?.ai?.vectorSearchEnabled ?? !0), o = String(e?.ui?.cardHoverColor || "").trim(), s = String(e?.ui?.cardSelectionColor || "").trim(), c = String(e?.ui?.ratingColor || "").trim(), l = String(e?.ui?.tagColor || "").trim();
+ let e = Vn(), t = !!(e?.ai?.vectorSearchEnabled ?? !0), o = String(e?.ui?.cardHoverColor || "").trim(), s = String(e?.ui?.cardSelectionColor || "").trim(), c = String(e?.ui?.ratingColor || "").trim(), l = String(e?.ui?.tagColor || "").trim();
if (/^#[0-9a-fA-F]{3,8}$/.test(o) && document.documentElement.style.setProperty("--mjr-card-hover-color", o), /^#[0-9a-fA-F]{3,8}$/.test(s) && document.documentElement.style.setProperty("--mjr-card-selection-color", s), /^#[0-9a-fA-F]{3,8}$/.test(c) && document.documentElement.style.setProperty("--mjr-rating-color", c), /^#[0-9a-fA-F]{3,8}$/.test(l) && document.documentElement.style.setProperty("--mjr-tag-color", l), y(e.sidebar?.position || "right"), v(t), i) {
- let e = $n() || null;
+ let e = Qn() || null;
if (!r && n.startsWith("siblings.")) try {
e?.dispatchEvent(new CustomEvent("mjr:reload-grid"));
} catch {
@@ -16379,7 +16409,7 @@ function Jg({ container: e, state: t, sidebar: n, browseSection: i, gridWrapper:
};
}
// ui/features/panel/panelGridEventBindings.ts
-function Yg({ gridContainer: t, panelLifecycleAC: n, requestQueuedReload: r, notifyContextChanged: i, markUserInteraction: a, writePanelValue: o, popovers: s, collectionsPopover: c, gridController: l, registerSummaryDispose: u }) {
+function n_({ gridContainer: t, panelLifecycleAC: n, requestQueuedReload: r, notifyContextChanged: i, markUserInteraction: a, writePanelValue: o, popovers: s, collectionsPopover: c, gridController: l, registerSummaryDispose: u }) {
let d = null;
try {
d = () => r(), t.addEventListener("mjr:reload-grid", d, { signal: n?.signal }), u(() => {
@@ -16472,34 +16502,34 @@ function Yg({ gridContainer: t, panelLifecycleAC: n, requestQueuedReload: r, not
}
}
// ui/features/panel/panelSimilarSearch.ts
-var Xg = 500;
-function Zg(e) {
+var r_ = 500;
+function i_(e) {
return Number(e?.status || 0) === 404 && String(e?.error || "").toLowerCase().includes("non-json");
}
-function Qg(e, t = "") {
+function a_(e, t = "") {
let n = Array.isArray(e) ? e : [];
- return n.length <= Xg ? {
+ return n.length <= r_ ? {
list: n,
title: t,
truncated: !1,
total: n.length
} : {
- list: n.slice(0, Xg),
- title: `${String(t || "").trim() || "Generation group"} - showing first ${Xg}/${n.length}`,
+ list: n.slice(0, r_),
+ title: `${String(t || "").trim() || "Generation group"} - showing first ${r_}/${n.length}`,
truncated: !0,
total: n.length
};
}
-function $g(e = {}) {
+function o_(e = {}) {
let t = String(e?.stackId || e?.stack_id || "").trim();
if (t) return `stack:${t}`;
let n = String(e?.asset?.id || "").trim();
return e?.isDupGroup ? n ? `duplicates:${n}` : "duplicates" : n ? `group:${n}` : "group";
}
-function e_(e, t) {
+function s_(e, t) {
return String(e?.[t] ?? e?.file_info?.[t] ?? "").trim();
}
-function t_({ similarBtn: t, similarPopover: n, similarFindBtn: r, similarDuplicatesBtn: i, similarSameNodeBtn: a, similarSameWorkflowBtn: o, gridContainer: s, state: c, panelLifecycleAC: l, isAiEnabled: u, similarDisabledTitle: d, readActiveAssetId: f, readSelectedAssetIds: p, readPanelValue: m, writePanelValue: h, scopeController: g, closePopovers: _, closePeerPopovers: v, popovers: y, workflowIdInput: b, reloadGrid: x, getDuplicatesAlert: S }) {
+function c_({ similarBtn: t, similarPopover: n, similarFindBtn: r, similarDuplicatesBtn: i, similarSameNodeBtn: a, similarSameWorkflowBtn: o, gridContainer: s, state: c, panelLifecycleAC: l, isAiEnabled: u, similarDisabledTitle: d, readActiveAssetId: f, readSelectedAssetIds: p, readPanelValue: m, writePanelValue: h, scopeController: g, closePopovers: _, closePeerPopovers: v, popovers: y, workflowIdInput: b, reloadGrid: x, getDuplicatesAlert: S }) {
let C = () => String(f() || p()[0] || "").trim(), w = () => {
let e = Number(C());
return Number.isFinite(e) && e > 0 ? e : 0;
@@ -16525,7 +16555,7 @@ function t_({ similarBtn: t, similarPopover: n, similarFindBtn: r, similarDuplic
} catch (e) {
return console.debug?.(e), null;
}
- }, k = async (e, t) => e && t.some((t) => e_(e, t)) ? e : await O() || e, A = (e = {}) => (Array.isArray(e?.files) ? e.files : []).map((e) => ({
+ }, k = async (e, t) => e && t.some((t) => s_(e, t)) ? e : await O() || e, A = (e = {}) => (Array.isArray(e?.files) ? e.files : []).map((e) => ({
filename: String(e?.filename || "").trim(),
subfolder: String(e?.subfolder || "").trim().replace(/\\/g, "/"),
type: String(e?.type || "").trim().toLowerCase()
@@ -16579,7 +16609,7 @@ function t_({ similarBtn: t, similarPopover: n, similarFindBtn: r, similarDuplic
limit: 500
}), { timeoutMs: 3e4 });
if (!i?.ok) {
- if (Zg(i)) {
+ if (i_(i)) {
if (r.length) {
await j(t, r);
return;
@@ -16656,7 +16686,7 @@ function t_({ similarBtn: t, similarPopover: n, similarFindBtn: r, similarDuplic
} catch (e) {
console.debug?.(e);
}
- let t = await D(), n = String(t?.id || C() || "").trim(), r = Array.isArray(t?._mjrDupMembers) ? t._mjrDupMembers : [];
+ let t = await D(), n = String(t?.id || C() || "").trim(), r = Ku(Array.isArray(t?._mjrDupMembers) ? t._mjrDupMembers : []);
if (r.length >= 2) {
h("similarResults", r), h("similarSourceAssetId", n ? `duplicates:${n}` : "duplicates"), h("similarTitle", R("search.duplicateResults", "Duplicates ({n} assets)", { n: r.length })), await g?.setScope?.("similar");
return;
@@ -16664,12 +16694,12 @@ function t_({ similarBtn: t, similarPopover: n, similarFindBtn: r, similarDuplic
let i = (S?.() || {})?.firstGroup;
i && Array.isArray(i.assets) && i.assets.length >= 2 ? (h("similarResults", i.assets), h("similarSourceAssetId", "duplicates"), h("similarTitle", R("search.duplicateResults", "Duplicates ({n} assets)", { n: i.assets.length })), await g?.setScope?.("similar")) : e(R("search.noKnownDuplicates", "No duplicate group is available yet. Run duplicate analysis from the duplicate alert first."), "info", 3200);
}, ee = async () => {
- let t = await k(await D(), ["source_node_id", "source_node_type"]), n = e_(t, "source_node_id");
+ let t = await k(await D(), ["source_node_id", "source_node_type"]), n = s_(t, "source_node_id");
n ? await M({
sourceNodeId: n,
- sourceNodeType: e_(t, "source_node_type"),
- jobId: e_(t, "job_id"),
- title: e_(t, "source_node_type") || n
+ sourceNodeType: s_(t, "source_node_type"),
+ jobId: s_(t, "job_id"),
+ title: s_(t, "source_node_type") || n
}) : e(R("search.noSourceNode", "Selected asset has no persisted source node id."), "info", 2600);
}, te = async () => {
try {
@@ -16677,7 +16707,7 @@ function t_({ similarBtn: t, similarPopover: n, similarFindBtn: r, similarDuplic
} catch (e) {
console.debug?.(e);
}
- let t = e_(await k(await D(), ["workflow_id"]), "workflow_id");
+ let t = s_(await k(await D(), ["workflow_id"]), "workflow_id");
if (!t) e(R("search.noWorkflowId", "Selected asset has no persisted workflow id."), "info", 2600);
else {
h("workflowId", t);
@@ -16710,8 +16740,8 @@ function t_({ similarBtn: t, similarPopover: n, similarFindBtn: r, similarDuplic
};
F(r, N), F(i, P), F(a, ee), F(o, te), s?.addEventListener(V.OPEN_STACK_GROUP, async (t) => {
try {
- let n = t?.detail || {}, r = Array.isArray(n?.members) ? n.members : [], i = `Generation group (${r.length} assets)`, a = Qg(r, String(n?.title || "").trim() || i);
- a.truncated && e(`Large stack truncated to ${Xg}/${a.total} assets to keep the grid responsive.`, "warn", 5e3), h("similarResults", a.list), h("similarSourceAssetId", $g(n)), h("similarTitle", a.title || i), await Promise.resolve(), await g?.setScope?.("similar");
+ let n = t?.detail || {}, r = Array.isArray(n?.members) ? n.members : [], i = `Generation group (${r.length} assets)`, a = a_(r, String(n?.title || "").trim() || i);
+ a.truncated && e(`Large stack truncated to ${r_}/${a.total} assets to keep the grid responsive.`, "warn", 5e3), h("similarResults", a.list), h("similarSourceAssetId", o_(n)), h("similarTitle", a.title || i), await Promise.resolve(), await g?.setScope?.("similar");
} catch (e) {
console.debug?.(e);
}
@@ -16734,7 +16764,7 @@ function t_({ similarBtn: t, similarPopover: n, similarFindBtn: r, similarDuplic
}
}
// ui/features/panel/panelPinnedFolders.ts
-function n_({ pinnedFoldersBtn: t, pinnedFoldersController: n = null, pinnedFoldersMenu: r = null, pinnedFoldersPopover: i, popovers: a, closeOtherPopovers: o, state: s, gridContainer: c, customSelect: l, scopeController: u, customRootsController: d, gridController: f, applyWatcherForScope: p, refreshDuplicateAlerts: m, notifyContextChanged: h, panelLifecycleAC: g }) {
+function l_({ pinnedFoldersBtn: t, pinnedFoldersController: n = null, pinnedFoldersMenu: r = null, pinnedFoldersPopover: i, popovers: a, closeOtherPopovers: o, state: s, gridContainer: c, customSelect: l, scopeController: u, customRootsController: d, gridController: f, applyWatcherForScope: p, refreshDuplicateAlerts: m, notifyContextChanged: h, panelLifecycleAC: g }) {
let _ = (e) => {
let t = String(e?.id || "").trim();
if (!t) return null;
@@ -16793,7 +16823,7 @@ function n_({ pinnedFoldersBtn: t, pinnedFoldersController: n = null, pinnedFold
let r = String(t?.id || "").trim();
if (!r) return;
let i = String(t?.label || t?.path || r).trim();
- if (!await Wt(R("dialog.unpinFolder", "Unpin folder \"{name}\"?", { name: i }))) return;
+ if (!await Tt(R("dialog.unpinFolder", "Unpin folder \"{name}\"?", { name: i }))) return;
let a = await L(at.CUSTOM_ROOTS_REMOVE, { id: r });
if (!a?.ok) e(a?.error || R("toast.unpinFolderFailed", "Failed to unpin folder"), "error");
else {
@@ -16854,8 +16884,8 @@ function n_({ pinnedFoldersBtn: t, pinnedFoldersController: n = null, pinnedFold
}, { signal: g?.signal });
}
// ui/features/filters/calendar/AgendaCalendar.ts
-var r_ = (e) => String(e).padStart(2, "0");
-function i_(e) {
+var u_ = (e) => String(e).padStart(2, "0");
+function d_(e) {
try {
let t = String(e || "").trim();
if (!/^\d{4}-\d{2}-\d{2}$/.test(t)) return null;
@@ -16867,50 +16897,50 @@ function i_(e) {
return null;
}
}
-function a_(e) {
+function f_(e) {
try {
let t = e.getFullYear(), n = e.getMonth() + 1, r = e.getDate();
- return `${t}-${r_(n)}-${r_(r)}`;
+ return `${t}-${u_(n)}-${u_(r)}`;
} catch {
return "";
}
}
-function o_(e) {
+function p_(e) {
try {
- return `${e.getFullYear()}-${r_(e.getMonth() + 1)}`;
+ return `${e.getFullYear()}-${u_(e.getMonth() + 1)}`;
} catch {
return "";
}
}
-function s_(e) {
+function m_(e) {
try {
return new Date(e.getFullYear(), e.getMonth(), 1);
} catch {
return /* @__PURE__ */ new Date();
}
}
-function c_(e, t) {
+function h_(e, t) {
try {
return new Date(e.getFullYear(), e.getMonth() + t, 1);
} catch {
return /* @__PURE__ */ new Date();
}
}
-function l_(e) {
+function g_(e) {
try {
return new Date(e.getFullYear(), e.getMonth() + 1, 0).getDate();
} catch {
return 31;
}
}
-function u_(e) {
+function __(e) {
try {
return (e.getDay() + 6) % 7;
} catch {
return 0;
}
}
-function d_(e, t) {
+function v_(e, t) {
if (e) try {
let n = String(e.value || "");
e.value = t || "", n !== e.value && e.dispatchEvent?.(new Event("change", { bubbles: !0 }));
@@ -16918,7 +16948,7 @@ function d_(e, t) {
console.debug?.(e);
}
}
-async function f_({ state: e, monthKey: t }) {
+async function y_({ state: e, monthKey: t }) {
try {
let n = String(e?.scope || "output");
if (n === "collection") return {
@@ -16957,7 +16987,7 @@ async function f_({ state: e, monthKey: t }) {
};
}
}
-function p_({ container: e, hiddenInput: t, state: n, onRequestReloadGrid: r = null } = {}) {
+function b_({ container: e, hiddenInput: t, state: n, onRequestReloadGrid: r = null } = {}) {
if (!e || !(e instanceof HTMLElement) || !t) return {
dispose() {},
refresh() {}
@@ -16980,7 +17010,7 @@ function p_({ container: e, hiddenInput: t, state: n, onRequestReloadGrid: r = n
d.type = "button", d.className = "mjr-btn mjr-agenda-clear", d.textContent = R("action.clear", "Clear");
let f = document.createElement("button");
f.type = "button", f.className = "mjr-btn mjr-agenda-refresh", f.textContent = R("action.refresh", "Refresh"), u.appendChild(d), u.appendChild(f), i.appendChild(a), i.appendChild(l), i.appendChild(u), e.appendChild(i);
- let p = s_(i_(t.value) || /* @__PURE__ */ new Date()), m = {}, h = 0, g = !1, _ = () => {
+ let p = m_(d_(t.value) || /* @__PURE__ */ new Date()), m = {}, h = 0, g = !1, _ = () => {
if (g) return;
let e = p.getFullYear(), n = p.getMonth();
s.textContent = p.toLocaleString(void 0, {
@@ -17000,13 +17030,13 @@ function p_({ container: e, hiddenInput: t, state: n, onRequestReloadGrid: r = n
let t = document.createElement("div");
t.className = "mjr-agenda-weekday", t.textContent = e, l.appendChild(t);
}
- let i = u_(new Date(e, n, 1)), a = l_(p), o = i_(t.value), c = o ? a_(o) : "";
+ let i = __(new Date(e, n, 1)), a = g_(p), o = d_(t.value), c = o ? f_(o) : "";
for (let e = 0; e < i; e++) {
let e = document.createElement("div");
e.className = "mjr-agenda-day mjr-agenda-day--blank", l.appendChild(e);
}
for (let r = 1; r <= a; r++) {
- let i = a_(new Date(e, n, r)), a = Number(m?.[i] || 0) || 0, o = document.createElement("button");
+ let i = f_(new Date(e, n, r)), a = Number(m?.[i] || 0) || 0, o = document.createElement("button");
if (o.type = "button", o.className = "mjr-agenda-day", o.textContent = String(r), o.dataset.date = i, a > 0) {
o.classList.add("mjr-agenda-day--has-assets");
let e = R(a === 1 ? "tooltip.assetsDaySingular" : "tooltip.assetsDayPlural", a === 1 ? "{count} asset" : "{count} assets", { count: a });
@@ -17015,26 +17045,26 @@ function p_({ container: e, hiddenInput: t, state: n, onRequestReloadGrid: r = n
t.className = "mjr-agenda-day-badge", t.textContent = a > 99 ? "99+" : String(a), t.setAttribute("aria-label", e), o.appendChild(t);
} else o.title = R("tooltip.noAssetsDay", "No assets on this day");
i === c && o.classList.add("mjr-agenda-day--selected"), o.addEventListener("click", () => {
- d_(t, String(t.value || "").trim() === i ? "" : i);
+ v_(t, String(t.value || "").trim() === i ? "" : i);
}), l.appendChild(o);
}
}, v = async () => {
if (g) return;
- let e = o_(p);
+ let e = p_(p);
if (!e) return;
h += 1;
- let t = h, r = await f_({
+ let t = h, r = await y_({
state: n,
monthKey: e
});
g || t === h && (m = r.ok && r.days || {}, _());
};
return o.addEventListener("click", async () => {
- p = c_(p, -1), await v();
+ p = h_(p, -1), await v();
}), c.addEventListener("click", async () => {
- p = c_(p, 1), await v();
+ p = h_(p, 1), await v();
}), d.addEventListener("click", () => {
- d_(t, "");
+ v_(t, "");
try {
r?.();
} catch (e) {
@@ -17043,9 +17073,9 @@ function p_({ container: e, hiddenInput: t, state: n, onRequestReloadGrid: r = n
}), f.addEventListener("click", async () => {
await v();
}), t.addEventListener("change", () => {
- let e = i_(t.value);
+ let e = d_(t.value);
if (e) {
- let t = s_(e);
+ let t = m_(e);
(t.getFullYear() !== p.getFullYear() || t.getMonth() !== p.getMonth()) && (p = t);
}
_();
@@ -17062,14 +17092,14 @@ function p_({ container: e, hiddenInput: t, state: n, onRequestReloadGrid: r = n
};
}
// ui/features/panel/controllers/filtersController.ts
-var m_ = (e) => {
+var x_ = (e) => {
let t = String(e ?? "").trim();
if (!t) return 0;
let n = t.replace(",", "."), r = Number(n);
return Number.isFinite(r) ? r : 0;
};
-function h_({ state: e, kindSelect: t, wfCheckbox: n, workflowTypeSelect: r, workflowIdInput: i, workflowModelInput: a, workflowRunsOnSelect: o, ratingSelect: s, minSizeInput: c, maxSizeInput: l, resolutionPresetSelect: u, minWidthInput: d, minHeightInput: f, maxWidthInput: p, maxHeightInput: m, dateRangeSelect: h, dateExactInput: g, reloadGrid: _, reconcileSelection: v = null, onFiltersChanged: y = null, lifecycleSignal: b = null }) {
- let { write: x } = ph(e, [
+function S_({ state: e, kindSelect: t, wfCheckbox: n, workflowTypeSelect: r, workflowIdInput: i, workflowModelInput: a, workflowRunsOnSelect: o, ratingSelect: s, minSizeInput: c, maxSizeInput: l, resolutionPresetSelect: u, minWidthInput: d, minHeightInput: f, maxWidthInput: p, maxHeightInput: m, dateRangeSelect: h, dateExactInput: g, reloadGrid: _, reconcileSelection: v = null, onFiltersChanged: y = null, lifecycleSignal: b = null }) {
+ let { write: x } = bh(e, [
"kindFilter",
"workflowOnly",
"minRating",
@@ -17181,7 +17211,7 @@ function h_({ state: e, kindSelect: t, wfCheckbox: n, workflowTypeSelect: r, wor
C();
}, b ? { signal: b } : void 0);
let E = () => {
- let e = m_(c?.value || 0), t = m_(l?.value || 0), n = Number.isFinite(e) && e > 0 ? e : 0, r = Number.isFinite(t) && t > 0 ? t : 0;
+ let e = x_(c?.value || 0), t = x_(l?.value || 0), n = Number.isFinite(e) && e > 0 ? e : 0, r = Number.isFinite(t) && t > 0 ? t : 0;
r > 0 && n > 0 && r < n && (r = n, l && (l.value = String(r))), x("minSizeMB", n), x("maxSizeMB", r);
try {
y?.();
@@ -17192,7 +17222,7 @@ function h_({ state: e, kindSelect: t, wfCheckbox: n, workflowTypeSelect: r, wor
};
T(c, "change", E, b ? { signal: b } : void 0), T(l, "change", E, b ? { signal: b } : void 0);
let D = () => {
- let e = m_(d?.value || 0), t = m_(f?.value || 0), n = m_(p?.value || 0), r = m_(m?.value || 0), i = Number.isFinite(e) && e > 0 ? Math.round(e) : 0, a = Number.isFinite(t) && t > 0 ? Math.round(t) : 0, o = Number.isFinite(n) && n > 0 ? Math.round(n) : 0, s = Number.isFinite(r) && r > 0 ? Math.round(r) : 0;
+ let e = x_(d?.value || 0), t = x_(f?.value || 0), n = x_(p?.value || 0), r = x_(m?.value || 0), i = Number.isFinite(e) && e > 0 ? Math.round(e) : 0, a = Number.isFinite(t) && t > 0 ? Math.round(t) : 0, o = Number.isFinite(n) && n > 0 ? Math.round(n) : 0, s = Number.isFinite(r) && r > 0 ? Math.round(r) : 0;
o > 0 && i > 0 && o < i && (o = i, p && (p.value = String(o))), s > 0 && a > 0 && s < a && (s = a, m && (m.value = String(s))), x("minWidth", i), x("minHeight", a), x("maxWidth", o), x("maxHeight", s);
try {
u && (u.value = {
@@ -17276,7 +17306,7 @@ function h_({ state: e, kindSelect: t, wfCheckbox: n, workflowTypeSelect: r, wor
};
}
// ui/features/panel/panelFiltersInit.ts
-function g_({ state: e, hasVueHeaderSection: t, kindSelect: n, wfCheckbox: r, workflowTypeSelect: i, workflowIdInput: a, workflowModelInput: o, workflowRunsOnSelect: s, ratingSelect: c, minSizeInput: l, maxSizeInput: u, resolutionPresetSelect: d, minWidthInput: f, minHeightInput: p, maxWidthInput: m, maxHeightInput: h, dateRangeSelect: g, dateExactInput: _, agendaContainer: v, gridController: y, reconcileVisibleSelection: b, exitSimilarViewIfActive: x, notifyContextChanged: S, panelLifecycleAC: C, popovers: w = null, filterPopover: T = null }) {
+function C_({ state: e, hasVueHeaderSection: t, kindSelect: n, wfCheckbox: r, workflowTypeSelect: i, workflowIdInput: a, workflowModelInput: o, workflowRunsOnSelect: s, ratingSelect: c, minSizeInput: l, maxSizeInput: u, resolutionPresetSelect: d, minWidthInput: f, minHeightInput: p, maxWidthInput: m, maxHeightInput: h, dateRangeSelect: g, dateExactInput: _, agendaContainer: v, gridController: y, reconcileVisibleSelection: b, exitSimilarViewIfActive: x, notifyContextChanged: S, panelLifecycleAC: C, popovers: w = null, filterPopover: T = null }) {
let E = null;
try {
try {
@@ -17286,7 +17316,7 @@ function g_({ state: e, hasVueHeaderSection: t, kindSelect: n, wfCheckbox: r, wo
} catch (e) {
console.debug?.(e);
}
- E = p_({
+ E = b_({
container: v,
hiddenInput: _,
state: e,
@@ -17327,7 +17357,7 @@ function g_({ state: e, hasVueHeaderSection: t, kindSelect: n, wfCheckbox: r, wo
D = () => {
e &&= (clearTimeout(e), null);
};
- } else D = h_({
+ } else D = S_({
state: e,
kindSelect: n,
wfCheckbox: r,
@@ -17364,7 +17394,7 @@ function g_({ state: e, hasVueHeaderSection: t, kindSelect: n, wfCheckbox: r, wo
};
}
// ui/features/panel/panelContextMenuExtraActions.ts
-function __({ state: t, scopeController: n, browserNav: r, gridController: i, getDuplicatesAlert: a, refreshDuplicateAlerts: o }) {
+function w_({ state: t, scopeController: n, browserNav: r, gridController: i, getDuplicatesAlert: a, refreshDuplicateAlerts: o }) {
return {
clearSimilarScope: async () => {
try {
@@ -17392,14 +17422,14 @@ function __({ state: t, scopeController: n, browserNav: r, gridController: i, ge
if (n && Array.isArray(n.assets) && n.assets.length >= 2) {
let t = n.assets[0] || {}, r = n.assets.slice(1).map((e) => Number(e?.id || 0)).filter((e) => e > 0);
if (r.length) {
- if (await Wt(R("dialog.mergeDuplicateTags", "Exact duplicates detected ({count}). Merge tags into \"{target}\"?", {
+ if (await Tt(R("dialog.mergeDuplicateTags", "Exact duplicates detected ({count}). Merge tags into \"{target}\"?", {
count: n.assets.length,
target: t?.filename || t?.id
}))) {
let n = await ie(Number(t?.id || 0), r);
n?.ok ? e(R("toast.tagsMerged", "Tags merged"), "success", 2200) : e(R("toast.tagMergeFailed", "Tag merge failed: {error}", { error: n?.error || "error" }), "warning", 3500);
}
- if (await Wt(R("dialog.deleteExactDuplicates", "Delete {count} exact duplicate(s)?", { count: r.length }))) {
+ if (await Tt(R("dialog.deleteExactDuplicates", "Delete {count} exact duplicate(s)?", { count: r.length }))) {
let t = await b(r);
t?.ok ? (e(R("toast.duplicatesDeleted", "Duplicates deleted"), "success", 2200), await i.reloadGrid()) : e(R("toast.deleteFailed", "Delete failed: {error}", { error: t?.error || "error" }), "warning", 3500);
}
@@ -17407,22 +17437,22 @@ function __({ state: t, scopeController: n, browserNav: r, gridController: i, ge
return;
}
}
- if (!await Wt(R("dialog.startDuplicateAnalysis", "Start duplicate analysis in background?"))) return;
+ if (!await Tt(R("dialog.startDuplicateAnalysis", "Start duplicate analysis in background?"))) return;
let r = await Ae(500);
r?.ok ? e(R("toast.dupAnalysisStarted", "Duplicate analysis started"), "info", 2200) : e(R("toast.analysisNotStarted", "Analysis not started: {error}", { error: r?.error || "error" }), "warning", 3500), await o();
}
};
}
// ui/features/panel/panelRuntime.ts
-async function v_(e, { useComfyThemeUI: t = !0, external: n = {} } = {}) {
- return y_(e, {
+async function T_(e, { useComfyThemeUI: t = !0, external: n = {} } = {}) {
+ return E_(e, {
useComfyThemeUI: t,
external: n
});
}
-async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
- Vp("panelRender"), Wp("panelRender");
- let i = typeof AbortController < "u" ? new AbortController() : null, { popovers: a, hostWrapper: o, hostWrapperPrevStyle: s } = qg(t, { useComfyThemeUI: n }), c = fh();
+async function E_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
+ Jp("panelRender"), Zp("panelRender");
+ let i = typeof AbortController < "u" ? new AbortController() : null, { popovers: a, hostWrapper: o, hostWrapperPrevStyle: s } = e_(t, { useComfyThemeUI: n }), c = yh();
if (!c) throw Error("[Majoor] mountAssetsManagerPanelRuntime requires an active Pinia panel store");
for (let e of [
"statusSection",
@@ -17438,7 +17468,7 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
"gridContainer",
"sidebar"
]) if (!r?.[e]) throw Error(`[Majoor] mountAssetsManagerPanelRuntime now requires external.${e}`);
- let l = ph(null, [
+ let l = bh(null, [
"searchQuery",
"scrollTop",
"scope",
@@ -17467,7 +17497,7 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
l.write("searchQuery", e.target.value);
}, { signal: i?.signal });
let Ue = r.summaryBar, We = r.updateSummaryBar, Ge = r.folderBreadcrumb, Ke = r.folderBreadcrumbController || null, qe = r.statusSection, Je = r.statusDot, Ye = r.statusText, Xe = r.capabilitiesSection, Ze = r.browseSection, Qe = r.gridWrapper, $e = r.sidebar;
- Hn();
+ Vn();
let et = document.createElement("div");
et.classList.add("mjr-am-content");
let z = null, tt = null;
@@ -17490,7 +17520,7 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
}, {
passive: !0,
signal: i?.signal
- }), z = r.gridContainer, z.parentElement !== Qe && Qe.appendChild(z), nr(z);
+ }), z = r.gridContainer, z.parentElement !== Qe && Qe.appendChild(z), tr(z);
try {
z.dataset.mjrScope = String(d("scope", c.scope || "output") || "output");
} catch (e) {
@@ -17537,7 +17567,7 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
gridContainer: z,
getState: () => c
});
- let vt = R("search.findSimilar", "Find Similar"), yt = R("search.similarDisabled", "AI features are disabled in settings"), { applyWatcherForScope: bt, isAiEnabled: xt } = Jg({
+ let vt = R("search.findSimilar", "Find Similar"), yt = R("search.similarDisabled", "AI features are disabled in settings"), { applyWatcherForScope: bt, isAiEnabled: xt } = t_({
container: t,
state: c,
sidebar: $e,
@@ -17560,7 +17590,7 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
console.debug?.(e);
}
t._mjrVersionUpdateCleanup = Ve || g._mjrVersionUpdateCleanup, t.appendChild(et);
- let St = () => mg(Ne), Ct = hg({
+ let St = () => xg(Ne), Ct = Sg({
gridContainer: z,
loadAssets: lt,
loadAssetsFromList: ut,
@@ -17601,7 +17631,7 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
}
It();
};
- it || (Mt = Ug({
+ it || (Mt = Xg({
gridContainer: z,
readSelectedAssetIds: p,
readActiveAssetId: () => m(),
@@ -17611,7 +17641,7 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
rt(), Lt();
},
lifecycleSignal: i?.signal || null
- })), At = gg({
+ })), At = Cg({
state: c,
gridContainer: z,
folderBreadcrumb: Ge,
@@ -17661,7 +17691,7 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
console.debug?.(e);
}
}, zt = null;
- Yg({
+ n_({
gridContainer: z,
panelLifecycleAC: i,
requestQueuedReload: () => {
@@ -17688,12 +17718,12 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
gridController: Ct,
registerSummaryDispose: ct
});
- let Bt = xg({
+ let Bt = Og({
state: c,
customSelect: E,
customRemoveBtn: O,
- comfyConfirm: Wt,
- comfyPrompt: Tt,
+ comfyConfirm: Tt,
+ comfyPrompt: Ut,
comfyToast: e,
get: re,
post: L,
@@ -17716,7 +17746,7 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
console.debug?.(e);
}
}
- }), Vt = Bt.bind({
+ }), Ht = Bt.bind({
customAddBtn: D,
customRemoveBtn: O
});
@@ -17728,7 +17758,7 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
} catch (e) {
console.debug?.(e);
}
- let Ut = () => {
+ let Wt = () => {
try {
let t = z?._mjrGetAssets, n = z?._mjrSetSelection;
if (typeof t != "function" || typeof n != "function") return;
@@ -17740,7 +17770,7 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
console.debug?.(e);
}
};
- wt = _g({
+ wt = wg({
state: c,
tabButtons: _,
customMenuBtn: v,
@@ -17748,7 +17778,7 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
popovers: a,
refreshCustomRoots: Bt.refreshCustomRoots,
reloadGrid: Ct.reloadGrid,
- reconcileSelection: Ut,
+ reconcileSelection: Wt,
onChanged: () => {
try {
z && (z.dataset.mjrScope = String(d("scope", c.scope || "output") || "output"));
@@ -17781,7 +17811,7 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
console.debug?.(e);
}
try {
- await km(Je, Ye, Xe, {
+ await Im(Je, Ye, Xe, {
scope: d("scope", c.scope || "output"),
customRootId: d("customRootId", c.customRootId || "")
}, null, { signal: i?.signal || null });
@@ -17800,7 +17830,7 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
};
Object.values(_).forEach((e) => {
e.addEventListener("click", () => wt.setScope(e.dataset.scope), { signal: i?.signal });
- }), dg({
+ }), vg({
messageBtn: C,
messagePopover: xe,
title: be,
@@ -17836,7 +17866,7 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
Pe
]), a.setOnVisibilityChanged?.(() => It());
try {
- window.addEventListener(Jn, (e) => {
+ window.addEventListener(qn, (e) => {
Pt = !!e?.detail?.open, It();
}, { signal: i?.signal });
} catch (e) {
@@ -17849,7 +17879,7 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
}, { signal: i?.signal }), x.addEventListener("click", (e) => {
e.stopPropagation(), a.close(T), a.close(k), a.close(pe), a.close(xe), a.close(Fe), a.toggle(ge, x);
}, { signal: i?.signal });
- let Kt = He ? null : Sg({
+ let Kt = He ? null : kg({
state: c,
sortBtn: b,
sortMenu: me,
@@ -17862,7 +17892,7 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
a.close(T), a.close(k), a.close(ge), a.close(xe), a.close(Fe);
} }) : b.addEventListener("click", (e) => {
e.stopPropagation(), a.close(T), a.close(k), a.close(ge), a.close(xe), a.close(Fe), a.toggle(pe, b);
- }, { signal: i?.signal }), t_({
+ }, { signal: i?.signal }), c_({
similarBtn: Pe,
similarPopover: Fe,
similarFindBtn: Ie,
@@ -17889,7 +17919,7 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
workflowIdInput: P,
reloadGrid: () => Ct.reloadGrid(),
getDuplicatesAlert: () => Dt
- }), n_({
+ }), l_({
pinnedFoldersBtn: S,
pinnedFoldersController: ve,
pinnedFoldersMenu: ye,
@@ -17909,7 +17939,7 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
notifyContextChanged: Lt,
panelLifecycleAC: i
});
- let { agendaCalendar: qt, disposeFilters: Jt } = g_({
+ let { agendaCalendar: qt, disposeFilters: Jt } = C_({
state: c,
hasVueHeaderSection: He,
kindSelect: A,
@@ -17930,13 +17960,13 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
dateExactInput: ue,
agendaContainer: de,
gridController: Ct,
- reconcileVisibleSelection: Ut,
+ reconcileVisibleSelection: Wt,
exitSimilarViewIfActive: Gt,
notifyContextChanged: Lt,
panelLifecycleAC: i,
popovers: a,
filterPopover: k
- }), Yt = __({
+ }), Yt = w_({
state: c,
scopeController: wt,
browserNav: At,
@@ -17945,7 +17975,7 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
refreshDuplicateAlerts: Rt
});
try {
- Et = bg({
+ Et = Dg({
state: c,
gridContainer: z,
filterBtn: y,
@@ -18019,13 +18049,13 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
} catch (e) {
console.debug?.(e);
}
- tt = Bg({
+ tt = qg({
gridContainer: z,
sidebar: $e,
createRatingBadge: gt,
- createTagsBadge: Ht,
- showAssetInSidebar: $m,
- closeSidebar: eh,
+ createTagsBadge: Vt,
+ showAssetInSidebar: oh,
+ closeSidebar: sh,
state: c
});
let Xt = {
@@ -18053,14 +18083,14 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
loadAssets: lt,
lifecycleSignal: i?.signal || null
};
- Nt = typeof r?.initAssetsQueryController == "function" ? r.initAssetsQueryController(Xt) : Kg({
+ Nt = typeof r?.initAssetsQueryController == "function" ? r.initAssetsQueryController(Xt) : $g({
gridContainer: z,
gridWrapper: Qe,
...Xt
});
- let Zt = Vg({
+ let Zt = Jg({
onTriggerScan: (e) => {
- xm(Je, Ye, Xe, e || {});
+ Om(Je, Ye, Xe, e || {});
},
onToggleDetails: () => {
tt?.toggleDetails?.();
@@ -18205,7 +18235,7 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
console.debug?.(e);
}
try {
- Vt?.();
+ Ht?.();
} catch (e) {
console.debug?.(e);
}
@@ -18219,7 +18249,7 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
} catch (e) {
console.debug?.(e);
}
- Qn(z), z = null;
+ Zn(z), z = null;
try {
a.dispose();
} catch (e) {
@@ -18239,7 +18269,7 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
let en = async () => {
await Nt?.queuedReload?.();
};
- zm(Je, Ye, qe, Xe, Nt?.createCountersUpdateHandler?.({
+ Km(Je, Ye, qe, Xe, Nt?.createCountersUpdateHandler?.({
state: c,
getStableQuery: () => String(z?.dataset?.mjrQuery || "*").trim() || "*",
getRecentUserInteractionAt: () => Number(nt || 0)
@@ -18259,7 +18289,7 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
Gt({ reload: !1 }), Lt();
},
startSearchTimer: () => {
- Vp("searchQuery");
+ Jp("searchQuery");
},
reloadGrid: () => {
Ct.reloadGrid();
@@ -18269,7 +18299,7 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
try {
tn = await _t(z, {
scope: d("scope", c.scope || "output") || "output",
- query: String(mg(l.read("searchQuery", c.searchQuery || "*") || "*") || "*"),
+ query: String(xg(l.read("searchQuery", c.searchQuery || "*") || "*") || "*"),
customRootId: d("customRootId", c.customRootId || "") || "",
subfolder: d("currentFolderRelativePath", c.currentFolderRelativePath || "") || "",
collectionId: d("collectionId", c.collectionId || "") || "",
@@ -18301,7 +18331,7 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
} catch (e) {
console.debug?.(e);
}
- let rn = Wf(), an = !rn && (tn || nn) ? Promise.resolve({
+ let rn = Zf(), an = !rn && (tn || nn) ? Promise.resolve({
ok: !0,
hydrated: !!tn,
cached: !!nn
@@ -18340,14 +18370,14 @@ async function y_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) {
} catch (e) {
console.debug?.(e);
}
- return qp(Hp("panelRender", "gridRender") ?? 0), { gridContainer: z };
+ return em(Yp("panelRender", "gridRender") ?? 0), { gridContainer: z };
}
// ui/vue/components/status/StatusSection.vue
-var b_ = /* @__PURE__ */ fr({
+var D_ = /* @__PURE__ */ dr({
__name: "StatusSection",
setup(e, { expose: t }) {
- let n = bm({ getScanContext: null }), r = n.querySelector("#mjr-status-dot"), i = n.querySelector("#mjr-status-text"), a = n.querySelector("#mjr-status-capabilities");
- return ir(() => {
+ let n = Dm({ getScanContext: null }), r = n.querySelector("#mjr-status-dot"), i = n.querySelector("#mjr-status-text"), a = n.querySelector("#mjr-status-capabilities");
+ return rr(() => {
try {
n?._mjrStatusPollDispose?.();
} catch {}
@@ -18358,25 +18388,25 @@ var b_ = /* @__PURE__ */ fr({
capabilitiesSection: a
}), (e, t) => null;
}
-}), x_ = wr({
+}), O_ = Cr({
open: !1,
initial: null,
resolve: null
});
-function S_(e = {}) {
- return x_.open = !0, x_.initial = e || {}, new Promise((e) => {
- x_.resolve = e;
+function k_(e = {}) {
+ return O_.open = !0, O_.initial = e || {}, new Promise((e) => {
+ O_.resolve = e;
});
}
-function C_(e = null) {
- let t = x_.resolve;
- x_.open = !1, x_.initial = null, x_.resolve = null, t && t(e);
+function A_(e = null) {
+ let t = O_.resolve;
+ O_.open = !1, O_.initial = null, O_.resolve = null, t && t(e);
}
// ui/vue/components/panel/SimilarSearchPopover.vue?vue&type=script&setup=true&lang.ts
-var w_ = {
+var j_ = {
class: "mjr-popover mjr-similar-popover",
style: { display: "none" }
-}, T_ = { class: "mjr-menu mjr-similar-menu" }, E_ = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, D_ = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, O_ = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, k_ = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, A_ = /* @__PURE__ */ fr({
+}, M_ = { class: "mjr-menu mjr-similar-menu" }, N_ = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, P_ = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, F_ = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, I_ = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, L_ = /* @__PURE__ */ dr({
__name: "SimilarSearchPopover",
setup(e, { expose: t }) {
let n = Q(null), r = Q(null), i = Q(null), a = Q(null), o = (e) => e?.$el || e || null;
@@ -18394,8 +18424,8 @@ var w_ = {
return o(a.value);
}
}), (e, t) => {
- let o = or("MButton");
- return q(), X("div", w_, [U("div", T_, [
+ let o = ar("MButton");
+ return q(), X("div", j_, [U("div", M_, [
Y(o, {
ref_key: "findSimilarBtnRef",
ref: n,
@@ -18405,7 +18435,7 @@ var w_ = {
text: "",
title: Z(R)("search.findSimilarWarning", "Find similar assets. This may be heavy on very large libraries.")
}, {
- default: W(() => [U("span", E_, [t[0] ||= U("i", {
+ default: W(() => [U("span", N_, [t[0] ||= U("i", {
class: "pi pi-sparkles",
"aria-hidden": "true"
}, null, -1), U("span", null, J(Z(R)("search.findSimilar", "Find Similar")), 1)])]),
@@ -18419,7 +18449,7 @@ var w_ = {
severity: "secondary",
text: ""
}, {
- default: W(() => [U("span", D_, [t[1] ||= U("i", {
+ default: W(() => [U("span", P_, [t[1] ||= U("i", {
class: "pi pi-clone",
"aria-hidden": "true"
}, null, -1), U("span", null, J(Z(R)("search.findDuplicates", "Find Duplicate")), 1)])]),
@@ -18434,7 +18464,7 @@ var w_ = {
severity: "secondary",
text: ""
}, {
- default: W(() => [U("span", O_, [t[2] ||= U("i", {
+ default: W(() => [U("span", F_, [t[2] ||= U("i", {
class: "pi pi-share-alt",
"aria-hidden": "true"
}, null, -1), U("span", null, J(Z(R)("search.generatedWithSameSaveNode", "Generated with same save node")), 1)])]),
@@ -18448,7 +18478,7 @@ var w_ = {
severity: "secondary",
text: ""
}, {
- default: W(() => [U("span", k_, [t[3] ||= U("i", {
+ default: W(() => [U("span", I_, [t[3] ||= U("i", {
class: "pi pi-sitemap",
"aria-hidden": "true"
}, null, -1), U("span", null, J(Z(R)("search.generatedFromSameWorkflow", "Generated from same workflow")), 1)])]),
@@ -18457,11 +18487,11 @@ var w_ = {
])]);
};
}
-}), j_ = { class: "mjr-am-search-pill" }, M_ = ["id"], N_ = { class: "mjr-am-search-tools" }, P_ = { class: "mjr-popover-anchor" }, F_ = { class: "mjr-popover-anchor" }, I_ = "Ctrl/Cmd+F, Ctrl/Cmd+K, Ctrl/Cmd+H", L_ = "AND", R_ = /* @__PURE__ */ fr({
+}), R_ = { class: "mjr-am-search-pill" }, z_ = ["id"], B_ = { class: "mjr-am-search-tools" }, V_ = { class: "mjr-popover-anchor" }, H_ = { class: "mjr-popover-anchor" }, U_ = "Ctrl/Cmd+F, Ctrl/Cmd+K, Ctrl/Cmd+H", W_ = "AND", G_ = /* @__PURE__ */ dr({
__name: "SearchBar",
emits: ["search-change"],
setup(e, { expose: t, emit: n }) {
- let r = n, i = dh(), a = Q(null), o = Q(null), s = Q(null), c = Q(null), l = Q(null), u = Q(null), d = Ne("mjr-search-autocomplete-", 8), f = (e) => e?.$el || e || null, p = () => f(o.value), m = Q(!1), h = Q(!0), g = Q(L_), _ = null, v = null, y = K(() => m.value ? R("search.semanticPlaceholder", "Describe what you're looking for...") : R("search.placeholder", "Search assets...")), b = K(() => m.value ? Vt(R("search.semanticTitle", "AI semantic search — describe your image in natural language"), I_) : Vt(R("search.title", "Search by filename, tags, or attributes (e.g. rating:5, ext:png)"), I_)), x = K(() => m.value ? {
+ let r = n, i = vh(), a = Q(null), o = Q(null), s = Q(null), c = Q(null), l = Q(null), u = Q(null), d = Ne("mjr-search-autocomplete-", 8), f = (e) => e?.$el || e || null, p = () => f(o.value), m = Q(!1), h = Q(!0), g = Q(W_), _ = null, v = null, y = K(() => m.value ? R("search.semanticPlaceholder", "Describe what you're looking for...") : R("search.placeholder", "Search assets...")), b = K(() => m.value ? Bt(R("search.semanticTitle", "AI semantic search — describe your image in natural language"), U_) : Bt(R("search.title", "Search by filename, tags, or attributes (e.g. rating:5, ext:png)"), U_)), x = K(() => m.value ? {
background: "rgba(0, 188, 212, 0.2)",
borderColor: "rgba(0, 188, 212, 0.6)",
color: "#00BCD4",
@@ -18498,7 +18528,7 @@ var w_ = {
}
}, T = async (e) => {
let t = e.target?.value || "";
- i.searchQuery = t, i.metadataSearchMode = L_, S(), C({ query: t }), await j();
+ i.searchQuery = t, i.metadataSearchMode = W_, S(), C({ query: t }), await j();
}, E = (e) => {
let t = String(e || "").split(/\s+/);
return t[t.length - 1] || "";
@@ -18514,17 +18544,17 @@ var w_ = {
return `${n ? n[1] : ""}${t}`.trimStart();
}
function k(e, t) {
- let n = E(e), r = n.replace(/^-/, ""), i = Cn();
+ let n = E(e), r = n.replace(/^-/, ""), i = Sn();
if (!r.includes(":")) {
let t = r.toLowerCase();
return Object.keys(i).filter((e) => e.startsWith(t)).slice(0, 12).map((t) => O(e, `${n.startsWith("-") ? "-" : ""}${t}:`));
}
let [a, o = ""] = r.split(/:(.*)/s);
- if (!Ln(a)) return [];
+ if (!In(a)) return [];
let s = o.toLowerCase(), c = Array.isArray(t?.keys) ? t.keys : [], l = t?.workflow_nodes || {};
return [...c, ...Object.keys(l).flatMap((e) => (l[e] || []).map((t) => `workflow_nodes.${e}.${t}`))].filter((e) => String(e || "").toLowerCase().includes(s)).slice(0, 16).map((t) => O(e, `${n.startsWith("-") ? "-" : ""}${a}:${t}`));
}
- let A = 0, j = Yt(async () => {
+ let A = 0, j = Jt(async () => {
let e = (p()?.value || "").trim();
if (m.value || e.length < 1) return;
let t = ++A;
@@ -18544,19 +18574,19 @@ var w_ = {
}));
} catch {}
}, 300);
- return lr(() => i.searchQuery, (e) => {
+ return cr(() => i.searchQuery, (e) => {
let t = p();
t && t.value !== e && (t.value = e);
- }), lr(h, (e) => {
+ }), cr(h, (e) => {
!e && m.value && (m.value = !1), S();
- }), lr(m, () => {
+ }), cr(m, () => {
S();
- }), lr(() => i.metadataSearchMode, (e) => {
- String(e || "").toUpperCase() !== L_ && (i.metadataSearchMode = L_), g.value !== L_ && (g.value = L_), S();
+ }), cr(() => i.metadataSearchMode, (e) => {
+ String(e || "").toUpperCase() !== W_ && (i.metadataSearchMode = W_), g.value !== W_ && (g.value = W_), S();
}), Mr(() => {
try {
let e = p();
- e && (e.value = i.searchQuery || ""), i.metadataSearchMode = L_;
+ e && (e.value = i.searchQuery || ""), i.metadataSearchMode = W_;
} catch (e) {
console.debug?.(e);
}
@@ -18593,12 +18623,12 @@ var w_ = {
h.value = !!e, S();
}
}), (e, t) => {
- let n = or("MInputText"), r = or("MButton");
+ let n = ar("MInputText"), r = ar("MButton");
return q(), X("div", {
ref_key: "searchSectionRef",
ref: a,
class: "mjr-am-search"
- }, [U("div", j_, [
+ }, [U("div", R_, [
t[0] ||= U("span", { class: "mjr-am-search-icon" }, [U("i", { class: "pi pi-search" })], -1),
Y(n, {
ref_key: "searchInputRef",
@@ -18619,9 +18649,9 @@ var w_ = {
ref_key: "dataListRef",
ref: s,
id: Z(d)
- }, null, 8, M_)
- ]), U("div", N_, [
- U("div", P_, [Y(r, {
+ }, null, 8, z_)
+ ]), U("div", B_, [
+ U("div", V_, [Y(r, {
ref_key: "semanticBtnRef",
ref: u,
type: "button",
@@ -18632,7 +18662,7 @@ var w_ = {
disabled: !h.value,
"aria-disabled": !h.value,
title: h.value ? Z(R)("search.semanticToggle", "Toggle AI semantic search (CLIP-based)") : Z(R)("search.semanticDisabled", "AI semantic search is disabled in settings"),
- style: Sr(x.value),
+ style: xr(x.value),
onClick: w
}, {
default: W(() => [...t[1] ||= [U("i", { class: "pi pi-sparkles" }, null, -1)]]),
@@ -18643,7 +18673,7 @@ var w_ = {
"title",
"style"
])]),
- U("div", F_, [Y(r, {
+ U("div", H_, [Y(r, {
ref_key: "similarBtnRef",
ref: c,
type: "button",
@@ -18655,24 +18685,24 @@ var w_ = {
}, {
default: W(() => [...t[2] ||= [U("i", { class: "pi pi-search" }, null, -1)]]),
_: 1
- }, 8, ["title"]), Y(A_, {
+ }, 8, ["title"]), Y(L_, {
ref_key: "similarPopoverRef",
ref: l
}, null, 512)]),
- _r(e.$slots, "filter-anchor"),
- _r(e.$slots, "sort-anchor"),
- _r(e.$slots, "collections-anchor"),
- _r(e.$slots, "pinned-folders-anchor")
+ gr(e.$slots, "filter-anchor"),
+ gr(e.$slots, "sort-anchor"),
+ gr(e.$slots, "collections-anchor"),
+ gr(e.$slots, "pinned-folders-anchor")
])], 512);
};
}
-}), z_ = {
+}), K_ = {
class: "mjr-popover mjr-sort-popover",
style: { display: "none" }
-}, B_ = { class: "mjr-menu-item-label" }, V_ = /* @__PURE__ */ fr({
+}, q_ = { class: "mjr-menu-item-label" }, J_ = /* @__PURE__ */ dr({
__name: "SortPopover",
setup(e) {
- let t = dh(), n = K(() => t.sort || "mtime_desc"), r = (e) => {
+ let t = vh(), n = K(() => t.sort || "mtime_desc"), r = (e) => {
t.sort = e;
try {
window.dispatchEvent(new CustomEvent("mjr:sort-changed", { detail: { sort: e } }));
@@ -18721,33 +18751,33 @@ var w_ = {
command: () => r(e.key)
})));
return (e, t) => {
- let r = or("MMenu");
- return q(), X("div", z_, [Y(r, {
+ let r = ar("MMenu");
+ return q(), X("div", K_, [Y(r, {
model: i.value,
class: "mjr-menu mjr-prime-menu mjr-sort-menu",
pt: { list: { class: "mjr-menu mjr-prime-menu-list" } }
}, {
- item: W(({ item: e }) => [U("div", { class: Dr(["mjr-menu-item", { "is-active": n.value === e.key }]) }, [U("span", B_, J(e.label), 1), U("i", {
+ item: W(({ item: e }) => [U("div", { class: Dr(["mjr-menu-item", { "is-active": n.value === e.key }]) }, [U("span", q_, J(e.label), 1), U("i", {
class: Dr([e.icon, "mjr-menu-item-check"]),
- style: Sr({ opacity: +(n.value === e.key) })
+ style: xr({ opacity: +(n.value === e.key) })
}, null, 6)], 2)]),
_: 1
}, 8, ["model"])]);
};
}
-}), H_ = { class: "mjr-popover mjr-filter-popover mjr-popover--hidden" }, U_ = { class: "mjr-filter-head" }, W_ = { class: "mjr-filter-head-left" }, G_ = { class: "mjr-filter-kicker" }, K_ = { class: "mjr-filter-subtitle" }, q_ = { class: "mjr-filter-head-actions" }, J_ = { class: "mjr-filter-active-count" }, Y_ = { class: "mjr-filter-group-title" }, X_ = {
+}), Y_ = { class: "mjr-popover mjr-filter-popover mjr-popover--hidden" }, X_ = { class: "mjr-filter-head" }, Z_ = { class: "mjr-filter-head-left" }, Q_ = { class: "mjr-filter-kicker" }, $_ = { class: "mjr-filter-subtitle" }, ev = { class: "mjr-filter-head-actions" }, tv = { class: "mjr-filter-active-count" }, nv = { class: "mjr-filter-group-title" }, rv = {
class: "mjr-filter-group-chevron",
"aria-hidden": "true"
-}, Z_ = { class: "mjr-filter-group-body" }, Q_ = { class: "mjr-filter-card" }, $_ = { class: "mjr-popover-row" }, ev = { class: "mjr-popover-label" }, tv = { class: "mjr-popover-row" }, nv = { class: "mjr-popover-label" }, rv = ["title"], iv = { class: "mjr-filter-card" }, av = { class: "mjr-popover-row" }, ov = { class: "mjr-popover-label" }, sv = { class: "mjr-popover-row" }, cv = { class: "mjr-popover-label" }, lv = { class: "mjr-popover-row" }, uv = { class: "mjr-popover-label" }, dv = { class: "mjr-filter-stack" }, fv = { class: "mjr-popover-row" }, pv = { class: "mjr-popover-label" }, mv = { class: "mjr-popover-row" }, hv = { class: "mjr-popover-label" }, gv = { class: "mjr-filter-group-title" }, _v = {
+}, iv = { class: "mjr-filter-group-body" }, av = { class: "mjr-filter-card" }, ov = { class: "mjr-popover-row" }, sv = { class: "mjr-popover-label" }, cv = { class: "mjr-popover-row" }, lv = { class: "mjr-popover-label" }, uv = ["title"], dv = { class: "mjr-filter-card" }, fv = { class: "mjr-popover-row" }, pv = { class: "mjr-popover-label" }, mv = { class: "mjr-popover-row" }, hv = { class: "mjr-popover-label" }, gv = { class: "mjr-popover-row" }, _v = { class: "mjr-popover-label" }, vv = { class: "mjr-filter-stack" }, yv = { class: "mjr-popover-row" }, bv = { class: "mjr-popover-label" }, xv = { class: "mjr-popover-row" }, Sv = { class: "mjr-popover-label" }, Cv = { class: "mjr-filter-group-title" }, wv = {
class: "mjr-filter-group-chevron",
"aria-hidden": "true"
-}, vv = { class: "mjr-filter-group-body" }, yv = { class: "mjr-filter-card" }, bv = { class: "mjr-popover-row mjr-popover-row--3col" }, xv = { class: "mjr-popover-label" }, Sv = { class: "mjr-popover-row" }, Cv = { class: "mjr-popover-label" }, wv = { class: "mjr-popover-row mjr-popover-row--3col" }, Tv = { class: "mjr-popover-label" }, Ev = { class: "mjr-popover-row mjr-popover-row--3col" }, Dv = { class: "mjr-popover-label" }, Ov = { class: "mjr-filter-group-title" }, kv = {
+}, Tv = { class: "mjr-filter-group-body" }, Ev = { class: "mjr-filter-card" }, Dv = { class: "mjr-popover-row mjr-popover-row--3col" }, Ov = { class: "mjr-popover-label" }, kv = { class: "mjr-popover-row" }, Av = { class: "mjr-popover-label" }, jv = { class: "mjr-popover-row mjr-popover-row--3col" }, Mv = { class: "mjr-popover-label" }, Nv = { class: "mjr-popover-row mjr-popover-row--3col" }, Pv = { class: "mjr-popover-label" }, Fv = { class: "mjr-filter-group-title" }, Iv = {
class: "mjr-filter-group-chevron",
"aria-hidden": "true"
-}, Av = { class: "mjr-filter-group-body" }, jv = { class: "mjr-filter-card mjr-filter-card--agenda" }, Mv = { class: "mjr-popover-row" }, Nv = { class: "mjr-popover-label" }, Pv = { class: "mjr-popover-row" }, Fv = { class: "mjr-popover-label" }, Iv = /* @__PURE__ */ fr({
+}, Lv = { class: "mjr-filter-group-body" }, Rv = { class: "mjr-filter-card mjr-filter-card--agenda" }, zv = { class: "mjr-popover-row" }, Bv = { class: "mjr-popover-label" }, Vv = { class: "mjr-popover-row" }, Hv = { class: "mjr-popover-label" }, Uv = /* @__PURE__ */ dr({
__name: "FilterPopover",
setup(e, { expose: t }) {
- let n = dh(), r = Q(null), a = Q(null), o = Q(null), s = Q(null), c = Q(null), l = Q(null), u = Q(null), d = Q(null), f = Q(null), p = Q(null), m = Q([{
+ let n = vh(), r = Q(null), a = Q(null), o = Q(null), s = Q(null), c = Q(null), l = Q(null), u = Q(null), d = Q(null), f = Q(null), p = Q(null), m = Q([{
label: R("filter.any", "Any"),
value: ""
}]), h = (e) => e?.$el || e || null, g = (e) => h(e.value)?.value || "", _ = (e, t) => {
@@ -19111,9 +19141,9 @@ var w_ = {
return u.value;
}
}), (e, t) => {
- let i = or("MButton"), m = or("MSelect"), h = or("MCheckbox"), g = or("MInputText");
- return q(), X("div", H_, [
- U("div", U_, [U("div", W_, [U("div", G_, J(Z(R)("label.filters", "Filters")), 1), U("div", K_, J(Z(R)("label.refineResults", "Refine your results")), 1)]), U("div", q_, [U("span", J_, J(ve.value), 1), Y(i, {
+ let i = ar("MButton"), m = ar("MSelect"), h = ar("MCheckbox"), g = ar("MInputText");
+ return q(), X("div", Y_, [
+ U("div", X_, [U("div", Z_, [U("div", Q_, J(Z(R)("label.filters", "Filters")), 1), U("div", $_, J(Z(R)("label.refineResults", "Refine your results")), 1)]), U("div", ev, [U("span", tv, J(ve.value), 1), Y(i, {
type: "button",
class: "mjr-filter-clear-all",
severity: "secondary",
@@ -19121,7 +19151,7 @@ var w_ = {
disabled: ve.value === 0,
onClick: ye
}, {
- default: W(() => [rr(J(Z(R)("action.clearAll", "Clear all")), 1)]),
+ default: W(() => [nr(J(Z(R)("action.clearAll", "Clear all")), 1)]),
_: 1
}, 8, ["disabled"])])]),
U("div", { class: Dr(["mjr-filter-group mjr-filter-group--core", { "is-open": se("core") }]) }, [Y(i, {
@@ -19132,9 +19162,9 @@ var w_ = {
"aria-expanded": String(se("core")),
onClick: t[0] ||= (e) => oe("core")
}, {
- default: W(() => [U("span", Y_, J(Z(R)("group.core", "Core")), 1), U("span", X_, J(se("core") ? "▾" : "▸"), 1)]),
+ default: W(() => [U("span", nv, J(Z(R)("group.core", "Core")), 1), U("span", rv, J(se("core") ? "▾" : "▸"), 1)]),
_: 1
- }, 8, ["aria-expanded"]), vr(U("div", Z_, [U("div", Q_, [U("div", $_, [U("div", ev, J(Z(R)("label.type")), 1), Y(m, {
+ }, 8, ["aria-expanded"]), _r(U("div", iv, [U("div", av, [U("div", ov, [U("div", sv, J(Z(R)("label.type")), 1), Y(m, {
class: "mjr-select mjr-filter-select",
"panel-class": "mjr-filter-select-panel",
title: Z(R)("tooltip.filterByFileType", "Filter by file type"),
@@ -19147,7 +19177,7 @@ var w_ = {
"title",
"model-value",
"options"
- ])]), U("div", tv, [U("div", nv, J(Z(R)("label.workflow")), 1), U("label", {
+ ])]), U("div", cv, [U("div", lv, J(Z(R)("label.workflow")), 1), U("label", {
class: "mjr-popover-toggle",
title: Z(R)("tooltip.filterWorkflowOnly", "Show only assets with embedded workflow data")
}, [Y(h, {
@@ -19155,8 +19185,8 @@ var w_ = {
"model-value": !!Z(n).workflowOnly,
binary: "",
"onUpdate:modelValue": M
- }, null, 8, ["model-value"]), U("span", null, J(Z(R)("filter.onlyWithWorkflow")), 1)], 8, rv)])]), U("div", iv, [
- U("div", av, [U("div", ov, J(Z(R)("label.workflowType", "Workflow type")), 1), Y(m, {
+ }, null, 8, ["model-value"]), U("span", null, J(Z(R)("filter.onlyWithWorkflow")), 1)], 8, uv)])]), U("div", dv, [
+ U("div", fv, [U("div", pv, J(Z(R)("label.workflowType", "Workflow type")), 1), Y(m, {
class: "mjr-select mjr-filter-select",
"panel-class": "mjr-filter-select-panel",
"model-value": String(Z(n).workflowType || "").trim().toUpperCase(),
@@ -19165,7 +19195,7 @@ var w_ = {
"option-value": "value",
"onUpdate:modelValue": N
}, null, 8, ["model-value", "options"])]),
- U("div", sv, [U("div", cv, J(Z(R)("label.sameWorkflow", "Generated with Same Workflow")), 1), Y(g, {
+ U("div", mv, [U("div", hv, J(Z(R)("label.sameWorkflow", "Generated with Same Workflow")), 1), Y(g, {
ref_key: "workflowIdInputRef",
ref: f,
class: "mjr-input",
@@ -19179,7 +19209,7 @@ var w_ = {
"placeholder",
"model-value"
])]),
- U("div", lv, [U("div", uv, J(Z(R)("label.workflowModelFamily", "Model family")), 1), U("div", dv, [Y(m, {
+ U("div", gv, [U("div", _v, J(Z(R)("label.workflowModelFamily", "Model family")), 1), U("div", vv, [Y(m, {
class: "mjr-select mjr-filter-select",
"panel-class": "mjr-filter-select-panel",
"model-value": String(Z(n).workflowModelFilter || ""),
@@ -19196,7 +19226,7 @@ var w_ = {
"onUpdate:modelValue": ee,
onChange: t[2] ||= (e) => ee(e?.target?.value)
}, null, 8, ["placeholder", "model-value"])])]),
- U("div", fv, [U("div", pv, J(Z(R)("label.workflowRunsOn", "Runs on")), 1), Y(m, {
+ U("div", yv, [U("div", bv, J(Z(R)("label.workflowRunsOn", "Runs on")), 1), Y(m, {
class: "mjr-select mjr-filter-select",
"panel-class": "mjr-filter-select-panel",
"model-value": String(Z(n).workflowRunsOnFilter || "").trim().toLowerCase(),
@@ -19205,7 +19235,7 @@ var w_ = {
"option-value": "value",
"onUpdate:modelValue": te
}, null, 8, ["model-value", "options"])]),
- U("div", mv, [U("div", hv, J(Z(R)("label.rating")), 1), Y(m, {
+ U("div", xv, [U("div", Sv, J(Z(R)("label.rating")), 1), Y(m, {
class: "mjr-select mjr-filter-select",
"panel-class": "mjr-filter-select-panel",
title: Z(R)("tooltip.filterMinRating", "Filter by minimum rating"),
@@ -19219,7 +19249,7 @@ var w_ = {
"model-value",
"options"
])])
- ])], 512), [[br, se("core")]])], 2),
+ ])], 512), [[yr, se("core")]])], 2),
U("div", { class: Dr(["mjr-filter-group mjr-filter-group--media", { "is-open": se("media") }]) }, [Y(i, {
type: "button",
class: "mjr-filter-group-toggle",
@@ -19228,11 +19258,11 @@ var w_ = {
"aria-expanded": String(se("media")),
onClick: t[3] ||= (e) => oe("media")
}, {
- default: W(() => [U("span", gv, J(Z(R)("group.media", "Media")), 1), U("span", _v, J(se("media") ? "▾" : "▸"), 1)]),
+ default: W(() => [U("span", Cv, J(Z(R)("group.media", "Media")), 1), U("span", wv, J(se("media") ? "▾" : "▸"), 1)]),
_: 1
- }, 8, ["aria-expanded"]), vr(U("div", vv, [U("div", yv, [
- U("div", bv, [
- U("div", xv, J(Z(R)("label.fileSizeMB", "File size (MB)")), 1),
+ }, 8, ["aria-expanded"]), _r(U("div", Tv, [U("div", Ev, [
+ U("div", Dv, [
+ U("div", Ov, J(Z(R)("label.fileSizeMB", "File size (MB)")), 1),
Y(g, {
ref_key: "minSizeInputRef",
ref: r,
@@ -19256,7 +19286,7 @@ var w_ = {
onChange: I
}, null, 8, ["placeholder", "value"])
]),
- U("div", Sv, [U("div", Cv, J(Z(R)("label.resolutionPx", "Resolution (px)")), 1), Y(m, {
+ U("div", kv, [U("div", Av, J(Z(R)("label.resolutionPx", "Resolution (px)")), 1), Y(m, {
class: "mjr-select mjr-filter-select",
"panel-class": "mjr-filter-select-panel",
"model-value": E.value,
@@ -19265,8 +19295,8 @@ var w_ = {
"option-value": "value",
"onUpdate:modelValue": re
}, null, 8, ["model-value", "options"])]),
- U("div", wv, [
- U("div", Tv, J(Z(R)("label.resolutionMinWxH", "Min WxH (px)")), 1),
+ U("div", jv, [
+ U("div", Mv, J(Z(R)("label.resolutionMinWxH", "Min WxH (px)")), 1),
Y(g, {
ref_key: "minWidthInputRef",
ref: o,
@@ -19300,8 +19330,8 @@ var w_ = {
"value"
])
]),
- U("div", Ev, [
- U("div", Dv, J(Z(R)("label.resolutionMaxWxH", "Max WxH (px)")), 1),
+ U("div", Nv, [
+ U("div", Pv, J(Z(R)("label.resolutionMaxWxH", "Max WxH (px)")), 1),
Y(g, {
ref_key: "maxWidthInputRef",
ref: c,
@@ -19335,7 +19365,7 @@ var w_ = {
"value"
])
])
- ])], 512), [[br, se("media")]])], 2),
+ ])], 512), [[yr, se("media")]])], 2),
U("div", { class: Dr(["mjr-filter-group mjr-filter-group--time", { "is-open": se("time") }]) }, [Y(i, {
type: "button",
class: "mjr-filter-group-toggle",
@@ -19344,9 +19374,9 @@ var w_ = {
"aria-expanded": String(se("time")),
onClick: t[4] ||= (e) => oe("time")
}, {
- default: W(() => [U("span", Ov, J(Z(R)("group.time", "Time")), 1), U("span", kv, J(se("time") ? "▾" : "▸"), 1)]),
+ default: W(() => [U("span", Fv, J(Z(R)("group.time", "Time")), 1), U("span", Iv, J(se("time") ? "▾" : "▸"), 1)]),
_: 1
- }, 8, ["aria-expanded"]), vr(U("div", Av, [U("div", jv, [U("div", Mv, [U("div", Nv, J(Z(R)("label.dateRange")), 1), Y(m, {
+ }, 8, ["aria-expanded"]), _r(U("div", Lv, [U("div", Rv, [U("div", zv, [U("div", Bv, J(Z(R)("label.dateRange")), 1), Y(m, {
class: "mjr-select mjr-filter-select",
"panel-class": "mjr-filter-select-panel",
title: Z(R)("tooltip.filterByDateRange", "Filter by date range"),
@@ -19359,7 +19389,7 @@ var w_ = {
"title",
"model-value",
"options"
- ])]), U("div", Pv, [U("div", Fv, J(Z(R)("label.agenda")), 1), U("div", {
+ ])]), U("div", Vv, [U("div", Hv, J(Z(R)("label.agenda")), 1), U("div", {
ref_key: "agendaContainerRef",
ref: u,
class: "mjr-agenda-container"
@@ -19370,11 +19400,11 @@ var w_ = {
class: Dr(["mjr-input mjr-agenda-input", D.value]),
value: Z(n).dateExactFilter,
onChange: ae
- }, null, 8, ["class", "value"])], 512)])])], 512), [[br, se("time")]])], 2)
+ }, null, 8, ["class", "value"])], 512)])])], 512), [[yr, se("time")]])], 2)
]);
};
}
-}), Lv = 128, Rv = Object.freeze([
+}), Wv = 128, Gv = Object.freeze([
{
key: "portraits",
label: "Portraits",
@@ -19412,10 +19442,10 @@ var w_ = {
iconClass: "pi pi-circle"
}
]);
-function zv(e) {
+function Kv(e) {
try {
let t = String(e ?? "").trim();
- if (!t || t.length > Lv || t.includes("\0")) return "";
+ if (!t || t.length > Wv || t.includes("\0")) return "";
for (let e = 0; e < t.length; e += 1) {
let n = t.charCodeAt(e);
if (n <= 31 || n === 127) return "";
@@ -19425,7 +19455,7 @@ function zv(e) {
return "";
}
}
-function Bv(e) {
+function qv(e) {
if (!e || typeof e != "object") return null;
let t = String(e.filepath || "").trim();
return t ? {
@@ -19437,10 +19467,10 @@ function Bv(e) {
root_id: String(e.root_id || e.rootId || e.custom_root_id || "").trim() || void 0
} : null;
}
-function Vv(e) {
+function Jv(e) {
let t = [], n = [], r = /* @__PURE__ */ new Set();
for (let i of Array.isArray(e) ? e : []) {
- let e = Bv(i);
+ let e = qv(i);
if (e?.filepath) {
let n = e.filepath.toLowerCase();
if (r.has(n)) continue;
@@ -19455,7 +19485,7 @@ function Vv(e) {
missingIds: n
};
}
-async function Hv(e) {
+async function Yv(e) {
let t = Array.from(new Set((Array.isArray(e) ? e : []).map((e) => Number(e)).filter((e) => Number.isFinite(e) && e > 0)));
if (!t.length) return {
ok: !0,
@@ -19466,13 +19496,13 @@ async function Hv(e) {
ok: !1,
error: String(n?.error || "Failed to fetch assets")
};
- let { assets: r } = Vv(Array.isArray(n?.data) ? n.data : Array.isArray(n?.data?.assets) ? n.data.assets : []);
+ let { assets: r } = Jv(Array.isArray(n?.data) ? n.data : Array.isArray(n?.data?.assets) ? n.data.assets : []);
return {
ok: !0,
data: r
};
}
-function Uv(e) {
+function Xv(e) {
let t = String(e?.label || "").trim();
if (t && !/^group\b/i.test(t)) return t;
let n = (Array.isArray(e?.dominant_tags) ? e.dominant_tags : []).map((e) => String(e || "").trim()).filter(Boolean);
@@ -19490,43 +19520,43 @@ function Uv(e) {
let s = Object.entries(o).sort((e, t) => t[1] - e[1])[0]?.[0] || "other", c = s === "image" ? "Images" : s === "video" ? "Videos" : s === "audio" ? "Audio" : "Media", l = Number(e?.cluster_id), u = Number.isFinite(l) ? ` ${l + 1}` : "";
return a ? `${a} - ${c}` : `${c} Cluster${u}`;
}
-function Wv() {
+function Zv() {
try {
- return !!(Hn()?.ai?.vectorSearchEnabled ?? !0);
+ return !!(Vn()?.ai?.vectorSearchEnabled ?? !0);
} catch {
return !0;
}
}
// ui/vue/components/panel/CollectionsPopover.vue?vue&type=script&setup=true&lang.ts
-var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-item-label" }, qv = { class: "mjr-menu-item-label" }, Jv = { class: "mjr-menu-item-right" }, Yv = {
+var Qv = { class: "mjr-menu mjr-collections-menu" }, $v = { class: "mjr-menu-item-label" }, ey = { class: "mjr-menu-item-label" }, ty = { class: "mjr-menu-item-right" }, ny = {
key: 0,
class: "mjr-menu-item-hint"
-}, Xv = {
+}, ry = {
key: 1,
class: "mjr-muted"
-}, Zv = {
+}, iy = {
key: 2,
class: "mjr-state-block is-error"
-}, Qv = {
+}, ay = {
key: 3,
class: "mjr-muted"
-}, $v = { class: "mjr-collection-row" }, ey = { class: "mjr-menu-item-label" }, ty = { class: "mjr-menu-item-right" }, ny = {
+}, oy = { class: "mjr-collection-row" }, sy = { class: "mjr-menu-item-label" }, cy = { class: "mjr-menu-item-right" }, ly = {
key: 0,
class: "mjr-menu-item-hint"
-}, ry = { class: "mjr-state-block" }, iy = { class: "mjr-section-title mjr-section-title--cyan" }, ay = { class: "mjr-section-hint" }, oy = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, sy = { class: "mjr-section-title mjr-section-title--violet" }, cy = { class: "mjr-section-hint" }, ly = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, uy = {
+}, uy = { class: "mjr-state-block" }, dy = { class: "mjr-section-title mjr-section-title--cyan" }, fy = { class: "mjr-section-hint" }, py = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, my = { class: "mjr-section-title mjr-section-title--violet" }, hy = { class: "mjr-section-hint" }, gy = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, _y = {
key: 0,
class: "mjr-state-block is-error"
-}, dy = { class: "mjr-cluster-thumbs" }, fy = ["src", "alt"], py = { class: "mjr-cluster-info" }, my = ["title"], hy = { class: "mjr-cluster-count" }, gy = "mjr:collections-changed", _y = /* @__PURE__ */ fr({
+}, vy = { class: "mjr-cluster-thumbs" }, yy = ["src", "alt"], by = { class: "mjr-cluster-info" }, xy = ["title"], Sy = { class: "mjr-cluster-count" }, Cy = "mjr:collections-changed", wy = /* @__PURE__ */ dr({
__name: "CollectionsPopover",
setup(t, { expose: n }) {
- let r = dh(), i = Q(null), a = Q([]), o = Q(!1), s = Q(""), c = Q(!1), l = Q(!0), u = Q(!1), p = Q(!1), m = Q(!1), h = Q([]), g = Q(""), _ = Q(""), v = 0, y = null, b = !1, x = K(() => String(r.collectionId || "").trim()), C = K(() => String(r.collectionName || "").trim()), T = K(() => !!x.value), O = K(() => !l.value || p.value), k = K(() => l.value && u.value), A = K(() => `${Math.max(1, Math.min(a.value.length, 6)) * 48}px`);
+ let r = vh(), i = Q(null), a = Q([]), o = Q(!1), s = Q(""), c = Q(!1), l = Q(!0), u = Q(!1), p = Q(!1), m = Q(!1), h = Q([]), g = Q(""), _ = Q(""), v = 0, y = null, b = !1, x = K(() => String(r.collectionId || "").trim()), C = K(() => String(r.collectionName || "").trim()), T = K(() => !!x.value), O = K(() => !l.value || p.value), k = K(() => l.value && u.value), A = K(() => `${Math.max(1, Math.min(a.value.length, 6)) * 48}px`);
function j() {
let e = i.value;
return !!e && String(e.style.display || "").toLowerCase() !== "none";
}
function M({ collectionId: e = x.value, collectionName: t = C.value, close: n = !0, reload: r = !0 } = {}) {
try {
- window.dispatchEvent(new CustomEvent(gy, { detail: {
+ window.dispatchEvent(new CustomEvent(Cy, { detail: {
collectionId: String(e || ""),
collectionName: String(t || ""),
close: n !== !1,
@@ -19544,7 +19574,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
}
}
async function P() {
- if (!Wv()) return {
+ if (!Zv()) return {
enabled: !1,
vectorAvailable: !1,
vectorDisabled: !1
@@ -19599,9 +19629,9 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
};
}
let I = F("create", async () => {
- let t = await Tt(R("dialog.createCollection", "Create collection"), R("dialog.collectionPlaceholder", "Collection name"));
+ let t = await Ut(R("dialog.createCollection", "Create collection"), R("dialog.collectionPlaceholder", "Collection name"));
if (!t) return;
- let n = zv(t);
+ let n = Kv(t);
if (!n) {
e(R("toast.invalidCollectionName", "Invalid collection name"), "error");
return;
@@ -19628,7 +19658,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
}));
}), ie = F("delete", async (t) => {
let n = String(t?.id || ""), r = String(t?.name || n);
- if (!n || !await Wt(R("dialog.deleteCollection", "Delete collection \"{name}\"?", { name: r }))) return;
+ if (!n || !await Tt(R("dialog.deleteCollection", "Delete collection \"{name}\"?", { name: r }))) return;
let i = await w(n);
i?.ok ? n === x.value ? M({
collectionId: "",
@@ -19647,9 +19677,9 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
if (!i) return;
let a = await d(String(t?.query || ""), 50);
if (a?.ok && Array.isArray(a?.data) && a.data.length > 0) {
- let t = Vv(a.data), r = t.assets;
+ let t = Jv(a.data), r = t.assets;
if (t.missingIds.length) {
- let e = await Hv(t.missingIds);
+ let e = await Yv(t.missingIds);
e.ok && Array.isArray(e.data) && (r = ee(r, e.data));
}
if (r.length) {
@@ -19695,7 +19725,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
}
h.value = t.data.map((e) => ({
...e,
- _label: Uv(e)
+ _label: Xv(e)
}));
} catch (t) {
console.error("[Majoor] Discover groups failed:", t), g.value = R("toast.clusterAnalysisFailed", "Cluster analysis failed"), e(R("toast.clusterAnalysisFailed", "Cluster analysis failed"), "error");
@@ -19709,7 +19739,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
if (!_.value) {
_.value = n;
try {
- let n = String(t?._label || Uv(t) || "").trim();
+ let n = String(t?._label || Xv(t) || "").trim();
if (!n) return;
let r = await S(n);
if (!r?.ok) {
@@ -19718,7 +19748,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
}
let i = String(r?.data?.id || ""), a = Array.isArray(t?.all_asset_ids) ? t.all_asset_ids : [];
if (i && a.length) {
- let t = await Hv(a);
+ let t = await Yv(a);
if (!t.ok) {
e(t.error || R("toast.failedLoadClusterAssets", "Failed to load cluster assets"), "error");
return;
@@ -19754,7 +19784,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
attributes: !0,
attributeFilter: ["style"]
}));
- }), ir(() => {
+ }), rr(() => {
try {
y?.disconnect?.();
} catch (e) {
@@ -19762,13 +19792,13 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
}
y = null;
}), n({ refresh: te }), (e, t) => {
- let n = or("MButton"), r = or("MVirtualScroller");
+ let n = ar("MButton"), r = ar("MVirtualScroller");
return q(), X("div", {
ref_key: "rootRef",
ref: i,
class: "mjr-popover mjr-collections-popover",
style: { display: "none" }
- }, [U("div", Gv, [
+ }, [U("div", Qv, [
Y(n, {
type: "button",
class: "mjr-menu-item",
@@ -19777,10 +19807,10 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
disabled: _.value !== "",
onClick: Z(I)
}, {
- default: W(() => [U("span", Kv, J(Z(R)("ctx.createCollection", "Create collection")), 1), t[0] ||= U("i", { class: "pi pi-plus mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1)]),
+ default: W(() => [U("span", $v, J(Z(R)("ctx.createCollection", "Create collection")), 1), t[0] ||= U("i", { class: "pi pi-plus mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1)]),
_: 1
}, 8, ["disabled", "onClick"]),
- T.value ? (q(), ar(n, {
+ T.value ? (q(), ir(n, {
key: 0,
type: "button",
class: "mjr-menu-item",
@@ -19789,11 +19819,11 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
disabled: _.value !== "",
onClick: Z(ne)
}, {
- default: W(() => [U("span", qv, J(Z(R)("ctx.exitCollection", "Exit collection")), 1), U("span", Jv, [C.value ? (q(), X("span", Yv, J(C.value), 1)) : G("", !0), t[1] ||= U("i", { class: "pi pi-times mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1)])]),
+ default: W(() => [U("span", ey, J(Z(R)("ctx.exitCollection", "Exit collection")), 1), U("span", ty, [C.value ? (q(), X("span", ny, J(C.value), 1)) : G("", !0), t[1] ||= U("i", { class: "pi pi-times mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1)])]),
_: 1
}, 8, ["disabled", "onClick"])) : G("", !0),
t[9] ||= U("div", { class: "mjr-menu-divider" }, null, -1),
- o.value ? (q(), X("div", Xv, J(Z(R)("label.loading", "Loading...")), 1)) : s.value ? (q(), X("div", Zv, J(s.value), 1)) : a.value.length ? (q(), ar(r, {
+ o.value ? (q(), X("div", ry, J(Z(R)("label.loading", "Loading...")), 1)) : s.value ? (q(), X("div", iy, J(s.value), 1)) : a.value.length ? (q(), ir(r, {
key: 4,
items: a.value,
"item-size": 48,
@@ -19801,7 +19831,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
"num-tolerated-items": 4,
class: "mjr-collections-virtual-list"
}, {
- item: W(({ item: e }) => [U("div", $v, [Y(n, {
+ item: W(({ item: e }) => [U("div", oy, [Y(n, {
type: "button",
class: Dr(["mjr-menu-item", { "is-active": x.value === String(e.id || "") }]),
severity: "secondary",
@@ -19809,7 +19839,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
disabled: _.value !== "",
onClick: (t) => Z(re)(e)
}, {
- default: W(() => [U("span", ey, J(e.name || e.id), 1), U("span", ty, [Number(e.count || 0) ? (q(), X("span", ny, J(Number(e.count || 0)), 1)) : G("", !0), t[2] ||= U("i", { class: "pi pi-check mjr-menu-item-check" }, null, -1)])]),
+ default: W(() => [U("span", sy, J(e.name || e.id), 1), U("span", cy, [Number(e.count || 0) ? (q(), X("span", ly, J(Number(e.count || 0)), 1)) : G("", !0), t[2] ||= U("i", { class: "pi pi-check mjr-menu-item-check" }, null, -1)])]),
_: 2
}, 1032, [
"class",
@@ -19822,7 +19852,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
text: "",
disabled: _.value !== "",
title: Z(R)("tooltip.deleteCollection", "Delete collection"),
- onClick: hr((t) => Z(ie)(e), ["stop", "prevent"])
+ onClick: mr((t) => Z(ie)(e), ["stop", "prevent"])
}, {
default: W(() => [...t[3] ||= [U("i", { class: "pi pi-trash" }, null, -1)]]),
_: 1
@@ -19832,13 +19862,13 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
"onClick"
])])]),
_: 1
- }, 8, ["items", "scroll-height"])) : (q(), X("div", Qv, J(Z(R)("msg.noCollections", "No collections yet")), 1)),
- !c.value && O.value ? (q(), X(H, { key: 5 }, [t[4] ||= U("div", { class: "mjr-menu-divider" }, null, -1), U("div", ry, J(l.value ? "AI Smart Collections are disabled (enable vector search env var)." : "AI Smart Collections are disabled in settings."), 1)], 64)) : G("", !0),
+ }, 8, ["items", "scroll-height"])) : (q(), X("div", ay, J(Z(R)("msg.noCollections", "No collections yet")), 1)),
+ !c.value && O.value ? (q(), X(H, { key: 5 }, [t[4] ||= U("div", { class: "mjr-menu-divider" }, null, -1), U("div", uy, J(l.value ? "AI Smart Collections are disabled (enable vector search env var)." : "AI Smart Collections are disabled in settings."), 1)], 64)) : G("", !0),
!c.value && k.value ? (q(), X(H, { key: 6 }, [
t[7] ||= U("div", { class: "mjr-menu-divider" }, null, -1),
- U("div", iy, J(Z(R)("label.smartSuggestions", "Smart Suggestions")), 1),
- U("div", ay, J(Z(R)("label.smartCollectionsHint", "Create collections from AI-detected themes")), 1),
- (q(!0), X(H, null, gr(Z(Rv), (e) => (q(), ar(n, {
+ U("div", dy, J(Z(R)("label.smartSuggestions", "Smart Suggestions")), 1),
+ U("div", fy, J(Z(R)("label.smartCollectionsHint", "Create collections from AI-detected themes")), 1),
+ (q(!0), X(H, null, hr(Z(Gv), (e) => (q(), ir(n, {
key: e.key,
type: "button",
class: "mjr-menu-item mjr-menu-item--smart",
@@ -19847,12 +19877,12 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
disabled: _.value !== "",
onClick: (t) => oe(e)
}, {
- default: W(() => [U("span", oy, [U("i", { class: Dr(e.iconClass) }, null, 2), U("span", null, J(e.label), 1)]), t[5] ||= U("i", { class: "pi pi-plus mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1)]),
+ default: W(() => [U("span", py, [U("i", { class: Dr(e.iconClass) }, null, 2), U("span", null, J(e.label), 1)]), t[5] ||= U("i", { class: "pi pi-plus mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1)]),
_: 2
}, 1032, ["disabled", "onClick"]))), 128)),
t[8] ||= U("div", { class: "mjr-menu-divider" }, null, -1),
- U("div", sy, J(Z(R)("label.discoverGroups", "Discover Groups")), 1),
- U("div", cy, J(Z(R)("label.discoverGroupsHint", "AI clusters assets by visual similarity")), 1),
+ U("div", my, J(Z(R)("label.discoverGroups", "Discover Groups")), 1),
+ U("div", hy, J(Z(R)("label.discoverGroupsHint", "AI clusters assets by visual similarity")), 1),
Y(n, {
type: "button",
class: "mjr-menu-item mjr-menu-item--cluster",
@@ -19861,25 +19891,25 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
disabled: m.value || _.value !== "",
onClick: se
}, {
- default: W(() => [U("span", ly, [t[6] ||= U("i", { class: "pi pi-search" }, null, -1), U("span", null, J(m.value ? Z(R)("label.analyzing", "Analyzing...") : Z(R)("label.analyzeLibrary", "Analyze library")), 1)])]),
+ default: W(() => [U("span", gy, [t[6] ||= U("i", { class: "pi pi-search" }, null, -1), U("span", null, J(m.value ? Z(R)("label.analyzing", "Analyzing...") : Z(R)("label.analyzeLibrary", "Analyze library")), 1)])]),
_: 1
}, 8, ["disabled"]),
- g.value ? (q(), X("div", uy, J(g.value), 1)) : G("", !0),
- (q(!0), X(H, null, gr(h.value, (e) => (q(), X("div", {
+ g.value ? (q(), X("div", _y, J(g.value), 1)) : G("", !0),
+ (q(!0), X(H, null, hr(h.value, (e) => (q(), X("div", {
key: e.cluster_id,
class: "mjr-cluster-row"
}, [
- U("div", dy, [(q(!0), X(H, null, gr(Array.isArray(e.sample_assets) ? e.sample_assets.slice(0, 3) : [], (t, n) => (q(), X("img", {
+ U("div", vy, [(q(!0), X(H, null, hr(Array.isArray(e.sample_assets) ? e.sample_assets.slice(0, 3) : [], (t, n) => (q(), X("img", {
key: `${e.cluster_id}-${n}`,
class: "mjr-cluster-thumb",
src: N(t),
alt: String(t?.filename || e._label || ""),
loading: "lazy"
- }, null, 8, fy))), 128))]),
- U("div", py, [U("div", {
+ }, null, 8, yy))), 128))]),
+ U("div", by, [U("div", {
class: "mjr-cluster-name",
title: e._label
- }, J(e._label), 9, my), U("div", hy, J(Number(e.size || 0)) + " " + J(Z(R)("label.assets", "assets")), 1)]),
+ }, J(e._label), 9, xy), U("div", Sy, J(Number(e.size || 0)) + " " + J(Z(R)("label.assets", "assets")), 1)]),
Y(n, {
type: "button",
class: "mjr-cluster-create-btn",
@@ -19888,7 +19918,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
title: Z(R)("ctx.createCollection", "Create collection"),
onClick: (t) => L(e)
}, {
- default: W(() => [rr(J(_.value === `cluster:${String(e.cluster_id ?? "")}` ? Z(R)("label.loading", "Loading...") : Z(R)("label.create", "Create")), 1)]),
+ default: W(() => [nr(J(_.value === `cluster:${String(e.cluster_id ?? "")}` ? Z(R)("label.loading", "Loading...") : Z(R)("label.create", "Create")), 1)]),
_: 2
}, 1032, [
"disabled",
@@ -19900,16 +19930,16 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
])], 512);
};
}
-}), vy = { class: "mjr-popover mjr-pinned-folders-popover mjr-popover--hidden" }, yy = {
+}), Ty = { class: "mjr-popover mjr-pinned-folders-popover mjr-popover--hidden" }, Ey = {
key: 0,
class: "mjr-muted mjr-pinned-folders-empty"
-}, by = {
+}, Dy = {
key: 1,
class: "mjr-muted mjr-pinned-folders-empty"
-}, xy = { class: "mjr-pinned-folder-label" }, Sy = {
+}, Oy = { class: "mjr-pinned-folder-label" }, ky = {
key: 0,
class: "mjr-menu-item-hint mjr-pinned-folder-path"
-}, Cy = /* @__PURE__ */ fr({
+}, Ay = /* @__PURE__ */ dr({
__name: "PinnedFoldersPopover",
setup(e, { expose: t }) {
let n = Q(null), r = Q([]), i = Q(!1), a = Q("No pinned folders"), o = Q("Loading..."), s = Q("Unpin folder"), c = Q(null), l = Q(null);
@@ -19940,13 +19970,13 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
setPinnedFolders: d,
setPinnedFoldersLoading: f
}), (e, t) => {
- let c = or("MButton");
- return q(), X("div", vy, [U("div", {
+ let c = ar("MButton");
+ return q(), X("div", Ty, [U("div", {
ref_key: "menuRef",
ref: n,
class: "mjr-menu mjr-pinned-folders-menu",
role: "menu"
- }, [i.value ? (q(), X("div", yy, J(o.value), 1)) : r.value.length ? (q(!0), X(H, { key: 2 }, gr(r.value, (e) => (q(), X("div", {
+ }, [i.value ? (q(), X("div", Ey, J(o.value), 1)) : r.value.length ? (q(!0), X(H, { key: 2 }, hr(r.value, (e) => (q(), X("div", {
key: e.id,
class: "mjr-pinned-folder-row"
}, [Y(c, {
@@ -19956,7 +19986,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
severity: "secondary",
onClick: (t) => p(e)
}, {
- default: W(() => [U("span", xy, J(e.label), 1), e.path ? (q(), X("span", Sy, J(e.path), 1)) : G("", !0)]),
+ default: W(() => [U("span", Oy, J(e.label), 1), e.path ? (q(), X("span", ky, J(e.path), 1)) : G("", !0)]),
_: 2
}, 1032, ["onClick"]), Y(c, {
type: "button",
@@ -19976,13 +20006,13 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
"title",
"aria-label",
"onClick"
- ])]))), 128)) : (q(), X("div", by, J(a.value), 1))], 512)]);
+ ])]))), 128)) : (q(), X("div", Dy, J(a.value), 1))], 512)]);
};
}
-}), wy = {
+}), jy = {
class: "mjr-popover mjr-custom-popover",
style: { display: "none" }
-}, Ty = { class: "mjr-popover-row" }, Ey = { class: "mjr-popover-label" }, Dy = { class: "mjr-popover-row mjr-popover-row--actions" }, Oy = /* @__PURE__ */ fr({
+}, My = { class: "mjr-popover-row" }, Ny = { class: "mjr-popover-label" }, Py = { class: "mjr-popover-row mjr-popover-row--actions" }, Fy = /* @__PURE__ */ dr({
__name: "CustomRootsPopover",
setup(e, { expose: t }) {
let n = Q([{
@@ -20065,8 +20095,8 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
return s(o.value);
}
}), (e, t) => {
- let s = or("MSelect"), c = or("MButton");
- return q(), X("div", wy, [U("div", Ty, [U("div", Ey, J(Z(R)("label.folder")), 1), Y(s, {
+ let s = ar("MSelect"), c = ar("MButton");
+ return q(), X("div", jy, [U("div", My, [U("div", Ny, J(Z(R)("label.folder")), 1), Y(s, {
class: "mjr-select",
"model-value": r.value,
options: n.value,
@@ -20078,14 +20108,14 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
"model-value",
"options",
"disabled"
- ])]), U("div", Dy, [Y(c, {
+ ])]), U("div", Py, [Y(c, {
ref_key: "customAddBtnRef",
ref: a,
type: "button",
class: "mjr-btn",
severity: "secondary"
}, {
- default: W(() => [rr(J(Z(R)("btn.add")), 1)]),
+ default: W(() => [nr(J(Z(R)("btn.add")), 1)]),
_: 1
}, 512), Y(c, {
ref_key: "customRemoveBtnRef",
@@ -20095,15 +20125,15 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
severity: "secondary",
disabled: ""
}, {
- default: W(() => [rr(J(Z(R)("btn.remove")), 1)]),
+ default: W(() => [nr(J(Z(R)("btn.remove")), 1)]),
_: 1
}, 512)])]);
};
}
-}), ky = ["aria-label"], Ay = { class: "mjr-messages-head" }, jy = { class: "mjr-messages-actions" }, My = ["title"], Ny = { class: "mjr-messages-star-label" }, Py = {
+}), Iy = ["aria-label"], Ly = { class: "mjr-messages-head" }, Ry = { class: "mjr-messages-actions" }, zy = ["title"], By = { class: "mjr-messages-star-label" }, Vy = {
class: "mjr-messages-tabs",
role: "tablist"
-}, Fy = { class: "mjr-messages-panels" }, Iy = { class: "mjr-messages-empty" }, Ly = "https://github.com/MajoorWaldi/ComfyUI-Majoor-AssetsManager", Ry = /* @__PURE__ */ fr({
+}, Hy = { class: "mjr-messages-panels" }, Uy = { class: "mjr-messages-empty" }, Wy = "https://github.com/MajoorWaldi/ComfyUI-Majoor-AssetsManager", Gy = /* @__PURE__ */ dr({
__name: "MessagePopover",
setup(e, { expose: t }) {
let n = Q(null), r = Q(null), i = Q(null), a = Q(null), o = Q(null), s = Q(null), c = Q(null), l = Q(null), u = Q(null), d = Q(null), f = Q(null), p = (e) => e?.$el || e || null;
@@ -20142,7 +20172,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
return f.value;
}
}), (e, t) => {
- let p = or("MButton"), m = or("MDialog");
+ let p = ar("MButton"), m = ar("MDialog");
return q(), X("div", {
class: "mjr-popover mjr-messages-popover",
id: "mjr-messages-popover",
@@ -20168,12 +20198,12 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
}
}, {
default: W(() => [
- U("div", Ay, [U("div", {
+ U("div", Ly, [U("div", {
ref_key: "titleRef",
ref: n,
class: "mjr-messages-title"
- }, J(Z(R)("label.messages", "Messages")), 513), U("div", jy, [U("a", {
- href: Ly,
+ }, J(Z(R)("label.messages", "Messages")), 513), U("div", Ry, [U("a", {
+ href: Wy,
target: "_blank",
rel: "noopener noreferrer",
class: "mjr-btn mjr-messages-star-link",
@@ -20181,7 +20211,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
}, [t[0] ||= U("span", {
class: "mjr-messages-star-icon",
"aria-hidden": "true"
- }, "★", -1), U("span", Ny, J(Z(R)("btn.giveStar", "Give a star")), 1)], 8, My), Y(p, {
+ }, "★", -1), U("span", By, J(Z(R)("btn.giveStar", "Give a star")), 1)], 8, zy), Y(p, {
ref_key: "markReadBtnRef",
ref: r,
type: "button",
@@ -20189,10 +20219,10 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
severity: "secondary",
title: Z(R)("tooltip.markMessagesRead", "Mark all messages as read")
}, {
- default: W(() => [rr(J(Z(R)("btn.markAllRead", "Mark all read")), 1)]),
+ default: W(() => [nr(J(Z(R)("btn.markAllRead", "Mark all read")), 1)]),
_: 1
}, 8, ["title"])])]),
- U("div", Py, [
+ U("div", Vy, [
Y(p, {
ref_key: "messageTabBtnRef",
ref: i,
@@ -20257,11 +20287,11 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
"aria-controls": "mjr-shortcuts-panel",
id: "mjr-shortcuts-tab"
}, {
- default: W(() => [rr(J(Z(R)("msg.shortcuts.title", "Shortcut Guide")), 1)]),
+ default: W(() => [nr(J(Z(R)("msg.shortcuts.title", "Shortcut Guide")), 1)]),
_: 1
}, 512)
]),
- U("div", Fy, [
+ U("div", Hy, [
U("div", {
ref_key: "messageListRef",
ref: u,
@@ -20269,7 +20299,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
id: "mjr-messages-panel",
role: "tabpanel",
"aria-labelledby": "mjr-messages-tab"
- }, [U("div", Iy, J(Z(R)("msg.noMessages", "No messages for now.")), 1)], 512),
+ }, [U("div", Uy, J(Z(R)("msg.noMessages", "No messages for now.")), 1)], 512),
U("div", {
ref_key: "historyPanelRef",
ref: d,
@@ -20291,13 +20321,13 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
])
]),
_: 1
- })], 8, ky);
+ })], 8, Iy);
};
}
-}), zy = { class: "mjr-am-header-row" }, By = { class: "mjr-am-header-left" }, Vy = { class: "mjr-am-header-title" }, Hy = ["data-mjr-version-channel", "title"], Uy = { class: "mjr-tabs" }, Wy = { class: "mjr-am-header-tools" }, Gy = {
+}), Ky = { class: "mjr-am-header-row" }, qy = { class: "mjr-am-header-left" }, Jy = { class: "mjr-am-header-title" }, Yy = ["data-mjr-version-channel", "title"], Xy = { class: "mjr-tabs" }, Zy = { class: "mjr-am-header-tools" }, Qy = {
class: "mjr-popover-anchor",
style: { display: "none" }
-}, Ky = { class: "mjr-popover-anchor" }, qy = { class: "mjr-popover-anchor" }, Jy = { class: "mjr-popover-anchor" }, Yy = { class: "mjr-popover-anchor" }, Xy = { class: "mjr-popover-anchor" }, Zy = "mjr-am-version-badge-label", Qy = "V", $y = /* @__PURE__ */ fr({
+}, $y = { class: "mjr-popover-anchor" }, eb = { class: "mjr-popover-anchor" }, tb = { class: "mjr-popover-anchor" }, nb = { class: "mjr-popover-anchor" }, rb = { class: "mjr-popover-anchor" }, ib = "mjr-am-version-badge-label", ab = "V", ob = /* @__PURE__ */ dr({
__name: "HeaderSection",
setup(n, { expose: r }) {
let i = null;
@@ -20335,7 +20365,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
rating_desc: "pi pi-star-fill",
size_desc: "pi pi-sort-numeric-down-alt",
size_asc: "pi pi-sort-numeric-up-alt"
- }, l = dh(), u = s() === "nightly", d = Q(null), f = Q(null), p = Q(null), m = Q(null), h = Q(null), g = Q(null), _ = Q(null), y = Q(null), b = Q(null), x = Q(null), S = Q(null), C = Q(null), w = Q(null), T = Q(null), E = Q(null), D = Q(null), O = Q(null), k = Q(null), A = Q(null), j = Q(null), M = Q(null), N = Q(null), P = Q(null), ee = Q(null), te = Q(null), F = Q(null), I = (e) => e?.$el || e || null, ne = Q(u ? "nightly" : "v?"), ie = Q(u ? "nightly" : "stable"), ae = Q(!1), oe = Q(!1), se = K(() => c[l.sort] ?? "pi pi-sort-amount-down"), ce = K(() => String(l.viewScope || l.scope || "output").toLowerCase()), le = K(() => ce.value === "similar" || Array.isArray(l.similarResults) && l.similarResults.length > 0 || !!l.similarTitle), ue = K(() => {
+ }, l = vh(), u = s() === "nightly", d = Q(null), f = Q(null), p = Q(null), m = Q(null), h = Q(null), g = Q(null), _ = Q(null), y = Q(null), b = Q(null), x = Q(null), S = Q(null), C = Q(null), w = Q(null), T = Q(null), E = Q(null), D = Q(null), O = Q(null), k = Q(null), A = Q(null), j = Q(null), M = Q(null), N = Q(null), P = Q(null), ee = Q(null), te = Q(null), F = Q(null), I = (e) => e?.$el || e || null, ne = Q(u ? "nightly" : "v?"), ie = Q(u ? "nightly" : "stable"), ae = Q(!1), oe = Q(!1), se = K(() => c[l.sort] ?? "pi pi-sort-amount-down"), ce = K(() => String(l.viewScope || l.scope || "output").toLowerCase()), le = K(() => ce.value === "similar" || Array.isArray(l.similarResults) && l.similarResults.length > 0 || !!l.similarTitle), ue = K(() => {
let e = String(l.similarSourceAssetId || "");
return e.startsWith("stack:") || e.startsWith("duplicates:") || e.startsWith("group:") || e.startsWith("node:") ? "group" : "similar";
}), de = K(() => ue.value === "group" ? R("tab.group", "Group") : R("tab.similar", "Similar")), fe = K(() => ue.value === "group" ? R("tooltip.tab.group", "Browse current grouped assets") : R("tooltip.tab.similar", "Browse current similar findings")), pe = {
@@ -20377,7 +20407,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
e(R("toast.workflowSerializeFailed", "Could not read the current ComfyUI workflow."), "error");
return;
}
- let r = await S_({
+ let r = await k_({
workflow: n,
name: String(n?.name || n?.title || "workflow").trim()
}), i = String(r?.name || "").trim();
@@ -20410,7 +20440,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
console.debug?.(e);
}
if (!t) {
- let e = await Tt(R("dialog.enterWorkflowRootPath", "Workflow root folder"), "", R("tab.workflow", "Workflow"));
+ let e = await Ut(R("dialog.enterWorkflowRootPath", "Workflow root folder"), "", R("tab.workflow", "Workflow"));
t = String(e || "").trim();
}
if (!t) return;
@@ -20418,8 +20448,8 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
if (!n?.ok) e(n?.error || R("toast.failedSetWorkflowRoots", "Failed to set workflow roots"), "error");
else {
try {
- let e = Hn();
- e.paths = e.paths || {}, e.paths.workflowRoots = String(n?.data?.workflow_roots_text || t).trim(), In(e), window.dispatchEvent(new CustomEvent("mjr-settings-changed", { detail: {
+ let e = Vn();
+ e.paths = e.paths || {}, e.paths.workflowRoots = String(n?.data?.workflow_roots_text || t).trim(), Fn(e), window.dispatchEvent(new CustomEvent("mjr-settings-changed", { detail: {
key: "paths.workflowRoots",
value: t
} })), window.dispatchEvent(new CustomEvent("mjr:reload-grid", { detail: { reason: "workflow-root-pick" } }));
@@ -20508,7 +20538,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
}
function Ee() {
try {
- Rt(I(y.value), he.value, Qy);
+ Lt(I(y.value), he.value, ab);
} catch (e) {
console.debug?.(e);
}
@@ -20528,7 +20558,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
window.dispatchEvent(new CustomEvent(V.MFV_TOGGLE));
}
function Ae() {
- Xn();
+ Yn();
}
function je() {
try {
@@ -20537,10 +20567,10 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
console.debug?.(e);
}
}
- return lr(oe, () => {
+ return cr(oe, () => {
Ee();
}), Mr(async () => {
- await ur(), De(), Ee(), we(u), Te(u);
+ await lr(), De(), Ee(), we(u), Te(u);
try {
typeof window < "u" && window.addEventListener(V.MFV_VISIBILITY_CHANGED, Oe);
} catch (e) {
@@ -20551,7 +20581,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
} catch (e) {
console.debug?.(e);
}
- }), ir(() => {
+ }), rr(() => {
je();
}), r({
isVueHeader: !0,
@@ -20735,17 +20765,17 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
},
_headerDispose: je
}), (e, t) => {
- let n = or("MButton");
+ let n = ar("MButton");
return q(), X(H, null, [U("div", {
ref_key: "headerRef",
ref: d,
class: "mjr-am-header"
- }, [U("div", zy, [U("div", By, [
+ }, [U("div", Ky, [U("div", qy, [
t[2] ||= U("i", {
class: "mjr-am-header-icon pi pi-folder",
"aria-hidden": "true"
}, null, -1),
- U("div", Vy, J(Z(R)("manager.title")), 1),
+ U("div", Jy, J(Z(R)("manager.title")), 1),
U("a", {
href: "https://ko-fi.com/majoorwaldi",
target: "_blank",
@@ -20753,15 +20783,15 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
class: "mjr-am-version-badge",
"data-mjr-version-channel": ie.value,
title: Z(R)("tooltip.supportKofi"),
- style: Sr(me.value),
+ style: xr(me.value),
onMouseenter: t[0] ||= (e) => ae.value = !0,
onMouseleave: t[1] ||= (e) => ae.value = !1
- }, [U("span", { class: Dr(Zy) }, J(ne.value), 1)], 44, Hy)
+ }, [U("span", { class: Dr(ib) }, J(ne.value), 1)], 44, Yy)
]), U("div", {
ref_key: "headerActionsRef",
ref: f,
class: "mjr-am-header-actions"
- }, [U("div", Uy, [
+ }, [U("div", Xy, [
Y(n, {
ref_key: "tabAllRef",
ref: M,
@@ -20772,7 +20802,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
"data-scope": "all",
title: Z(R)("tooltip.tab.all")
}, {
- default: W(() => [rr(J(Z(R)("tab.all")), 1)]),
+ default: W(() => [nr(J(Z(R)("tab.all")), 1)]),
_: 1
}, 8, ["class", "title"]),
Y(n, {
@@ -20785,7 +20815,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
"data-scope": "input",
title: Z(R)("tooltip.tab.input")
}, {
- default: W(() => [rr(J(Z(R)("tab.input")), 1)]),
+ default: W(() => [nr(J(Z(R)("tab.input")), 1)]),
_: 1
}, 8, ["class", "title"]),
Y(n, {
@@ -20798,7 +20828,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
"data-scope": "output",
title: Z(R)("tooltip.tab.output")
}, {
- default: W(() => [rr(J(Z(R)("tab.output")), 1)]),
+ default: W(() => [nr(J(Z(R)("tab.output")), 1)]),
_: 1
}, 8, ["class", "title"]),
Y(n, {
@@ -20811,7 +20841,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
"data-scope": "custom",
title: Z(R)("tooltip.tab.custom")
}, {
- default: W(() => [rr(J(Z(R)("tab.custom")), 1)]),
+ default: W(() => [nr(J(Z(R)("tab.custom")), 1)]),
_: 1
}, 8, ["class", "title"]),
Y(n, {
@@ -20824,7 +20854,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
"data-scope": "workflow",
title: Z(R)("tooltip.tab.workflow", "Browse saved workflows")
}, {
- default: W(() => [rr(J(Z(R)("tab.workflow", "Workflow")), 1)]),
+ default: W(() => [nr(J(Z(R)("tab.workflow", "Workflow")), 1)]),
_: 1
}, 8, ["class", "title"]),
Y(n, {
@@ -20835,18 +20865,18 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
severity: "secondary",
text: "",
"data-scope": "similar",
- style: Sr({ display: le.value ? "" : "none" }),
+ style: xr({ display: le.value ? "" : "none" }),
title: fe.value
}, {
- default: W(() => [rr(J(de.value), 1)]),
+ default: W(() => [nr(J(de.value), 1)]),
_: 1
}, 8, [
"class",
"style",
"title"
])
- ]), U("div", Wy, [
- ce.value === "workflow" ? (q(), ar(n, {
+ ]), U("div", Zy, [
+ ce.value === "workflow" ? (q(), ir(n, {
key: 0,
ref_key: "saveWorkflowBtnRef",
ref: S,
@@ -20865,7 +20895,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
}, null, -1)]]),
_: 1
}, 8, ["title", "aria-label"])) : G("", !0),
- ce.value === "workflow" ? (q(), ar(n, {
+ ce.value === "workflow" ? (q(), ir(n, {
key: 1,
ref_key: "pickWorkflowRootBtnRef",
ref: C,
@@ -20884,7 +20914,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
}, null, -1)]]),
_: 1
}, 8, ["title", "aria-label"])) : G("", !0),
- ce.value === "workflow" ? (q(), ar(n, {
+ ce.value === "workflow" ? (q(), ir(n, {
key: 2,
type: "button",
class: "mjr-icon-btn mjr-import-workflow-btn",
@@ -20910,7 +20940,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
style: { display: "none" },
onChange: Se
}, null, 544),
- U("div", Gy, [Y(n, {
+ U("div", Qy, [Y(n, {
ref_key: "customMenuBtnRef",
ref: p,
type: "button",
@@ -20926,7 +20956,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
"aria-hidden": "true"
}, null, -1)]]),
_: 1
- }, 8, ["title", "aria-label"]), Y(Oy, {
+ }, 8, ["title", "aria-label"]), Y(Fy, {
ref_key: "customPopoverRef",
ref: A
}, null, 512)]),
@@ -20952,7 +20982,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
"title",
"aria-label"
]),
- U("div", Ky, [Y(n, {
+ U("div", $y, [Y(n, {
ref_key: "messageBtnRef",
ref: b,
type: "button",
@@ -20972,7 +21002,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
"aria-hidden": "true"
}, null, -1)]]),
_: 1
- }, 8, ["title", "aria-label"]), Y(Ry, {
+ }, 8, ["title", "aria-label"]), Y(Gy, {
ref_key: "messagePopoverRef",
ref: j
}, null, 512)]),
@@ -20994,11 +21024,11 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
}, null, -1)]]),
_: 1
}, 8, ["title", "aria-label"])
- ])], 512)])], 512), Y(R_, {
+ ])], 512)])], 512), Y(G_, {
ref_key: "searchBarRef",
ref: T
}, {
- "filter-anchor": W(() => [U("div", qy, [Y(n, {
+ "filter-anchor": W(() => [U("div", eb, [Y(n, {
ref_key: "filterBtnRef",
ref: m,
type: "button",
@@ -21014,11 +21044,11 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
"aria-hidden": "true"
}, null, -1)]]),
_: 1
- }, 8, ["title", "aria-label"]), Y(Iv, {
+ }, 8, ["title", "aria-label"]), Y(Uv, {
ref_key: "filterPopoverRef",
ref: D
}, null, 512)])]),
- "sort-anchor": W(() => [U("div", Jy, [Y(n, {
+ "sort-anchor": W(() => [U("div", tb, [Y(n, {
ref_key: "sortBtnRef",
ref: h,
type: "button",
@@ -21034,11 +21064,11 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
"aria-hidden": "true"
}, null, 2)]),
_: 1
- }, 8, ["title", "aria-label"]), Y(V_, {
+ }, 8, ["title", "aria-label"]), Y(J_, {
ref_key: "sortPopoverRef",
ref: E
}, null, 512)])]),
- "collections-anchor": W(() => [U("div", Yy, [Y(n, {
+ "collections-anchor": W(() => [U("div", nb, [Y(n, {
ref_key: "collectionsBtnRef",
ref: g,
type: "button",
@@ -21054,11 +21084,11 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
"aria-hidden": "true"
}, null, -1)]]),
_: 1
- }, 8, ["title", "aria-label"]), Y(_y, {
+ }, 8, ["title", "aria-label"]), Y(wy, {
ref_key: "collectionsPopoverRef",
ref: O
}, null, 512)])]),
- "pinned-folders-anchor": W(() => [U("div", Xy, [Y(n, {
+ "pinned-folders-anchor": W(() => [U("div", rb, [Y(n, {
ref_key: "pinnedFoldersBtnRef",
ref: _,
type: "button",
@@ -21074,7 +21104,7 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
"aria-hidden": "true"
}, null, -1)]]),
_: 1
- }, 8, ["title", "aria-label"]), Y(Cy, {
+ }, 8, ["title", "aria-label"]), Y(Ay, {
ref_key: "pinnedFoldersPopoverRef",
ref: k
}, null, 512)])]),
@@ -21082,20 +21112,20 @@ var Gv = { class: "mjr-menu mjr-collections-menu" }, Kv = { class: "mjr-menu-ite
}, 512)], 64);
};
}
-}), eb = (e) => {
+}), sb = (e) => {
try {
return String(e ?? "");
} catch {
return "";
}
-}, tb = (e) => {
+}, cb = (e) => {
let t = String(e || "");
return R(t === "name_asc" ? "sort.nameAZ" : t === "name_desc" ? "sort.nameZA" : t === "mtime_asc" ? "sort.oldest" : "sort.newest");
-}, nb = (e) => {
+}, lb = (e) => {
let t = String(e || "").toLowerCase();
return t === "similar" ? R("scope.similar", "Similar") : t === "custom" ? R("scope.customBrowser") : t === "workflow" ? R("scope.workflow", "Workflow") : R(t === "all" ? "tab.all" : t === "input" || t === "inputs" ? "scope.input" : "scope.output");
};
-function rb({ label: e, value: t, onClear: n } = {}) {
+function ub({ label: e, value: t, onClear: n } = {}) {
let r = document.createElement("div");
r.className = "mjr-context-pill";
let i = document.createElement("span");
@@ -21116,69 +21146,69 @@ function rb({ label: e, value: t, onClear: n } = {}) {
}
return r;
}
-function ib() {
+function db() {
let e = document.createElement("div");
return e.className = "mjr-am-context-pills", {
wrap: e,
update: ({ state: t, rawQuery: n = "", actions: r = null } = {}) => {
- let i = r && typeof r == "object" ? r : {}, a = eb(n || "").trim(), o = a.length > 0 && a !== "*", s = !!(eb(t?.kindFilter || "").trim() || t?.workflowOnly || (Number(t?.minRating || 0) || 0) > 0 || (Number(t?.minSizeMB || 0) || 0) > 0 || (Number(t?.maxSizeMB || 0) || 0) > 0 || (Number(t?.minWidth || 0) || 0) > 0 || (Number(t?.minHeight || 0) || 0) > 0 || (Number(t?.maxWidth || 0) || 0) > 0 || (Number(t?.maxHeight || 0) || 0) > 0 || eb(t?.workflowType || "").trim() || eb(t?.workflowId || "").trim() || eb(t?.workflowModelFilter || "").trim() || eb(t?.workflowRunsOnFilter || "").trim() || eb(t?.dateRangeFilter || "").trim() || eb(t?.dateExactFilter || "").trim()), c = eb(t?.sort || "mtime_desc").trim() !== "mtime_desc", l = eb(t?.collectionId || "").trim().length > 0, u = String(t?.viewScope || t?.scope || "output").toLowerCase(), d = u === "similar", f = u === "custom", p = u !== "output", m = eb(t?.similarSourceAssetId || "").trim();
+ let i = r && typeof r == "object" ? r : {}, a = sb(n || "").trim(), o = a.length > 0 && a !== "*", s = !!(sb(t?.kindFilter || "").trim() || t?.workflowOnly || (Number(t?.minRating || 0) || 0) > 0 || (Number(t?.minSizeMB || 0) || 0) > 0 || (Number(t?.maxSizeMB || 0) || 0) > 0 || (Number(t?.minWidth || 0) || 0) > 0 || (Number(t?.minHeight || 0) || 0) > 0 || (Number(t?.maxWidth || 0) || 0) > 0 || (Number(t?.maxHeight || 0) || 0) > 0 || sb(t?.workflowType || "").trim() || sb(t?.workflowId || "").trim() || sb(t?.workflowModelFilter || "").trim() || sb(t?.workflowRunsOnFilter || "").trim() || sb(t?.dateRangeFilter || "").trim() || sb(t?.dateExactFilter || "").trim()), c = sb(t?.sort || "mtime_desc").trim() !== "mtime_desc", l = sb(t?.collectionId || "").trim().length > 0, u = String(t?.viewScope || t?.scope || "output").toLowerCase(), d = u === "similar", f = u === "custom", p = u !== "output", m = sb(t?.similarSourceAssetId || "").trim();
if (o || s || c || l || p || d || e.childElementCount) {
try {
e.replaceChildren();
} catch (e) {
console.debug?.(e);
}
- if (!f && l && e.appendChild(rb({
+ if (!f && l && e.appendChild(ub({
label: R("label.collections"),
- value: eb(t?.collectionName || t?.collectionId || "").trim(),
+ value: sb(t?.collectionName || t?.collectionId || "").trim(),
onClear: () => i?.clearCollection?.()
- })), d && e.appendChild(rb({
+ })), d && e.appendChild(ub({
label: R("search.findSimilar", "Find Similar"),
value: m ? R("search.similarReference", "Reference #{id}", { id: m }) : R("scope.similar", "Similar"),
onClear: () => i?.clearSimilarScope?.()
- })), p && e.appendChild(rb({
+ })), p && e.appendChild(ub({
label: R("label.scope"),
- value: nb(u || "output"),
+ value: lb(u || "output"),
onClear: () => d ? i?.clearSimilarScope?.() : i?.clearScope?.()
- })), o && e.appendChild(rb({
+ })), o && e.appendChild(ub({
label: R("label.query"),
value: a,
onClear: () => i?.clearQuery?.()
- })), eb(t?.kindFilter || "").trim() && e.appendChild(rb({
+ })), sb(t?.kindFilter || "").trim() && e.appendChild(ub({
label: R("label.type"),
- value: eb(t?.kindFilter || "").trim(),
+ value: sb(t?.kindFilter || "").trim(),
onClear: () => i?.clearKind?.()
- })), Number(t?.minRating || 0) > 0 && e.appendChild(rb({
+ })), Number(t?.minRating || 0) > 0 && e.appendChild(ub({
label: R("label.rating"),
value: `>= ${Number(t?.minRating || 0)}`,
onClear: () => i?.clearMinRating?.()
- })), t?.workflowOnly && e.appendChild(rb({
+ })), t?.workflowOnly && e.appendChild(ub({
label: R("label.workflow"),
value: R("label.only"),
onClear: () => i?.clearWorkflowOnly?.()
- })), eb(t?.workflowType || "").trim() && e.appendChild(rb({
+ })), sb(t?.workflowType || "").trim() && e.appendChild(ub({
label: R("label.workflowType"),
- value: eb(t?.workflowType || "").trim(),
+ value: sb(t?.workflowType || "").trim(),
onClear: () => i?.clearWorkflowType?.()
- })), eb(t?.workflowId || "").trim()) {
- let n = eb(t?.workflowId || "").trim();
- e.appendChild(rb({
+ })), sb(t?.workflowId || "").trim()) {
+ let n = sb(t?.workflowId || "").trim();
+ e.appendChild(ub({
label: R("label.sameWorkflow", "Generated with Same Workflow"),
value: n.length > 18 ? `${n.slice(0, 8)}...${n.slice(-6)}` : n,
onClear: () => i?.clearWorkflowId?.()
}));
}
- if (eb(t?.workflowModelFilter || "").trim() && e.appendChild(rb({
+ if (sb(t?.workflowModelFilter || "").trim() && e.appendChild(ub({
label: R("label.workflowModelFamily", "Model family"),
- value: eb(t?.workflowModelFilter || "").trim(),
+ value: sb(t?.workflowModelFilter || "").trim(),
onClear: () => i?.clearWorkflowModel?.()
- })), eb(t?.workflowRunsOnFilter || "").trim() && e.appendChild(rb({
+ })), sb(t?.workflowRunsOnFilter || "").trim() && e.appendChild(ub({
label: R("label.workflowRunsOn", "Runs on"),
- value: eb(t?.workflowRunsOnFilter || "").trim(),
+ value: sb(t?.workflowRunsOnFilter || "").trim(),
onClear: () => i?.clearWorkflowRunsOn?.()
})), (Number(t?.minSizeMB || 0) || 0) > 0 || (Number(t?.maxSizeMB || 0) || 0) > 0) {
let n = Number(t?.minSizeMB || 0) || 0, r = Number(t?.maxSizeMB || 0) || 0, a = n > 0 && r > 0 ? `${n}-${r} MB` : n > 0 ? `>= ${n} MB` : `<= ${r} MB`;
- e.appendChild(rb({
+ e.appendChild(ub({
label: R("sidebar.size"),
value: a,
onClear: () => i?.clearSize?.()
@@ -21186,23 +21216,23 @@ function ib() {
}
if ((Number(t?.minWidth || 0) || 0) > 0 || (Number(t?.minHeight || 0) || 0) > 0 || (Number(t?.maxWidth || 0) || 0) > 0 || (Number(t?.maxHeight || 0) || 0) > 0) {
let n = String(t?.resolutionCompare || "gte") === "lte", r = Number(n ? t?.maxWidth : t?.minWidth || 0) || 0, a = Number(n ? t?.maxHeight : t?.minHeight || 0) || 0;
- e.appendChild(rb({
+ e.appendChild(ub({
label: R("label.resolution"),
value: `${n ? "<=" : ">="} ${r || 0}x${a || 0} px`,
onClear: () => i?.clearResolution?.()
}));
}
- eb(t?.dateRangeFilter || "").trim() && e.appendChild(rb({
+ sb(t?.dateRangeFilter || "").trim() && e.appendChild(ub({
label: R("sidebar.date"),
- value: eb(t?.dateRangeFilter || "").trim(),
+ value: sb(t?.dateRangeFilter || "").trim(),
onClear: () => i?.clearDateRange?.()
- })), eb(t?.dateExactFilter || "").trim() && e.appendChild(rb({
+ })), sb(t?.dateExactFilter || "").trim() && e.appendChild(ub({
label: R("label.day"),
- value: eb(t?.dateExactFilter || "").trim(),
+ value: sb(t?.dateExactFilter || "").trim(),
onClear: () => i?.clearDateExact?.()
- })), c && e.appendChild(rb({
+ })), c && e.appendChild(ub({
label: R("label.sort"),
- value: tb(t?.sort),
+ value: cb(t?.sort),
onClear: () => i?.clearSort?.()
}));
}
@@ -21210,17 +21240,17 @@ function ib() {
};
}
// ui/vue/components/panel/summaryBarState.ts
-var ab = (e, t = "") => R(e, t, void 0), ob = (e) => {
+var fb = (e, t = "") => R(e, t, void 0), pb = (e) => {
try {
return String(e ?? "");
} catch {
return "";
}
-}, sb = (e) => {
+}, mb = (e) => {
let t = String(e || "").toLowerCase();
- return t === "similar" ? ab("scope.similar", "Similar") : t === "workflow" ? ab("scope.workflow", "Workflow") : ab(t === "input" || t === "inputs" ? "scope.input" : t === "custom" ? "scope.customBrowser" : t === "all" ? "tab.all" : "scope.output");
+ return t === "similar" ? fb("scope.similar", "Similar") : t === "workflow" ? fb("scope.workflow", "Workflow") : fb(t === "input" || t === "inputs" ? "scope.input" : t === "custom" ? "scope.customBrowser" : t === "all" ? "tab.all" : "scope.output");
};
-function cb(e) {
+function hb(e) {
try {
let t = e?._mjrGetRenderedCards;
if (typeof t == "function") {
@@ -21232,7 +21262,7 @@ function cb(e) {
}
return [];
}
-function lb(e) {
+function gb(e) {
try {
let t = String(e?.dataset?.mjrSelectedAssetIds || "").trim();
if (t) {
@@ -21249,8 +21279,8 @@ function lb(e) {
}
return 0;
}
-function ub({ state: e, gridContainer: t, context: n = null } = {}) {
- let r = cb(t), i = (() => {
+function _b({ state: e, gridContainer: t, context: n = null } = {}) {
+ let r = hb(t), i = (() => {
try {
let e = 0;
for (let t of r) String(t?._mjrAsset?.kind || "").toLowerCase() === "folder" && (e += 1);
@@ -21271,12 +21301,12 @@ function ub({ state: e, gridContainer: t, context: n = null } = {}) {
} catch (e) {
console.debug?.(e);
}
- return lb(t);
- })(), s = Number(t?.dataset?.mjrTotal || 0) || Math.max(0, Number(e?.lastGridTotal ?? 0) || 0), c = Number(t?.dataset?.mjrShown || 0) || Math.max(0, Number(e?.lastGridCount ?? 0) || 0) || a, l = String(e?.viewScope || e?.scope || t?.dataset?.mjrScope || "output").toLowerCase(), u = s && s >= c ? `${c}/${s}` : `${c}`, d = [`${c > 0 && i.total > 0 && i.folders === i.total ? ab("summary.folders") : ab("summary.assets")}: ${u}`];
- o > 0 && d.push(`${ab("summary.selected")}: ${o}`), d.push(sb(l));
+ return gb(t);
+ })(), s = Number(t?.dataset?.mjrTotal || 0) || Math.max(0, Number(e?.lastGridTotal ?? 0) || 0), c = Number(t?.dataset?.mjrShown || 0) || Math.max(0, Number(e?.lastGridCount ?? 0) || 0) || a, l = String(e?.viewScope || e?.scope || t?.dataset?.mjrScope || "output").toLowerCase(), u = s && s >= c ? `${c}/${s}` : `${c}`, d = [`${c > 0 && i.total > 0 && i.folders === i.total ? fb("summary.folders") : fb("summary.assets")}: ${u}`];
+ o > 0 && d.push(`${fb("summary.selected")}: ${o}`), d.push(mb(l));
try {
let e = Number(t?.dataset?.mjrHiddenPngSiblings || 0) || 0;
- String(t?.dataset?.mjrHidePngSiblingsEnabled || "") === "1" && e > 0 && d.push(`${ab("summary.hidden")}: ${e}`);
+ String(t?.dataset?.mjrHidePngSiblingsEnabled || "") === "1" && e > 0 && d.push(`${fb("summary.hidden")}: ${e}`);
} catch (e) {
console.debug?.(e);
}
@@ -21286,22 +21316,22 @@ function ub({ state: e, gridContainer: t, context: n = null } = {}) {
total: s,
activeScope: l,
summaryText: d.filter(Boolean).join(" | "),
- duplicateText: h ? `${ab("summary.duplicates")}: ${p} | ${ab("summary.similar")}: ${m}` : "",
+ duplicateText: h ? `${fb("summary.duplicates")}: ${p} | ${fb("summary.similar")}: ${m}` : "",
showDuplicates: h,
- rawQuery: ob(n?.rawQuery || "").trim()
+ rawQuery: pb(n?.rawQuery || "").trim()
};
}
// ui/vue/components/panel/SummaryBarSection.vue?vue&type=script&setup=true&lang.ts
-var db = {
+var vb = {
key: 2,
class: "mjr-folder-breadcrumb-separator"
-}, fb = {
+}, yb = {
key: 0,
class: "mjr-folder-breadcrumb-separator"
-}, pb = { class: "mjr-am-summary-left" }, mb = { class: "mjr-am-summary-text" }, hb = { class: "mjr-am-summary-right" }, gb = ["aria-label"], _b = /* @__PURE__ */ fr({
+}, bb = { class: "mjr-am-summary-left" }, xb = { class: "mjr-am-summary-text" }, Sb = { class: "mjr-am-summary-right" }, Cb = ["aria-label"], wb = /* @__PURE__ */ dr({
__name: "SummaryBarSection",
setup(e, { expose: t }) {
- let n = dh(), r = Q(null), i = Q(null), a = Q(null), o = Q(""), s = Q(""), c = Q(!1), l = Q(!1), u = Q(null), d = Q(null), f = Q([]), p = ib(), m = K(() => String(n.kindFilter || "").trim().toLowerCase()), h = K(() => {
+ let n = vh(), r = Q(null), i = Q(null), a = Q(null), o = Q(""), s = Q(""), c = Q(!1), l = Q(!1), u = Q(null), d = Q(null), f = Q([]), p = db(), m = K(() => String(n.kindFilter || "").trim().toLowerCase()), h = K(() => {
let e = R("label.type", "Type");
return [
{
@@ -21348,7 +21378,7 @@ var db = {
t && (n.kindFilter = v(t) ? "" : t, y());
}
function x({ state: e, gridContainer: t, context: r = null, actions: i = null } = {}) {
- let a = ub({
+ let a = _b({
state: e,
gridContainer: t,
context: r
@@ -21398,14 +21428,14 @@ var db = {
folderBreadcrumb: i,
setFolderBreadcrumb: S
}), (e, t) => {
- let n = or("MButton");
+ let n = ar("MButton");
return q(), X(H, null, [U("div", {
ref_key: "folderBreadcrumb",
ref: i,
class: Dr(["mjr-folder-breadcrumb", { "is-visible": l.value }]),
"aria-label": "Folder breadcrumb"
}, [
- u.value ? (q(), ar(n, {
+ u.value ? (q(), ir(n, {
key: 0,
type: "button",
class: "mjr-btn-link mjr-folder-breadcrumb-action",
@@ -21414,10 +21444,10 @@ var db = {
disabled: u.value.disabled,
onClick: t[0] ||= (e) => C(u.value)
}, {
- default: W(() => [rr(J(u.value.label), 1)]),
+ default: W(() => [nr(J(u.value.label), 1)]),
_: 1
}, 8, ["disabled"])) : G("", !0),
- d.value ? (q(), ar(n, {
+ d.value ? (q(), ir(n, {
key: 1,
type: "button",
class: "mjr-btn-link mjr-folder-breadcrumb-action",
@@ -21426,11 +21456,11 @@ var db = {
disabled: d.value.disabled,
onClick: t[1] ||= (e) => C(d.value)
}, {
- default: W(() => [rr(J(d.value.label), 1)]),
+ default: W(() => [nr(J(d.value.label), 1)]),
_: 1
}, 8, ["disabled"])) : G("", !0),
- u.value || d.value ? (q(), X("span", db, " | ")) : G("", !0),
- (q(!0), X(H, null, gr(f.value, (e, t) => (q(), X(H, { key: `${e.target}:${t}` }, [t > 0 ? (q(), X("span", fb, "/")) : G("", !0), Y(n, {
+ u.value || d.value ? (q(), X("span", vb, " | ")) : G("", !0),
+ (q(!0), X(H, null, hr(f.value, (e, t) => (q(), X(H, { key: `${e.target}:${t}` }, [t > 0 ? (q(), X("span", yb, "/")) : G("", !0), Y(n, {
type: "button",
class: Dr(["mjr-btn-link mjr-folder-breadcrumb-segment", { "is-current": e.current }]),
severity: "secondary",
@@ -21438,7 +21468,7 @@ var db = {
disabled: e.current,
onClick: (t) => C(e)
}, {
- default: W(() => [rr(J(e.label), 1)]),
+ default: W(() => [nr(J(e.label), 1)]),
_: 2
}, 1032, [
"class",
@@ -21450,12 +21480,12 @@ var db = {
ref: r,
class: "mjr-am-summary",
"aria-live": "polite"
- }, [U("div", pb, [U("div", mb, J(o.value), 1)]), U("div", hb, [
+ }, [U("div", bb, [U("div", xb, J(o.value), 1)]), U("div", Sb, [
U("div", {
class: "mjr-media-shortcuts",
"aria-label": Z(R)("label.type", "Type"),
role: "group"
- }, [(q(!0), X(H, null, gr(h.value, (e) => (q(), ar(n, {
+ }, [(q(!0), X(H, null, hr(h.value, (e) => (q(), ir(n, {
key: e.kind,
type: "button",
class: Dr(["mjr-icon-btn mjr-media-shortcut-btn", { "mjr-context-active": v(e.kind) }]),
@@ -21478,8 +21508,8 @@ var db = {
"aria-pressed",
"class",
"onClick"
- ]))), 128))], 8, gb),
- c.value ? (q(), ar(n, {
+ ]))), 128))], 8, Cb),
+ c.value ? (q(), ir(n, {
key: 0,
type: "button",
class: "mjr-am-dup-alert",
@@ -21488,7 +21518,7 @@ var db = {
title: s.value,
onClick: _
}, {
- default: W(() => [rr(J(s.value), 1)]),
+ default: W(() => [nr(J(s.value), 1)]),
_: 1
}, 8, ["title"])) : G("", !0),
U("div", {
@@ -21500,7 +21530,7 @@ var db = {
}
});
// ui/vue/composables/useGridContextMenu.ts
-function vb(e, t) {
+function Tb(e, t) {
let n = null;
function r(e) {
if (e && !e._mjrGridContextMenuBound) try {
@@ -21518,12 +21548,12 @@ function vb(e, t) {
} catch {}
n = null;
}
- lr(e, (e, t) => {
+ cr(e, (e, t) => {
t && i(), e && r(e);
- }, { immediate: !0 }), ir(i);
+ }, { immediate: !0 }), rr(i);
}
// ui/vue/composables/useGridKeyboard.ts
-function yb(e) {
+function Eb(e) {
if (!e) return () => {};
let t = e;
try {
@@ -21562,7 +21592,7 @@ function yb(e) {
return console.debug?.("[useGridKeyboard] bind failed", e), () => {};
}
}
-function bb(e) {
+function Db(e) {
let t = null, n = () => {
try {
t?.();
@@ -21571,13 +21601,13 @@ function bb(e) {
}
t = null;
};
- lr(e, (e, r) => {
- r && n(), e && (t = yb(e));
- }, { immediate: !0 }), ir(n);
+ cr(e, (e, r) => {
+ r && n(), e && (t = Eb(e));
+ }, { immediate: !0 }), rr(n);
}
// ui/vue/components/grid/assetsGridHostState.ts
-function xb() {}
-function Sb() {
+function Ob() {}
+function kb() {
return new Promise((e) => {
try {
if (typeof requestAnimationFrame == "function") {
@@ -21590,7 +21620,7 @@ function Sb() {
e();
});
}
-function Cb(e, ...t) {
+function Ab(e, ...t) {
try {
return typeof e == "function" ? e(...t) : void 0;
} catch (e) {
@@ -21598,21 +21628,21 @@ function Cb(e, ...t) {
return;
}
}
-function wb(e = {}) {
+function jb(e = {}) {
let t = Array.isArray(e.selectedIds) ? e.selectedIds.map(String).filter(Boolean) : [];
return {
ids: t,
activeId: String(e.activeId || t[0] || "").trim()
};
}
-function Tb(e, t = {}, n = null) {
+function Mb(e, t = {}, n = null) {
return {
count: Number(t.count ?? t.shown ?? e?.dataset?.mjrShown ?? n?.lastGridCount ?? 0) || 0,
total: Number(t.total ?? e?.dataset?.mjrTotal ?? n?.lastGridTotal ?? 0) || 0
};
}
-function Eb(e, t = fh()) {
- if (!e || !t) return xb;
+function Nb(e, t = yh()) {
+ if (!e || !t) return Ob;
let n = 0, r = () => {
if (!n) try {
n = requestAnimationFrame(() => {
@@ -21638,8 +21668,8 @@ function Eb(e, t = fh()) {
}
};
}
-function Db(e, { panelStore: t = fh(), onContextChanged: n = null, markUserInteraction: r = null } = {}) {
- if (!e) return xb;
+function Pb(e, { panelStore: t = yh(), onContextChanged: n = null, markUserInteraction: r = null } = {}) {
+ if (!e) return Ob;
let i = 0, a = () => {
if (i) try {
cancelAnimationFrame(i);
@@ -21648,24 +21678,24 @@ function Db(e, { panelStore: t = fh(), onContextChanged: n = null, markUserInter
}
try {
i = requestAnimationFrame(() => {
- i = 0, Cb(n);
+ i = 0, Ab(n);
});
} catch (e) {
- console.debug?.(e), i = 0, Cb(n);
+ console.debug?.(e), i = 0, Ab(n);
}
}, o = (r) => {
let i = r?.detail || {};
if (t) {
- let { count: n, total: r } = Tb(e, i, t);
+ let { count: n, total: r } = Mb(e, i, t);
t.lastGridCount = n, t.lastGridTotal = r;
}
- Cb(n);
+ Ab(n);
}, s = (e) => {
- if (Cb(r), t) {
- let { ids: n, activeId: r } = wb(e?.detail || {});
+ if (Ab(r), t) {
+ let { ids: n, activeId: r } = jb(e?.detail || {});
t.selectedAssetIds = n, t.activeAssetId = r;
}
- Cb(n);
+ Ab(n);
};
e.addEventListener("mjr:grid-stats", o), e.addEventListener("mjr:selection-changed", s);
try {
@@ -21713,14 +21743,14 @@ function Db(e, { panelStore: t = fh(), onContextChanged: n = null, markUserInter
}
};
}
-async function Ob({ initialLoadPromise: e, gridWrapper: t, gridContainer: n, panelStore: r = fh(), onRestoreSidebar: i = null } = {}) {
+async function Fb({ initialLoadPromise: e, gridWrapper: t, gridContainer: n, panelStore: r = yh(), onRestoreSidebar: i = null } = {}) {
if (!t || !n || !r) return;
try {
await e;
} catch (e) {
console.debug?.(e);
}
- await Sb();
+ await kb();
let a = Number(r.scrollTop || 0) || 0;
if (a > 0) try {
t.scrollTop = a;
@@ -21748,13 +21778,13 @@ async function Ob({ initialLoadPromise: e, gridWrapper: t, gridContainer: n, pan
e(), setTimeout(e, 160);
}
}
- r.sidebarOpen && s && Cb(i);
+ r.sidebarOpen && s && Ab(i);
}
// ui/vue/components/grid/AssetsGrid.vue
-var kb = /* @__PURE__ */ fr({
+var Ib = /* @__PURE__ */ dr({
__name: "AssetsGrid",
setup(e, { expose: t }) {
- let n = Q(null), r = Q(null), i = Q(null), a = dh(), o = K(() => i.value?.gridContainer ?? null), s = null, c = null, l = null, u = null;
+ let n = Q(null), r = Q(null), i = Q(null), a = vh(), o = K(() => i.value?.gridContainer ?? null), s = null, c = null, l = null, u = null;
function d() {
try {
l?.setVisibility?.();
@@ -21765,7 +21795,7 @@ var kb = /* @__PURE__ */ fr({
function f() {
try {
let e = o.value;
- e && nr(e);
+ e && tr(e);
} catch (e) {
console.debug?.(e);
}
@@ -21848,7 +21878,7 @@ var kb = /* @__PURE__ */ fr({
}
};
}
- sr("mjr-grid-container-ref", o), vb(o, () => a), bb(o);
+ or("mjr-grid-container-ref", o), Tb(o, () => a), Db(o);
function m() {
return o.value || null;
}
@@ -21860,23 +21890,23 @@ var kb = /* @__PURE__ */ fr({
} catch (e) {
console.debug?.(e);
}
- c = Db(t, {
+ c = Pb(t, {
panelStore: a,
...e
});
}
}
return Mr(() => {
- s = Eb(r.value, a), r.value && Number(a.scrollTop || 0) > 0 && (r.value.scrollTop = Number(a.scrollTop || 0)), p();
+ s = Nb(r.value, a), r.value && Number(a.scrollTop || 0) > 0 && (r.value.scrollTop = Number(a.scrollTop || 0)), p();
try {
window.addEventListener("mjr:keepalive-attached", f), document.addEventListener("visibilitychange", d);
} catch (e) {
console.debug?.(e);
}
d();
- }), mr(() => {
+ }), pr(() => {
try {
- Qn(m());
+ Zn(m());
} catch (e) {
console.debug?.(e);
}
@@ -21909,14 +21939,14 @@ var kb = /* @__PURE__ */ fr({
} catch (e) {
console.debug?.(e);
}
- }), lr(o, (e, t) => {
+ }), cr(o, (e, t) => {
try {
- t && t !== e && Qn(t);
+ t && t !== e && Zn(t);
} catch (e) {
console.debug?.(e);
}
try {
- e && nr(e);
+ e && tr(e);
} catch (e) {
console.debug?.(e);
}
@@ -21944,7 +21974,7 @@ var kb = /* @__PURE__ */ fr({
};
},
restoreGridUiState(e, t = {}) {
- return Ob({
+ return Fb({
initialLoadPromise: e,
gridWrapper: r.value,
gridContainer: m(),
@@ -21960,7 +21990,7 @@ var kb = /* @__PURE__ */ fr({
} catch (e) {
console.debug?.(e);
}
- return l = Kg({
+ return l = $g({
gridContainer: t,
gridWrapper: r.value,
...e
@@ -22015,13 +22045,13 @@ var kb = /* @__PURE__ */ fr({
overflow: "auto",
position: "relative"
}
- }, [Y(ed, {
+ }, [Y(sd, {
ref_key: "gridHostRef",
ref: i,
"scroll-element": r.value
}, null, 8, ["scroll-element"])], 512)], 512));
}
-}), Ab = {
+}), Lb = {
class: "mjr-sidebar-header",
style: {
display: "flex",
@@ -22032,15 +22062,15 @@ var kb = /* @__PURE__ */ fr({
"flex-shrink": "0",
background: "var(--mjr-surface-2,#2e2e2e)"
}
-}, jb = ["title"], Mb = /* @__PURE__ */ fr({
+}, Rb = ["title"], zb = /* @__PURE__ */ dr({
__name: "SidebarHeaderSection",
props: { asset: {} },
emits: ["close"],
setup(e, { emit: t }) {
let n = t;
return (t, r) => {
- let i = or("MButton");
- return q(), X("div", Ab, [U("div", {
+ let i = ar("MButton");
+ return q(), X("div", Lb, [U("div", {
class: "mjr-sidebar-filename",
title: e.asset.filename,
style: {
@@ -22053,7 +22083,7 @@ var kb = /* @__PURE__ */ fr({
"min-width": "0",
"padding-right": "8px"
}
- }, J(e.asset.filename), 9, jb), Y(i, {
+ }, J(e.asset.filename), 9, Rb), Y(i, {
type: "button",
class: "mjr-sidebar-close",
severity: "secondary",
@@ -22077,21 +22107,21 @@ var kb = /* @__PURE__ */ fr({
onMouseenter: r[1] ||= (e) => (e.currentTarget.style.background = "rgba(255,255,255,0.1)") && (e.currentTarget.style.borderColor = "rgba(255,255,255,0.2)"),
onMouseleave: r[2] ||= (e) => (e.currentTarget.style.background = "none") && (e.currentTarget.style.borderColor = "transparent")
}, {
- default: W(() => [...r[3] ||= [rr("x", -1)]]),
+ default: W(() => [...r[3] ||= [nr("x", -1)]]),
_: 1
})]);
};
}
});
// ui/components/sidebar/utils/format.ts
-function Nb(e) {
+function Bb(e) {
if (!e) return "Unknown";
let t = e / 1024;
if (t < 1024) return `${t.toFixed(1)} KB`;
let n = t / 1024;
return n < 1024 ? `${n.toFixed(1)} MB` : `${(n / 1024).toFixed(2)} GB`;
}
-function Pb(e) {
+function Vb(e) {
if (!e) return "";
let t = /* @__PURE__ */ new Date(Number(e) * 1e3);
if (Number.isNaN(t.getTime())) return "";
@@ -22099,13 +22129,13 @@ function Pb(e) {
return `${t.getFullYear()}-${n(t.getMonth() + 1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}`;
}
// ui/vue/components/panel/sidebar/SidebarPreviewSection.vue?vue&type=script&setup=true&lang.ts
-var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["src"], zb = {
+var Hb = { class: "mjr-sidebar-preview" }, Ub = ["src"], Wb = ["src"], Gb = ["src"], Kb = {
key: 3,
style: {
color: "rgba(255, 255, 255, 0.4)",
"font-size": "14px"
}
-}, Bb = {
+}, qb = {
class: "mjr-sidebar-preview-meta",
style: {
"margin-top": "10px",
@@ -22119,7 +22149,7 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
"padding-bottom": "12px",
"border-bottom": "1px solid var(--mjr-border, rgba(255, 255, 255, 0.12))"
}
-}, Vb = /* @__PURE__ */ fr({
+}, Jb = /* @__PURE__ */ dr({
__name: "SidebarPreviewSection",
props: {
asset: {},
@@ -22135,9 +22165,9 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
}), o = K(() => {
let e = [];
a.value && e.push(a.value), t.asset?.kind && e.push(String(t.asset.kind).toLowerCase());
- let n = Nb(t.asset?.size);
+ let n = Bb(t.asset?.size);
n && e.push(n);
- let r = Pb(t.asset?.mtime);
+ let r = Vb(t.asset?.mtime);
return r && e.push(r), e.join(" | ");
});
function s() {
@@ -22162,7 +22192,7 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
if (e && i) {
c(i);
try {
- r = Bt(i, {
+ r = zt(i, {
variant: "preview",
hostEl: e
});
@@ -22171,17 +22201,17 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
}
}
}
- return lr(() => [t.asset, t.showPreviewThumb], () => {
+ return cr(() => [t.asset, t.showPreviewThumb], () => {
s();
- }, { flush: "post" }), lr(i, () => {
+ }, { flush: "post" }), cr(i, () => {
setTimeout(() => {
l();
}, 0);
}), Mr(() => {
l();
- }), mr(() => {
+ }), pr(() => {
s();
- }), (t, r) => (q(), X("div", Fb, [e.showPreviewThumb ? (q(), X("div", {
+ }), (t, r) => (q(), X("div", Hb, [e.showPreviewThumb ? (q(), X("div", {
key: 0,
ref_key: "previewContainerRef",
ref: n,
@@ -22204,7 +22234,7 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
"max-height": "100%",
"object-fit": "contain"
}
- }, null, 8, Ib)) : e.asset.kind === "video" ? (q(), X("video", {
+ }, null, 8, Ub)) : e.asset.kind === "video" ? (q(), X("video", {
key: 1,
src: i.value,
muted: !0,
@@ -22217,7 +22247,7 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
"max-height": "100%",
"object-fit": "contain"
}
- }, null, 8, Lb)) : e.asset.kind === "audio" ? (q(), X("audio", {
+ }, null, 8, Wb)) : e.asset.kind === "audio" ? (q(), X("audio", {
key: 2,
src: i.value,
controls: "",
@@ -22226,9 +22256,9 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
width: "92%",
"max-width": "560px"
}
- }, null, 8, Rb)) : (q(), X("div", zb, J(String(e.asset.kind || "PREVIEW").toUpperCase()), 1))], 512)) : G("", !0), U("div", Bb, J(o.value), 1)]));
+ }, null, 8, Gb)) : (q(), X("div", Kb, J(String(e.asset.kind || "PREVIEW").toUpperCase()), 1))], 512)) : G("", !0), U("div", qb, J(o.value), 1)]));
}
-}), Hb = {
+}), Yb = {
class: "mjr-sidebar-section",
style: {
background: "rgba(255, 255, 255, 0.03)",
@@ -22236,22 +22266,22 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
"border-radius": "8px",
padding: "10px"
}
-}, Ub = { style: {
+}, Xb = { style: {
"font-size": "12px",
"font-weight": "700",
color: "#26a69a",
"margin-bottom": "8px",
"text-transform": "uppercase",
"letter-spacing": "0.4px"
-} }, Wb = { style: {
+} }, Zb = { style: {
display: "flex",
"flex-direction": "column",
gap: "6px"
-} }, Gb = { style: {
+} }, Qb = { style: {
"font-size": "12px",
opacity: "0.68",
"min-width": "92px"
-} }, Kb = ["title"], qb = /* @__PURE__ */ fr({
+} }, $b = ["title"], ex = /* @__PURE__ */ dr({
__name: "SidebarFolderSection",
props: { asset: {} },
setup(e) {
@@ -22294,17 +22324,17 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
];
return u > 0 && f.push({
label: R("sidebar.folder.created", "Created"),
- value: `${Bn(u) || "-"} ${Nn(u) || ""}`.trim()
+ value: `${zn(u) || "-"} ${Mn(u) || ""}`.trim()
}), l > 0 && f.push({
label: R("sidebar.folder.modified", "Modified"),
- value: `${Bn(l) || "-"} ${Nn(l) || ""}`.trim()
+ value: `${zn(l) || "-"} ${Mn(l) || ""}`.trim()
}), d && f.push({
label: R("sidebar.folder.note", "Note"),
value: R("sidebar.folder.scanTruncated", "Scan was truncated for performance"),
valueStyle: "color:#FFB74D;font-weight:600;"
}), f;
});
- return (e, t) => (q(), X("div", Hb, [U("div", Ub, J(Z(R)("sidebar.folder.details", "Folder Details")), 1), U("div", Wb, [(q(!0), X(H, null, gr(r.value, (e) => (q(), X("div", {
+ return (e, t) => (q(), X("div", Yb, [U("div", Xb, J(Z(R)("sidebar.folder.details", "Folder Details")), 1), U("div", Zb, [(q(!0), X(H, null, hr(r.value, (e) => (q(), X("div", {
key: e.label,
style: {
display: "flex",
@@ -22312,18 +22342,18 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
"align-items": "flex-start",
"justify-content": "space-between"
}
- }, [U("div", Gb, J(e.label), 1), U("div", {
- style: Sr(e.valueStyle || "font-size: 12px; text-align: right; word-break: break-word"),
+ }, [U("div", Qb, J(e.label), 1), U("div", {
+ style: xr(e.valueStyle || "font-size: 12px; text-align: right; word-break: break-word"),
title: String(e.value || "")
- }, J(e.value), 13, Kb)]))), 128))])]));
+ }, J(e.value), 13, $b)]))), 128))])]));
}
-}), Jb = [
+}), tx = [
"aria-busy",
"aria-disabled",
"aria-label",
"aria-valuenow",
"tabindex"
-], Yb = /* @__PURE__ */ fr({
+], nx = /* @__PURE__ */ dr({
__name: "RatingEditor",
props: {
asset: {},
@@ -22388,7 +22418,7 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
if (a("update:modelValue", o), a("rating-change", {
assetId: i.asset?.id,
rating: o
- }), Lt(st, {
+ }), wt(st, {
assetId: i.asset?.id == null ? "" : String(i.asset.id),
rating: o
}), d === o) {
@@ -22443,21 +22473,21 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
}
t !== null && t !== s.value && C(t);
}
- return mr(() => {
+ return pr(() => {
try {
f?.abort?.();
} catch (e) {
console.debug?.(e);
}
- }), lr(() => i.modelValue, (e) => {
+ }), cr(() => i.modelValue, (e) => {
b(e);
- }), lr(() => i.asset?.rating, (e) => {
+ }), cr(() => i.asset?.rating, (e) => {
b(e);
}), (e, n) => {
- let r = or("MButton");
+ let r = ar("MButton");
return q(), X("div", {
class: "mjr-rating-editor",
- style: Sr({
+ style: xr({
display: "inline-flex",
gap: "2px",
pointerEvents: t.disabled ? "none" : "auto",
@@ -22472,14 +22502,14 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
"aria-valuenow": s.value,
tabindex: t.disabled ? -1 : 0,
onKeydown: D
- }, [(q(), X(H, null, gr(5, (e) => Y(r, {
+ }, [(q(), X(H, null, hr(5, (e) => Y(r, {
key: e,
type: "button",
class: "mjr-rating-star",
severity: "secondary",
text: "",
rounded: "",
- style: Sr({
+ style: xr({
color: m(e),
transform: h(e),
fontSize: g.value,
@@ -22496,7 +22526,7 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
onMouseenter: (t) => T(e),
onMouseleave: E
}, {
- default: W(() => [...n[0] ||= [rr(" ★ ", -1)]]),
+ default: W(() => [...n[0] ||= [nr(" ★ ", -1)]]),
_: 1
}, 8, [
"style",
@@ -22505,31 +22535,31 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
"disabled",
"onClick",
"onMouseenter"
- ])), 64))], 44, Jb);
+ ])), 64))], 44, tx);
};
}
-}), Xb = ["aria-label"], Zb = { class: "mjr-context-menu-title" }, Qb = { class: "mjr-context-menu-item-left" }, $b = {
+}), rx = ["aria-label"], ix = { class: "mjr-context-menu-title" }, ax = { class: "mjr-context-menu-item-left" }, ox = {
key: 0,
class: "mjr-context-menu-note"
-}, ex = {
+}, sx = {
key: 1,
class: "mjr-context-menu-note is-error"
-}, tx = {
+}, cx = {
key: 2,
class: "mjr-context-menu-note"
-}, nx = { class: "mjr-context-menu-item-left" }, rx = {
+}, lx = { class: "mjr-context-menu-item-left" }, ux = {
key: 0,
class: "mjr-context-menu-hint"
-}, ix = /* @__PURE__ */ fr({
+}, dx = /* @__PURE__ */ dr({
__name: "AddToCollectionMenu",
setup(t) {
let n = Q(null), r = Q(!1), i = Q([]), a = Q(""), o = 0, s = null, c = K(() => ({
position: "fixed",
- left: `${Math.round(Number(Kt.x) || 0)}px`,
- top: `${Math.round(Number(Kt.y) || 0)}px`,
+ left: `${Math.round(Number(Gt.x) || 0)}px`,
+ top: `${Math.round(Number(Gt.y) || 0)}px`,
display: "block",
zIndex: "10004"
- })), l = K(() => Kt.assets.length || 0), u = K(() => R("ctx.addToCollection", "Add to collection") + (l.value > 1 ? ` (${l.value})` : ""));
+ })), l = K(() => Gt.assets.length || 0), u = K(() => R("ctx.addToCollection", "Add to collection") + (l.value > 1 ? ` (${l.value})` : ""));
function d({ collectionName: e, selectedCount: t, addRes: n }) {
let r = Number(n?.data?.added ?? 0) || 0, i = Number(n?.data?.skipped_existing ?? 0) || 0, a = Number(n?.data?.skipped_duplicate ?? 0) || 0, o = String(e || "").trim() || R("label.collection", "collection"), s = R("msg.collectionAdd.added", "Added {added} item(s) to \"{name}\".", {
added: r,
@@ -22539,9 +22569,9 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
}
function p() {
let e = n.value;
- if (!Kt.open || !e) return;
- let t = e.getBoundingClientRect(), r = Number(window.innerWidth || 0), i = Number(window.innerHeight || 0), a = Number(Kt.x) || 0, o = Number(Kt.y) || 0;
- a + t.width > r && (a = Math.max(8, r - t.width - 10)), o + t.height > i && (o = Math.max(8, i - t.height - 10)), a < 8 && (a = 8), o < 8 && (o = 8), Kt.x = a, Kt.y = o;
+ if (!Gt.open || !e) return;
+ let t = e.getBoundingClientRect(), r = Number(window.innerWidth || 0), i = Number(window.innerHeight || 0), a = Number(Gt.x) || 0, o = Number(Gt.y) || 0;
+ a + t.width > r && (a = Math.max(8, r - t.width - 10)), o + t.height > i && (o = Math.max(8, i - t.height - 10)), a < 8 && (a = 8), o < 8 && (o = 8), Gt.x = a, Gt.y = o;
}
async function m() {
let e = ++o;
@@ -22555,7 +22585,7 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
i.value = [], a.value = R("toast.failedLoadCollections", "Failed to load collections.");
} finally {
if (e === o) {
- r.value = !1, await ur(), p();
+ r.value = !1, await lr(), p();
try {
n.value?.querySelector?.(".mjr-context-menu-item:not([aria-disabled=\"true\"])")?.focus?.();
} catch (e) {
@@ -22565,7 +22595,7 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
}
}
async function h(t, n) {
- let r = Array.isArray(Kt.assets) ? Kt.assets : [];
+ let r = Array.isArray(Gt.assets) ? Gt.assets : [];
Mt();
let i = await f(t, r);
i?.ok ? e(d({
@@ -22575,9 +22605,9 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
}), "success", 4e3) : e(i?.error || R("toast.failedAddAssetsToCollection", "Failed to add assets to collection."), "error");
}
async function g() {
- let t = Array.isArray(Kt.assets) ? Kt.assets : [];
+ let t = Array.isArray(Gt.assets) ? Gt.assets : [];
Mt();
- let n = await Tt(R("dialog.createCollection", "Create collection"), R("dialog.collectionPlaceholder", "My collection"));
+ let n = await Ut(R("dialog.createCollection", "Create collection"), R("dialog.collectionPlaceholder", "My collection"));
if (!n) return;
let r = await S(n);
if (!r?.ok) {
@@ -22600,7 +22630,7 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
function y() {
Mt();
}
- return lr(() => Kt.open, async (e) => {
+ return cr(() => Gt.open, async (e) => {
e && (i.value = [], await m());
}), Mr(() => {
s = new AbortController();
@@ -22616,7 +22646,7 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
passive: !0,
signal: s.signal
}), window.addEventListener("mjr-close-all-menus", y, { signal: s.signal });
- }), ir(() => {
+ }), rr(() => {
try {
s?.abort();
} catch (e) {
@@ -22624,17 +22654,17 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
}
s = null, Mt();
}), (e, t) => {
- let o = or("MButton");
- return q(), ar(kr, { to: "body" }, [Z(Kt).open ? (q(), X("div", {
+ let o = ar("MButton");
+ return q(), ir(kr, { to: "body" }, [Z(Gt).open ? (q(), X("div", {
key: 0,
ref_key: "menuRef",
ref: n,
class: "mjr-add-to-collection-menu mjr-context-menu",
- style: Sr(c.value),
+ style: xr(c.value),
role: "menu",
"aria-label": u.value
}, [
- U("div", Zb, J(u.value), 1),
+ U("div", ix, J(u.value), 1),
Y(o, {
type: "button",
class: "mjr-context-menu-item",
@@ -22643,12 +22673,12 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
role: "menuitem",
onClick: g
}, {
- default: W(() => [U("span", Qb, [t[0] ||= U("i", { class: "pi pi-plus" }, null, -1), U("span", null, J(Z(R)("dialog.createCollection", "Create collection")) + "...", 1)])]),
+ default: W(() => [U("span", ax, [t[0] ||= U("i", { class: "pi pi-plus" }, null, -1), U("span", null, J(Z(R)("dialog.createCollection", "Create collection")) + "...", 1)])]),
_: 1
}),
t[2] ||= U("div", { class: "mjr-context-menu-separator" }, null, -1),
- r.value ? (q(), X("div", $b, J(Z(R)("msg.loadingCollections", "Loading collections...")), 1)) : a.value ? (q(), X("div", ex, J(a.value), 1)) : i.value.length ? G("", !0) : (q(), X("div", tx, J(Z(R)("msg.noCollections", "No collections yet.")), 1)),
- (q(!0), X(H, null, gr(i.value, (e) => (q(), ar(o, {
+ r.value ? (q(), X("div", ox, J(Z(R)("msg.loadingCollections", "Loading collections...")), 1)) : a.value ? (q(), X("div", sx, J(a.value), 1)) : i.value.length ? G("", !0) : (q(), X("div", cx, J(Z(R)("msg.noCollections", "No collections yet.")), 1)),
+ (q(!0), X(H, null, hr(i.value, (e) => (q(), ir(o, {
key: String(e?.id || ""),
type: "button",
class: "mjr-context-menu-item",
@@ -22657,31 +22687,31 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
role: "menuitem",
onClick: (t) => h(String(e?.id || ""), String(e?.name || e?.id || ""))
}, {
- default: W(() => [U("span", nx, [t[1] ||= U("i", { class: "pi pi-bookmark" }, null, -1), U("span", null, J(String(e?.name || e?.id || "")), 1)]), Number(e?.count || 0) > 0 ? (q(), X("span", rx, J(Number(e?.count || 0)), 1)) : G("", !0)]),
+ default: W(() => [U("span", lx, [t[1] ||= U("i", { class: "pi pi-bookmark" }, null, -1), U("span", null, J(String(e?.name || e?.id || "")), 1)]), Number(e?.count || 0) > 0 ? (q(), X("span", ux, J(Number(e?.count || 0)), 1)) : G("", !0)]),
_: 2
}, 1032, ["onClick"]))), 128))
- ], 12, Xb)) : G("", !0)]);
+ ], 12, rx)) : G("", !0)]);
};
}
-}), ax = {
+}), fx = {
key: 0,
class: "mjr-context-menu-separator"
-}, ox = { class: "mjr-context-menu-item-left" }, sx = { class: "mjr-context-menu-item-right" }, cx = {
+}, px = { class: "mjr-context-menu-item-left" }, mx = { class: "mjr-context-menu-item-right" }, hx = {
key: 0,
class: "mjr-context-menu-hint"
-}, lx = {
+}, gx = {
key: 1,
class: "mjr-context-menu-submenu-arrow"
-}, ux = {
+}, _x = {
key: 0,
class: "mjr-context-menu-separator"
-}, dx = { class: "mjr-context-menu-item-left" }, fx = {
+}, vx = { class: "mjr-context-menu-item-left" }, yx = {
key: 0,
class: "mjr-context-menu-hint"
-}, px = /* @__PURE__ */ fr({
+}, bx = /* @__PURE__ */ dr({
__name: "GridContextMenu",
setup(e) {
- let t = Q(null), n = Q(null), r = Q(null), i = null, a = null, o = K(() => l(gn.main, 10031)), s = K(() => l(gn.submenu, 10032)), c = K(() => l(gn.tags, 10033));
+ let t = Q(null), n = Q(null), r = Q(null), i = null, a = null, o = K(() => l(hn.main, 10031)), s = K(() => l(hn.submenu, 10032)), c = K(() => l(hn.tags, 10033));
function l(e, t) {
return {
position: "fixed",
@@ -22696,7 +22726,7 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
}
function d() {
u(), i = setTimeout(() => {
- rn();
+ nn();
}, 180);
}
function f(e, t) {
@@ -22705,7 +22735,7 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
a + n.width > r && (a = Math.max(8, r - n.width - 10)), o + n.height > i && (o = Math.max(8, i - n.height - 10)), a < 8 && (a = 8), o < 8 && (o = 8), e.x = a, e.y = o;
}
async function p(e, t) {
- await ur(), f(e, t?.value || null);
+ await lr(), f(e, t?.value || null);
}
function m(e) {
try {
@@ -22716,14 +22746,14 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
}
function h(e, t) {
if (!Array.isArray(e?.submenu) || !e.submenu.length) {
- rn();
+ nn();
return;
}
u();
let n = (t?.currentTarget)?.getBoundingClientRect?.();
- sn({
- x: Math.round((n?.right || gn.main.x || 0) + 6),
- y: Math.round((n?.top || gn.main.y || 0) - 4),
+ on({
+ x: Math.round((n?.right || hn.main.x || 0) + 6),
+ y: Math.round((n?.top || hn.main.y || 0) - 4),
items: e.submenu,
title: e.label || ""
});
@@ -22736,12 +22766,12 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
} catch (e) {
console.error("[GridContextMenu.vue] Action failed:", e);
} finally {
- e.closeOnSelect === !1 ? n === "submenu" && rn() : _n();
+ e.closeOnSelect === !1 ? n === "submenu" && nn() : gn();
}
}
}
function _(e, t) {
- Array.isArray(e?.submenu) && e.submenu.length ? h(e, t) : rn();
+ Array.isArray(e?.submenu) && e.submenu.length ? h(e, t) : nn();
}
function v(e) {
Array.isArray(e?.submenu) && e.submenu.length && d();
@@ -22754,36 +22784,36 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
}
function x(e) {
let i = e?.target;
- t.value?.contains?.(i) || n.value?.contains?.(i) || r.value?.contains?.(i) || _n();
+ t.value?.contains?.(i) || n.value?.contains?.(i) || r.value?.contains?.(i) || gn();
}
function S(e) {
- e?.key === "Escape" && _n();
+ e?.key === "Escape" && gn();
}
function C() {
- _n();
+ gn();
}
function w(e) {
let t = e?.detail;
- String(t?.source || "") !== "grid" && _n();
+ String(t?.source || "") !== "grid" && gn();
}
function T(e) {
- let t = gn.tags.asset;
+ let t = hn.tags.asset;
t && (t.tags = Array.isArray(e) ? [...e] : []);
}
function E(e) {
let t = Array.isArray(e?.tags) ? e.tags : [];
try {
- gn.tags.onChanged?.(t);
+ hn.tags.onChanged?.(t);
} catch (e) {
console.debug?.(e);
}
}
- return lr(() => gn.main.open, async (e) => {
- e && (await p(gn.main, t), m(t));
- }), lr(() => gn.submenu.open, async (e) => {
- e && (await p(gn.submenu, n), m(n));
- }), lr(() => gn.tags.open, async (e) => {
- e && await p(gn.tags, r);
+ return cr(() => hn.main.open, async (e) => {
+ e && (await p(hn.main, t), m(t));
+ }), cr(() => hn.submenu.open, async (e) => {
+ e && (await p(hn.submenu, n), m(n));
+ }), cr(() => hn.tags.open, async (e) => {
+ e && await p(hn.tags, r);
}), Mr(() => {
a = new AbortController();
let e = {
@@ -22798,26 +22828,26 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
passive: !0,
signal: a.signal
}), window.addEventListener("mjr-close-all-menus", w, { signal: a.signal });
- }), ir(() => {
+ }), rr(() => {
u();
try {
a?.abort();
} catch (e) {
console.debug?.(e);
}
- a = null, _n();
+ a = null, gn();
}), (e, i) => {
- let a = or("MButton");
- return q(), ar(kr, { to: "body" }, [
- Z(gn).main.open ? (q(), X("div", {
+ let a = ar("MButton");
+ return q(), ir(kr, { to: "body" }, [
+ Z(hn).main.open ? (q(), X("div", {
key: 0,
ref_key: "mainMenuRef",
ref: t,
class: "mjr-grid-context-menu mjr-context-menu",
- style: Sr(o.value),
+ style: xr(o.value),
role: "menu",
"aria-label": "Grid context menu"
- }, [(q(!0), X(H, null, gr(Z(gn).main.items, (e) => (q(), X(H, { key: e.id }, [e.type === "separator" ? (q(), X("div", ax)) : (q(), ar(a, {
+ }, [(q(!0), X(H, null, hr(Z(hn).main.items, (e) => (q(), X(H, { key: e.id }, [e.type === "separator" ? (q(), X("div", fx)) : (q(), ir(a, {
key: 1,
type: "button",
class: Dr(["mjr-context-menu-item", {
@@ -22837,10 +22867,10 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
onMouseenter: (t) => _(e, t),
onMouseleave: (t) => v(e)
}, {
- default: W(() => [U("span", ox, [e.iconClass ? (q(), X("i", {
+ default: W(() => [U("span", px, [e.iconClass ? (q(), X("i", {
key: 0,
class: Dr(e.iconClass)
- }, null, 2)) : G("", !0), U("span", null, J(e.label), 1)]), U("span", sx, [e.rightHint ? (q(), X("span", cx, J(e.rightHint), 1)) : G("", !0), Array.isArray(e.submenu) && e.submenu.length ? (q(), X("span", lx, " > ")) : G("", !0)])]),
+ }, null, 2)) : G("", !0), U("span", null, J(e.label), 1)]), U("span", mx, [e.rightHint ? (q(), X("span", hx, J(e.rightHint), 1)) : G("", !0), Array.isArray(e.submenu) && e.submenu.length ? (q(), X("span", gx, " > ")) : G("", !0)])]),
_: 2
}, 1032, [
"class",
@@ -22850,17 +22880,17 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
"onMouseenter",
"onMouseleave"
]))], 64))), 128))], 4)) : G("", !0),
- Z(gn).submenu.open ? (q(), X("div", {
+ Z(hn).submenu.open ? (q(), X("div", {
key: 1,
ref_key: "submenuRef",
ref: n,
class: "mjr-grid-rating-submenu mjr-context-menu",
- style: Sr(s.value),
+ style: xr(s.value),
role: "menu",
"aria-label": "Grid context submenu",
onMouseenter: y,
onMouseleave: b
- }, [(q(!0), X(H, null, gr(Z(gn).submenu.items, (e) => (q(), X(H, { key: e.id }, [e.type === "separator" ? (q(), X("div", ux)) : (q(), ar(a, {
+ }, [(q(!0), X(H, null, hr(Z(hn).submenu.items, (e) => (q(), X(H, { key: e.id }, [e.type === "separator" ? (q(), X("div", _x)) : (q(), ir(a, {
key: 1,
type: "button",
class: Dr(["mjr-context-menu-item", {
@@ -22877,10 +22907,10 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
tabindex: e.disabled ? -1 : 0,
onClick: (t) => g(e, t, "submenu")
}, {
- default: W(() => [U("span", dx, [e.iconClass ? (q(), X("i", {
+ default: W(() => [U("span", vx, [e.iconClass ? (q(), X("i", {
key: 0,
class: Dr(e.iconClass)
- }, null, 2)) : G("", !0), U("span", null, J(e.label), 1)]), e.rightHint ? (q(), X("span", fx, J(e.rightHint), 1)) : G("", !0)]),
+ }, null, 2)) : G("", !0), U("span", null, J(e.label), 1)]), e.rightHint ? (q(), X("span", yx, J(e.rightHint), 1)) : G("", !0)]),
_: 2
}, 1032, [
"class",
@@ -22888,32 +22918,32 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
"tabindex",
"onClick"
]))], 64))), 128))], 36)) : G("", !0),
- Z(gn).tags.open && Z(gn).tags.asset ? (q(), X("div", {
+ Z(hn).tags.open && Z(hn).tags.asset ? (q(), X("div", {
key: 2,
ref_key: "tagsPopoverRef",
ref: r,
class: "mjr-grid-popover",
- style: Sr(c.value)
+ style: xr(c.value)
}, [Y(Fr, {
- asset: Z(gn).tags.asset,
- "model-value": Z(gn).tags.asset?.tags || [],
+ asset: Z(hn).tags.asset,
+ "model-value": Z(hn).tags.asset?.tags || [],
"onUpdate:modelValue": T,
onTagsChange: E
}, null, 8, ["asset", "model-value"])], 4)) : G("", !0)
]);
};
}
-}), mx = { class: "mjr-workflow-picker-dialog mjr-workflow-info-dialog" }, hx = { class: "mjr-workflow-picker-header" }, gx = { class: "mjr-workflow-picker-title" }, _x = { class: "mjr-workflow-picker-subtitle" }, vx = { class: "mjr-workflow-info-form" }, yx = { class: "is-wide" }, bx = { class: "mjr-workflow-picker-footer" }, xx = /* @__PURE__ */ fr({
+}), xx = { class: "mjr-workflow-picker-dialog mjr-workflow-info-dialog" }, Sx = { class: "mjr-workflow-picker-header" }, Cx = { class: "mjr-workflow-picker-title" }, wx = { class: "mjr-workflow-picker-subtitle" }, Tx = { class: "mjr-workflow-info-form" }, Ex = { class: "is-wide" }, Dx = { class: "mjr-workflow-picker-footer" }, Ox = /* @__PURE__ */ dr({
__name: "WorkflowInfoDialog",
setup(t) {
- let n = wr({
+ let n = Cr({
task: "",
model_family: "",
provider: "",
runs_on: "",
notes: ""
}), r = K(() => Bi.workflow || null), i = K(() => String(r.value?.display_name || r.value?.filename || "Workflow"));
- lr(() => Bi.open, (e) => {
+ cr(() => Bi.open, (e) => {
if (!e) return;
let t = r.value || {};
n.task = String(t.user_task || t.task || ""), n.model_family = String(t.user_model_family || t.model_family || ""), n.provider = String(t.user_provider || t.provider || ""), n.runs_on = String(t.user_runs_on || t.runs_on || ""), n.notes = String(t.notes || "");
@@ -22933,45 +22963,45 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
}, { timeoutMs: 2e4 });
i?.ok ? (e(R("toast.workflowUpdated", "Workflow updated"), "success", 1800), window?.dispatchEvent?.(new CustomEvent("mjr:reload-grid", { detail: { reason: "workflow-info" } })), a()) : e(i?.error || R("toast.workflowSaveFailed", "Failed to save workflow."), "error");
}
- return (e, t) => (q(), ar(kr, { to: "body" }, [Z(Bi).open ? (q(), X("div", {
+ return (e, t) => (q(), ir(kr, { to: "body" }, [Z(Bi).open ? (q(), X("div", {
key: 0,
class: "mjr-workflow-picker-backdrop",
- onClick: hr(a, ["self"])
- }, [U("section", mx, [
- U("header", hx, [U("div", null, [U("div", gx, J(Z(R)("ctx.editWorkflowInfo", "Edit infos")), 1), U("div", _x, J(i.value), 1)]), U("button", {
+ onClick: mr(a, ["self"])
+ }, [U("section", xx, [
+ U("header", Sx, [U("div", null, [U("div", Cx, J(Z(R)("ctx.editWorkflowInfo", "Edit infos")), 1), U("div", wx, J(i.value), 1)]), U("button", {
type: "button",
class: "mjr-workflow-picker-close",
onClick: a
}, [...t[5] ||= [U("i", { class: "pi pi-times" }, null, -1)]])]),
- U("div", vx, [
- U("label", null, [t[6] ||= U("span", null, "Task", -1), vr(U("input", {
+ U("div", Tx, [
+ U("label", null, [t[6] ||= U("span", null, "Task", -1), _r(U("input", {
"onUpdate:modelValue": t[0] ||= (e) => n.task = e,
type: "text",
placeholder: "I2V, I2I, T2V, Image Edit..."
}, null, 512), [[jr, n.task]])]),
- U("label", null, [t[7] ||= U("span", null, "Model family", -1), vr(U("input", {
+ U("label", null, [t[7] ||= U("span", null, "Model family", -1), _r(U("input", {
"onUpdate:modelValue": t[1] ||= (e) => n.model_family = e,
type: "text",
placeholder: "Flux, Qwen, Wan..."
}, null, 512), [[jr, n.model_family]])]),
- U("label", null, [t[8] ||= U("span", null, "Provider", -1), vr(U("input", {
+ U("label", null, [t[8] ||= U("span", null, "Provider", -1), _r(U("input", {
"onUpdate:modelValue": t[2] ||= (e) => n.provider = e,
type: "text",
placeholder: "Google, ByteDance, local..."
}, null, 512), [[jr, n.provider]])]),
- U("label", null, [t[10] ||= U("span", null, "Runs on", -1), vr(U("select", { "onUpdate:modelValue": t[3] ||= (e) => n.runs_on = e }, [...t[9] ||= [
+ U("label", null, [t[10] ||= U("span", null, "Runs on", -1), _r(U("select", { "onUpdate:modelValue": t[3] ||= (e) => n.runs_on = e }, [...t[9] ||= [
U("option", { value: "" }, "Auto", -1),
U("option", { value: "local" }, "local", -1),
U("option", { value: "api" }, "api", -1),
U("option", { value: "cloud" }, "cloud", -1)
]], 512), [[Or, n.runs_on]])]),
- U("label", yx, [t[11] ||= U("span", null, "Notes", -1), vr(U("textarea", {
+ U("label", Ex, [t[11] ||= U("span", null, "Notes", -1), _r(U("textarea", {
"onUpdate:modelValue": t[4] ||= (e) => n.notes = e,
rows: "5",
placeholder: "Notes displayed on workflow hover"
}, null, 512), [[jr, n.notes]])])
]),
- U("footer", bx, [U("button", {
+ U("footer", Dx, [U("button", {
type: "button",
class: "mjr-workflow-picker-secondary",
onClick: a
@@ -22982,25 +23012,25 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
}, J(Z(R)("btn.apply", "Apply")), 1)])
])])) : G("", !0)]));
}
-}), Sx = { class: "mjr-workflow-picker-header" }, Cx = { class: "mjr-workflow-picker-title" }, wx = {
+}), kx = { class: "mjr-workflow-picker-header" }, Ax = { class: "mjr-workflow-picker-title" }, jx = {
key: 0,
class: "mjr-workflow-picker-source"
-}, Tx = { class: "mjr-workflow-picker-toolbar" }, Ex = { class: "mjr-workflow-picker-search" }, Dx = ["placeholder"], Ox = { value: "" }, kx = ["value"], Ax = { value: "" }, jx = ["value"], Mx = { value: "" }, Nx = ["value"], Px = { class: "mjr-workflow-picker-body" }, Fx = {
+}, Mx = { class: "mjr-workflow-picker-toolbar" }, Nx = { class: "mjr-workflow-picker-search" }, Px = ["placeholder"], Fx = { value: "" }, Ix = ["value"], Lx = { value: "" }, Rx = ["value"], zx = { value: "" }, Bx = ["value"], Vx = { class: "mjr-workflow-picker-body" }, Hx = {
key: 0,
class: "mjr-workflow-picker-empty"
-}, Ix = {
+}, Ux = {
key: 1,
class: "mjr-workflow-picker-empty is-error"
-}, Lx = {
+}, Wx = {
key: 2,
class: "mjr-workflow-picker-empty"
-}, Rx = ["onClick"], zx = { class: "mjr-workflow-picker-thumb" }, Bx = ["src", "alt"], Vx = {
+}, Gx = ["onClick"], Kx = { class: "mjr-workflow-picker-thumb" }, qx = ["src", "alt"], Jx = {
key: 1,
class: "pi pi-sitemap"
-}, Hx = { class: "mjr-workflow-picker-card-info" }, Ux = ["disabled"], Wx = { class: "mjr-workflow-picker-card-info" }, Gx = { class: "mjr-workflow-picker-footer" }, Kx = ["disabled"], qx = 120, Jx = /* @__PURE__ */ fr({
+}, Yx = { class: "mjr-workflow-picker-card-info" }, Xx = ["disabled"], Zx = { class: "mjr-workflow-picker-card-info" }, Qx = { class: "mjr-workflow-picker-footer" }, $x = ["disabled"], eS = 120, tS = /* @__PURE__ */ dr({
__name: "WorkflowPickerDialog",
setup(e) {
- let t = Q(""), n = Q(!1), r = Q(!1), i = Q(""), a = Q([]), s = Q(""), c = Q(0), l = Q(!1), u = 0, d = K(() => Sn.sourceAsset || null), f = K(() => Sn.workflow || null), p = K(() => String(Sn.mode || "") === "asset"), m = K(() => String(d.value?.filename || d.value?.display_name || f.value?.display_name || f.value?.filename || d.value?.filepath || f.value?.filepath || "")), h = K(() => x("task")), g = K(() => x("model_family")), _ = K(() => x("runs_on")), v = Q(""), y = Q(""), b = Q("");
+ let t = Q(""), n = Q(!1), r = Q(!1), i = Q(""), a = Q([]), s = Q(""), c = Q(0), l = Q(!1), u = 0, d = K(() => xn.sourceAsset || null), f = K(() => xn.workflow || null), p = K(() => String(xn.mode || "") === "asset"), m = K(() => String(d.value?.filename || d.value?.display_name || f.value?.display_name || f.value?.filename || d.value?.filepath || f.value?.filepath || "")), h = K(() => x("task")), g = K(() => x("model_family")), _ = K(() => x("runs_on")), v = Q(""), y = Q(""), b = Q("");
function x(e) {
let t = /* @__PURE__ */ new Set();
for (let n of a.value || []) {
@@ -23044,12 +23074,12 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
e ? n.value = !0 : r.value = !0, i.value = "";
try {
if (p.value) {
- a.value = Array.isArray(Sn.items) ? Sn.items.filter((e) => String(e?.filepath || "").trim()) : [], !s.value && a.value[0]?.filepath && (s.value = String(a.value[0].filepath));
+ a.value = Array.isArray(xn.items) ? xn.items.filter((e) => String(e?.filepath || "").trim()) : [], !s.value && a.value[0]?.filepath && (s.value = String(a.value[0].filepath));
return;
}
let n = await o({
q: "*",
- limit: qx,
+ limit: eS,
offset: d,
sort: "mtime"
}, { timeoutMs: 2e4 });
@@ -23059,7 +23089,7 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
return;
}
let r = (Array.isArray(n?.data?.assets) ? n.data.assets : Array.isArray(n?.data) ? n.data : []).filter((e) => String(e?.filepath || "").trim());
- a.value = e ? r : [...a.value, ...r], c.value = d + r.length, l.value = r.length >= qx, !s.value && a.value[0]?.filepath && (s.value = String(a.value[0].filepath));
+ a.value = e ? r : [...a.value, ...r], c.value = d + r.length, l.value = r.length >= eS, !s.value && a.value[0]?.filepath && (s.value = String(a.value[0].filepath));
} catch (e) {
t === u && (i.value = String(e?.message || e || "Failed to load workflows"), a.value = []);
} finally {
@@ -23073,15 +23103,15 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
if (!(n.value || r.value || !l.value)) return D({ reset: !1 });
}
function A() {
- C.value && Pn(C.value);
+ C.value && Nn(C.value);
}
function j() {
- Pn(null);
+ Nn(null);
}
function M(e) {
e.key === "Escape" && (e.preventDefault(), j());
}
- return lr(() => Sn.open, (e) => {
+ return cr(() => xn.open, (e) => {
if (e) {
s.value = "", c.value = 0, l.value = !1, t.value = "", v.value = "", y.value = "", b.value = "", O();
try {
@@ -23090,80 +23120,80 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
} else try {
window.removeEventListener("keydown", M);
} catch {}
- }), mr(() => {
+ }), pr(() => {
try {
window.removeEventListener("keydown", M);
} catch {}
- }), (e, a) => (q(), ar(kr, { to: "body" }, [Z(Sn).open ? (q(), X("div", {
+ }), (e, a) => (q(), ir(kr, { to: "body" }, [Z(xn).open ? (q(), X("div", {
key: 0,
class: "mjr-workflow-picker-backdrop",
- onMousedown: hr(j, ["self"])
+ onMousedown: mr(j, ["self"])
}, [U("section", {
class: Dr(["mjr-workflow-picker-dialog", { "is-asset-mode": p.value }]),
role: "dialog",
"aria-modal": "true"
}, [
- U("header", Sx, [U("div", Cx, [a[4] ||= U("i", { class: "pi pi-sitemap" }, null, -1), U("span", null, J(Z(Sn).title), 1)]), U("button", {
+ U("header", kx, [U("div", Ax, [a[4] ||= U("i", { class: "pi pi-sitemap" }, null, -1), U("span", null, J(Z(xn).title), 1)]), U("button", {
class: "mjr-workflow-picker-icon-btn",
type: "button",
onClick: j
}, [...a[5] ||= [U("i", { class: "pi pi-times" }, null, -1)]])]),
- m.value ? (q(), X("div", wx, [U("span", null, J(p.value ? Z(R)("tab.workflow", "Workflow") : Z(R)("dialog.workflowThumbnailSource", "Source")), 1), U("strong", null, J(m.value), 1)])) : G("", !0),
- U("div", Tx, [
- U("label", Ex, [a[6] ||= U("i", { class: "pi pi-search" }, null, -1), vr(U("input", {
+ m.value ? (q(), X("div", jx, [U("span", null, J(p.value ? Z(R)("tab.workflow", "Workflow") : Z(R)("dialog.workflowThumbnailSource", "Source")), 1), U("strong", null, J(m.value), 1)])) : G("", !0),
+ U("div", Mx, [
+ U("label", Nx, [a[6] ||= U("i", { class: "pi pi-search" }, null, -1), _r(U("input", {
"onUpdate:modelValue": a[0] ||= (e) => t.value = e,
type: "search",
placeholder: Z(R)("search.workflows", "Search workflows...")
- }, null, 8, Dx), [[jr, t.value]])]),
- p.value ? G("", !0) : vr((q(), X("select", {
+ }, null, 8, Px), [[jr, t.value]])]),
+ p.value ? G("", !0) : _r((q(), X("select", {
key: 0,
"onUpdate:modelValue": a[1] ||= (e) => v.value = e
- }, [U("option", Ox, J(Z(R)("filter.task", "Task")), 1), (q(!0), X(H, null, gr(h.value, (e) => (q(), X("option", {
+ }, [U("option", Fx, J(Z(R)("filter.task", "Task")), 1), (q(!0), X(H, null, hr(h.value, (e) => (q(), X("option", {
key: e,
value: e
- }, J(e), 9, kx))), 128))], 512)), [[Or, v.value]]),
- p.value ? G("", !0) : vr((q(), X("select", {
+ }, J(e), 9, Ix))), 128))], 512)), [[Or, v.value]]),
+ p.value ? G("", !0) : _r((q(), X("select", {
key: 1,
"onUpdate:modelValue": a[2] ||= (e) => y.value = e
- }, [U("option", Ax, J(Z(R)("filter.model", "Model")), 1), (q(!0), X(H, null, gr(g.value, (e) => (q(), X("option", {
+ }, [U("option", Lx, J(Z(R)("filter.model", "Model")), 1), (q(!0), X(H, null, hr(g.value, (e) => (q(), X("option", {
key: e,
value: e
- }, J(e), 9, jx))), 128))], 512)), [[Or, y.value]]),
- p.value ? G("", !0) : vr((q(), X("select", {
+ }, J(e), 9, Rx))), 128))], 512)), [[Or, y.value]]),
+ p.value ? G("", !0) : _r((q(), X("select", {
key: 2,
"onUpdate:modelValue": a[3] ||= (e) => b.value = e
- }, [U("option", Mx, J(Z(R)("filter.runsOn", "Runs on")), 1), (q(!0), X(H, null, gr(_.value, (e) => (q(), X("option", {
+ }, [U("option", zx, J(Z(R)("filter.runsOn", "Runs on")), 1), (q(!0), X(H, null, hr(_.value, (e) => (q(), X("option", {
key: e,
value: e
- }, J(e), 9, Nx))), 128))], 512)), [[Or, b.value]])
+ }, J(e), 9, Bx))), 128))], 512)), [[Or, b.value]])
]),
- U("div", Px, [n.value ? (q(), X("div", Fx, J(Z(R)("status.loading", "Loading...")), 1)) : i.value ? (q(), X("div", Ix, J(i.value), 1)) : S.value.length ? (q(), X(H, { key: 3 }, [(q(!0), X(H, null, gr(S.value, (e) => (q(), X("button", {
+ U("div", Vx, [n.value ? (q(), X("div", Hx, J(Z(R)("status.loading", "Loading...")), 1)) : i.value ? (q(), X("div", Ux, J(i.value), 1)) : S.value.length ? (q(), X(H, { key: 3 }, [(q(!0), X(H, null, hr(S.value, (e) => (q(), X("button", {
key: e.filepath,
type: "button",
class: Dr(["mjr-workflow-picker-card", { "is-selected": s.value === String(e.filepath || "") }]),
onClick: (t) => s.value = String(e.filepath || ""),
onDblclick: A
- }, [U("div", zx, [E(e) ? (q(), X("img", {
+ }, [U("div", Kx, [E(e) ? (q(), X("img", {
key: 0,
src: E(e),
alt: w(e),
loading: "lazy"
- }, null, 8, Bx)) : (q(), X("i", Vx))]), U("div", Hx, [
+ }, null, 8, qx)) : (q(), X("i", Jx))]), U("div", Yx, [
U("strong", null, J(w(e)), 1),
U("span", null, J(T(e)), 1),
U("small", null, J(e.filename), 1)
- ])], 42, Rx))), 128)), !p.value && l.value ? (q(), X("button", {
+ ])], 42, Gx))), 128)), !p.value && l.value ? (q(), X("button", {
key: 0,
type: "button",
class: "mjr-workflow-picker-card mjr-workflow-picker-load-more",
disabled: r.value,
onClick: k
- }, [a[7] ||= U("div", { class: "mjr-workflow-picker-thumb" }, [U("i", { class: "pi pi-angle-down" })], -1), U("div", Wx, [
+ }, [a[7] ||= U("div", { class: "mjr-workflow-picker-thumb" }, [U("i", { class: "pi pi-angle-down" })], -1), U("div", Zx, [
U("strong", null, J(r.value ? Z(R)("status.loading", "Loading...") : Z(R)("action.loadMore", "Load more")), 1),
U("span", null, J(Z(R)("tab.workflow", "Workflow")), 1),
U("small", null, J(c.value) + " loaded", 1)
- ])], 8, Ux)) : G("", !0)], 64)) : (q(), X("div", Lx, J(Z(R)("toast.noWorkflowsFound", "No workflows found.")), 1))]),
- U("footer", Gx, [U("button", {
+ ])], 8, Xx)) : G("", !0)], 64)) : (q(), X("div", Wx, J(Z(R)("toast.noWorkflowsFound", "No workflows found.")), 1))]),
+ U("footer", Qx, [U("button", {
type: "button",
class: "mjr-workflow-picker-btn",
onClick: j
@@ -23172,31 +23202,31 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
class: "mjr-workflow-picker-btn is-primary",
disabled: !C.value,
onClick: A
- }, J(Z(R)("action.apply", "Apply")), 9, Kx)])
+ }, J(Z(R)("action.apply", "Apply")), 9, $x)])
], 2)], 32)) : G("", !0)]));
}
-}), Yx = { class: "mjr-workflow-picker-dialog mjr-workflow-info-dialog" }, Xx = { class: "mjr-workflow-picker-header" }, Zx = { class: "mjr-workflow-picker-title" }, Qx = { class: "mjr-workflow-picker-subtitle" }, $x = { class: "mjr-workflow-info-form" }, eS = { class: "is-wide" }, tS = { class: "is-wide" }, nS = { class: "mjr-workflow-picker-footer" }, rS = /* @__PURE__ */ fr({
+}), nS = { class: "mjr-workflow-picker-dialog mjr-workflow-info-dialog" }, rS = { class: "mjr-workflow-picker-header" }, iS = { class: "mjr-workflow-picker-title" }, aS = { class: "mjr-workflow-picker-subtitle" }, oS = { class: "mjr-workflow-info-form" }, sS = { class: "is-wide" }, cS = { class: "is-wide" }, lS = { class: "mjr-workflow-picker-footer" }, uS = /* @__PURE__ */ dr({
__name: "WorkflowSaveInfoDialog",
setup(e) {
- let t = wr({
+ let t = Cr({
name: "",
task: "",
model_family: "",
provider: "",
runs_on: "",
notes: ""
- }), n = K(() => x_.initial || {}), r = K(() => R("dialog.saveWorkflowWithInfo", "Save workflow")), i = K(() => R("dialog.workflowInfoAutoFallback", "Leave fields empty to use automatic workflow detection."));
- lr(() => x_.open, (e) => {
+ }), n = K(() => O_.initial || {}), r = K(() => R("dialog.saveWorkflowWithInfo", "Save workflow")), i = K(() => R("dialog.workflowInfoAutoFallback", "Leave fields empty to use automatic workflow detection."));
+ cr(() => O_.open, (e) => {
if (!e) return;
let r = n.value || {};
t.name = String(r.name || r.workflow?.name || r.workflow?.title || "workflow").trim(), t.task = String(r.task || ""), t.model_family = String(r.model_family || ""), t.provider = String(r.provider || ""), t.runs_on = String(r.runs_on || ""), t.notes = String(r.notes || "");
});
function a() {
- C_(null);
+ A_(null);
}
function o() {
let e = String(t.name || "").trim();
- e && C_({
+ e && A_({
name: e,
task: String(t.task || "").trim(),
model_family: String(t.model_family || "").trim(),
@@ -23206,13 +23236,13 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
});
}
return (e, n) => {
- let s = or("MButton"), c = or("MInputText"), l = or("MSelect"), u = or("MTextarea");
- return q(), ar(kr, { to: "body" }, [Z(x_).open ? (q(), X("div", {
+ let s = ar("MButton"), c = ar("MInputText"), l = ar("MSelect"), u = ar("MTextarea");
+ return q(), ir(kr, { to: "body" }, [Z(O_).open ? (q(), X("div", {
key: 0,
class: "mjr-workflow-picker-backdrop",
- onClick: hr(a, ["self"])
- }, [U("section", Yx, [
- U("header", Xx, [U("div", null, [U("div", Zx, J(r.value), 1), U("div", Qx, J(i.value), 1)]), Y(s, {
+ onClick: mr(a, ["self"])
+ }, [U("section", nS, [
+ U("header", rS, [U("div", null, [U("div", iS, J(r.value), 1), U("div", aS, J(i.value), 1)]), Y(s, {
type: "button",
class: "mjr-workflow-picker-close",
onClick: a
@@ -23220,13 +23250,13 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
default: W(() => [...n[6] ||= [U("i", { class: "pi pi-times" }, null, -1)]]),
_: 1
})]),
- U("div", $x, [
- U("label", eS, [U("span", null, J(Z(R)("dialog.workflowSaveName", "Workflow name")), 1), Y(c, {
+ U("div", oS, [
+ U("label", sS, [U("span", null, J(Z(R)("dialog.workflowSaveName", "Workflow name")), 1), Y(c, {
modelValue: t.name,
"onUpdate:modelValue": n[0] ||= (e) => t.name = e,
type: "text",
placeholder: "workflow",
- onKeydown: Ar(hr(o, ["prevent"]), ["enter"])
+ onKeydown: Ar(mr(o, ["prevent"]), ["enter"])
}, null, 8, ["modelValue", "onKeydown"])]),
U("label", null, [n[7] ||= U("span", null, "Task", -1), Y(c, {
modelValue: t.task,
@@ -23271,19 +23301,19 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
"option-value": "value",
placeholder: "Auto"
}, null, 8, ["modelValue"])]),
- U("label", tS, [n[11] ||= U("span", null, "Notes", -1), Y(u, {
+ U("label", cS, [n[11] ||= U("span", null, "Notes", -1), Y(u, {
modelValue: t.notes,
"onUpdate:modelValue": n[5] ||= (e) => t.notes = e,
rows: "5",
placeholder: "Notes displayed on workflow hover"
}, null, 8, ["modelValue"])])
]),
- U("footer", nS, [Y(s, {
+ U("footer", lS, [Y(s, {
type: "button",
class: "mjr-workflow-picker-secondary",
onClick: a
}, {
- default: W(() => [rr(J(Z(R)("btn.cancel", "Cancel")), 1)]),
+ default: W(() => [nr(J(Z(R)("btn.cancel", "Cancel")), 1)]),
_: 1
}), Y(s, {
type: "button",
@@ -23291,29 +23321,29 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
disabled: !String(t.name || "").trim(),
onClick: o
}, {
- default: W(() => [rr(J(Z(R)("btn.save", "Save")), 1)]),
+ default: W(() => [nr(J(Z(R)("btn.save", "Save")), 1)]),
_: 1
}, 8, ["disabled"])])
])])) : G("", !0)]);
};
}
-}), iS = /* @__PURE__ */ fr({
+}), dS = /* @__PURE__ */ dr({
__name: "ContextMenuPortal",
setup(e) {
- let t = Q(""), n = K(() => vn(t.value));
+ let t = Q(""), n = K(() => _n(t.value));
return Mr(() => {
- t.value = Zt();
- }), ir(() => {
- on(t.value), t.value = "";
+ t.value = Xt();
+ }), rr(() => {
+ an(t.value), t.value = "";
}), (e, t) => n.value ? (q(), X(H, { key: 0 }, [
- Y(px),
- Y(ix),
- Y(Jx),
- Y(xx),
- Y(rS)
+ Y(bx),
+ Y(dx),
+ Y(tS),
+ Y(Ox),
+ Y(uS)
], 64)) : G("", !0);
}
-}), aS = {
+}), fS = {
class: "mjr-sidebar-content",
style: {
flex: "1",
@@ -23323,29 +23353,29 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
"flex-direction": "column",
gap: "16px"
}
-}, oS = {
+}, pS = {
class: "mjr-sidebar-rating-tags",
style: {
display: "flex",
"flex-direction": "column",
gap: "10px"
}
-}, sS = { style: {
+}, mS = { style: {
display: "flex",
"align-items": "center",
gap: "8px"
-} }, cS = { style: {
+} }, hS = { style: {
"font-size": "0.8em",
opacity: "0.6",
"min-width": "44px"
-} }, lS = { style: {
+} }, gS = { style: {
display: "flex",
"flex-direction": "column",
gap: "4px"
-} }, uS = { style: {
+} }, _S = { style: {
"font-size": "0.8em",
opacity: "0.6"
-} }, dS = /* @__PURE__ */ fr({
+} }, vS = /* @__PURE__ */ dr({
__name: "AssetSidebarContent",
props: {
asset: {},
@@ -23359,14 +23389,14 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
return e === "workflow" || t === "workflow" || n.endsWith(".json");
}), c = K(() => Number(i.asset?.rating) || 0), l = K(() => i.asset?.tags || []), u = K(() => {
try {
- return !!(Hn()?.sidebar?.showPreviewThumb ?? !0);
+ return !!(Vn()?.sidebar?.showPreviewThumb ?? !0);
} catch {
return !0;
}
});
function d() {
if (i.sidebar) try {
- eh(i.sidebar);
+ sh(i.sidebar);
} catch (e) {
console.debug?.(e);
}
@@ -23396,30 +23426,30 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
}
}
return (e, n) => {
- let r = or("MButton");
+ let r = ar("MButton");
return q(), X(H, null, [
- Y(Mb, {
+ Y(zb, {
asset: t.asset,
onClose: d
}, null, 8, ["asset"]),
- U("div", aS, [o.value ? (q(), ar(qb, {
+ U("div", fS, [o.value ? (q(), ir(ex, {
key: 0,
asset: t.asset
}, null, 8, ["asset"])) : (q(), X(H, { key: 1 }, [s.value ? G("", !0) : (q(), X(H, { key: 0 }, [
- Y(Vb, {
+ Y(Jb, {
asset: t.asset,
"show-preview-thumb": u.value
}, null, 8, ["asset", "show-preview-thumb"]),
- U("div", oS, [U("div", sS, [U("span", cS, J(Z(R)("sidebar.rating", "Rating")), 1), Y(Yb, {
+ U("div", pS, [U("div", mS, [U("span", hS, J(Z(R)("sidebar.rating", "Rating")), 1), Y(nx, {
asset: t.asset,
"model-value": c.value,
size: 60
- }, null, 8, ["asset", "model-value"])]), U("div", lS, [U("span", uS, J(Z(R)("sidebar.tags", "Tags")), 1), Y(Fr, {
+ }, null, 8, ["asset", "model-value"])]), U("div", gS, [U("span", _S, J(Z(R)("sidebar.tags", "Tags")), 1), Y(Fr, {
asset: t.asset,
"model-value": l.value
}, null, 8, ["asset", "model-value"])])]),
- Y(An, { asset: t.asset }, null, 8, ["asset"]),
- p.value ? (q(), ar(r, {
+ Y(kn, { asset: t.asset }, null, 8, ["asset"]),
+ p.value ? (q(), ir(r, {
key: 0,
type: "button",
class: "mjr-btn mjr-sidebar-collect-btn",
@@ -23438,13 +23468,13 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
default: W(() => [U("i", { class: Dr(f.value ? "pi pi-spin pi-spinner" : "pi pi-box") }, null, 2), U("span", null, J(f.value ? Z(R)("sidebar.collectingFiles", "Collecting...") : Z(R)("sidebar.collectFiles", "Collect files")), 1)]),
_: 1
}, 8, ["disabled", "title"])) : G("", !0),
- Y(Fn, { asset: t.asset }, null, 8, ["asset"])
- ], 64)), Y(Vn, { asset: t.asset }, null, 8, ["asset"])], 64))]),
- Y(iS)
+ Y(Pn, { asset: t.asset }, null, 8, ["asset"])
+ ], 64)), Y(Bn, { asset: t.asset }, null, 8, ["asset"])], 64))]),
+ Y(dS)
], 64);
};
}
-}), fS = {
+}), yS = {
key: 1,
class: "mjr-sidebar-placeholder",
style: {
@@ -23457,10 +23487,10 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
"font-size": "0.85em",
"text-align": "center"
}
-}, pS = /* @__PURE__ */ fr({
+}, bS = /* @__PURE__ */ dr({
__name: "SidebarSection",
setup(e, { expose: t }) {
- let n = Q(null), { activeAsset: r, onUpdateCallback: i } = Hm();
+ let n = Q(null), { activeAsset: r, onUpdateCallback: i } = Ym();
return Mr(() => {
let e = n.value;
if (!e) return;
@@ -23471,7 +23501,7 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
}, a = (n) => {
let r = n?.detail || {}, a = r.assetId ?? r.id ?? null, o = Number(r.rating);
if (t(a) && Number.isFinite(o)) {
- Gm({ rating: o }, i.value);
+ Qm({ rating: o }, i.value);
try {
e._currentAsset && (e._currentAsset.rating = o), e._currentFullAsset && (e._currentFullAsset.rating = o);
} catch (e) {
@@ -23481,7 +23511,7 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
}, o = (n) => {
let r = n?.detail || {}, a = r.assetId ?? r.id ?? null, o = Array.isArray(r.tags) ? r.tags : null;
if (t(a) && o) {
- Gm({ tags: o }, i.value);
+ Qm({ tags: o }, i.value);
try {
e._currentAsset && (e._currentAsset.tags = o), e._currentFullAsset && (e._currentFullAsset.tags = o);
} catch (e) {
@@ -23512,7 +23542,7 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
console.debug?.(e);
}
}
- }), ir(() => {
+ }), rr(() => {
try {
n.value?.dispose?.();
} catch {}
@@ -23533,7 +23563,7 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
transition: "width 140ms ease,max-width 140ms ease,flex-basis 140ms ease,border-color 140ms ease",
contain: "layout paint style"
}
- }, [Z(r) ? (q(), ar(dS, {
+ }, [Z(r) ? (q(), ir(vS, {
key: 0,
asset: Z(r),
"on-update": Z(i),
@@ -23542,9 +23572,9 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
"asset",
"on-update",
"sidebar"
- ])) : (q(), X("div", fS, J(Z(R)("sidebar.placeholderSelectAsset", "Select an asset to view details")), 1))], 512));
+ ])) : (q(), X("div", yS, J(Z(R)("sidebar.placeholderSelectAsset", "Select an asset to view details")), 1))], 512));
}
-}), mS = /* @__PURE__ */ fr({
+}), xS = /* @__PURE__ */ dr({
__name: "App",
setup(e) {
let t = Q(null), n = Q(null), r = Q(null), i = Q(null), a = Q(null), o = Q(null), s = null;
@@ -23553,7 +23583,7 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
let e = {};
n.value && (e.statusSection = n.value.statusSection, e.statusDot = n.value.statusDot, e.statusText = n.value.statusText, e.capabilitiesSection = n.value.capabilitiesSection), r.value && (e.headerSection = r.value), i.value && (e.summaryBar = i.value.summaryBar, e.updateSummaryBar = i.value.updateSummaryBar, e.folderBreadcrumb = i.value.folderBreadcrumb, e.folderBreadcrumbController = i.value), a.value && (e.browseSection = a.value.browseSection, e.gridWrapper = a.value.gridWrapper, e.gridContainer = a.value.gridContainer, e.onGridContainerReady = (...e) => a.value?.onGridContainerReady?.(...e), e.bindGridHostState = (...e) => a.value?.bindGridHostState?.(...e), e.restoreGridUiState = (...e) => a.value?.restoreGridUiState?.(...e), e.initAssetsQueryController = (...e) => a.value?.initAssetsQueryController?.(...e), e.loadAssets = (e, t = "*", n = {}) => a.value?.loadAssets?.(t, n), e.loadAssetsFromList = (e, t = [], n = {}) => a.value?.loadAssetsFromList?.(t, n), e.prepareGridForScopeSwitch = (e) => a.value?.prepareGridForScopeSwitch?.(), e.refreshGrid = (e) => a.value?.refreshGrid?.(), e.captureAnchor = (e) => a.value?.captureAnchor?.(), e.restoreAnchor = (e, t) => a.value?.restoreAnchor?.(t), e.hydrateGridFromSnapshot = (e, t = {}, n = {}) => a.value?.hydrateGridFromSnapshot?.(t, n), e.upsertAsset = (e, t) => a.value?.upsertAsset?.(t), e.removeAssets = (e, t = [], n = {}) => a.value?.removeAssets?.(t, n), e.disposeGrid = (e) => a.value?.disposeGrid?.()), o.value && (e.sidebar = o.value.sidebar);
try {
- s = await v_(t.value, {
+ s = await T_(t.value, {
useComfyThemeUI: !0,
external: e
});
@@ -23561,35 +23591,35 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
console.warn("[Majoor] App.vue: mountAssetsManagerPanelRuntime failed", e);
}
try {
- dh().validatePersistedCustomRoot?.();
+ vh().validatePersistedCustomRoot?.();
} catch {}
- }), ir(() => {
+ }), rr(() => {
try {
s?.dispose?.();
} catch {}
s = null;
}), (e, s) => (q(), X(H, null, [
- Y(b_, {
+ Y(D_, {
ref_key: "statusSectionRef",
ref: n
}, null, 512),
- Y($y, {
+ Y(ob, {
ref_key: "headerSectionRef",
ref: r
}, null, 512),
- Y(_b, {
+ Y(wb, {
ref_key: "summaryBarSectionRef",
ref: i
}, null, 512),
- Y(kb, {
+ Y(Ib, {
ref_key: "assetsGridRef",
ref: a
}, null, 512),
- Y(pS, {
+ Y(bS, {
ref_key: "sidebarSectionRef",
ref: o
}, null, 512),
- Y(iS),
+ Y(dS),
U("div", {
ref_key: "containerRef",
ref: t,
@@ -23603,7 +23633,7 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
}, null, 512)
], 64));
}
-}), hS = /* @__PURE__ */ fr({
+}), SS = /* @__PURE__ */ dr({
__name: "GeneratedFeedApp",
setup(e) {
let t = Q(null), n = null;
@@ -23625,16 +23655,16 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
}
return Mr(() => {
if (t.value) try {
- r(t.value), n = Zd(t.value);
+ r(t.value), n = af(t.value);
} catch (e) {
console.warn("[Majoor] GeneratedFeedApp.vue: createGeneratedFeedHost failed", e);
}
- }), ir(() => {
+ }), rr(() => {
try {
- Qd(n);
+ of(n);
} catch {}
n = null;
- }), (e, n) => (q(), X(H, null, [Y(iS), U("div", {
+ }), (e, n) => (q(), X(H, null, [Y(dS), U("div", {
ref_key: "containerRef",
ref: t,
class: "mjr-vue-feed-root",
@@ -23649,38 +23679,38 @@ var Fb = { class: "mjr-sidebar-preview" }, Ib = ["src"], Lb = ["src"], Rb = ["sr
}
}, null, 512)], 64));
}
-}), gS = "data-mjr-topbar-mfv-host", _S = "data-mjr-topbar-mfv-button", vS = "data-mjr-topbar-mfv-slot", yS = "label.floatingViewer", bS = "Viewer", xS = "V", SS = "viewer.mfvTopbarButton", CS = null, wS = null, TS = null, ES = null, DS = null, OS = null, kS = null, AS = null, jS = !1, MS = null, NS = !1, PS = !1;
-function FS(e) {
+}), CS = "data-mjr-topbar-mfv-host", wS = "data-mjr-topbar-mfv-button", TS = "data-mjr-topbar-mfv-slot", ES = "label.floatingViewer", DS = "Viewer", OS = "V", kS = "viewer.mfvTopbarButton", AS = null, jS = null, MS = null, NS = null, PS = null, FS = null, IS = null, LS = null, RS = !1, zS = null, BS = !1, VS = !1;
+function HS(e) {
if (!e) {
- !DS && typeof MutationObserver < "u" && (DS = new MutationObserver(() => {
- IS() && (DS?.disconnect?.(), DS = null, XS());
- }), DS.observe(document.body, {
+ !PS && typeof MutationObserver < "u" && (PS = new MutationObserver(() => {
+ US() && (PS?.disconnect?.(), PS = null, rC());
+ }), PS.observe(document.body, {
childList: !0,
subtree: !0
}));
return;
}
try {
- DS?.disconnect?.();
+ PS?.disconnect?.();
} catch {}
- if (DS = null, wS !== e) {
+ if (PS = null, jS !== e) {
try {
- CS?.disconnect?.();
+ AS?.disconnect?.();
} catch {}
- CS = new MutationObserver(() => XS()), CS.observe(e, { childList: !0 }), wS = e;
+ AS = new MutationObserver(() => rC()), AS.observe(e, { childList: !0 }), jS = e;
}
let t = e.parentElement;
- if (t && ES !== t) {
+ if (t && NS !== t) {
try {
- TS?.disconnect?.();
+ MS?.disconnect?.();
} catch {}
- TS = new MutationObserver(() => XS()), TS.observe(t, { childList: !0 }), ES = t;
+ MS = new MutationObserver(() => rC()), MS.observe(t, { childList: !0 }), NS = t;
}
}
-function IS() {
+function US() {
return typeof document > "u" ? null : document.querySelector(".actionbar-container");
}
-function LS(e = IS()) {
+function WS(e = US()) {
if (typeof document > "u") return;
let t = document.documentElement?.style;
if (!t) return;
@@ -23691,165 +23721,165 @@ function LS(e = IS()) {
let n = e.getBoundingClientRect(), r = Math.max(60, Math.ceil(n.bottom + 12));
t.setProperty("--mjr-mfv-top-offset", `${r}px`);
}
-function RS(e) {
+function GS(e) {
return e && e.querySelector(".queue-button-group") || null;
}
-function zS(e) {
+function KS(e) {
if (!e) return null;
- let t = e.querySelector(`[${vS}]`);
- t || (t = document.createElement("div"), t.setAttribute(vS, "1"), t.className = "flex h-full items-center pointer-events-auto", t.style.position = "relative", t.style.zIndex = "10030", t.style.padding = "0 4px");
- let n = RS(e), r = n?.parentElement || e;
+ let t = e.querySelector(`[${TS}]`);
+ t || (t = document.createElement("div"), t.setAttribute(TS, "1"), t.className = "flex h-full items-center pointer-events-auto", t.style.position = "relative", t.style.zIndex = "10030", t.style.padding = "0 4px");
+ let n = GS(e), r = n?.parentElement || e;
return t.parentElement === r ? n && r && t.previousElementSibling !== n ? r.insertBefore(t, n.nextSibling) : !n && t !== r.lastElementChild && r.appendChild(t) : n && r ? r.insertBefore(t, n.nextSibling) : r.appendChild(t), t;
}
-function BS(e = "pi pi-eye") {
+function qS(e = "pi pi-eye") {
let t = document.createElement("i");
return t.className = e, t.setAttribute("aria-hidden", "true"), t;
}
-function VS(e = "Viewer") {
+function JS(e = "Viewer") {
let t = document.createElement("span");
return t.className = "mjr-topbar-mfv-label", t.textContent = e, t;
}
-function HS(e) {
+function YS(e) {
if (!e) return;
- let t = NS ? R("tooltip.closeMFV", "Close Floating Viewer") : R("tooltip.openMFV", "Open Floating Viewer");
- Rt(e, t, xS, { ariaLabel: t }), e.setAttribute("aria-pressed", NS ? "true" : "false"), e.classList.toggle("primary", NS), e.classList.toggle("mjr-topbar-mfv-active", NS), e.replaceChildren(BS(NS ? "pi pi-eye-slash" : "pi pi-eye"), VS(R(yS, bS)));
+ let t = BS ? R("tooltip.closeMFV", "Close Floating Viewer") : R("tooltip.openMFV", "Open Floating Viewer");
+ Lt(e, t, OS, { ariaLabel: t }), e.setAttribute("aria-pressed", BS ? "true" : "false"), e.classList.toggle("primary", BS), e.classList.toggle("mjr-topbar-mfv-active", BS), e.replaceChildren(qS(BS ? "pi pi-eye-slash" : "pi pi-eye"), JS(R(ES, DS)));
}
-function US() {
+function XS() {
try {
window.dispatchEvent(new Event(V.MFV_TOGGLE));
} catch (e) {
console.debug?.("[Majoor] top bar MFV launch failed", e);
}
- XS();
-}
-function WS() {
- let e = document.createElement("button");
- return e.type = "button", e.setAttribute(_S, "1"), e.className = "comfyui-button mjr-topbar-mfv-button", e.style.position = "relative", e.style.zIndex = "10030", e.style.width = "auto", e.style.height = "32px", e.style.minWidth = "32px", e.style.padding = "0 10px", e.style.gap = "6px", e.style.display = "inline-flex", e.style.alignItems = "center", e.style.justifyContent = "center", e.style.whiteSpace = "nowrap", e.addEventListener("click", US), HS(e), e;
-}
-function GS() {
- let e = document.createElement("div");
- return e.setAttribute(gS, "1"), e.className = "mjr-topbar-mfv-button-host", e.style.position = "relative", e.appendChild(WS()), e;
-}
-function KS() {
- if (typeof document > "u" || PS) return;
- let e = !!document.querySelector(".mjr-mfv.is-visible");
- NS !== e && (NS = e);
-}
-function qS() {
- return B.MFV_TOPBAR_BUTTON !== !1;
-}
-function JS() {
- try {
- document.querySelector(`[${gS}]`)?.remove?.(), document.querySelector(`[${vS}]`)?.remove?.();
- } catch (e) {
- console.debug?.(e);
- }
-}
-function YS() {
- let e = IS();
- if (!e) return LS(null), null;
- if (!qS()) return JS(), LS(e), null;
- FS(e), KS();
- let t = zS(e);
- if (!t) return LS(e), null;
- let n = t.querySelector(`[${gS}]`);
- return n ||= GS(), n.parentElement !== t && t.replaceChildren(n), LS(e), HS(n.querySelector(`[${_S}]`)), t;
-}
-function XS() {
- jS || (jS = !0, MS = window.setTimeout(() => {
- jS = !1, MS = null, YS();
- }, 32));
+ rC();
}
function ZS() {
- return typeof window > "u" || typeof document > "u" || !document.body ? !1 : (XS(), OS || (OS = (e) => {
- NS = !!e?.detail?.visible, PS = !0, XS();
- }, window.addEventListener(V.MFV_VISIBILITY_CHANGED, OS)), kS || (kS = () => XS(), window.addEventListener("resize", kS)), AS || (AS = (e) => {
- let t = e?.detail?.key;
- (t === SS || t === "storage") && XS();
- }, window.addEventListener("mjr-settings-changed", AS)), FS(IS()), !0);
+ let e = document.createElement("button");
+ return e.type = "button", e.setAttribute(wS, "1"), e.className = "comfyui-button mjr-topbar-mfv-button", e.style.position = "relative", e.style.zIndex = "10030", e.style.width = "auto", e.style.height = "32px", e.style.minWidth = "32px", e.style.padding = "0 10px", e.style.gap = "6px", e.style.display = "inline-flex", e.style.alignItems = "center", e.style.justifyContent = "center", e.style.whiteSpace = "nowrap", e.addEventListener("click", XS), YS(e), e;
}
function QS() {
+ let e = document.createElement("div");
+ return e.setAttribute(CS, "1"), e.className = "mjr-topbar-mfv-button-host", e.style.position = "relative", e.appendChild(ZS()), e;
+}
+function $S() {
+ if (typeof document > "u" || VS) return;
+ let e = !!document.querySelector(".mjr-mfv.is-visible");
+ BS !== e && (BS = e);
+}
+function eC() {
+ return B.MFV_TOPBAR_BUTTON !== !1;
+}
+function tC() {
try {
- CS?.disconnect?.();
+ document.querySelector(`[${CS}]`)?.remove?.(), document.querySelector(`[${TS}]`)?.remove?.();
} catch (e) {
console.debug?.(e);
}
- CS = null, wS = null;
+}
+function nC() {
+ let e = US();
+ if (!e) return WS(null), null;
+ if (!eC()) return tC(), WS(e), null;
+ HS(e), $S();
+ let t = KS(e);
+ if (!t) return WS(e), null;
+ let n = t.querySelector(`[${CS}]`);
+ return n ||= QS(), n.parentElement !== t && t.replaceChildren(n), WS(e), YS(n.querySelector(`[${wS}]`)), t;
+}
+function rC() {
+ RS || (RS = !0, zS = window.setTimeout(() => {
+ RS = !1, zS = null, nC();
+ }, 32));
+}
+function iC() {
+ return typeof window > "u" || typeof document > "u" || !document.body ? !1 : (rC(), FS || (FS = (e) => {
+ BS = !!e?.detail?.visible, VS = !0, rC();
+ }, window.addEventListener(V.MFV_VISIBILITY_CHANGED, FS)), IS || (IS = () => rC(), window.addEventListener("resize", IS)), LS || (LS = (e) => {
+ let t = e?.detail?.key;
+ (t === kS || t === "storage") && rC();
+ }, window.addEventListener("mjr-settings-changed", LS)), HS(US()), !0);
+}
+function aC() {
try {
- TS?.disconnect?.();
+ AS?.disconnect?.();
} catch (e) {
console.debug?.(e);
}
- TS = null, ES = null;
+ AS = null, jS = null;
try {
- DS?.disconnect?.();
+ MS?.disconnect?.();
} catch (e) {
console.debug?.(e);
}
- DS = null;
+ MS = null, NS = null;
try {
- MS && window.clearTimeout(MS);
+ PS?.disconnect?.();
} catch (e) {
console.debug?.(e);
}
- MS = null, OS && typeof window < "u" && window.removeEventListener(V.MFV_VISIBILITY_CHANGED, OS), OS = null, kS && typeof window < "u" && window.removeEventListener("resize", kS), kS = null, AS && typeof window < "u" && window.removeEventListener("mjr-settings-changed", AS), AS = null, jS = !1, NS = !1, PS = !1;
+ PS = null;
try {
- document.documentElement?.style?.setProperty("--mjr-mfv-top-offset", "60px"), document.querySelector(`[${gS}]`)?.remove?.(), document.querySelector(`[${vS}]`)?.remove?.();
+ zS && window.clearTimeout(zS);
+ } catch (e) {
+ console.debug?.(e);
+ }
+ zS = null, FS && typeof window < "u" && window.removeEventListener(V.MFV_VISIBILITY_CHANGED, FS), FS = null, IS && typeof window < "u" && window.removeEventListener("resize", IS), IS = null, LS && typeof window < "u" && window.removeEventListener("mjr-settings-changed", LS), LS = null, RS = !1, BS = !1, VS = !1;
+ try {
+ document.documentElement?.style?.setProperty("--mjr-mfv-top-offset", "60px"), document.querySelector(`[${CS}]`)?.remove?.(), document.querySelector(`[${TS}]`)?.remove?.();
} catch (e) {
console.debug?.(e);
}
}
// ui/features/runtime/entryUiRegistration.ts
-var $S = "mjr-global-runtime-root", eC = "_mjrGlobalRuntimeVueApp", tC = "_mjrSidebarVueApp", nC = "_mjrFeedVueApp", rC = "majoor-generated-feed", iC = null;
-function aC() {
+var oC = "mjr-global-runtime-root", sC = "_mjrGlobalRuntimeVueApp", cC = "_mjrSidebarVueApp", lC = "_mjrFeedVueApp", uC = "majoor-generated-feed", dC = null;
+function fC() {
if (typeof document > "u" || !document?.body) return null;
- let e = document.getElementById($S);
- return e || (e = document.createElement("div"), e.id = $S, e.setAttribute("role", "presentation"), e.style.cssText = "position:fixed;inset:0;overflow:visible;pointer-events:none;z-index:10020;", document.body.appendChild(e), e);
+ let e = document.getElementById(oC);
+ return e || (e = document.createElement("div"), e.id = oC, e.setAttribute("role", "presentation"), e.style.cssText = "position:fixed;inset:0;overflow:visible;pointer-events:none;z-index:10020;", document.body.appendChild(e), e);
}
-function oC() {
+function pC() {
try {
- let e = aC();
+ let e = fC();
if (!e) return !1;
- let t = !!Dn(e, Rp, eC);
- return ZS(), t;
+ let t = !!En(e, Gp, sC);
+ return iC(), t;
} catch {
return !1;
}
}
-function sC() {
+function mC() {
try {
- QS();
- let e = document.getElementById($S);
+ aC();
+ let e = document.getElementById(oC);
if (!e) return;
- Rn(e, eC), e.remove?.();
+ Ln(e, sC), e.remove?.();
} catch {}
}
-function cC(e, t) {
+function hC(e, t) {
let n = We(e, t);
- if (Vf(), !n) try {
+ if (Jf(), !n) try {
window.dispatchEvent(new Event(V.OPEN_ASSETS_MANAGER));
} catch (e) {
console.debug?.(e);
}
return n;
}
-function lC() {
+function gC() {
try {
window.dispatchEvent(new CustomEvent(V.RELOAD_GRID, { detail: { reason: "command" } }));
} catch (e) {
console.debug?.(e);
}
}
-function uC(e) {
- let t = Xe(e, rC);
+function _C(e) {
+ let t = Xe(e, uC);
if (!t) try {
- Fd();
+ Hd();
} catch (e) {
console.debug?.(e);
}
return t;
}
-async function dC() {
+async function vC() {
try {
let t = await L(at.BROWSE_FOLDER, {});
if (t?.ok) return String(t?.data?.path || "").trim();
@@ -23860,14 +23890,14 @@ async function dC() {
}
return "";
}
-async function fC(t, { settingId: n, settingsPathKey: r, save: i, successMessage: a, restartRequired: o = !1 }) {
- let s = await dC();
+async function yC(t, { settingId: n, settingsPathKey: r, save: i, successMessage: a, restartRequired: o = !1 }) {
+ let s = await vC();
if (!s) return !1;
let c = await i(s);
if (!c?.ok) return e(c?.error || R("toast.settingsPathSaveFailed", "Failed to save path"), "error"), !1;
try {
- let e = Hn();
- e.paths = e.paths || {}, e.paths[r] = s, In(e), Fe(t, n, s), window.dispatchEvent(new CustomEvent(V.SETTINGS_CHANGED, { detail: {
+ let e = Vn();
+ e.paths = e.paths || {}, e.paths[r] = s, Fn(e), Fe(t, n, s), window.dispatchEvent(new CustomEvent(V.SETTINGS_CHANGED, { detail: {
key: `paths.${r}`,
value: s
} }));
@@ -23876,10 +23906,10 @@ async function fC(t, { settingId: n, settingsPathKey: r, save: i, successMessage
}
return e(o ? `${a} ${R("toast.restartComfyUiToApply", "Restart ComfyUI to apply.")}` : a, "success", 2800), !0;
}
-function pC(e) {
- return IC(e).find(FC) || null;
+function bC(e) {
+ return UC(e).find(HC) || null;
}
-function mC(e) {
+function xC(e) {
let t = String(e?.id ?? e?.nodeId ?? e?.node_id ?? "").trim();
if (!t) return null;
let n = String(e?.comfyClass || e?.type || e?.constructor?.type || "").trim();
@@ -23891,7 +23921,7 @@ function mC(e) {
title: String(e?.title || e?.properties?.title || e?.properties?.name || n || "").trim()
};
}
-async function hC(e) {
+async function SC(e) {
if (!e) return [];
try {
let t = (await import("./chunks/NodeStreamController-CIKDDXJT.js")).extractNodeFileData?.(e), n = String(t?.filename || "").trim();
@@ -23905,7 +23935,7 @@ async function hC(e) {
return console.debug?.(e), [];
}
}
-function gC(e) {
+function CC(e) {
try {
if (typeof window > "u") return;
window.MajoorAssetsManager = window.MajoorAssetsManager || {}, window.MajoorAssetsManager.pendingNodeContext = e, window.dispatchEvent(new CustomEvent(V.OPEN_NODE_CONTEXT, { detail: e }));
@@ -23913,18 +23943,18 @@ function gC(e) {
console.debug?.(e);
}
}
-async function _C(t, n, r) {
- cC(t, n);
- let i = mC(r) || {}, a = await hC(r);
+async function wC(t, n, r) {
+ hC(t, n);
+ let i = xC(r) || {}, a = await SC(r);
a.length && (i.files = a);
let o = String(r?.comfyClass || r?.type || "").toLowerCase();
- return a.length && /load|upload/.test(o) && (delete i.source_node_id, delete i.sourceNodeId), !i.source_node_id && !a.length ? (e(R("toast.nodeContextMissing", "Select an output node first."), "info", 2200), !1) : (gC(i), !0);
+ return a.length && /load|upload/.test(o) && (delete i.source_node_id, delete i.sourceNodeId), !i.source_node_id && !a.length ? (e(R("toast.nodeContextMissing", "Select an output node first."), "info", 2200), !1) : (CC(i), !0);
}
-async function vC(e) {
+async function TC(e) {
try {
- let t = await hC(e);
+ let t = await SC(e);
if (t.length) {
- let { floatingViewerManager: e } = await import("./chunks/floatingViewerManager-DI520cRz.js").then((e) => e.n);
+ let { floatingViewerManager: e } = await import("./chunks/floatingViewerManager-B_1xQj1m.js").then((e) => e.n);
if (await e.openAssets({
assets: t,
index: 0
@@ -23940,11 +23970,11 @@ async function vC(e) {
}
return !1;
}
-function yC(t, n) {
- let r = iC;
- return r ? (_C(t, n, r), !0) : (e(R("toast.nodeContextMissing", "Select an output node first."), "info", 2200), !1);
+function EC(t, n) {
+ let r = dC;
+ return r ? (wC(t, n, r), !0) : (e(R("toast.nodeContextMissing", "Select an output node first."), "info", 2200), !1);
}
-function bC(e, { sidebarTabId: t, triggerStartupScan: n }) {
+function DC(e, { sidebarTabId: t, triggerStartupScan: n }) {
return [
{
id: "mjr.openAssetsManager",
@@ -23953,7 +23983,7 @@ function bC(e, { sidebarTabId: t, triggerStartupScan: n }) {
title: R("tooltip.openAssetsManager", "Open Majoor Assets Manager"),
description: R("tooltip.openAssetsManager", "Open Majoor Assets Manager"),
icon: "pi pi-folder-open",
- function: () => cC(e, t)
+ function: () => hC(e, t)
},
{
id: "mjr.scanAssets",
@@ -23977,7 +24007,7 @@ function bC(e, { sidebarTabId: t, triggerStartupScan: n }) {
id: "mjr.refreshAssetsGrid",
label: R("command.refreshAssetsGrid", "Refresh assets grid"),
icon: "pi pi-sync",
- function: () => lC()
+ function: () => gC()
},
{
id: "mjr.openFloatingViewer",
@@ -24001,13 +24031,13 @@ function bC(e, { sidebarTabId: t, triggerStartupScan: n }) {
title: R("tooltip.openGeneratedFeed", "Open the Majoor generated feed panel"),
description: R("tooltip.openGeneratedFeed", "Open the Majoor generated feed panel"),
icon: "pi pi-list",
- function: () => uC(e)
+ function: () => _C(e)
},
{
id: "mjr.openSettings",
label: R("command.openSettings", "Open Majoor settings"),
icon: "pi pi-cog",
- function: () => Xn(e)
+ function: () => Yn(e)
},
{
id: "mjr.pickOutputDirectory",
@@ -24016,7 +24046,7 @@ function bC(e, { sidebarTabId: t, triggerStartupScan: n }) {
title: R("tooltip.pickOutputDirectory", "Use the native folder browser to set Majoor's generation output directory"),
description: R("tooltip.pickOutputDirectory", "Use the native folder browser to set Majoor's generation output directory"),
icon: "pi pi-folder",
- function: () => fC(e, {
+ function: () => yC(e, {
settingId: "Majoor.Paths.OutputDirectory",
settingsPathKey: "outputDirectory",
save: se,
@@ -24030,7 +24060,7 @@ function bC(e, { sidebarTabId: t, triggerStartupScan: n }) {
title: R("tooltip.pickIndexDirectory", "Use the native folder browser to set Majoor's index database directory"),
description: R("tooltip.pickIndexDirectory", "Use the native folder browser to set Majoor's index database directory"),
icon: "pi pi-database",
- function: () => fC(e, {
+ function: () => yC(e, {
settingId: "Majoor.Paths.IndexDirectory",
settingsPathKey: "indexDirectory",
save: s,
@@ -24045,7 +24075,7 @@ function bC(e, { sidebarTabId: t, triggerStartupScan: n }) {
title: R("tooltip.openNodeContext", "Show the latest indexed assets produced by this node"),
description: R("tooltip.openNodeContext", "Show the latest indexed assets produced by this node"),
icon: "pi pi-sitemap",
- function: () => yC(e, t)
+ function: () => EC(e, t)
},
{
id: "mjr.openNodeInFloatingViewer",
@@ -24055,12 +24085,12 @@ function bC(e, { sidebarTabId: t, triggerStartupScan: n }) {
description: R("tooltip.openNodeInFloatingViewer", "Open this node's media in the Majoor floating viewer"),
icon: "pi pi-window-maximize",
function: () => {
- vC(iC);
+ TC(dC);
}
}
];
}
-function xC() {
+function OC() {
return [{
combo: {
alt: !0,
@@ -24077,7 +24107,7 @@ function xC() {
commandId: "mjr.toggleFloatingViewer"
}];
}
-function SC() {
+function kC() {
return [{
path: ["Extensions", "Majoor Assets Manager"],
commands: [
@@ -24092,13 +24122,13 @@ function SC() {
]
}];
}
-function CC(e, { sidebarTabId: t, triggerStartupScan: n }) {
+function AC(e, { sidebarTabId: t, triggerStartupScan: n }) {
return [null, {
content: "Majoor Assets Manager",
submenu: { options: [
{
content: R("tooltip.openAssetsManager", "Open Majoor Assets Manager"),
- callback: () => cC(e, t)
+ callback: () => hC(e, t)
},
{
content: R("command.openFloatingViewer", "Open floating viewer"),
@@ -24112,12 +24142,12 @@ function CC(e, { sidebarTabId: t, triggerStartupScan: n }) {
},
{
content: R("command.openGeneratedFeed", "Open generated feed"),
- callback: () => uC(e)
+ callback: () => _C(e)
},
null,
{
content: R("command.refreshAssetsGrid", "Refresh assets grid"),
- callback: () => lC()
+ callback: () => gC()
},
{
content: R("command.scanAssets", "Scan assets"),
@@ -24125,12 +24155,12 @@ function CC(e, { sidebarTabId: t, triggerStartupScan: n }) {
},
{
content: R("command.openSettings", "Open Majoor settings"),
- callback: () => Xn(e)
+ callback: () => Yn(e)
}
] }
}];
}
-function wC() {
+function jC() {
return [
{
label: "Majoor Assets Manager",
@@ -24147,16 +24177,16 @@ function wC() {
}
];
}
-function TC(e, t) {
- for (let n of bC(e, t)) Ve(e, n);
+function MC(e, t) {
+ for (let n of DC(e, t)) Ve(e, n);
}
-function EC(e) {
- for (let t of xC()) He(e, t);
+function NC(e) {
+ for (let t of OC()) He(e, t);
}
-function DC(e, { sidebarTabId: t }) {
- zf({ sidebarTabId: t });
+function PC(e, { sidebarTabId: t }) {
+ Kf({ sidebarTabId: t });
try {
- Hn()?.integration?.hideNativeAssetsTab && xn(!0);
+ Vn()?.integration?.hideNativeAssetsTab && bn(!0);
} catch (e) {
console.debug?.(e);
}
@@ -24168,8 +24198,8 @@ function DC(e, { sidebarTabId: t }) {
tooltip: R("tooltip.sidebarTab"),
type: "custom",
render(e) {
- Vf(), ci({ idleOnly: !0 }).catch(() => null), Dn(e, mS, tC), setTimeout(() => {
- let e = Wf();
+ Jf(), ci({ idleOnly: !0 }).catch(() => null), En(e, xS, cC), setTimeout(() => {
+ let e = Zf();
if (e) try {
window.dispatchEvent(new CustomEvent(V.RELOAD_GRID, { detail: {
reason: "pending-generated-assets",
@@ -24183,80 +24213,80 @@ function DC(e, { sidebarTabId: t }) {
destroy(e) {}
});
}
-function OC() {
+function FC() {
try {
- pn();
+ fn();
} catch {}
try {
- Rn(null, tC);
+ Ln(null, cC);
} catch {}
- kC = !1;
+ IC = !1;
try {
- document.getElementById(AC)?.remove?.();
+ document.getElementById(LC)?.remove?.();
} catch {}
}
-var kC = !1, AC = "mjr-sidebar-prewarm-host";
-function jC() {
- if (kC || typeof document > "u" || !document?.body || Tn(tC)) return !1;
- kC = !0;
+var IC = !1, LC = "mjr-sidebar-prewarm-host";
+function RC() {
+ if (IC || typeof document > "u" || !document?.body || wn(cC)) return !1;
+ IC = !0;
try {
- let e = document.getElementById(AC);
- return e || (e = document.createElement("div"), e.id = AC, e.style.cssText = "position:fixed;left:-99999px;top:0;width:360px;height:600px;overflow:hidden;visibility:hidden;pointer-events:none;contain:strict;", e.setAttribute("aria-hidden", "true"), document.body.appendChild(e)), Dn(e, mS, tC, { attachIfExists: !1 }), !0;
+ let e = document.getElementById(LC);
+ return e || (e = document.createElement("div"), e.id = LC, e.style.cssText = "position:fixed;left:-99999px;top:0;width:360px;height:600px;overflow:hidden;visibility:hidden;pointer-events:none;contain:strict;", e.setAttribute("aria-hidden", "true"), document.body.appendChild(e)), En(e, xS, cC, { attachIfExists: !1 }), !0;
} catch (e) {
- return console.debug?.(e), kC = !1, !1;
+ return console.debug?.(e), IC = !1, !1;
}
}
-function MC() {
+function zC() {
return {
- id: rC,
+ id: uC,
title: R("bottomFeed.title", "Generated Feed"),
icon: "pi pi-images",
type: "custom",
render(e) {
- Dn(e, hS, nC);
+ En(e, SS, lC);
},
destroy(e) {}
};
}
-function NC() {
- return [MC()];
+function BC() {
+ return [zC()];
}
-function PC() {
+function VC() {
try {
- Rn(null, nC);
+ Ln(null, lC);
} catch {}
}
-function FC(e) {
+function HC(e) {
let t = String(e?.comfyClass || e?.type || e?.constructor?.type || "").trim();
return t ? /save|load|preview/i.test(t) : !1;
}
-function IC(e) {
+function UC(e) {
return e ? Array.isArray(e) ? e.filter(Boolean) : e instanceof Set ? Array.from(e).filter(Boolean) : e instanceof Map ? Array.from(e.values()).filter(Boolean) : Array.isArray(e?.items) ? e.items.filter(Boolean) : Array.isArray(e?.nodes) ? e.nodes.filter(Boolean) : [e] : [];
}
-function LC(e) {
- return iC = pC(e), iC ? [
+function WC(e) {
+ return dC = bC(e), dC ? [
"mjr.openNodeContext",
"mjr.openAssetsManager",
"mjr.openNodeInFloatingViewer"
] : [];
}
-function RC(e, t) {
+function GC(e, t) {
return {
content: e,
callback: t
};
}
-function zC(t, n, { sidebarTabId: r }) {
- return FC(t) ? [
- RC("View in Assets Manager", () => {
- _C(n, r, t);
+function KC(t, n, { sidebarTabId: r }) {
+ return HC(t) ? [
+ GC("View in Assets Manager", () => {
+ wC(n, r, t);
}),
- RC("Open in Floating Viewer", () => {
- vC(t);
+ GC("Open in Floating Viewer", () => {
+ TC(t);
}),
- RC("Index Output", () => {
+ GC("Index Output", () => {
try {
- lC(), e(R("toast.rescanningFile", "Rescanning file..."), "info", 1800);
+ gC(), e(R("toast.rescanningFile", "Rescanning file..."), "info", 1800);
} catch (e) {
console.debug?.(e);
}
@@ -24264,15 +24294,15 @@ function zC(t, n, { sidebarTabId: r }) {
] : [];
}
// ui/features/runtime/entryRuntimeLifecycle.ts
-var BC = "__MJR_ENTRY_RUNTIME__";
-function VC(e, t) {
+var qC = "__MJR_ENTRY_RUNTIME__";
+function JC(e, t) {
if (e) try {
e._mjrAssetUpdateReloadTimer &&= (clearTimeout(e._mjrAssetUpdateReloadTimer), null), e._mjrExecutedHandler && e.removeEventListener("executed", e._mjrExecutedHandler), e._mjrAssetAddedHandler && e.removeEventListener("mjr-asset-added", e._mjrAssetAddedHandler), e._mjrAssetUpdatedHandler && e.removeEventListener("mjr-asset-updated", e._mjrAssetUpdatedHandler), e._mjrStructuredEventHandler && e.removeEventListener(V.STRUCTURED_EVENT, e._mjrStructuredEventHandler), e._mjrScanCompleteHandler && e.removeEventListener(V.SCAN_COMPLETE, e._mjrScanCompleteHandler), e._mjrAssetsRemovedHandler && e.removeEventListener(V.ASSETS_REMOVED, e._mjrAssetsRemovedHandler), e._mjrScanProgressHandler && e.removeEventListener(V.SCAN_PROGRESS, e._mjrScanProgressHandler), e._mjrAssetIndexingHandler && e.removeEventListener(V.ASSET_INDEXING, e._mjrAssetIndexingHandler), e._mjrAssetIndexedHandler && e.removeEventListener(V.ASSET_INDEXED, e._mjrAssetIndexedHandler), e._mjrExecutionStartHandler && e.removeEventListener("execution_start", e._mjrExecutionStartHandler), e._mjrExecutionEndHandler && (e.removeEventListener("execution_success", e._mjrExecutionEndHandler), e.removeEventListener("execution_error", e._mjrExecutionEndHandler), e.removeEventListener("execution_interrupted", e._mjrExecutionEndHandler)), e._mjrStacksUpdatedHandler && e.removeEventListener("mjr.stacks.updated", e._mjrStacksUpdatedHandler), e._mjrEnrichmentStatusHandler && e.removeEventListener(V.ENRICHMENT_STATUS, e._mjrEnrichmentStatusHandler), e._mjrDbRestoreStatusHandler && e.removeEventListener(V.DB_RESTORE_STATUS, e._mjrDbRestoreStatusHandler), e._mjrRuntimeStatusHandler && (e.removeEventListener("progress", e._mjrRuntimeStatusHandler), e.removeEventListener("status", e._mjrRuntimeStatusHandler), e.removeEventListener(V.RUNTIME_STATUS, e._mjrRuntimeStatusHandler), e.removeEventListener("execution_cached", e._mjrExecutionCachedHandler));
} catch (e) {
t?.(e, "entry.removeApiHandlers");
}
}
-function HC(e, t) {
+function YC(e, t) {
try {
let t = e?.assetsDeletedHandler;
t && typeof window < "u" && window.removeEventListener(V.ASSETS_DELETED, t);
@@ -24280,7 +24310,7 @@ function HC(e, t) {
t?.(e, "entry.removeRuntimeWindowHandlers");
}
}
-function UC(e, { reportError: t } = {}) {
+function XC(e, { reportError: t } = {}) {
if (e && typeof e == "object") {
try {
ee();
@@ -24310,13 +24340,13 @@ function UC(e, { reportError: t } = {}) {
console.warn("[MJR teardown]", e);
}
try {
- VC(e.api || null, t), HC(e, t);
+ JC(e.api || null, t), YC(e, t);
} catch (e) {
console.warn("[MJR teardown]", e);
}
}
}
-function WC(e, t, n, r, i = void 0) {
+function ZC(e, t, n, r, i = void 0) {
if (!e || !t?.addEventListener || typeof r != "function") return null;
let a = i && typeof i == "object" ? { ...i } : i;
if (typeof AbortController < "u") try {
@@ -24336,11 +24366,11 @@ function WC(e, t, n, r, i = void 0) {
}
}), null;
}
-function GC({ cleanupEntryRuntimeFn: e = UC, teardownLiveStreamTracker: t, teardownNodeStream: n, teardownFloatingViewerManager: r, teardownGeneratedFeed: i, teardownAssetsSidebar: a, teardownGlobalRuntime: o, teardownTopBarMfvButton: s, reportError: c }) {
+function QC({ cleanupEntryRuntimeFn: e = XC, teardownLiveStreamTracker: t, teardownNodeStream: n, teardownFloatingViewerManager: r, teardownGeneratedFeed: i, teardownAssetsSidebar: a, teardownGlobalRuntime: o, teardownTopBarMfvButton: s, reportError: c }) {
try {
if (typeof window < "u") {
try {
- let t = window[BC];
+ let t = window[qC];
e(t, { reportError: c });
} catch (e) {
console.warn("[MJR teardown]", e);
@@ -24380,7 +24410,7 @@ function GC({ cleanupEntryRuntimeFn: e = UC, teardownLiveStreamTracker: t, teard
} catch (e) {
console.warn("[MJR teardown]", e);
}
- window[BC] = {
+ window[qC] = {
api: null,
assetsDeletedHandler: null,
_cleanupControllers: [],
@@ -24392,42 +24422,42 @@ function GC({ cleanupEntryRuntimeFn: e = UC, teardownLiveStreamTracker: t, teard
}
}
// ui/entry.ts
-var KC = null, qC = null, JC = null;
-function YC() {
- return JC ||= import("./chunks/floatingViewerManager-DI520cRz.js").then((e) => e.n), JC;
+var $C = null, ew = null, tw = null;
+function nw() {
+ return tw ||= import("./chunks/floatingViewerManager-B_1xQj1m.js").then((e) => e.n), tw;
}
-function XC() {
- JC && JC.then((e) => e?.teardownFloatingViewerManager?.()).catch((e) => console.debug?.("[Majoor] MFV teardown skipped", e));
+function rw() {
+ tw && tw.then((e) => e?.teardownFloatingViewerManager?.()).catch((e) => console.debug?.("[Majoor] MFV teardown skipped", e));
}
-var ZC = "majoor-assets", QC = "__MJR_EXECUTION_RUNTIME__", $C = "Majoor.AssetsManager", ew = {
+var iw = "majoor-assets", aw = "__MJR_EXECUTION_RUNTIME__", ow = "Majoor.AssetsManager", sw = {
active: null,
promptId: ""
-}, tw = null, nw = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i, rw = /^[0-9a-f]{20,}$/i;
-function iw(...e) {
+}, cw = null, lw = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i, uw = /^[0-9a-f]{20,}$/i;
+function dw(...e) {
for (let t of e) {
let e = String(t || "").trim();
if (e) return e;
}
return "";
}
-function aw(e) {
+function fw(e) {
let t = String(e || "").trim();
- return nw.test(t) || rw.test(t);
+ return lw.test(t) || uw.test(t);
}
-function ow(e) {
- return iw(e?.title, e?.properties?.title, e?.properties?.name, e?.properties?.label, e?.name);
+function pw(e) {
+ return dw(e?.title, e?.properties?.title, e?.properties?.name, e?.properties?.label, e?.name);
}
-function sw(e) {
+function mw(e) {
if (!e || typeof e != "object") return [];
if (Array.isArray(e.nodes)) return e.nodes.filter(Boolean);
if (Array.isArray(e._nodes)) return e._nodes.filter(Boolean);
let t = e._nodes_by_id ?? e.nodes_by_id ?? null;
return t instanceof Map ? Array.from(t.values()).filter(Boolean) : t && typeof t == "object" ? Object.values(t).filter(Boolean) : [];
}
-function cw(e) {
- return sw(e).length > 0;
+function hw(e) {
+ return mw(e).length > 0;
}
-function lw(e) {
+function gw(e) {
return !e || typeof e != "object" ? !1 : [
e.subgraph,
e._subgraph,
@@ -24438,13 +24468,13 @@ function lw(e) {
e.subgraph_instance?.graph,
e.inner_graph,
e.subgraph_graph
- ].some(cw) || Array.isArray(e.nodes) && e.nodes.length > 0 && e.nodes !== e.graph?.nodes ? !0 : aw(e.type) && !!ow(e);
+ ].some(hw) || Array.isArray(e.nodes) && e.nodes.length > 0 && e.nodes !== e.graph?.nodes ? !0 : fw(e.type) && !!pw(e);
}
-function uw(e, t) {
- let n = String(e?.type || t || "").trim(), r = ow(e);
- return aw(n) ? r || "Subgraph" : n || r || "Node";
+function _w(e, t) {
+ let n = String(e?.type || t || "").trim(), r = pw(e);
+ return fw(n) ? r || "Subgraph" : n || r || "Node";
}
-function dw() {
+function vw() {
try {
return typeof window > "u" ? {
active_prompt_id: null,
@@ -24453,30 +24483,30 @@ function dw() {
progress_value: null,
progress_max: null,
cached_nodes: []
- } : (window[QC] && typeof window[QC] == "object" || (window[QC] = {
+ } : (window[aw] && typeof window[aw] == "object" || (window[aw] = {
active_prompt_id: null,
queue_remaining: null,
progress_node: null,
progress_value: null,
progress_max: null,
cached_nodes: []
- }), window[QC]);
+ }), window[aw]);
} catch (e) {
return console.debug?.(e), {};
}
}
-function fw(e = {}) {
+function yw(e = {}) {
try {
- let t = dw();
+ let t = vw();
Object.assign(t, e || {}), window.dispatchEvent(new CustomEvent(V.RUNTIME_STATUS, { detail: { ...t } }));
} catch (e) {
console.debug?.(e);
}
}
-async function pw({ active: e, promptId: t = "" } = {}) {
+async function bw({ active: e, promptId: t = "" } = {}) {
let n = !!e, r = String(t || "").trim();
- if (ew.active !== n || ew.promptId !== r) {
- ew = {
+ if (sw.active !== n || sw.promptId !== r) {
+ sw = {
active: n,
promptId: r
};
@@ -24491,49 +24521,49 @@ async function pw({ active: e, promptId: t = "" } = {}) {
}
}
}
-function mw() {
+function xw() {
try {
- return !!String(dw()?.active_prompt_id || "").trim();
+ return !!String(vw()?.active_prompt_id || "").trim();
} catch (e) {
return console.debug?.(e), !1;
}
}
-function hw(e = 1200) {
+function Sw(e = 1200) {
try {
- tw && clearTimeout(tw);
+ cw && clearTimeout(cw);
} catch (e) {
console.debug?.(e);
}
- tw = setTimeout(() => {
- if (tw = null, mw()) {
- hw(e);
+ cw = setTimeout(() => {
+ if (cw = null, xw()) {
+ Sw(e);
return;
}
- let t = $n();
+ let t = Qn();
t && vi(t);
}, Math.max(250, Number(e) || 0));
}
-function gw(e) {
- import("./chunks/LiveStreamTracker-CUeCguVd.js").then((t) => {
- KC = t;
+function Cw(e) {
+ import("./chunks/LiveStreamTracker-B3HhmLvE.js").then((t) => {
+ $C = t;
try {
t.initLiveStreamTracker(e);
} catch (e) {
console.warn("[MJR setup] initLiveStreamTracker failed:", e);
}
}).catch((e) => console.warn("[MJR setup] LiveStreamTracker load failed:", e)), import("./chunks/NodeStreamController-CIKDDXJT.js").then((t) => {
- qC = t;
+ ew = t;
try {
t.initNodeStream({
app: e,
onOutput: (e) => {
- YC().then((t) => t?.floatingViewerManager?.feedNodeStream?.(e)).catch((e) => console.debug?.("[NodeStream] MFV output failed", e));
+ nw().then((t) => t?.floatingViewerManager?.feedNodeStream?.(e)).catch((e) => console.debug?.("[NodeStream] MFV output failed", e));
},
onStatus: (t, n) => {
try {
- let r = (e?.graph ?? e?.canvas?.graph ?? null)?.getNodeById?.(Number(t)), i = lw(r), a = ow(r), o = i ? "Subgraph" : uw(r, n);
- YC().then((e) => {
- e?.floatingViewerManager?.setNodeStreamSelection?.(t, o, i ? a || uw(r, n) : a);
+ let r = (e?.graph ?? e?.canvas?.graph ?? null)?.getNodeById?.(Number(t)), i = gw(r), a = pw(r), o = i ? "Subgraph" : _w(r, n);
+ nw().then((e) => {
+ e?.floatingViewerManager?.setNodeStreamSelection?.(t, o, i ? a || _w(r, n) : a);
}).catch((e) => console.debug?.("[NodeStream] MFV status failed", e));
} catch (e) {
console.debug?.("[NodeStream] onStatus failed", e);
@@ -24545,7 +24575,7 @@ function gw(e) {
}
}).catch((e) => console.warn("[MJR setup] NodeStream load failed:", e));
}
-async function _w(t, n) {
+async function ww(t, n) {
let r = await ct({
app: t,
timeoutMs: 4e3
@@ -24554,7 +24584,7 @@ async function _w(t, n) {
console.warn("Majoor API not available, real-time updates disabled");
return;
}
- Kn({
+ Gn({
api: r,
app: t
}).catch((e) => console.debug?.("[Majoor] MFV progress tracking init failed", e));
@@ -24564,78 +24594,78 @@ async function _w(t, n) {
} catch (e) {
console.debug?.(e);
}
- VC(i?.api || null, P), r !== i?.api && VC(r, P), HC(i, P), await rp({
+ JC(i?.api || null, P), r !== i?.api && JC(r, P), YC(i, P), await up({
api: r,
runtime: i,
executionRuntime: n,
appRef: Ir,
- liveStreamModule: KC,
- ensureExecutionRuntime: dw,
- emitRuntimeStatus: fw,
- getActiveGridContainer: $n,
- pushGeneratedAsset: Xd,
+ liveStreamModule: $C,
+ ensureExecutionRuntime: vw,
+ emitRuntimeStatus: yw,
+ getActiveGridContainer: Qn,
+ pushGeneratedAsset: rf,
upsertAsset: Ei,
upsertAssetNow: Di,
removeAssetsFromGrid: Ti,
- getEnrichmentState: It,
- setEnrichmentState: St,
+ getEnrichmentState: Pt,
+ setEnrichmentState: It,
comfyToast: e,
t: R,
reportError: P,
- registerCleanableListener: WC,
- syncExecutionBackendState: pw
+ registerCleanableListener: ZC,
+ syncExecutionBackendState: bw
});
}
-var vw = yf({
+var Tw = Ef({
post: L,
ENDPOINTS: at,
reportError: P,
- extractOutputFiles: bf,
- ensureExecutionRuntime: dw,
- emitRuntimeStatus: fw,
- refreshGeneratedFeedHosts: Fd,
- getActiveGridContainer: $n
-}), yw = {
- name: $C,
- settings: bn(Ir),
- commands: bC(Ir, {
- sidebarTabId: ZC,
+ extractOutputFiles: Df,
+ ensureExecutionRuntime: vw,
+ emitRuntimeStatus: yw,
+ refreshGeneratedFeedHosts: Hd,
+ getActiveGridContainer: Qn
+}), Ew = {
+ name: ow,
+ settings: yn(Ir),
+ commands: DC(Ir, {
+ sidebarTabId: iw,
triggerStartupScan: oi
}),
- keybindings: xC(),
- menuCommands: SC(),
- aboutPageBadges: wC(),
- bottomPanelTabs: NC(),
+ keybindings: OC(),
+ menuCommands: kC(),
+ aboutPageBadges: jC(),
+ bottomPanelTabs: BC(),
async setup() {
- GC({
- cleanupEntryRuntimeFn: UC,
- teardownLiveStreamTracker: (e) => KC?.teardownLiveStreamTracker(e),
- teardownNodeStream: (e) => qC?.teardownNodeStream(e),
- teardownFloatingViewerManager: XC,
- teardownGeneratedFeed: PC,
- teardownAssetsSidebar: OC,
- teardownGlobalRuntime: sC,
- teardownTopBarMfvButton: QS,
+ QC({
+ cleanupEntryRuntimeFn: XC,
+ teardownLiveStreamTracker: (e) => $C?.teardownLiveStreamTracker(e),
+ teardownNodeStream: (e) => ew?.teardownNodeStream(e),
+ teardownFloatingViewerManager: rw,
+ teardownGeneratedFeed: VC,
+ teardownAssetsSidebar: FC,
+ teardownGlobalRuntime: mC,
+ teardownTopBarMfvButton: aC,
reportError: P
- }), sp(), Je(Ir);
+ }), mp(), Je(Ir);
let e = await tt({ timeoutMs: 12e3 }) || Ir;
- Je(e), Ip(e);
+ Je(e), Up(e);
try {
typeof window < "u" && (window.__MJR_RUNTIME_APP__ = e);
} catch (e) {
console.debug?.(e);
}
- ui(), fi({ enabled: !0 }), oC(), gw(e), yn(e, () => {
- let e = $n();
- e && (B.DEFER_GRID_FETCH_DURING_EXECUTION && mw() ? hw() : vi(e));
- }), TC(e, {
- sidebarTabId: ZC,
+ ui(), fi({ enabled: !0 }), pC(), Cw(e), vn(e, () => {
+ let e = Qn();
+ e && (B.DEFER_GRID_FETCH_DURING_EXECUTION && xw() ? Sw() : vi(e));
+ }), MC(e, {
+ sidebarTabId: iw,
triggerStartupScan: oi
- }), EC(e), _w(e, vw).catch((e) => P(e, "entry.api_setup")), DC(e, { sidebarTabId: ZC }) ? Se("[Majoor] Sidebar tab registered (Vue)") : console.warn("Majoor Assets Manager: extensionManager.registerSidebarTab is unavailable");
+ }), NC(e), ww(e, Tw).catch((e) => P(e, "entry.api_setup")), PC(e, { sidebarTabId: iw }) ? Se("[Majoor] Sidebar tab registered (Vue)") : console.warn("Majoor Assets Manager: extensionManager.registerSidebarTab is unavailable");
try {
let e = typeof window < "u" ? window.requestIdleCallback : null, t = () => {
try {
- jC();
+ RC();
} catch (e) {
console.debug?.(e);
}
@@ -24644,30 +24674,30 @@ var vw = yf({
} catch (e) {
console.debug?.(e);
}
- ip({ resolveNodeStreamModule: async () => (qC ||= await import("./chunks/NodeStreamController-CIKDDXJT.js"), qC) });
+ dp({ resolveNodeStreamModule: async () => (ew ||= await import("./chunks/NodeStreamController-CIKDDXJT.js"), ew) });
},
onNodeOutputsUpdated(e) {
try {
- vw.handleNodeOutputsUpdated(e);
+ Tw.handleNodeOutputsUpdated(e);
} catch (e) {
console.debug?.("[Majoor] onNodeOutputsUpdated error", e);
}
},
getNodeMenuItems(e) {
- return zC(e, Ir, { sidebarTabId: ZC });
+ return KC(e, Ir, { sidebarTabId: iw });
},
getCanvasMenuItems(e) {
- return CC(Ir, {
- sidebarTabId: ZC,
+ return AC(Ir, {
+ sidebarTabId: iw,
triggerStartupScan: oi
});
},
getSelectionToolboxCommands(e) {
- return LC(e);
+ return WC(e);
}
};
try {
- Ir.registerExtension(yw);
+ Ir.registerExtension(Ew);
} catch (e) {
- console.warn("[Majoor] registerExtension() threw (extension already registered) - re-running setup() directly", e), yw.setup().catch((e) => P(e, "entry.setup_after_duplicate_registration"));
+ console.warn("[Majoor] registerExtension() threw (extension already registered) - re-running setup() directly", e), Ew.setup().catch((e) => P(e, "entry.setup_after_duplicate_registration"));
}
diff --git a/docs/COMFYUI_INTEGRATION_AUDIT.md b/docs/COMFYUI_INTEGRATION_AUDIT.md
index f94be79d..9b9e0835 100644
--- a/docs/COMFYUI_INTEGRATION_AUDIT.md
+++ b/docs/COMFYUI_INTEGRATION_AUDIT.md
@@ -127,6 +127,34 @@ Pistes restantes :
- retirer aussi du flux de génération les éléments supprimés hors de l'interface ;
- un seul événement par nouvel asset au lieu de `mjr-asset-added` plus `mjr.asset.indexed` (chacun doublé par l'enveloppe `mjr.event`).
+## 3 quater. Piles de doublons : gel de ComfyUI et piles « corrompues »
+
+**Symptôme.** Un clic sur le badge de doublons (icône de copie suivie d'un nombre) gèle tout l'onglet ComfyUI ; certaines piles empilent des images qui n'ont rien à voir entre elles.
+
+**Cause du gel : une boucle de rendu Vue infinie.**
+1. Le template de `VirtualAssetGridHost.vue` lit `asset._mjrDupStack` et `asset._mjrDupCount`, et passe `:ref="getCardRef(asset)"`, qui crée une nouvelle fonction à chaque rendu. Vue rappelle donc les refs à chaque rendu (`null`, puis l'élément).
+2. `bindCardRef` appelait `syncRenderedDuplicateCards`, qui remettait `_mjrDupStack` à `false` sur tous les membres puis à `true` sur une carte principale, et assignait un nouveau tableau `_mjrDupMembers`.
+3. En parallèle, le `computed` `displayAssets` faisait l'inverse, avec une autre carte principale (`bucket[0]` contre `selectStackRepresentative`).
+4. Chaque écriture relançait le rendu du parent, donc les refs, donc de nouvelles écritures. En production, Vue n'a pas de limite de récursion : l'onglet tourne à l'infini.
+
+La vue « doublons » déclenchait la boucle à coup sûr : elle affiche N cartes de même nom, aussitôt re-regroupées. Un test le reproduit : **31 rendus en 5 passages** avec l'ancien code, contre zéro rendu supplémentaire après correctif.
+
+**Cause de la « corruption ».** Quatre définitions du doublon coexistaient :
+- `AssetCardRenderer` et `displayAssets` : même nom dans le même source / racine / sous-dossier ;
+- `useVirtualGrid.dedupeAssetsByKey` et `syncRenderedDuplicateCards` : **nom seul, tous dossiers confondus**.
+
+Ces deux derniers retiraient de `state.assets` des fichiers distincts d'autres dossiers et les rangeaient sous une mauvaise carte. Celle-ci recevait au passage le temps de génération d'une autre image (`preserveRepresentativeGenerationTime`).
+
+**Correctif**
+- `buildDisplayAssets` est la seule source de vérité. Ses écritures sont gardées (assignation seulement si la valeur brute change, tableau des membres conservé tant que la composition ne change pas), avec une option `collapseDuplicates`.
+- `syncRenderedDuplicateCards` ne touche plus l'état réactif.
+- Une seule fonction de ref par carte (`getCardRef`).
+- `dedupeAssetsByKey` ne retire plus que les vrais doublons (même id ou même clé).
+- `AssetCardRenderer.appendAssets` ne retire plus de copies : il ne fait que compter.
+- La vue « doublons » (scope `similar`) liste toutes les copies, avec des membres copiés sans cycle (`toDuplicateGroupMembers`).
+
+**À suivre.** Une pile « même dossier, même nom » correspond à plusieurs lignes en base pour un même fichier. C'est possible avec des index créés par d'anciennes versions, par exemple des variantes de casse sous Windows : les insertions actuelles normalisent le chemin. Une fusion de ces lignes, qui conserverait notes, tags et collections, reste à faire comme opération de maintenance explicite.
+
## 4. Feuille de route d'évolution (meilleure intégration)
1. **Progression par nœud** — écouter l'événement websocket `progress_state`
diff --git a/ui/features/grid/AssetCardRenderer.ts b/ui/features/grid/AssetCardRenderer.ts
index 29776ce3..b9fc3c53 100644
--- a/ui/features/grid/AssetCardRenderer.ts
+++ b/ui/features/grid/AssetCardRenderer.ts
@@ -384,6 +384,11 @@ export function appendAssets(gridContainer: any, assets: any[], state: any, deps
let needsUpdate = false;
const validNewAssets = [];
const assetsToRemoveFromState = new Set();
+ // Only maintain per-key counts here. Collapsing duplicates into one card
+ // is a display concern owned by `buildDisplayAssets` (Vue grid). Removing
+ // the copies from `state.assets` and tagging a primary here fought with
+ // that pass (each reset the other's markers on reactive objects) and made
+ // the stack membership depend on paging order.
const applyFilenameCollisions = () => {
try {
const visibleIds = new Set(
@@ -392,101 +397,11 @@ export function appendAssets(gridContainer: any, assets: any[], state: any, deps
.filter(Boolean),
);
for (const [key, bucket] of filenameToAssets.entries()) {
- const visibleBucket = (Array.isArray(bucket) ? bucket : []).filter((asset: any) => {
+ const count = (Array.isArray(bucket) ? bucket : []).filter((asset: any) => {
const id = String(asset?.id || "");
return id ? visibleIds.has(id) : false;
- });
- const count = visibleBucket.length;
+ }).length;
filenameCounts.set(key, count);
-
- if (count < 2) {
- // Clear any stale dup-stack markers (count dropped back to 1)
- for (const asset of visibleBucket) {
- asset._mjrNameCollision = false;
- delete asset._mjrNameCollisionCount;
- delete asset._mjrNameCollisionPaths;
- if (asset._mjrDupStack) {
- asset._mjrDupStack = false;
- asset._mjrDupMembers = null;
- asset._mjrDupCount = 0;
- }
- }
- const renderedList = state.renderedFilenameMap?.get(key);
- if (renderedList) {
- for (const card of renderedList) {
- const badge = card.querySelector?.(".mjr-file-badge");
- deps.setFileBadgeCollision(badge, false);
- try {
- deps.ensureDupStackCard?.(gridContainer, card, card._mjrAsset);
- } catch (e: any) {
- console.debug?.(e);
- }
- }
- }
- continue;
- }
-
- // -- count >= 2: group into a duplicate stack ------------------------------
- // Select the best representative: prefer video_with_audio > video > image.
- const primary = preserveRepresentativeGenerationTime(
- selectStackRepresentative(visibleBucket),
- visibleBucket,
- );
- const secondaries = visibleBucket.filter((a: any) => a !== primary);
-
- // Ensure stale collision markers are cleared on all visible members.
- for (const asset of visibleBucket) {
- asset._mjrNameCollision = false;
- delete asset._mjrNameCollisionCount;
- delete asset._mjrNameCollisionPaths;
- if (asset !== primary) {
- asset._mjrDupStack = false;
- asset._mjrDupMembers = null;
- asset._mjrDupCount = 0;
- }
- }
-
- // Merge new duplicates with existing _mjrDupMembers to survive across pages.
- const prevMembers = Array.isArray(primary._mjrDupMembers)
- ? primary._mjrDupMembers
- : [];
- const prevIds = new Set(prevMembers.map((a: any) => String(a?.id || "")));
- const merged = [
- ...prevMembers,
- ...visibleBucket.filter((a: any) => !prevIds.has(String(a?.id || ""))),
- ];
- primary._mjrDupStack = true;
- primary._mjrDupMembers = merged;
- primary._mjrDupCount = merged.length;
- primary._mjrNameCollision = false; // primary card shows stack button, not red badge
-
- // Remove secondary copies from state.assets so only the primary card shows.
- const secondaryIds = new Set(secondaries.map((a: any) => String(a?.id || "")));
- if (secondaryIds.size > 0) {
- state.assets = state.assets.filter(
- (a: any) => !secondaryIds.has(String(a?.id || "")),
- );
- }
-
- // Update rendered primary card: attach dup-stack button, clear red collision badge.
- const renderedList = state.renderedFilenameMap?.get(key);
- if (renderedList) {
- for (const card of renderedList) {
- const cardAsset = card._mjrAsset;
- const badge = card.querySelector?.(".mjr-file-badge");
- if (
- cardAsset === primary ||
- String(cardAsset?.id || "") === String(primary?.id || "")
- ) {
- deps.setFileBadgeCollision(badge, false);
- try {
- deps.ensureDupStackCard?.(gridContainer, card, primary);
- } catch (e: any) {
- console.debug?.(e);
- }
- }
- }
- }
}
} catch (e: any) {
console.debug?.(e);
diff --git a/ui/features/panel/panelSimilarSearch.ts b/ui/features/panel/panelSimilarSearch.ts
index fd7a549a..14cf9947 100644
--- a/ui/features/panel/panelSimilarSearch.ts
+++ b/ui/features/panel/panelSimilarSearch.ts
@@ -3,6 +3,7 @@ import { get, getAssetMetadata, vectorFindSimilar } from "../../api/client.js";
import { buildListURL, buildNodeContextMembersURL } from "../../api/endpoints.js";
import { comfyToast } from "../../app/toast.js";
import { t } from "../../app/i18n.js";
+import { toDuplicateGroupMembers } from "../../vue/grid/useGridDisplayAssets.js";
const STACK_GROUP_RENDER_LIMIT = 500;
@@ -373,9 +374,9 @@ export function bindSimilarSearch({
}
const activeAsset = await getActiveAsset();
const activeId = String(activeAsset?.id || selectedAssetId() || "").trim();
- const members = Array.isArray(activeAsset?._mjrDupMembers)
- ? activeAsset._mjrDupMembers
- : [];
+ const members = toDuplicateGroupMembers(
+ Array.isArray(activeAsset?._mjrDupMembers) ? activeAsset._mjrDupMembers : [],
+ );
if (members.length >= 2) {
writePanelValue("similarResults", members);
writePanelValue("similarSourceAssetId", activeId ? `duplicates:${activeId}` : "duplicates");
diff --git a/ui/tests/grid_display_duplicates.vitest.ts b/ui/tests/grid_display_duplicates.vitest.ts
new file mode 100644
index 00000000..3a51a573
--- /dev/null
+++ b/ui/tests/grid_display_duplicates.vitest.ts
@@ -0,0 +1,92 @@
+import { describe, expect, it } from "vitest";
+import { computed, effect, reactive } from "vue";
+
+import { buildDisplayAssets, toDuplicateGroupMembers } from "../vue/grid/useGridDisplayAssets.js";
+
+function asset(
+ id: number,
+ subfolder: string,
+ filename = "at-7.958s.png",
+ extra: Record = {},
+) {
+ return { id, filename, subfolder, source: "output", type: "output", kind: "image", ...extra };
+}
+
+describe("duplicate stacks (display)", () => {
+ it("never stacks files that only share a name in different folders", () => {
+ const out = buildDisplayAssets([
+ asset(1, "video_a"),
+ asset(2, "video_b"),
+ asset(3, "video_c"),
+ ]);
+
+ expect(out).toHaveLength(3);
+ expect(out.every((a) => !a._mjrDupStack)).toBe(true);
+ });
+
+ it("stacks real duplicates of the same location and lists every copy", () => {
+ const out = buildDisplayAssets([
+ asset(1, "shots"),
+ asset(2, "Shots"),
+ asset(3, "shots", "AT-7.958S.png"),
+ ]);
+
+ expect(out).toHaveLength(1);
+ expect(out[0]._mjrDupStack).toBe(true);
+ expect(out[0]._mjrDupCount).toBe(3);
+ expect(out[0]._mjrDupMembers.map((a: any) => a.id)).toEqual([1, 2, 3]);
+ });
+
+ it("is write-idempotent on reactive assets, so a render cannot loop", () => {
+ // The grid template reads these fields; any write on a stable pass
+ // re-triggers the render that ran this computed (the ComfyUI freeze).
+ const state = reactive({
+ assets: [asset(1, "s"), asset(2, "s"), asset(3, "s"), asset(4, "t")],
+ });
+ const display = computed(() => buildDisplayAssets(state.assets));
+ let renders = 0;
+ effect(() => {
+ renders += 1;
+ for (const a of display.value) {
+ void a._mjrDupStack;
+ void a._mjrDupCount;
+ void a._mjrDupMembers;
+ void a._mjrNameCollision;
+ }
+ });
+ const settled = renders;
+
+ for (let i = 0; i < 5; i++) {
+ buildDisplayAssets(state.assets);
+ }
+
+ expect(renders).toBe(settled);
+ expect(renders).toBeLessThan(5);
+ const rep = display.value[0];
+ const membersRef = rep._mjrDupMembers;
+ buildDisplayAssets(state.assets);
+ expect(rep._mjrDupMembers).toBe(membersRef);
+ });
+
+ it("shows every copy individually in the duplicates view", () => {
+ const assets = [asset(1, "s"), asset(2, "s"), asset(3, "s")];
+ buildDisplayAssets(assets);
+
+ const out = buildDisplayAssets(assets, { collapseDuplicates: false });
+
+ expect(out).toHaveLength(3);
+ expect(out.every((a) => !a._mjrDupStack && a._mjrDupMembers == null)).toBe(true);
+ });
+
+ it("hands the duplicates view cycle-free copies", () => {
+ const [rep] = buildDisplayAssets([asset(1, "s"), asset(2, "s")]);
+ expect(rep._mjrDupMembers).toContain(rep); // the live graph is cyclic
+
+ const members = toDuplicateGroupMembers(rep._mjrDupMembers);
+
+ expect(members.map((m) => m.id)).toEqual([1, 2]);
+ expect(() => JSON.stringify(members)).not.toThrow();
+ expect(members[0]).not.toBe(rep);
+ expect(members.some((m) => "_mjrDupMembers" in m || "_mjrDupStack" in m)).toBe(false);
+ });
+});
diff --git a/ui/vue/components/grid/VirtualAssetGridHost.vue b/ui/vue/components/grid/VirtualAssetGridHost.vue
index 71c7ccc5..738f853c 100644
--- a/ui/vue/components/grid/VirtualAssetGridHost.vue
+++ b/ui/vue/components/grid/VirtualAssetGridHost.vue
@@ -17,7 +17,6 @@ import { ensureStackGroupCard, ensureDupStackCard } from "../../../features/grid
import { setSelectedIdsDataset } from "../../../features/grid/GridSelectionManager.js";
import { applyGridSettingsClasses, configureGridContainer } from "../../../features/grid/gridApi.js";
import { bindAssetDragStart } from "../../../features/dnd/DragDrop.js";
-import { preserveRepresentativeGenerationTime, selectStackRepresentative } from "../../../features/grid/AssetCardRenderer.js";
import AssetCardInner from "./AssetCardInner.vue";
import FolderCard from "./FolderCard.vue";
import { useGridState } from "../../composables/useGridState.js";
@@ -25,7 +24,11 @@ import { useGridLoader } from "../../composables/useGridLoader.js";
import { isGridHostVisible } from "../../composables/gridVisibility.js";
import { buildStaticGridRows, useGridVirtualRows } from "../../grid/useGridVirtualRows.js";
import { useInfiniteTrigger } from "../../grid/useInfiniteTrigger.js";
-import { buildDisplayAssets, isRenderableAsset } from "../../grid/useGridDisplayAssets.js";
+import {
+ buildDisplayAssets,
+ isRenderableAsset,
+ toDuplicateGroupMembers,
+} from "../../grid/useGridDisplayAssets.js";
import { readRenderedAssetCards } from "./gridDomBridge.js";
import type { MjrAssetLike } from "../../../types/asset";
@@ -138,7 +141,9 @@ provide("mjrStackService", {
openDupGroup: (asset) => {
const gc = gridContainerRef.value;
if (!gc || !asset) return;
- const members = Array.isArray(asset._mjrDupMembers) ? asset._mjrDupMembers : [asset];
+ const members = toDuplicateGroupMembers(
+ Array.isArray(asset._mjrDupMembers) ? asset._mjrDupMembers : [asset],
+ );
gc.dispatchEvent(
new CustomEvent(EVENTS.OPEN_STACK_GROUP, {
bubbles: true,
@@ -426,7 +431,12 @@ function emitSelectionChanged() {
emitSelectionChanged._lastSelectionKey = "";
-const displayAssets = computed(() => buildDisplayAssets(state.assets));
+// The "Duplicates - N copies" / similar view must list every copy; collapsing
+// it again would show one card with the same badge and reopen the same view.
+const gridViewScope = ref("");
+const displayAssets = computed(() =>
+ buildDisplayAssets(state.assets, { collapseDuplicates: gridViewScope.value !== "similar" }),
+);
const renderableAssets = computed(() => {
const assets = Array.isArray(displayAssets.value) ? displayAssets.value : [];
@@ -971,6 +981,10 @@ function readGridScope() {
.trim()
.toLowerCase();
if (gridScope.value !== raw) gridScope.value = raw;
+ const view = String(gridContainerRef.value?.dataset?.mjrViewScope || "")
+ .trim()
+ .toLowerCase();
+ if (gridViewScope.value !== view) gridViewScope.value = view;
}
function scheduleInitialHostMeasurements() {
@@ -1013,7 +1027,7 @@ watch(
});
scopeObserver.observe(element, {
attributes: true,
- attributeFilter: ["data-mjr-scope"],
+ attributeFilter: ["data-mjr-scope", "data-mjr-view-scope"],
});
} catch (e) {
console.debug?.(e);
@@ -1104,65 +1118,20 @@ function unregisterFilenameCard(card) {
}
function syncRenderedDuplicateCards(filenameKey) {
+ // Duplicate stacks are owned by `displayAssets` (useGridDisplayAssets).
+ // This used to re-derive them here from the *file name alone* (across
+ // folders) on every card ref callback and write `_mjrDupStack` /
+ // `_mjrDupMembers` (a new array each time) onto reactive assets that the
+ // template reads. The ref callback runs on every render, so each write
+ // scheduled another render: an infinite update loop that froze ComfyUI,
+ // and stacks that mixed unrelated files sharing a name. Only the DOM-side
+ // cleanup remains; it never touches reactive state.
const key = String(filenameKey || "").trim().toLowerCase();
if (!key) return;
-
const renderedSet = state.renderedFilenameMap.get(key);
- const renderedCards = Array.from(renderedSet || []);
- if (!renderedCards.length) return;
-
- const allMembers = (Array.isArray(state.assets) ? state.assets : []).filter(
- (asset) => String(asset?.filename || "").trim().toLowerCase() === key,
- );
- const count = Math.max(
- Number(state.filenameCounts?.get?.(key) || 0) || 0,
- allMembers.length,
- );
-
- // Select the best representative: prefer video_with_audio > video > image.
- const selectedAsset = selectStackRepresentative(allMembers);
- const selectedCard = renderedCards.find((card) => {
- const cardAssetId = String(card._mjrAsset?.id || "");
- const selectedId = String(selectedAsset?.id || "");
- return cardAssetId && selectedId && cardAssetId === selectedId;
- }) || renderedCards[0];
- const primaryCard = selectedCard || renderedCards[0] || null;
- const primaryAsset = primaryCard?._mjrAsset || selectedAsset || allMembers[0] || null;
- preserveRepresentativeGenerationTime(primaryAsset, allMembers);
-
- for (const card of renderedCards) {
- delete card.dataset.mjrDupHidden;
- const asset = card._mjrAsset;
- if (asset) {
- asset._mjrNameCollision = false;
- delete asset._mjrNameCollisionCount;
- delete asset._mjrNameCollisionPaths;
- asset._mjrDupStack = false;
- asset._mjrDupMembers = null;
- asset._mjrDupCount = 0;
- asset._mjrDupHidden = false;
- }
+ for (const card of renderedSet || []) {
+ if (card?.dataset?.mjrDupHidden) delete card.dataset.mjrDupHidden;
}
-
- if (!primaryCard || !primaryAsset || count < 2) {
- for (const card of renderedCards) {
- try {
- // ...
- } catch (e) {
- console.debug?.(e);
- }
- }
- return;
- }
-
- primaryAsset._mjrDupStack = true;
- primaryAsset._mjrDupMembers = allMembers.length ? allMembers : [primaryAsset];
- primaryAsset._mjrDupCount = primaryAsset._mjrDupMembers.length;
- primaryAsset._mjrNameCollision = false;
-
- // Vue owns duplicate collapsing through `displayAssets`/`renderableAssets`.
- // Hiding already-mounted flex children here leaves holes in virtual rows
- // until the asset list recomputes, and can persist with recycled rows.
}
function syncAllRenderedDuplicateCards() {
@@ -1200,8 +1169,25 @@ function bindCardRef(asset, node) {
}
}
+// One ref callback per asset id. A fresh closure on every render makes Vue
+// call the old ref with null and the new one with the element each time,
+// which re-ran bindCardRef (and its side effects) on every render.
+const cardRefCallbacks = new Map();
+
function getCardRef(asset) {
- return (node) => bindCardRef(asset, node);
+ const id = String(asset?.id ?? "").trim();
+ if (!id) return (node) => bindCardRef(asset, node);
+ let entry = cardRefCallbacks.get(id);
+ if (!entry) {
+ entry = { asset, fn: null };
+ entry.fn = (node) => {
+ bindCardRef(entry.asset, node);
+ if (!node) cardRefCallbacks.delete(id);
+ };
+ cardRefCallbacks.set(id, entry);
+ }
+ entry.asset = asset;
+ return entry.fn;
}
function isInteractiveTarget(target, currentTarget) {
diff --git a/ui/vue/composables/useVirtualGrid.ts b/ui/vue/composables/useVirtualGrid.ts
index 67caa3f6..84db0fac 100644
--- a/ui/vue/composables/useVirtualGrid.ts
+++ b/ui/vue/composables/useVirtualGrid.ts
@@ -4,7 +4,7 @@
* This centralizes virtualization helpers that were previously split
* across VirtualScroller.js and InfiniteScroll.js.
*/
-import { getFilenameKey, shouldHideSiblingAsset, unregisterHiddenSibling } from "../../features/grid/AssetCardRenderer.js";
+import { shouldHideSiblingAsset, unregisterHiddenSibling } from "../../features/grid/AssetCardRenderer.js";
import {
gridQueryHasActiveFilters,
readGridQueryFromDataset,
@@ -683,53 +683,28 @@ function _shouldKeepExistingAssetOnFilterMismatch(incomingAsset: any, existingAs
}
function dedupeAssetsByKey(state: any, deps: any) {
+ // Drop only true duplicates (same id or same asset key). Grouping assets
+ // that merely share a file name is a *display* concern owned by
+ // `buildDisplayAssets` (same folder only); doing it here by file name
+ // alone removed unrelated files in other folders from `state.assets` and
+ // stacked them under the wrong card.
const seenIds = new Set();
const seenKeys = new Set();
- const filenamePrimary = new Map();
const deduped: any[] = [];
+ let changed = false;
for (const asset of Array.isArray(state?.assets) ? state.assets : []) {
const assetId = asset?.id != null ? String(asset.id) : "";
const key = deps.assetKey(asset);
- const filenameKey = getFilenameKey(asset?.filename);
- if (assetId && seenIds.has(assetId)) continue;
- if (key && seenKeys.has(key)) continue;
-
- if (filenameKey) {
- const primary = filenamePrimary.get(filenameKey);
- if (primary) {
- const prevMembers = Array.isArray(primary._mjrDupMembers) ? primary._mjrDupMembers : [primary];
- const prevIds = new Set(prevMembers.map((a: any) => String(a?.id || "")));
- const merged = [
- ...prevMembers,
- ...[asset].filter((a) => !prevIds.has(String(a?.id || ""))),
- ];
- primary._mjrDupStack = true;
- primary._mjrDupMembers = merged;
- primary._mjrDupCount = merged.length;
- primary._mjrNameCollision = false;
- delete primary._mjrNameCollisionCount;
- delete primary._mjrNameCollisionPaths;
-
- asset._mjrNameCollision = false;
- delete asset._mjrNameCollisionCount;
- delete asset._mjrNameCollisionPaths;
- asset._mjrDupStack = false;
- asset._mjrDupMembers = null;
- asset._mjrDupCount = 0;
- continue;
- }
+ if ((assetId && seenIds.has(assetId)) || (key && seenKeys.has(key))) {
+ changed = true;
+ continue;
}
-
if (assetId) seenIds.add(assetId);
if (key) seenKeys.add(key);
- if (filenameKey) filenamePrimary.set(filenameKey, asset);
-
- asset._mjrNameCollision = false;
- delete asset._mjrNameCollisionCount;
- delete asset._mjrNameCollisionPaths;
deduped.push(asset);
}
- state.assets = deduped;
+ if (changed) state.assets = deduped;
+ // Always resync id/key sets: callers rely on it after placeholder merges.
syncAssetCollectionState(state, { assetKey: deps.assetKey });
}
diff --git a/ui/vue/grid/useGridDisplayAssets.ts b/ui/vue/grid/useGridDisplayAssets.ts
index 0a7a7ee8..344ff477 100644
--- a/ui/vue/grid/useGridDisplayAssets.ts
+++ b/ui/vue/grid/useGridDisplayAssets.ts
@@ -1,4 +1,28 @@
-import { getFilenameKey } from "../../features/grid/AssetCardRenderer.js";
+import { toRaw } from "vue";
+
+import {
+ getFilenameKey,
+ preserveRepresentativeGenerationTime,
+} from "../../features/grid/AssetCardRenderer.js";
+
+/**
+ * Single source of truth for the "duplicate stack" badge in the Vue grid.
+ *
+ * A duplicate is the same file name in the same source/root/subfolder (i.e.
+ * the same location on disk, typically duplicate index rows or case-only path
+ * variants). Files that merely share a name in *different* folders are
+ * distinct assets and are never stacked.
+ *
+ * This runs inside a `computed`, on reactive asset objects that the grid
+ * template reads (`_mjrDupStack`, `_mjrDupCount`). Every write is therefore
+ * guarded: a field is only assigned when its raw value actually differs, and
+ * the members array keeps its identity while membership is unchanged.
+ * Unconditional writes (a fresh array each pass, false->true flips) re-trigger
+ * the render that called us; in a production build Vue has no recursion
+ * limit, so that loop froze the whole ComfyUI tab.
+ */
+
+const DUP_FIELDS_TO_DELETE = ["_mjrNameCollisionCount", "_mjrNameCollisionPaths"] as const;
export function getDisplayGroupKey(asset: Record | null | undefined): string {
const filenameKey = getFilenameKey(asset?.filename);
@@ -13,54 +37,122 @@ export function isRenderableAsset(asset: any): boolean {
return !!asset;
}
-export function buildDisplayAssets(assets: any[]): Record[] {
+function setIfChanged(asset: any, key: string, value: unknown): void {
+ const raw = toRaw(asset);
+ if (raw?.[key] !== value) asset[key] = value;
+}
+
+function deleteIfPresent(asset: any, key: string): void {
+ const raw = toRaw(asset);
+ if (raw && Object.prototype.hasOwnProperty.call(raw, key)) delete asset[key];
+}
+
+function sameMembers(previous: unknown, next: any[]): boolean {
+ if (!Array.isArray(previous) || previous.length !== next.length) return false;
+ for (let i = 0; i < next.length; i++) {
+ if (toRaw(previous[i]) !== toRaw(next[i])) return false;
+ }
+ return true;
+}
+
+function clearDuplicateMarkers(asset: any): void {
+ setIfChanged(asset, "_mjrNameCollision", false);
+ for (const key of DUP_FIELDS_TO_DELETE) deleteIfPresent(asset, key);
+ setIfChanged(asset, "_mjrDupStack", false);
+ setIfChanged(asset, "_mjrDupMembers", null);
+ setIfChanged(asset, "_mjrDupCount", 0);
+}
+
+function markRepresentative(rep: any, bucket: any[]): void {
+ for (const key of DUP_FIELDS_TO_DELETE) deleteIfPresent(rep, key);
+ setIfChanged(rep, "_mjrNameCollision", false);
+ setIfChanged(rep, "_mjrDupStack", true);
+ if (!sameMembers(toRaw(rep)?._mjrDupMembers, bucket)) {
+ rep._mjrDupMembers = bucket.slice();
+ }
+ setIfChanged(rep, "_mjrDupCount", bucket.length);
+ // Only copies a value onto an empty field, so it is idempotent.
+ preserveRepresentativeGenerationTime(rep, bucket);
+}
+
+export function buildDisplayAssets(
+ assets: any[],
+ { collapseDuplicates = true }: { collapseDuplicates?: boolean } = {},
+): Record[] {
const list = Array.isArray(assets) ? assets : [];
- const buckets = new Map();
+ if (!collapseDuplicates) {
+ // e.g. the "Duplicates - N copies" view: show every copy individually.
+ const output: any[] = [];
+ for (const asset of list) {
+ if (!asset) continue;
+ clearDuplicateMarkers(asset);
+ output.push(asset);
+ }
+ return output;
+ }
+
+ const buckets = new Map();
const output: any[] = [];
for (const asset of list) {
if (!asset) continue;
- const filenameKey = getDisplayGroupKey(asset);
- if (!filenameKey) {
- asset._mjrNameCollision = false;
- delete asset._mjrNameCollisionCount;
- delete asset._mjrNameCollisionPaths;
- asset._mjrDupStack = false;
- asset._mjrDupMembers = null;
- asset._mjrDupCount = 0;
+ const groupKey = getDisplayGroupKey(asset);
+ if (!groupKey) {
+ clearDuplicateMarkers(asset);
output.push(asset);
continue;
}
- let bucket = buckets.get(filenameKey);
+ let bucket = buckets.get(groupKey);
if (!bucket) {
bucket = [];
- buckets.set(filenameKey, bucket);
+ buckets.set(groupKey, bucket);
output.push(asset);
}
bucket.push(asset);
}
for (const bucket of buckets.values()) {
+ const rep = bucket[0];
for (const member of bucket) {
- member._mjrNameCollision = false;
- delete member._mjrNameCollisionCount;
- delete member._mjrNameCollisionPaths;
- member._mjrDupStack = false;
- member._mjrDupMembers = null;
- member._mjrDupCount = 0;
- }
- if (bucket.length >= 2) {
- const rep = bucket[0];
- rep._mjrDupStack = true;
- rep._mjrDupMembers = bucket.slice();
- rep._mjrDupCount = bucket.length;
+ if (member !== rep || bucket.length < 2) clearDuplicateMarkers(member);
}
+ if (bucket.length >= 2) markRepresentative(rep, bucket);
}
return output;
}
export function getRenderableAssets(assets: unknown[]): Record[] {
- return buildDisplayAssets(assets).filter(isRenderableAsset);
+ return buildDisplayAssets(assets as any[]).filter(isRenderableAsset);
+}
+
+/**
+ * Plain, cycle-free copies of a duplicate stack's members for the
+ * "Duplicates" view. The representative lists itself in `_mjrDupMembers`, so
+ * handing the live objects to another view (Pinia state, a second grid) would
+ * share and re-mutate the same reactive graph.
+ */
+export function toDuplicateGroupMembers(members: unknown): Record[] {
+ const list = Array.isArray(members) ? members : [];
+ const out: Record[] = [];
+ const seen = new Set();
+ for (const member of list) {
+ if (!member || typeof member !== "object") continue;
+ const copy: Record = { ...(toRaw(member) as Record) };
+ delete copy._mjrDupMembers;
+ delete copy._mjrDupStack;
+ delete copy._mjrDupCount;
+ delete copy._mjrDupHidden;
+ delete copy._mjrNameCollision;
+ delete copy._mjrNameCollisionCount;
+ delete copy._mjrNameCollisionPaths;
+ const id = String(copy.id ?? "");
+ if (id) {
+ if (seen.has(id)) continue;
+ seen.add(id);
+ }
+ out.push(copy);
+ }
+ return out;
}