diff --git a/js/assets/channel-icon.png b/js/assets/channel-icon.png
new file mode 100644
index 00000000..ca8d592a
Binary files /dev/null and b/js/assets/channel-icon.png differ
diff --git a/js/assets/guides-icon.png b/js/assets/guides-icon.png
new file mode 100644
index 00000000..4b5c0a42
Binary files /dev/null and b/js/assets/guides-icon.png differ
diff --git a/js/components/VideoControls.js b/js/components/VideoControls.js
index f3d4beb5..d7cdbc34 100644
--- a/js/components/VideoControls.js
+++ b/js/components/VideoControls.js
@@ -302,6 +302,7 @@ export function mountVideoControls(video, opts = {}) {
const controls = document.createElement("div");
controls.className = `mjr-video-controls mjr-video-controls--${variant}`;
if (isViewerBar) controls.classList.add("mjr-video-controls--modern");
+ controls.dataset.mjrLayout = "regular";
controls.setAttribute("role", "group");
controls.setAttribute(
"aria-label",
@@ -686,6 +687,36 @@ export function mountVideoControls(video, opts = {}) {
console.debug?.(e);
}
});
+
+ const applyResponsiveLayout = () => {
+ try {
+ const width = Number(hostEl?.clientWidth) || Number(controls?.clientWidth) || 0;
+ let layout = "regular";
+ if (width > 0 && width < 560) layout = "stacked";
+ else if (width > 0 && width < 860) layout = "compact";
+ controls.dataset.mjrLayout = layout;
+ } catch (e) {
+ console.debug?.(e);
+ }
+ };
+
+ applyResponsiveLayout();
+
+ try {
+ if (typeof ResizeObserver === "function" && hostEl) {
+ const ro = new ResizeObserver(() => applyResponsiveLayout());
+ ro.observe(hostEl);
+ unsubs.push(() => {
+ try {
+ ro.disconnect();
+ } catch (e) {
+ console.debug?.(e);
+ }
+ });
+ }
+ } catch (e) {
+ console.debug?.(e);
+ }
// Must NOT run in capture phase, otherwise it blocks pointerdown on child controls
// like the draggable In/Out handles. We stop bubbling instead, and rely on the
// window-capture guards below to prevent viewer pan/zoom handlers.
diff --git a/js/entry.js b/js/entry.js
index 5942dffb..800e30b8 100644
--- a/js/entry.js
+++ b/js/entry.js
@@ -366,12 +366,12 @@ app.registerExtension({
// 8b. Proactive early fetch — start the first assets page in the background
// so the data is ready (or already in-flight) when the user opens the
- // sidebar. A 4-second delay lets ComfyUI finish its own startup work
- // and the backend DB warm-up to settle before we hit /mjr/am/list.
+ // sidebar. 800ms lets ComfyUI finish registering extensions before we
+ // hit /mjr/am/list (was 4000ms — too long, caused visible blank grid).
// startEarlyFetch() is a no-op when ComfyUI is executing a prompt.
setTimeout(() => {
startEarlyFetch();
- }, 4000);
+ }, 800);
// 9. WebSocket / realtime listeners.
void setupApiListeners(runtimeApp, executionRuntime).catch((e) =>
diff --git a/js/features/panel/panelRuntime.js b/js/features/panel/panelRuntime.js
index 62f0d6bd..6a51e6c4 100644
--- a/js/features/panel/panelRuntime.js
+++ b/js/features/panel/panelRuntime.js
@@ -1086,7 +1086,7 @@ async function _mountPanelRuntimeImpl(container, { useComfyThemeUI = true, exter
} catch (e) { console.debug?.(e); }
_autoLoadTimer =
- assetsQueryController?.scheduleAutoLoad?.(initialLoadPromise, 2000) ?? null;
+ assetsQueryController?.scheduleAutoLoad?.(initialLoadPromise, 300) ?? null;
const renderDuration = endTimer("panelRender", "gridRender");
trackGridRender(renderDuration);
diff --git a/js/features/viewer/FloatingViewer.impl.js b/js/features/viewer/FloatingViewer.impl.js
index ebdb7651..2d228dc6 100644
--- a/js/features/viewer/FloatingViewer.impl.js
+++ b/js/features/viewer/FloatingViewer.impl.js
@@ -90,7 +90,11 @@ import { disposeFloatingViewerProgressBar } from "./floatingViewerProgress.js";
function _hasSimplePlayerControls(mediaEl) {
try {
- return !!mediaEl?.classList?.contains("mjr-mfv-simple-player");
+ return (
+ !!mediaEl?.classList?.contains("mjr-mfv-simple-player")
+ || !!mediaEl?.classList?.contains("mjr-mfv-player-host")
+ || !!mediaEl?.querySelector?.(".mjr-video-controls, .mjr-mfv-simple-player-controls")
+ );
} catch (e) {
console.debug?.(e);
return false;
@@ -183,6 +187,14 @@ export class FloatingViewer {
this._progressCurrentNodeId = null;
this._docClickHost = null;
this._handleDocClick = null;
+ this._mediaControlHandles = [];
+ this._layoutObserver = null;
+ this._channel = "rgb";
+ this._exposureEV = 0;
+ this._gridMode = 0;
+ this._overlayMaskEnabled = false;
+ this._overlayMaskOpacity = 0.65;
+ this._overlayFormat = "image";
}
_dispatchControllerAction(methodName, fallbackEventType) {
@@ -387,6 +399,223 @@ export class FloatingViewer {
this._dragging ? "mjr-mfv-content--grabbing" : "mjr-mfv-content--grab",
);
}
+ this._applyMediaToneControls();
+ this._redrawOverlayGuides();
+ }
+
+ _ensureToneFilterDefs() {
+ if (this._toneFilterDefsEl?.isConnected) return this._toneFilterDefsEl;
+ const svgNs = "http://www.w3.org/2000/svg";
+ const svg = document.createElementNS(svgNs, "svg");
+ svg.setAttribute("aria-hidden", "true");
+ svg.style.position = "absolute";
+ svg.style.width = "0";
+ svg.style.height = "0";
+ svg.style.pointerEvents = "none";
+ const defs = document.createElementNS(svgNs, "defs");
+ const filters = [
+ ["mjr-mfv-ch-r", "1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0"],
+ ["mjr-mfv-ch-g", "0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0"],
+ ["mjr-mfv-ch-b", "0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0"],
+ ["mjr-mfv-ch-a", "0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0"],
+ ["mjr-mfv-ch-l", "0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0"],
+ ];
+ for (const [id, values] of filters) {
+ const filter = document.createElementNS(svgNs, "filter");
+ filter.setAttribute("id", id);
+ const matrix = document.createElementNS(svgNs, "feColorMatrix");
+ matrix.setAttribute("type", "matrix");
+ matrix.setAttribute("values", values);
+ filter.appendChild(matrix);
+ defs.appendChild(filter);
+ }
+ svg.appendChild(defs);
+ this.element?.appendChild(svg);
+ this._toneFilterDefsEl = svg;
+ return svg;
+ }
+
+ _applyMediaToneControls() {
+ this._ensureToneFilterDefs();
+ if (!this._contentEl) return;
+ const channel = String(this._channel || "rgb");
+ const exposureScale = Math.pow(2, Number(this._exposureEV) || 0);
+ const channelFilter =
+ channel === "rgb" ? "" : `url(#mjr-mfv-ch-${channel})`;
+ const brightnessFilter =
+ Math.abs(exposureScale - 1) < 0.0001 ? "" : `brightness(${exposureScale})`;
+ const filterValue = [channelFilter, brightnessFilter].filter(Boolean).join(" ").trim();
+ const mediaEls = this._contentEl.querySelectorAll?.(".mjr-mfv-media") || [];
+ for (const el of mediaEls) {
+ try {
+ el.style.filter = filterValue || "";
+ } catch (e) {
+ console.debug?.(e);
+ }
+ }
+ }
+
+ _getOverlayAspect(format, mediaEl, panelRect) {
+ try {
+ const f = String(format || "image");
+ if (f === "image") {
+ const nw =
+ Number(mediaEl?.videoWidth)
+ || Number(mediaEl?.naturalWidth)
+ || Number(panelRect?.width)
+ || 1;
+ const nh =
+ Number(mediaEl?.videoHeight)
+ || Number(mediaEl?.naturalHeight)
+ || Number(panelRect?.height)
+ || 1;
+ const a = nw / nh;
+ return Number.isFinite(a) && a > 0 ? a : 1;
+ }
+ if (f === "16:9") return 16 / 9;
+ if (f === "9:16") return 9 / 16;
+ if (f === "1:1") return 1;
+ if (f === "4:3") return 4 / 3;
+ if (f === "2.39") return 2.39;
+ } catch (e) {
+ console.debug?.(e);
+ }
+ return 1;
+ }
+
+ _fitAspectInBox(boxW, boxH, aspect) {
+ try {
+ const bw = Number(boxW) || 0;
+ const bh = Number(boxH) || 0;
+ const a = Number(aspect) || 1;
+ if (!(bw > 0 && bh > 0 && a > 0)) return { x: 0, y: 0, w: bw, h: bh };
+ const boxA = bw / bh;
+ let w = bw;
+ let h = bh;
+ if (a >= boxA) {
+ h = bw / a;
+ } else {
+ w = bh * a;
+ }
+ return { x: (bw - w) / 2, y: (bh - h) / 2, w, h };
+ } catch (e) {
+ console.debug?.(e);
+ return { x: 0, y: 0, w: Number(boxW) || 0, h: Number(boxH) || 0 };
+ }
+ }
+
+ _drawMaskOutside(ctx, canvas, rects, alpha) {
+ try {
+ const a = Math.max(0, Math.min(0.92, Number(alpha) || 0));
+ if (!(a > 0)) return;
+ ctx.save();
+ ctx.fillStyle = `rgba(0,0,0,${a})`;
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
+ ctx.globalCompositeOperation = "destination-out";
+ for (const r of rects) {
+ if (!r || !(r.w > 1 && r.h > 1)) continue;
+ ctx.fillRect(r.x, r.y, r.w, r.h);
+ }
+ ctx.restore();
+ } catch (e) {
+ console.debug?.(e);
+ }
+ }
+
+ _redrawOverlayGuides() {
+ const canvas = this._overlayCanvas;
+ const host = this._contentEl;
+ if (!canvas || !host) return;
+ const ctx = canvas.getContext?.("2d");
+ if (!ctx) return;
+
+ const dpr = Math.max(1, Math.min(3, Number(window.devicePixelRatio) || 1));
+ const cssW = host.clientWidth || 0;
+ const cssH = host.clientHeight || 0;
+ canvas.width = Math.max(1, Math.floor(cssW * dpr));
+ canvas.height = Math.max(1, Math.floor(cssH * dpr));
+ canvas.style.width = `${cssW}px`;
+ canvas.style.height = `${cssH}px`;
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+
+ if (!(this._gridMode || this._overlayMaskEnabled)) return;
+
+ const hostRect = host.getBoundingClientRect?.();
+ if (!hostRect) return;
+ const panels = Array.from(
+ host.querySelectorAll?.(
+ ".mjr-mfv-simple-container, .mjr-mfv-side-panel, .mjr-mfv-grid-cell, .mjr-mfv-ab-layer",
+ ) || [],
+ );
+ const panelEls = panels.length ? panels : [host];
+ const formatRects = [];
+
+ for (const panelEl of panelEls) {
+ const mediaEl = panelEl.querySelector?.(".mjr-mfv-media");
+ if (!mediaEl) continue;
+ const panelRect = panelEl.getBoundingClientRect?.();
+ if (!panelRect?.width || !panelRect?.height) continue;
+ const baseW = Number(panelRect.width) || 0;
+ const baseH = Number(panelRect.height) || 0;
+ const aspect = this._getOverlayAspect(this._overlayFormat, mediaEl, panelRect);
+ const fit = this._fitAspectInBox(baseW, baseH, aspect);
+ const centerX = (panelRect.left - hostRect.left) + baseW / 2;
+ const centerY = (panelRect.top - hostRect.top) + baseH / 2;
+ const z = Math.max(0.1, Math.min(16, Number(this._zoom) || 1));
+ const rectCss = {
+ x: centerX + fit.x * z - baseW * z / 2 + (Number(this._panX) || 0),
+ y: centerY + fit.y * z - baseH * z / 2 + (Number(this._panY) || 0),
+ w: fit.w * z,
+ h: fit.h * z,
+ };
+ formatRects.push({
+ x: rectCss.x * dpr,
+ y: rectCss.y * dpr,
+ w: rectCss.w * dpr,
+ h: rectCss.h * dpr,
+ });
+ }
+
+ if (!formatRects.length) return;
+
+ if (this._overlayMaskEnabled) {
+ this._drawMaskOutside(ctx, canvas, formatRects, this._overlayMaskOpacity);
+ ctx.save();
+ ctx.setLineDash?.([Math.max(2, 4 * dpr), Math.max(2, 3 * dpr)]);
+ ctx.strokeStyle = "rgba(255,255,255,0.22)";
+ ctx.lineWidth = Math.max(1, Math.floor(dpr));
+ for (const r of formatRects) {
+ ctx.strokeRect(r.x + 0.5, r.y + 0.5, r.w - 1, r.h - 1);
+ }
+ ctx.restore();
+ }
+
+ if (this._mode !== MFV_MODES.SIMPLE || !this._gridMode) return;
+ const rect = formatRects[0];
+ if (!rect) return;
+ ctx.save();
+ ctx.translate(rect.x, rect.y);
+ ctx.strokeStyle = "rgba(255,255,255,0.22)";
+ ctx.lineWidth = Math.max(2, Math.round(1.25 * dpr));
+ const drawLine = (x1, y1, x2, y2) => {
+ ctx.beginPath();
+ ctx.moveTo(Math.round(x1) + 0.5, Math.round(y1) + 0.5);
+ ctx.lineTo(Math.round(x2) + 0.5, Math.round(y2) + 0.5);
+ ctx.stroke();
+ };
+ if (this._gridMode === 1) {
+ drawLine(rect.w / 3, 0, rect.w / 3, rect.h);
+ drawLine((2 * rect.w) / 3, 0, (2 * rect.w) / 3, rect.h);
+ drawLine(0, rect.h / 3, rect.w, rect.h / 3);
+ drawLine(0, (2 * rect.h) / 3, rect.w, (2 * rect.h) / 3);
+ } else if (this._gridMode === 2) {
+ drawLine(rect.w / 2, 0, rect.w / 2, rect.h);
+ drawLine(0, rect.h / 2, rect.w, rect.h / 2);
+ } else if (this._gridMode === 3) {
+ ctx.strokeRect(rect.w * 0.1 + 0.5, rect.h * 0.1 + 0.5, rect.w * 0.8 - 1, rect.h * 0.8 - 1);
+ ctx.strokeRect(rect.w * 0.05 + 0.5, rect.h * 0.05 + 0.5, rect.w * 0.9 - 1, rect.h * 0.9 - 1);
+ }
+ ctx.restore();
}
/**
@@ -422,6 +651,30 @@ export class FloatingViewer {
this._applyTransform();
}
+ _bindLayoutObserver() {
+ this._unbindLayoutObserver();
+ const target = this._contentEl;
+ if (!target || typeof ResizeObserver === "undefined") return;
+ try {
+ this._layoutObserver = new ResizeObserver(() => {
+ this._applyTransform();
+ });
+ this._layoutObserver.observe(target);
+ } catch (e) {
+ console.debug?.(e);
+ this._layoutObserver = null;
+ }
+ }
+
+ _unbindLayoutObserver() {
+ try {
+ this._layoutObserver?.disconnect?.();
+ } catch (e) {
+ console.debug?.(e);
+ }
+ this._layoutObserver = null;
+ }
+
/** Bind wheel + pointer events to the clip viewport element. */
_initPanZoom(contentEl) {
this._destroyPanZoom();
@@ -434,7 +687,7 @@ export class FloatingViewer {
"wheel",
(e) => {
if (e.target?.closest?.("audio")) return;
- if (e.target?.closest?.(".mjr-mfv-simple-player-controls")) return;
+ if (e.target?.closest?.(".mjr-video-controls, .mjr-mfv-simple-player-controls")) return;
if (isModel3DInteractionTarget(e.target)) return;
const scrollableAncestor = _findScrollableAncestor(e.target, contentEl);
if (
@@ -470,7 +723,7 @@ export class FloatingViewer {
// Let native video controls and the AB divider handle their own events.
if (e.target?.closest?.("video")) return;
if (e.target?.closest?.("audio")) return;
- if (e.target?.closest?.(".mjr-mfv-simple-player-controls")) return;
+ if (e.target?.closest?.(".mjr-video-controls, .mjr-mfv-simple-player-controls")) return;
if (e.target?.closest?.(".mjr-mfv-ab-divider")) return;
if (isModel3DInteractionTarget(e.target)) return;
e.preventDefault();
@@ -521,7 +774,7 @@ export class FloatingViewer {
(e) => {
if (e.target?.closest?.("video")) return;
if (e.target?.closest?.("audio")) return;
- if (e.target?.closest?.(".mjr-mfv-simple-player-controls")) return;
+ if (e.target?.closest?.(".mjr-video-controls, .mjr-mfv-simple-player-controls")) return;
if (isModel3DInteractionTarget(e.target)) return;
const isNearFit = Math.abs(this._zoom - 1) < 0.05;
this._setMfvZoom(isNearFit ? Math.min(4, this._zoom * 4) : 1, e.clientX, e.clientY);
@@ -550,6 +803,28 @@ export class FloatingViewer {
this._compareSyncAC = null;
}
+ _destroyMediaControls() {
+ const handles = Array.isArray(this._mediaControlHandles) ? this._mediaControlHandles : [];
+ for (const handle of handles) {
+ try {
+ handle?.destroy?.();
+ } catch (e) {
+ console.debug?.(e);
+ }
+ }
+ this._mediaControlHandles = [];
+ }
+
+ _trackMediaControls(rootEl) {
+ try {
+ const handle = rootEl?._mjrMediaControlsHandle || null;
+ if (handle?.destroy) this._mediaControlHandles.push(handle);
+ } catch (e) {
+ console.debug?.(e);
+ }
+ return rootEl;
+ }
+
_initCompareSync() {
this._destroyCompareSync();
if (!this._contentEl) return;
@@ -573,6 +848,8 @@ export class FloatingViewer {
// Tear down previous panzoom bindings before clearing DOM.
this._destroyPanZoom();
this._destroyCompareSync();
+ this._destroyMediaControls();
+ const overlayCanvas = this._overlayCanvas || null;
this._contentEl.replaceChildren();
this._contentEl.style.overflow = "hidden";
@@ -591,10 +868,15 @@ export class FloatingViewer {
break;
}
+ if (overlayCanvas) {
+ this._contentEl.appendChild(overlayCanvas);
+ }
+
if (this._mediaProgressEl) {
this._contentEl.appendChild(this._mediaProgressEl);
}
+ this._applyMediaToneControls();
this._applyTransform();
this._initPanZoom(this._contentEl);
this._initCompareSync();
@@ -606,7 +888,8 @@ export class FloatingViewer {
return;
}
const mediaKind = _mediaKind(this._mediaA);
- const mediaEl = _buildMediaEl(this._mediaA);
+ const rawMediaEl = _buildMediaEl(this._mediaA);
+ const mediaEl = this._trackMediaControls?.(rawMediaEl) || rawMediaEl;
if (!mediaEl) {
this._contentEl.appendChild(_makeEmptyState("Could not load media"));
return;
@@ -631,8 +914,10 @@ export class FloatingViewer {
}
_renderAB() {
- const elA = this._mediaA ? _buildMediaEl(this._mediaA, { fill: true }) : null;
- const elB = this._mediaB ? _buildMediaEl(this._mediaB, { fill: true }) : null;
+ const rawElA = this._mediaA ? _buildMediaEl(this._mediaA, { fill: true }) : null;
+ const rawElB = this._mediaB ? _buildMediaEl(this._mediaB, { fill: true }) : null;
+ const elA = this._trackMediaControls?.(rawElA) || rawElA;
+ const elB = this._trackMediaControls?.(rawElB) || rawElB;
const kindA = this._mediaA ? _mediaKind(this._mediaA) : "";
const kindB = this._mediaB ? _mediaKind(this._mediaB) : "";
@@ -745,8 +1030,10 @@ export class FloatingViewer {
}
_renderSide() {
- const elA = this._mediaA ? _buildMediaEl(this._mediaA) : null;
- const elB = this._mediaB ? _buildMediaEl(this._mediaB) : null;
+ const rawElA = this._mediaA ? _buildMediaEl(this._mediaA) : null;
+ const rawElB = this._mediaB ? _buildMediaEl(this._mediaB) : null;
+ const elA = this._trackMediaControls?.(rawElA) || rawElA;
+ const elB = this._trackMediaControls?.(rawElB) || rawElB;
const kindA = this._mediaA ? _mediaKind(this._mediaA) : "";
const kindB = this._mediaB ? _mediaKind(this._mediaB) : "";
@@ -822,7 +1109,8 @@ export class FloatingViewer {
cell.className = "mjr-mfv-grid-cell";
if (media) {
const kind = _mediaKind(media);
- const el = _buildMediaEl(media);
+ const rawEl = _buildMediaEl(media);
+ const el = this._trackMediaControls?.(rawEl) || rawEl;
if (el) cell.appendChild(el);
else cell.appendChild(_makeEmptyState("—"));
cell.appendChild(
@@ -970,6 +1258,8 @@ export class FloatingViewer {
disposeFloatingViewerProgressBar(this);
this._destroyPanZoom();
this._destroyCompareSync();
+ this._destroyMediaControls();
+ this._unbindLayoutObserver();
this._stopEdgeResize();
this._clearPopoutCloseWatch();
try {
diff --git a/js/features/viewer/floatingViewerMedia.js b/js/features/viewer/floatingViewerMedia.js
index 25442791..69472c68 100644
--- a/js/features/viewer/floatingViewerMedia.js
+++ b/js/features/viewer/floatingViewerMedia.js
@@ -4,7 +4,9 @@ import {
createModel3DMediaElement,
MODEL3D_EXTS,
} from "./model3dRenderer.js";
+import { mountUnifiedMediaControls } from "./mediaPlayer.js";
import { mountFloatingViewerSimplePlayer } from "./floatingViewerSimplePlayer.js";
+import { readAssetFps, readAssetFrameCount } from "../../utils/mediaFps.js";
const VIDEO_EXTS = new Set([".mp4", ".webm", ".mov", ".avi", ".mkv"]);
const AUDIO_EXTS = new Set([".mp3", ".wav", ".flac", ".ogg", ".m4a", ".aac", ".opus", ".wma"]);
@@ -128,6 +130,28 @@ export function buildFloatingViewerMediaElement(fileData, { fill = false } = {})
ext === ".webp" &&
Number(fileData?.duration ?? fileData?.metadata_raw?.duration ?? 0) > 0;
+ const buildPlayableMediaHost = (mediaEl, mediaKind) => {
+ const host = document.createElement("div");
+ host.className = `mjr-mfv-player-host${fill ? " mjr-mfv-player-host--fill" : ""}`;
+ host.appendChild(mediaEl);
+
+ const mounted = mountUnifiedMediaControls(mediaEl, {
+ variant: "viewer",
+ hostEl: host,
+ mediaKind,
+ initialFps: readAssetFps(fileData) || undefined,
+ initialFrameCount: readAssetFrameCount(fileData) || undefined,
+ });
+
+ try {
+ if (mounted) host._mjrMediaControlsHandle = mounted;
+ } catch (e) {
+ console.debug?.(e);
+ }
+
+ return host;
+ };
+
if (kind === "audio") {
const audio = document.createElement("audio");
audio.className = mediaClass;
@@ -143,8 +167,7 @@ export function buildFloatingViewerMediaElement(fileData, { fill = false } = {})
console.debug?.(e);
}
attemptFloatingViewerAutoplay(audio);
- const playerRoot = mountFloatingViewerSimplePlayer(audio, fileData, { kind: "audio" });
- return playerRoot || audio;
+ return buildPlayableMediaHost(audio, "audio");
}
if (kind === "video") {
@@ -156,8 +179,7 @@ export function buildFloatingViewerMediaElement(fileData, { fill = false } = {})
v.muted = true;
v.autoplay = true;
v.playsInline = true;
- const playerRoot = mountFloatingViewerSimplePlayer(v, fileData, { kind: "video" });
- return playerRoot || v;
+ return buildPlayableMediaHost(v, "video");
}
if (kind === "model3d") {
diff --git a/js/features/viewer/floatingViewerMode.js b/js/features/viewer/floatingViewerMode.js
index c09b6f34..3f1f3114 100644
--- a/js/features/viewer/floatingViewerMode.js
+++ b/js/features/viewer/floatingViewerMode.js
@@ -45,8 +45,10 @@ export function updateFloatingViewerPinUI(viewer) {
const active = viewer._pinnedSlots.has(slot);
btn.classList.toggle("is-pinned", active);
btn.setAttribute("aria-pressed", String(active));
- btn.title = active ? `Unpin ${slot}` : `Pin ${slot}`;
+ btn.title = active ? `Unpin Asset ${slot}` : `Pin Asset ${slot}`;
}
+ // Highlight pin trigger when any slot is pinned
+ viewer._pinBtn?.classList.toggle("is-on", (viewer._pinnedSlots?.size ?? 0) > 0);
}
export function updateFloatingViewerModeButtonUI(viewer) {
@@ -69,6 +71,8 @@ export function updateFloatingViewerModeButtonUI(viewer) {
viewer._modeBtn.title = tooltip;
viewer._modeBtn.setAttribute("aria-label", tooltip);
viewer._modeBtn.removeAttribute("aria-pressed");
+ // Highlight when any comparison mode is active
+ viewer._modeBtn.classList.toggle("is-on", viewer._mode !== MFV_MODES.SIMPLE);
}
export function setFloatingViewerLiveActive(viewer, active) {
diff --git a/js/features/viewer/floatingViewerUi.js b/js/features/viewer/floatingViewerUi.js
index e31b0088..e0af23bd 100644
--- a/js/features/viewer/floatingViewerUi.js
+++ b/js/features/viewer/floatingViewerUi.js
@@ -22,6 +22,100 @@ import {
sanitizePromptForDisplay,
} from "../../components/sidebar/parsers/geninfoParser.js";
+// ---------------------------------------------------------------------------
+// Toolbar icon-dropdown helper
+// ---------------------------------------------------------------------------
+function _mkIconDrop(triggerHtml, title, items, viewer) {
+ const wrap = document.createElement("div");
+ wrap.className = "mjr-mfv-idrop";
+
+ const trigger = document.createElement("button");
+ trigger.type = "button";
+ trigger.className = "mjr-icon-btn mjr-mfv-idrop-trigger";
+ trigger.title = title || "";
+ trigger.innerHTML = triggerHtml;
+ trigger.setAttribute("aria-haspopup", "listbox");
+ trigger.setAttribute("aria-expanded", "false");
+ wrap.appendChild(trigger);
+
+ const menu = document.createElement("div");
+ menu.className = "mjr-mfv-idrop-menu";
+ menu.setAttribute("role", "listbox");
+ wrap.appendChild(menu);
+
+ // Hidden select: existing event handlers read .value from it and bind "change"
+ const hiddenSel = document.createElement("select");
+ hiddenSel.style.cssText = "position:absolute;opacity:0;pointer-events:none;width:0;height:0;overflow:hidden;";
+ wrap.appendChild(hiddenSel);
+
+ const itemEls = [];
+ for (const item of items) {
+ const opt = document.createElement("option");
+ opt.value = String(item.value);
+ hiddenSel.appendChild(opt);
+
+ const row = document.createElement("button");
+ row.type = "button";
+ row.className = "mjr-mfv-idrop-item";
+ row.setAttribute("role", "option");
+ row.dataset.value = String(item.value);
+ row.innerHTML = item.html ?? String(item.label ?? item.value);
+ menu.appendChild(row);
+ itemEls.push(row);
+ }
+
+ const _closeMenu = () => {
+ menu.classList.remove("is-open");
+ trigger.setAttribute("aria-expanded", "false");
+ };
+
+ trigger.addEventListener("click", (e) => {
+ e.stopPropagation();
+ const isOpen = menu.classList.contains("is-open");
+ // Close all other open icon-dropdowns in this viewer
+ viewer?.element?.querySelectorAll?.(".mjr-mfv-idrop-menu.is-open").forEach(m => m.classList.remove("is-open"));
+ if (!isOpen) {
+ menu.classList.add("is-open");
+ trigger.setAttribute("aria-expanded", "true");
+ }
+ });
+
+ menu.addEventListener("click", (e) => {
+ const row = e.target.closest(".mjr-mfv-idrop-item");
+ if (!row) return;
+ hiddenSel.value = row.dataset.value;
+ hiddenSel.dispatchEvent(new Event("change", { bubbles: true }));
+ itemEls.forEach(i => {
+ i.classList.toggle("is-selected", i === row);
+ i.setAttribute("aria-selected", String(i === row));
+ });
+ _closeMenu();
+ });
+
+ const selectItem = (val) => {
+ hiddenSel.value = String(val);
+ itemEls.forEach(i => {
+ i.classList.toggle("is-selected", i.dataset.value === String(val));
+ i.setAttribute("aria-selected", String(i.dataset.value === String(val)));
+ });
+ };
+
+ return { wrap, trigger, menu, select: hiddenSel, selectItem };
+}
+
+// Channel letter coloring
+const _CH_COLOR = { rgb: "#e0e0e0", r: "#ff5555", g: "#44dd66", b: "#5599ff", a: "#ffffff", l: "#bbbbbb" };
+const _CH_LABEL = { rgb: "RGB", r: "R", g: "G", b: "B", a: "A", l: "L" };
+const _CH_WEIGHT = { rgb: "500", r: "700", g: "700", b: "700", a: "700", l: "400" };
+
+function _channelHtml(ch) {
+ const k = String(ch || "rgb").toLowerCase();
+ const color = _CH_COLOR[k] || "#e0e0e0";
+ const label = _CH_LABEL[k] || k.toUpperCase();
+ const fw = _CH_WEIGHT[k] || "500";
+ return `${label}`;
+}
+
export function renderFloatingViewer(viewer) {
const el = document.createElement("div");
el.className = "mjr-mfv";
@@ -42,6 +136,9 @@ export function renderFloatingViewer(viewer) {
viewer._contentEl = document.createElement("div");
viewer._contentEl.className = "mjr-mfv-content";
viewer._contentWrapper.appendChild(viewer._contentEl);
+ viewer._overlayCanvas = document.createElement("canvas");
+ viewer._overlayCanvas.className = "mjr-mfv-overlay-canvas";
+ viewer._contentEl.appendChild(viewer._overlayCanvas);
viewer._contentEl.appendChild(buildFloatingViewerMediaProgressOverlay(viewer));
viewer._sidebar = new WorkflowSidebar({
@@ -56,6 +153,7 @@ export function renderFloatingViewer(viewer) {
viewer._rebindControlHandlers();
viewer._bindPanelInteractions();
viewer._bindDocumentUiHandlers();
+ viewer._bindLayoutObserver?.();
viewer._onSidebarPosChanged = (e) => {
if (e?.detail?.key === "viewer.mfvSidebarPosition") {
@@ -75,7 +173,7 @@ export function buildFloatingViewerHeader(viewer) {
const title = document.createElement("span");
title.className = "mjr-mfv-header-title";
title.id = viewer._titleId;
- title.textContent = "〽️ Majoor Viewer Lite";
+ title.textContent = "〽️ Majoor Floating Viewer";
const closeBtn = document.createElement("button");
viewer._closeBtn = closeBtn;
@@ -93,6 +191,37 @@ export function buildFloatingViewerHeader(viewer) {
}
export function buildFloatingViewerToolbar(viewer) {
+ const createMiniSelect = (title, options) => {
+ const s = document.createElement("select");
+ s.className = "mjr-mfv-toolbar-select";
+ s.title = title || "";
+ for (const option of options || []) {
+ const opt = document.createElement("option");
+ opt.value = String(option.value);
+ opt.textContent = String(option.label);
+ s.appendChild(opt);
+ }
+ return s;
+ };
+
+ const createMiniRange = (title, { min, max, step, value } = {}) => {
+ const wrap = document.createElement("div");
+ wrap.className = "mjr-mfv-toolbar-range";
+ const input = document.createElement("input");
+ input.type = "range";
+ input.min = String(min);
+ input.max = String(max);
+ input.step = String(step);
+ input.value = String(value);
+ input.title = title || "";
+ const out = document.createElement("span");
+ out.className = "mjr-mfv-toolbar-range-out";
+ out.textContent = Number(value).toFixed(2);
+ wrap.appendChild(input);
+ wrap.appendChild(out);
+ return { wrap, input, out };
+ };
+
const bar = document.createElement("div");
bar.className = "mjr-mfv-toolbar";
@@ -102,24 +231,448 @@ export function buildFloatingViewerToolbar(viewer) {
viewer._updateModeBtnUI();
bar.appendChild(viewer._modeBtn);
- viewer._pinGroup = document.createElement("div");
- viewer._pinGroup.className = "mjr-mfv-pin-group";
- viewer._pinGroup.setAttribute("role", "group");
- viewer._pinGroup.setAttribute("aria-label", "Pin References");
+ // Pin: icon button + sort-style context menu popover (stays open for multi-toggle)
+ const pinBtn = document.createElement("button");
+ pinBtn.type = "button";
+ pinBtn.className = "mjr-icon-btn mjr-mfv-pin-trigger";
+ pinBtn.title = "Pin slots A/B/C/D";
+ pinBtn.setAttribute("aria-haspopup", "dialog");
+ pinBtn.setAttribute("aria-expanded", "false");
+ pinBtn.innerHTML = '';
+ bar.appendChild(pinBtn);
+
+ const pinPopover = document.createElement("div");
+ pinPopover.className = "mjr-mfv-pin-popover";
+ viewer.element.appendChild(pinPopover);
+
+ const pinMenuDiv = document.createElement("div");
+ pinMenuDiv.className = "mjr-menu";
+ pinMenuDiv.style.cssText = "display:grid;gap:4px;";
+ pinMenuDiv.setAttribute("role", "group");
+ pinMenuDiv.setAttribute("aria-label", "Pin References");
+ pinPopover.appendChild(pinMenuDiv);
+
+ viewer._pinGroup = pinMenuDiv;
viewer._pinBtns = {};
for (const slot of ["A", "B", "C", "D"]) {
const btn = document.createElement("button");
btn.type = "button";
- btn.className = "mjr-mfv-pin-btn";
- btn.textContent = slot;
+ btn.className = "mjr-menu-item mjr-mfv-pin-btn";
btn.dataset.slot = slot;
- btn.title = `Pin ${slot}`;
+ btn.title = `Pin Asset ${slot}`;
btn.setAttribute("aria-pressed", "false");
+
+ const lbl = document.createElement("span");
+ lbl.className = "mjr-menu-item-label";
+ lbl.textContent = `Asset ${slot}`;
+
+ const chk = document.createElement("i");
+ chk.className = "pi pi-map-marker mjr-menu-item-check";
+ chk.style.opacity = "0";
+
+ btn.appendChild(lbl);
+ btn.appendChild(chk);
+ pinMenuDiv.appendChild(btn);
viewer._pinBtns[slot] = btn;
- viewer._pinGroup.appendChild(btn);
}
viewer._updatePinUI();
- bar.appendChild(viewer._pinGroup);
+ viewer._pinBtn = pinBtn;
+ viewer._pinPopover = pinPopover;
+
+ const _openPinPopover = () => {
+ const btnRect = pinBtn.getBoundingClientRect();
+ const parentRect = viewer.element.getBoundingClientRect();
+ pinPopover.style.left = `${btnRect.left - parentRect.left}px`;
+ pinPopover.style.top = `${btnRect.bottom - parentRect.top + 4}px`;
+ pinPopover.classList.add("is-open");
+ pinBtn.setAttribute("aria-expanded", "true");
+ };
+ viewer._closePinPopover = () => {
+ pinPopover.classList.remove("is-open");
+ pinBtn.setAttribute("aria-expanded", "false");
+ };
+ pinBtn.addEventListener("click", (e) => {
+ e.stopPropagation();
+ if (pinPopover.classList.contains("is-open")) {
+ viewer._closePinPopover();
+ } else {
+ viewer._closeAllToolbarPopovers?.();
+ _openPinPopover();
+ }
+ });
+ // Note: pinMenuDiv click is handled by rebindFloatingViewerControlHandlers via event delegation.
+ // Dropdown stays open to allow toggling multiple slots.
+
+ // Guides: icon button + sort-style context menu popover
+ const guideBtn = document.createElement("button");
+ guideBtn.type = "button";
+ guideBtn.className = "mjr-icon-btn mjr-mfv-guides-trigger";
+ guideBtn.title = "Guides";
+ guideBtn.setAttribute("aria-haspopup", "listbox");
+ guideBtn.setAttribute("aria-expanded", "false");
+ const guideImg = document.createElement("img");
+ guideImg.src = new URL("../../assets/guides-icon.png", import.meta.url).href;
+ guideImg.className = "mjr-mfv-guides-icon";
+ guideImg.alt = "";
+ guideImg.setAttribute("aria-hidden", "true");
+ guideBtn.appendChild(guideImg);
+ bar.appendChild(guideBtn);
+
+ const guidePopover = document.createElement("div");
+ guidePopover.className = "mjr-mfv-guides-popover";
+ viewer.element.appendChild(guidePopover);
+
+ const guideMenu = document.createElement("div");
+ guideMenu.className = "mjr-menu";
+ guideMenu.style.cssText = "display:grid;gap:4px;";
+ guidePopover.appendChild(guideMenu);
+
+ const guideHiddenSel = document.createElement("select");
+ guideHiddenSel.style.cssText = "position:absolute;opacity:0;pointer-events:none;width:0;height:0;overflow:hidden;";
+ guidePopover.appendChild(guideHiddenSel);
+
+ const _GUIDE_OPTS = [
+ { value: "0", label: "Off" },
+ { value: "1", label: "Thirds" },
+ { value: "2", label: "Center" },
+ { value: "3", label: "Safe" },
+ ];
+ const _initGuide = String(viewer._gridMode || 0);
+ const guideItemEls = [];
+ for (const opt of _GUIDE_OPTS) {
+ const optEl = document.createElement("option");
+ optEl.value = opt.value;
+ guideHiddenSel.appendChild(optEl);
+
+ const item = document.createElement("button");
+ item.type = "button";
+ item.className = "mjr-menu-item";
+ item.dataset.value = opt.value;
+
+ const lbl = document.createElement("span");
+ lbl.className = "mjr-menu-item-label";
+ lbl.textContent = opt.label;
+
+ const chk = document.createElement("i");
+ chk.className = "pi pi-check mjr-menu-item-check";
+ chk.style.opacity = opt.value === _initGuide ? "1" : "0";
+
+ item.appendChild(lbl);
+ item.appendChild(chk);
+ guideMenu.appendChild(item);
+ guideItemEls.push(item);
+ if (opt.value === _initGuide) item.classList.add("is-active");
+ }
+ guideHiddenSel.value = _initGuide;
+ guideBtn.classList.toggle("is-on", _initGuide !== "0");
+ viewer._guidesSelect = guideHiddenSel;
+ viewer._guideBtn = guideBtn;
+ viewer._guidePopover = guidePopover;
+
+ const _openGuidePopover = () => {
+ const btnRect = guideBtn.getBoundingClientRect();
+ const parentRect = viewer.element.getBoundingClientRect();
+ guidePopover.style.left = `${btnRect.left - parentRect.left}px`;
+ guidePopover.style.top = `${btnRect.bottom - parentRect.top + 4}px`;
+ guidePopover.classList.add("is-open");
+ guideBtn.setAttribute("aria-expanded", "true");
+ };
+ viewer._closeGuidePopover = () => {
+ guidePopover.classList.remove("is-open");
+ guideBtn.setAttribute("aria-expanded", "false");
+ };
+ guideBtn.addEventListener("click", (e) => {
+ e.stopPropagation();
+ if (guidePopover.classList.contains("is-open")) {
+ viewer._closeGuidePopover();
+ } else {
+ viewer._closeAllToolbarPopovers?.();
+ _openGuidePopover();
+ }
+ });
+ guideMenu.addEventListener("click", (e) => {
+ const item = e.target.closest(".mjr-menu-item");
+ if (!item) return;
+ const val = item.dataset.value;
+ guideHiddenSel.value = val;
+ guideHiddenSel.dispatchEvent(new Event("change", { bubbles: true }));
+ guideItemEls.forEach(it => {
+ const active = it.dataset.value === val;
+ it.classList.toggle("is-active", active);
+ it.querySelector(".mjr-menu-item-check").style.opacity = active ? "1" : "0";
+ });
+ guideBtn.classList.toggle("is-on", val !== "0");
+ viewer._closeGuidePopover();
+ });
+
+ // Channel: icon button + sort-style context menu popover
+ const _initCh = String(viewer._channel || "rgb");
+ const chBtn = document.createElement("button");
+ chBtn.type = "button";
+ chBtn.className = "mjr-icon-btn mjr-mfv-ch-trigger";
+ chBtn.title = "Channel";
+ chBtn.setAttribute("aria-haspopup", "listbox");
+ chBtn.setAttribute("aria-expanded", "false");
+ const chImg = document.createElement("img");
+ chImg.src = new URL("../../assets/channel-icon.png", import.meta.url).href;
+ chImg.className = "mjr-mfv-ch-icon";
+ chImg.alt = "";
+ chImg.setAttribute("aria-hidden", "true");
+ chBtn.appendChild(chImg);
+ bar.appendChild(chBtn);
+
+ const _updateChBtnDisplay = (val) => {
+ if (!val || val === "rgb") {
+ chBtn.replaceChildren(chImg);
+ } else {
+ const color = _CH_COLOR[val] || "#e0e0e0";
+ const weight = _CH_WEIGHT[val] || "500";
+ const label = _CH_LABEL[val] || val.toUpperCase();
+ const span = document.createElement("span");
+ span.className = "mjr-mfv-ch-label";
+ span.style.color = color;
+ span.style.fontWeight = weight;
+ span.textContent = label;
+ chBtn.replaceChildren(span);
+ }
+ };
+
+ const chPopover = document.createElement("div");
+ chPopover.className = "mjr-mfv-ch-popover";
+ viewer.element.appendChild(chPopover);
+
+ const chMenu = document.createElement("div");
+ chMenu.className = "mjr-menu";
+ chMenu.style.cssText = "display:grid;gap:4px;";
+ chPopover.appendChild(chMenu);
+
+ const chHiddenSel = document.createElement("select");
+ chHiddenSel.style.cssText = "position:absolute;opacity:0;pointer-events:none;width:0;height:0;overflow:hidden;";
+ chPopover.appendChild(chHiddenSel);
+
+ const _CH_OPTS = [
+ { value: "rgb", color: "#e0e0e0", weight: "500", label: "RGB" },
+ { value: "r", color: "#ff5555", weight: "700", label: "R" },
+ { value: "g", color: "#44dd66", weight: "700", label: "G" },
+ { value: "b", color: "#5599ff", weight: "700", label: "B" },
+ { value: "a", color: "#ffffff", weight: "700", label: "A" },
+ { value: "l", color: "#bbbbbb", weight: "400", label: "L" },
+ ];
+ const chItemEls = [];
+ for (const opt of _CH_OPTS) {
+ const optEl = document.createElement("option");
+ optEl.value = opt.value;
+ chHiddenSel.appendChild(optEl);
+
+ const item = document.createElement("button");
+ item.type = "button";
+ item.className = "mjr-menu-item";
+ item.dataset.value = opt.value;
+
+ const lbl = document.createElement("span");
+ lbl.className = "mjr-menu-item-label";
+ const colored = document.createElement("span");
+ colored.textContent = opt.label;
+ colored.style.color = opt.color;
+ colored.style.fontWeight = opt.weight;
+ lbl.appendChild(colored);
+
+ const chk = document.createElement("i");
+ chk.className = "pi pi-check mjr-menu-item-check";
+ chk.style.opacity = opt.value === _initCh ? "1" : "0";
+
+ item.appendChild(lbl);
+ item.appendChild(chk);
+ chMenu.appendChild(item);
+ chItemEls.push(item);
+ if (opt.value === _initCh) item.classList.add("is-active");
+ }
+ chHiddenSel.value = _initCh;
+ _updateChBtnDisplay(_initCh);
+ chBtn.classList.toggle("is-on", _initCh !== "rgb");
+ viewer._channelSelect = chHiddenSel;
+ viewer._chBtn = chBtn;
+ viewer._chPopover = chPopover;
+
+ const _openChPopover = () => {
+ const btnRect = chBtn.getBoundingClientRect();
+ const parentRect = viewer.element.getBoundingClientRect();
+ chPopover.style.left = `${btnRect.left - parentRect.left}px`;
+ chPopover.style.top = `${btnRect.bottom - parentRect.top + 4}px`;
+ chPopover.classList.add("is-open");
+ chBtn.setAttribute("aria-expanded", "true");
+ };
+ viewer._closeChPopover = () => {
+ chPopover.classList.remove("is-open");
+ chBtn.setAttribute("aria-expanded", "false");
+ };
+ chBtn.addEventListener("click", (e) => {
+ e.stopPropagation();
+ if (chPopover.classList.contains("is-open")) {
+ viewer._closeChPopover();
+ } else {
+ viewer._closeAllToolbarPopovers?.();
+ _openChPopover();
+ }
+ });
+ chMenu.addEventListener("click", (e) => {
+ const item = e.target.closest(".mjr-menu-item");
+ if (!item) return;
+ const val = item.dataset.value;
+ chHiddenSel.value = val;
+ chHiddenSel.dispatchEvent(new Event("change", { bubbles: true }));
+ chItemEls.forEach(it => {
+ const active = it.dataset.value === val;
+ it.classList.toggle("is-active", active);
+ it.querySelector(".mjr-menu-item-check").style.opacity = active ? "1" : "0";
+ });
+ _updateChBtnDisplay(val);
+ chBtn.classList.toggle("is-on", val !== "rgb");
+ viewer._closeChPopover();
+ });
+
+ // Mutual exclusion: close all toolbar popovers (called before any one opens)
+ viewer._closeAllToolbarPopovers = () => {
+ viewer._closeChPopover?.();
+ viewer._closeGuidePopover?.();
+ viewer._closePinPopover?.();
+ viewer._closeFormatPopover?.();
+ viewer._closeGenDropdown?.();
+ };
+
+ viewer._exposureCtl = createMiniRange("Exposure (EV)", {
+ min: -10,
+ max: 10,
+ step: 0.1,
+ value: Number(viewer._exposureEV || 0),
+ });
+ viewer._exposureCtl.out.textContent = `${Number(viewer._exposureEV || 0).toFixed(1)}EV`;
+ viewer._exposureCtl.out.title = "Click to reset to 0 EV";
+ viewer._exposureCtl.out.style.cursor = "pointer";
+ viewer._exposureCtl.wrap.classList.toggle("is-active", (viewer._exposureEV || 0) !== 0);
+ bar.appendChild(viewer._exposureCtl.wrap);
+
+ // Format mask: single trigger button + popover (format options + opacity slider)
+ viewer._formatToggle = document.createElement("button");
+ viewer._formatToggle.type = "button";
+ viewer._formatToggle.className = "mjr-icon-btn mjr-mfv-format-trigger";
+ viewer._formatToggle.setAttribute("aria-haspopup", "dialog");
+ viewer._formatToggle.setAttribute("aria-expanded", "false");
+ viewer._formatToggle.setAttribute("aria-pressed", "false");
+ viewer._formatToggle.title = "Format mask";
+ viewer._formatToggle.innerHTML = '';
+ bar.appendChild(viewer._formatToggle);
+
+ const fmtPopover = document.createElement("div");
+ fmtPopover.className = "mjr-mfv-format-popover";
+ viewer.element.appendChild(fmtPopover);
+
+ const fmtMenu = document.createElement("div");
+ fmtMenu.className = "mjr-menu";
+ fmtMenu.style.cssText = "display:grid;gap:4px;";
+ fmtPopover.appendChild(fmtMenu);
+
+ const fmtHiddenSel = document.createElement("select");
+ fmtHiddenSel.style.cssText = "position:absolute;opacity:0;pointer-events:none;width:0;height:0;overflow:hidden;";
+ fmtPopover.appendChild(fmtHiddenSel);
+
+ const _FMT_OPTS = [
+ { value: "off", label: "Off" },
+ { value: "image",label: "Image" },
+ { value: "16:9", label: "16:9" },
+ { value: "1:1", label: "1:1" },
+ { value: "4:3", label: "4:3" },
+ { value: "9:16", label: "9:16" },
+ { value: "2.39", label: "2.39" },
+ ];
+ const fmtItemEls = [];
+ const _initFmt = viewer._overlayMaskEnabled ? String(viewer._overlayFormat || "image") : "off";
+ for (const opt of _FMT_OPTS) {
+ const optEl = document.createElement("option");
+ optEl.value = opt.value;
+ fmtHiddenSel.appendChild(optEl);
+
+ const item = document.createElement("button");
+ item.type = "button";
+ item.className = "mjr-menu-item";
+ item.dataset.value = opt.value;
+
+ const lbl = document.createElement("span");
+ lbl.className = "mjr-menu-item-label";
+ lbl.textContent = opt.label;
+
+ const chk = document.createElement("i");
+ chk.className = "pi pi-check mjr-menu-item-check";
+ chk.style.opacity = opt.value === _initFmt ? "1" : "0";
+
+ item.appendChild(lbl);
+ item.appendChild(chk);
+ fmtMenu.appendChild(item);
+ fmtItemEls.push(item);
+ if (opt.value === _initFmt) item.classList.add("is-active");
+ }
+ fmtHiddenSel.value = _initFmt;
+
+ // Separator + opacity slider row
+ const fmtSep = document.createElement("div");
+ fmtSep.className = "mjr-mfv-format-sep";
+ fmtPopover.appendChild(fmtSep);
+
+ const fmtSliderRow = document.createElement("div");
+ fmtSliderRow.className = "mjr-mfv-format-slider-row";
+ fmtPopover.appendChild(fmtSliderRow);
+
+ const fmtSliderLabel = document.createElement("span");
+ fmtSliderLabel.className = "mjr-mfv-format-slider-label";
+ fmtSliderLabel.textContent = "Opacity";
+ fmtSliderRow.appendChild(fmtSliderLabel);
+
+ viewer._maskOpacityCtl = createMiniRange("Mask opacity", {
+ min: 0,
+ max: 0.9,
+ step: 0.01,
+ value: Number(viewer._overlayMaskOpacity ?? 0.65),
+ });
+ fmtSliderRow.appendChild(viewer._maskOpacityCtl.input);
+ fmtSliderRow.appendChild(viewer._maskOpacityCtl.out);
+
+ viewer._formatSelect = fmtHiddenSel;
+ viewer._formatPopover = fmtPopover;
+
+ const _openFmtPopover = () => {
+ const btnRect = viewer._formatToggle.getBoundingClientRect();
+ const parentRect = viewer.element.getBoundingClientRect();
+ fmtPopover.style.left = `${btnRect.left - parentRect.left}px`;
+ fmtPopover.style.top = `${btnRect.bottom - parentRect.top + 4}px`;
+ fmtPopover.classList.add("is-open");
+ viewer._formatToggle.setAttribute("aria-expanded", "true");
+ };
+ viewer._closeFormatPopover = () => {
+ fmtPopover.classList.remove("is-open");
+ viewer._formatToggle.setAttribute("aria-expanded", "false");
+ };
+ viewer._formatToggle.addEventListener("click", (e) => {
+ e.stopPropagation();
+ if (fmtPopover.classList.contains("is-open")) {
+ viewer._closeFormatPopover();
+ } else {
+ viewer._closeAllToolbarPopovers?.();
+ _openFmtPopover();
+ }
+ });
+ fmtMenu.addEventListener("click", (e) => {
+ const item = e.target.closest(".mjr-menu-item");
+ if (!item) return;
+ const val = item.dataset.value;
+ fmtHiddenSel.value = val;
+ fmtHiddenSel.dispatchEvent(new Event("change", { bubbles: true }));
+ fmtItemEls.forEach(it => {
+ const active = it.dataset.value === val;
+ it.classList.toggle("is-active", active);
+ it.querySelector(".mjr-menu-item-check").style.opacity = active ? "1" : "0";
+ });
+ viewer._closeFormatPopover();
+ });
const sep = document.createElement("div");
sep.className = "mjr-mfv-toolbar-sep";
@@ -229,11 +782,42 @@ export function buildFloatingViewerToolbar(viewer) {
bar.appendChild(viewer._runHandle.el);
viewer._handleDocClick = (ev) => {
- if (!viewer._genDropdown) return;
const target = ev?.target;
- if (viewer._genBtn?.contains?.(target)) return;
- if (viewer._genDropdown.contains(target)) return;
- viewer._closeGenDropdown();
+ // Gen dropdown
+ if (viewer._genDropdown) {
+ if (!viewer._genBtn?.contains?.(target) && !viewer._genDropdown.contains(target)) {
+ viewer._closeGenDropdown();
+ }
+ }
+ // Channel popover
+ if (viewer._chPopover?.classList?.contains("is-open")) {
+ if (!viewer._chBtn?.contains?.(target) && !viewer._chPopover.contains(target)) {
+ viewer._closeChPopover?.();
+ }
+ }
+ // Guides popover
+ if (viewer._guidePopover?.classList?.contains("is-open")) {
+ if (!viewer._guideBtn?.contains?.(target) && !viewer._guidePopover.contains(target)) {
+ viewer._closeGuidePopover?.();
+ }
+ }
+ // Pin popover
+ if (viewer._pinPopover?.classList?.contains("is-open")) {
+ if (!viewer._pinBtn?.contains?.(target) && !viewer._pinPopover.contains(target)) {
+ viewer._closePinPopover?.();
+ }
+ }
+ // Format popover
+ if (viewer._formatPopover?.classList?.contains("is-open")) {
+ if (!viewer._formatToggle?.contains?.(target) && !viewer._formatPopover.contains(target)) {
+ viewer._closeFormatPopover?.();
+ }
+ }
+ // Icon dropdowns: close if click is outside any .mjr-mfv-idrop
+ if (!target?.closest?.(".mjr-mfv-idrop")) {
+ viewer.element?.querySelectorAll?.(".mjr-mfv-idrop-menu.is-open")
+ .forEach(m => m.classList.remove("is-open"));
+ }
};
viewer._bindDocumentUiHandlers();
@@ -312,6 +896,7 @@ export function rebindFloatingViewerControlHandlers(viewer) {
if (viewer._genDropdown?.classList?.contains("is-visible")) {
viewer._closeGenDropdown();
} else {
+ viewer._closeAllToolbarPopovers?.();
viewer._openGenDropdown();
}
},
@@ -336,6 +921,79 @@ export function rebindFloatingViewerControlHandlers(viewer) {
},
{ signal },
);
+
+ viewer._guidesSelect?.addEventListener(
+ "change",
+ () => {
+ viewer._gridMode = Number(viewer._guidesSelect.value) || 0;
+ viewer._guideBtn?.classList.toggle("is-on", viewer._gridMode !== 0);
+ viewer._redrawOverlayGuides?.();
+ },
+ { signal },
+ );
+
+ viewer._channelSelect?.addEventListener(
+ "change",
+ () => {
+ viewer._channel = String(viewer._channelSelect.value || "rgb");
+ viewer._chBtn?.classList.toggle("is-on", viewer._channel !== "rgb");
+ viewer._applyMediaToneControls?.();
+ },
+ { signal },
+ );
+
+ viewer._exposureCtl?.input?.addEventListener(
+ "input",
+ () => {
+ const v = Math.max(-10, Math.min(10, Number(viewer._exposureCtl.input.value) || 0));
+ viewer._exposureEV = Math.round(v * 10) / 10;
+ viewer._exposureCtl.out.textContent = `${viewer._exposureEV.toFixed(1)}EV`;
+ viewer._exposureCtl.wrap.classList.toggle("is-active", viewer._exposureEV !== 0);
+ viewer._applyMediaToneControls?.();
+ },
+ { signal },
+ );
+
+ viewer._exposureCtl?.out?.addEventListener(
+ "click",
+ () => {
+ viewer._exposureEV = 0;
+ viewer._exposureCtl.input.value = "0";
+ viewer._exposureCtl.out.textContent = "0.0EV";
+ viewer._exposureCtl.wrap.classList.remove("is-active");
+ viewer._applyMediaToneControls?.();
+ },
+ { signal },
+ );
+
+ viewer._formatSelect?.addEventListener(
+ "change",
+ () => {
+ const val = String(viewer._formatSelect.value || "image");
+ if (val === "off") {
+ viewer._overlayMaskEnabled = false;
+ } else {
+ viewer._overlayMaskEnabled = true;
+ viewer._overlayFormat = val;
+ }
+ viewer._formatToggle?.classList.toggle("is-on", Boolean(viewer._overlayMaskEnabled));
+ viewer._formatToggle?.setAttribute("aria-pressed", String(Boolean(viewer._overlayMaskEnabled)));
+ viewer._redrawOverlayGuides?.();
+ },
+ { signal },
+ );
+
+ viewer._maskOpacityCtl?.input?.addEventListener(
+ "input",
+ () => {
+ const v = Number(viewer._maskOpacityCtl.input.value);
+ const clamped = Math.max(0, Math.min(0.9, Number.isFinite(v) ? v : 0.65));
+ viewer._overlayMaskOpacity = Math.round(clamped * 100) / 100;
+ viewer._maskOpacityCtl.out.textContent = viewer._overlayMaskOpacity.toFixed(2);
+ viewer._redrawOverlayGuides?.();
+ },
+ { signal },
+ );
}
export function updateFloatingViewerSettingsBtnState(viewer, active) {
diff --git a/js/features/viewer/workflowSidebar/NodeWidgetRenderer.js b/js/features/viewer/workflowSidebar/NodeWidgetRenderer.js
index 5671e13f..81c42246 100644
--- a/js/features/viewer/workflowSidebar/NodeWidgetRenderer.js
+++ b/js/features/viewer/workflowSidebar/NodeWidgetRenderer.js
@@ -1,25 +1,77 @@
/**
- * NodeWidgetRenderer — renders a single ComfyUI LGraphNode's widgets
+ * NodeWidgetRenderer renders a single ComfyUI LGraphNode's widgets
* as an editable HTML section.
*/
import { getComfyApp } from "../../../app/comfyApiBridge.js";
import { createWidgetInput } from "./widgetAdapters.js";
-/** Widget types we skip (too complex for a quick-edit sidebar). */
const SKIP_TYPES = new Set(["imageupload", "button", "hidden"]);
+// Note nodes store their text in node.properties instead of widgets.
+const NOTE_TYPE_RE = /\bnote\b|markdown/i;
+
+function _isNoteNode(node) {
+ return NOTE_TYPE_RE.test(String(node?.type || ""));
+}
+
+function _getNoteText(node) {
+ const props = node?.properties ?? {};
+ if (typeof props.text === "string") return props.text;
+ if (typeof props.value === "string") return props.value;
+ if (typeof props.markdown === "string") return props.markdown;
+ const w0 = node?.widgets?.[0];
+ if (w0 != null && w0.value != null) return String(w0.value);
+ return "";
+}
+
+function _setNoteText(node, value) {
+ const props = node?.properties;
+ if (props) {
+ if ("text" in props) props.text = value;
+ else if ("value" in props) props.value = value;
+ else if ("markdown" in props) props.markdown = value;
+ else props.text = value;
+ }
+ const w0 = node?.widgets?.[0];
+ if (w0) w0.value = value;
+}
+
+// UUID or long hex hash — not a human-readable type name.
+const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
+const HEX_HASH_RE = /^[0-9a-f]{20,}$/i;
+
+function _getNodeDisplayType(node) {
+ const type = String(node?.type || "");
+ if (UUID_RE.test(type) || HEX_HASH_RE.test(type)) {
+ return String(node?.title || "Subgraph").trim() || "Subgraph";
+ }
+ return type || `Node #${node?.id}`;
+}
+
export class NodeWidgetRenderer {
/**
- * @param {object} node LGraphNode instance
+ * @param {object} node
* @param {object} [opts]
- * @param {() => void} [opts.onLocate] Custom locate handler (optional)
+ * @param {() => void} [opts.onLocate]
+ * @param {boolean} [opts.collapsible]
+ * @param {boolean} [opts.expanded]
+ * @param {(expanded: boolean) => void} [opts.onToggle]
+ * @param {number} [opts.depth] — 0 = top-level, >0 = inside a subgraph
*/
constructor(node, opts = {}) {
this._node = node;
this._onLocate = opts.onLocate ?? null;
+ this._onToggle = typeof opts.onToggle === "function" ? opts.onToggle : null;
+ this._collapsible = Boolean(opts.collapsible);
+ this._expanded = opts.expanded !== false;
+ this._depth = opts.depth ?? 0;
this._el = null;
- this._inputMap = new Map(); // widgetName → inputEl
+ this._body = null;
+ this._toggleBtn = null;
+ this._inputMap = new Map();
+ this._autoFits = [];
+ this._noteTextarea = null;
}
get el() {
@@ -27,77 +79,174 @@ export class NodeWidgetRenderer {
return this._el;
}
- /** Re-read widget values from the live graph and update inputs. */
syncFromGraph() {
+ // Note nodes: sync from node.properties.text instead of widgets
+ if (this._noteTextarea) {
+ const doc = this._el?.ownerDocument || document;
+ if (doc?.activeElement !== this._noteTextarea) {
+ const text = _getNoteText(this._node);
+ if (this._noteTextarea.value !== text) {
+ this._noteTextarea.value = text;
+ this._noteTextarea._mjrAutoFit?.();
+ }
+ }
+ return;
+ }
if (!this._node?.widgets) return;
const doc = this._el?.ownerDocument || document;
const activeEl = doc?.activeElement || null;
for (const w of this._node.widgets) {
const storedInput = this._inputMap.get(w.name);
- let input = _resolveSyncInput(storedInput);
+ const input = _resolveSyncInput(storedInput);
if (!input) continue;
if (input.type === "checkbox") {
const nextChecked = Boolean(w.value);
- if (input.checked !== nextChecked) {
- input.checked = nextChecked;
- }
- } else {
- const nextValue = w.value != null ? String(w.value) : "";
- if (String(input.value ?? "") === nextValue) continue;
- if (activeEl && input === activeEl) continue;
- input.value = nextValue;
- storedInput?._mjrAutoFit?.();
- input?._mjrAutoFit?.();
+ if (input.checked !== nextChecked) input.checked = nextChecked;
+ continue;
}
+ const nextValue = w.value != null ? String(w.value) : "";
+ if (String(input.value ?? "") === nextValue) continue;
+ if (activeEl && input === activeEl) continue;
+ input.value = nextValue;
+ storedInput?._mjrAutoFit?.();
+ input?._mjrAutoFit?.();
}
}
dispose() {
this._el?.remove();
this._el = null;
+ this._autoFits = [];
this._inputMap.clear();
}
- // ── Private ───────────────────────────────────────────────────────────────
+ setExpanded(expanded) {
+ this._expanded = Boolean(expanded);
+ this._applyExpandedState();
+ // Trigger textarea autofit now that the body is visible
+ if (this._expanded && this._autoFits?.length) {
+ requestAnimationFrame(() => {
+ for (const fn of this._autoFits) fn();
+ });
+ }
+ this._onToggle?.(this._expanded);
+ }
_render() {
const node = this._node;
const section = document.createElement("section");
section.className = "mjr-ws-node";
section.dataset.nodeId = String(node.id ?? "");
+ if (this._depth > 0) {
+ section.dataset.depth = String(this._depth);
+ section.classList.add("mjr-ws-node--nested");
+ }
- // Header
const header = document.createElement("div");
header.className = "mjr-ws-node-header";
- const title = document.createElement("span");
- title.className = "mjr-ws-node-title";
- title.textContent = node.title || node.type || `Node #${node.id}`;
- header.appendChild(title);
+ if (this._collapsible) {
+ this._header = header;
+ const toggleBtn = document.createElement("button");
+ toggleBtn.type = "button";
+ toggleBtn.className = "mjr-icon-btn mjr-ws-node-toggle";
+ toggleBtn.title = this._expanded ? "Collapse node" : "Expand node";
+ toggleBtn.addEventListener("click", (event) => {
+ event.stopPropagation();
+ this.setExpanded(!this._expanded);
+ });
+ header.appendChild(toggleBtn);
+ this._toggleBtn = toggleBtn;
+ header.addEventListener("click", (event) => {
+ if (event.target.closest("button")) return;
+ this.setExpanded(!this._expanded);
+ });
+ header.title = this._expanded ? "Collapse node" : "Expand node";
+ }
+
+ const titleWrap = document.createElement("div");
+ titleWrap.className = "mjr-ws-node-title-wrap";
+
+ const typeText = document.createElement("span");
+ typeText.className = "mjr-ws-node-type";
+ typeText.textContent = _getNodeDisplayType(node);
+ titleWrap.appendChild(typeText);
+
+ const customTitle = String(node.title || "").trim();
+ if (customTitle && customTitle !== node.type) {
+ const title = document.createElement("span");
+ title.className = "mjr-ws-node-title";
+ title.textContent = customTitle;
+ titleWrap.appendChild(title);
+ }
+
+ header.appendChild(titleWrap);
const locateBtn = document.createElement("button");
locateBtn.type = "button";
locateBtn.className = "mjr-icon-btn mjr-ws-locate";
locateBtn.title = "Locate on canvas";
- const locIcon = document.createElement("i");
- locIcon.className = "pi pi-map-marker";
- locIcon.setAttribute("aria-hidden", "true");
- locateBtn.appendChild(locIcon);
- locateBtn.addEventListener("click", () => this._locateNode());
+ locateBtn.innerHTML = '';
+ locateBtn.addEventListener("click", (event) => {
+ event.stopPropagation();
+ this._locateNode();
+ });
header.appendChild(locateBtn);
section.appendChild(header);
- // Widgets
const body = document.createElement("div");
body.className = "mjr-ws-node-body";
+ // Note nodes store text in node.properties.text — widgets array is empty.
+ if (_isNoteNode(node)) {
+ const textarea = document.createElement("textarea");
+ textarea.className = "mjr-ws-input mjr-ws-textarea mjr-ws-note-textarea";
+ textarea.value = _getNoteText(node);
+ textarea.rows = 4;
+ const autoFit = () => {
+ textarea.style.height = "auto";
+ textarea.style.height = textarea.scrollHeight + "px";
+ };
+ textarea.addEventListener("input", () => {
+ _setNoteText(node, textarea.value);
+ // Sync ComfyUI's own DOM element for this widget if it exists.
+ const w0 = node?.widgets?.[0];
+ const domEl = w0?.inputEl ?? w0?.element ?? w0?.el ?? null;
+ if (domEl != null && "value" in domEl && domEl.value !== textarea.value) {
+ domEl.value = textarea.value;
+ }
+ autoFit();
+ try {
+ const app = getComfyApp();
+ const canvas = app?.canvas ?? null;
+ canvas?.setDirty?.(true, true);
+ canvas?.draw?.(true, true);
+ const nodeGraph = node?.graph ?? null;
+ if (nodeGraph && nodeGraph !== app?.graph) {
+ nodeGraph.setDirtyCanvas?.(true, true);
+ nodeGraph.change?.();
+ }
+ app?.graph?.change?.();
+ } catch (_) {}
+ });
+ textarea._mjrAutoFit = autoFit;
+ this._noteTextarea = textarea;
+ this._autoFits.push(autoFit);
+ body.appendChild(textarea);
+ this._body = body;
+ section.appendChild(body);
+ this._el = section;
+ this._applyExpandedState();
+ requestAnimationFrame(autoFit);
+ return section;
+ }
+
const widgets = node.widgets ?? [];
let hasVisibleWidget = false;
for (const w of widgets) {
const wType = String(w.type || "").toLowerCase();
if (SKIP_TYPES.has(wType)) continue;
- // Skip hidden widgets (ComfyUI uses w.hidden or w.options.hidden)
if (w.hidden || w.options?.hidden) continue;
hasVisibleWidget = true;
@@ -113,11 +262,12 @@ export class NodeWidgetRenderer {
const inputWrap = document.createElement("div");
inputWrap.className = "mjr-ws-widget-input";
- const inputEl = createWidgetInput(w, () => {
- /* value already written by adapter */
- });
+ const inputEl = createWidgetInput(w, () => {}, node);
inputWrap.appendChild(inputEl);
this._inputMap.set(w.name, inputEl);
+ // Collect autoFit functions from text wrappers so we can re-run them on expand
+ const autoFit = inputEl._mjrAutoFit ?? inputEl.querySelector?.("textarea")?._mjrAutoFit;
+ if (autoFit) this._autoFits.push(autoFit);
row.appendChild(label);
row.appendChild(inputWrap);
@@ -131,10 +281,29 @@ export class NodeWidgetRenderer {
body.appendChild(empty);
}
+ this._body = body;
section.appendChild(body);
+ // Assign _el before calling _applyExpandedState so its guard passes.
+ this._el = section;
+ this._applyExpandedState();
return section;
}
+ _applyExpandedState() {
+ if (!this._el || !this._body) return;
+ this._el.classList.toggle("is-collapsible", this._collapsible);
+ this._el.classList.toggle("is-collapsed", this._collapsible && !this._expanded);
+ if (this._toggleBtn) {
+ const iconClass = this._expanded ? "pi pi-chevron-down" : "pi pi-chevron-right";
+ this._toggleBtn.innerHTML = ``;
+ this._toggleBtn.title = this._expanded ? "Collapse node" : "Expand node";
+ this._toggleBtn.setAttribute("aria-expanded", String(this._expanded));
+ }
+ if (this._header) {
+ this._header.title = this._expanded ? "Collapse node" : "Expand node";
+ }
+ }
+
_locateNode() {
if (this._onLocate) {
this._onLocate();
diff --git a/js/features/viewer/workflowSidebar/WorkflowNodesTab.js b/js/features/viewer/workflowSidebar/WorkflowNodesTab.js
new file mode 100644
index 00000000..30fdecbf
--- /dev/null
+++ b/js/features/viewer/workflowSidebar/WorkflowNodesTab.js
@@ -0,0 +1,321 @@
+/**
+ * WorkflowNodesTab lists all workflow nodes and exposes each node's parameters
+ * inline through a collapsible section.
+ *
+ * Subgraph container nodes show an extra toggle to expand/collapse their inner
+ * nodes as a nested group below the container.
+ *
+ * The node list DOM is only rebuilt when the set of nodes actually changes —
+ * value sync runs every frame without touching the DOM structure.
+ */
+
+import { getComfyApp } from "../../../app/comfyApiBridge.js";
+import { NodeWidgetRenderer } from "./NodeWidgetRenderer.js";
+
+export class WorkflowNodesTab {
+ constructor() {
+ this._searchQuery = "";
+ /** Which node widget panels are open (at most one at a time). */
+ this._expandedNodeIds = new Set();
+ /** Which subgraph container nodes have their children list open. */
+ this._expandedChildrenIds = new Set();
+ /** Flat list of every NodeWidgetRenderer currently in the DOM. */
+ this._renderers = [];
+ this._el = this._build();
+ this._lastNodeSig = "";
+ this._lastSelectedId = "";
+ }
+
+ get el() { return this._el; }
+
+ refresh() {
+ this._maybeRebuildList();
+ for (const renderer of this._renderers) renderer.syncFromGraph();
+ }
+
+ forceRebuild() {
+ this._lastNodeSig = "";
+ this._maybeRebuildList();
+ }
+
+ dispose() {
+ for (const renderer of this._renderers) renderer.dispose();
+ this._renderers = [];
+ this._el?.remove?.();
+ }
+
+ _build() {
+ const wrap = document.createElement("div");
+ wrap.className = "mjr-ws-nodes-tab";
+
+ const searchWrap = document.createElement("div");
+ searchWrap.className = "mjr-ws-search-wrap";
+
+ const searchIcon = document.createElement("i");
+ searchIcon.className = "pi pi-search mjr-ws-search-icon";
+ searchIcon.setAttribute("aria-hidden", "true");
+ searchWrap.appendChild(searchIcon);
+
+ this._searchInput = document.createElement("input");
+ this._searchInput.type = "text";
+ this._searchInput.className = "mjr-ws-search";
+ this._searchInput.placeholder = "Search nodes...";
+ this._searchInput.addEventListener("input", () => {
+ this._searchQuery = this._searchInput.value;
+ this.forceRebuild();
+ });
+ searchWrap.appendChild(this._searchInput);
+
+ const clearBtn = document.createElement("button");
+ clearBtn.type = "button";
+ clearBtn.className = "mjr-ws-search-clear";
+ clearBtn.title = "Clear search";
+ clearBtn.innerHTML = '';
+ clearBtn.addEventListener("click", () => {
+ this._searchInput.value = "";
+ this._searchQuery = "";
+ this.forceRebuild();
+ });
+ searchWrap.appendChild(clearBtn);
+
+ wrap.appendChild(searchWrap);
+
+ this._list = document.createElement("div");
+ this._list.className = "mjr-ws-nodes-list";
+ wrap.appendChild(this._list);
+
+ return wrap;
+ }
+
+ _syncCanvasSelection() {
+ const selectedIds = _getSelectedNodeIds();
+ const selectedId = selectedIds[0] || "";
+ if (!selectedId || selectedId === this._lastSelectedId) return;
+ this._lastSelectedId = selectedId;
+ for (const renderer of this._renderers) {
+ if (String(renderer._node?.id ?? "") === selectedId && !renderer._expanded) {
+ renderer.setExpanded(true);
+ break;
+ }
+ }
+ }
+
+ _maybeRebuildList() {
+ const graph = _getGraph();
+ const tree = graph ? _buildNodeTree(graph) : [];
+ const q = (this._searchQuery || "").toLowerCase().trim();
+ const filtered = q ? _filterTree(tree, q) : tree;
+ const sig = _treeSignature(filtered);
+
+ this._syncCanvasSelection();
+
+ if (sig === this._lastNodeSig) return;
+ this._lastNodeSig = sig;
+
+ for (const renderer of this._renderers) renderer.dispose();
+ this._renderers = [];
+ this._list.innerHTML = "";
+
+ if (!filtered.length) {
+ const empty = document.createElement("div");
+ empty.className = "mjr-ws-sidebar-empty";
+ empty.textContent = tree.length ? "No nodes match your search" : "No nodes in workflow";
+ this._list.appendChild(empty);
+ return;
+ }
+
+ this._renderItems(filtered, this._list, 0);
+ }
+
+ /**
+ * Recursively render tree items into a container.
+ * @param {{node: object, children: object[]}[]} items
+ * @param {HTMLElement} container
+ * @param {number} depth
+ */
+ _renderItems(items, container, depth) {
+ for (const { node, children } of items) {
+ const nodeId = String(node?.id ?? "");
+
+ const renderer = new NodeWidgetRenderer(node, {
+ collapsible: true,
+ expanded: this._expandedNodeIds.has(nodeId),
+ depth,
+ onLocate: () => _focusNode(node),
+ onToggle: (expanded) => {
+ if (expanded) {
+ this._expandedNodeIds = new Set([nodeId]);
+ for (const r of this._renderers) {
+ if (r !== renderer) r.setExpanded(false);
+ }
+ } else {
+ this._expandedNodeIds.delete(nodeId);
+ }
+ },
+ });
+ this._renderers.push(renderer);
+ container.appendChild(renderer.el);
+
+ if (children.length > 0) {
+ const isOpen = this._expandedChildrenIds.has(nodeId);
+
+ const toggleBtn = document.createElement("button");
+ toggleBtn.type = "button";
+ toggleBtn.className = "mjr-ws-children-toggle";
+ if (depth > 0) toggleBtn.classList.add("mjr-ws-children-toggle--nested");
+ _setChildrenToggleLabel(toggleBtn, children.length, isOpen);
+
+ const childrenEl = document.createElement("div");
+ childrenEl.className = "mjr-ws-children";
+ childrenEl.hidden = !isOpen;
+
+ this._renderItems(children, childrenEl, depth + 1);
+
+ toggleBtn.addEventListener("click", () => {
+ const nowOpen = childrenEl.hidden;
+ childrenEl.hidden = !nowOpen;
+ if (nowOpen) this._expandedChildrenIds.add(nodeId);
+ else this._expandedChildrenIds.delete(nodeId);
+ _setChildrenToggleLabel(toggleBtn, children.length, nowOpen);
+ });
+
+ container.appendChild(toggleBtn);
+ container.appendChild(childrenEl);
+ }
+ }
+ }
+}
+
+// ── Helpers ───────────────────────────────────────────────────────────────────
+
+function _getGraph() {
+ try {
+ const app = getComfyApp();
+ return app?.graph ?? app?.canvas?.graph ?? null;
+ } catch { return null; }
+}
+
+function _getSubgraphsFromNode(node) {
+ const candidates = [
+ node?.subgraph,
+ node?._subgraph,
+ node?.subgraph?.graph,
+ node?.subgraph?.lgraph,
+ node?.properties?.subgraph,
+ node?.subgraph_instance,
+ node?.subgraph_instance?.graph,
+ node?.inner_graph,
+ node?.subgraph_graph,
+ ].filter((g) => g && typeof g === "object" && Array.isArray(g.nodes));
+
+ // Some GROUP-style nodes expose inner nodes directly as node.nodes
+ // (a different array from the parent graph's nodes).
+ if (
+ Array.isArray(node?.nodes) &&
+ node.nodes.length > 0 &&
+ node.nodes !== node?.graph?.nodes
+ ) {
+ candidates.push({ nodes: node.nodes });
+ }
+
+ return candidates;
+}
+
+/**
+ * Build a recursive tree: [{node, children}] from a LiteGraph graph object.
+ */
+function _buildNodeTree(graph, visited = new Set()) {
+ if (!graph || visited.has(graph)) return [];
+ visited.add(graph);
+ const nodes = Array.isArray(graph.nodes) ? graph.nodes : [];
+ const result = [];
+ for (const node of nodes) {
+ if (!node) continue;
+ const subgraphs = _getSubgraphsFromNode(node);
+ const children = subgraphs.flatMap((sg) => _buildNodeTree(sg, visited));
+ result.push({ node, children });
+ }
+ return result;
+}
+
+/**
+ * Recursively filter tree items. A container is kept if it matches OR any child matches.
+ */
+function _filterTree(items, q) {
+ const result = [];
+ for (const { node, children } of items) {
+ const nodeMatches =
+ (node.type || "").toLowerCase().includes(q) ||
+ (node.title || "").toLowerCase().includes(q);
+ const filteredChildren = _filterTree(children, q);
+ if (nodeMatches || filteredChildren.length > 0) {
+ result.push({ node, children: filteredChildren });
+ }
+ }
+ return result;
+}
+
+/** Depth-first signature of all node IDs — encodes both set and tree order. */
+function _treeSignature(items) {
+ const ids = [];
+ function collect(arr) {
+ for (const { node, children } of arr) {
+ ids.push(node.id);
+ collect(children);
+ }
+ }
+ collect(items);
+ return ids.join(",");
+}
+
+function _setChildrenToggleLabel(btn, count, isOpen) {
+ const icon = isOpen ? "pi-chevron-down" : "pi-chevron-right";
+ btn.innerHTML = `${count} inner node${count !== 1 ? "s" : ""}`;
+ btn.setAttribute("aria-expanded", String(isOpen));
+}
+
+function _focusNode(node) {
+ try {
+ const app = getComfyApp();
+ const canvas = app?.canvas;
+ if (!canvas) return;
+
+ canvas.selectNode?.(node, false);
+
+ if (typeof canvas.centerOnNode === "function") {
+ canvas.centerOnNode(node);
+ } else if (node.pos && canvas.ds) {
+ const canvasEl = canvas.canvas;
+ const w = canvasEl?.width ?? 800;
+ const h = canvasEl?.height ?? 600;
+ const scale = canvas.ds.scale ?? 1;
+ canvas.ds.offset = [
+ -node.pos[0] + w / (2 * scale) - ((node.size?.[0] ?? 100) / 2),
+ -node.pos[1] + h / (2 * scale) - ((node.size?.[1] ?? 80) / 2),
+ ];
+ canvas.setDirty?.(true, true);
+ }
+
+ canvas.canvas?.focus?.();
+ } catch (e) {
+ console.debug?.("[MFV] _focusNode", e);
+ }
+}
+
+function _getSelectedNodeIds() {
+ try {
+ const app = getComfyApp();
+ const selected = app?.canvas?.selected_nodes ?? app?.canvas?.selectedNodes ?? null;
+ if (!selected) return [];
+ if (Array.isArray(selected)) return selected.map((node) => String(node?.id ?? "")).filter(Boolean);
+ if (selected instanceof Map) {
+ return Array.from(selected.values()).map((node) => String(node?.id ?? "")).filter(Boolean);
+ }
+ if (typeof selected === "object") {
+ return Object.values(selected).map((node) => String(node?.id ?? "")).filter(Boolean);
+ }
+ } catch (e) {
+ console.debug?.("[MFV] _getSelectedNodeIds", e);
+ }
+ return [];
+}
diff --git a/js/features/viewer/workflowSidebar/WorkflowSidebar.js b/js/features/viewer/workflowSidebar/WorkflowSidebar.js
index 33edd593..c13288bc 100644
--- a/js/features/viewer/workflowSidebar/WorkflowSidebar.js
+++ b/js/features/viewer/workflowSidebar/WorkflowSidebar.js
@@ -1,31 +1,23 @@
/**
- * WorkflowSidebar — slide-in panel for the Floating Viewer (MFV).
+ * WorkflowSidebar is the slide-in panel for the Floating Viewer.
*
- * Shows editable widgets for the currently selected ComfyUI nodes.
- * Reads from `app.canvas.selected_nodes` via comfyApiBridge.
- * Writes back via widgetAdapters (widget.value + callback).
+ * It now exposes a single unified "Nodes" view: each workflow node can be
+ * expanded inline to reveal editable parameters.
*/
-import { getComfyApp } from "../../../app/comfyApiBridge.js";
-import { NodeWidgetRenderer } from "./NodeWidgetRenderer.js";
+import { WorkflowNodesTab } from "./WorkflowNodesTab.js";
const LIVE_SYNC_FALLBACK_MS = 16;
export class WorkflowSidebar {
- /**
- * @param {object} opts
- * @param {HTMLElement} opts.hostEl The MFV root element to append to
- * @param {() => void} [opts.onClose]
- */
constructor({ hostEl, onClose } = {}) {
this._hostEl = hostEl;
this._onClose = onClose ?? null;
- /** @type {NodeWidgetRenderer[]} */
- this._renderers = [];
this._visible = false;
- this._selectionKey = "";
this._liveSyncHandle = null;
this._liveSyncMode = "";
+ this._resizeCleanup = null;
+ this._nodesTab = new WorkflowNodesTab();
this._el = this._build();
}
@@ -35,7 +27,7 @@ export class WorkflowSidebar {
show() {
this._visible = true;
this._el.classList.add("open");
- this.refresh({ force: true });
+ this._nodesTab.refresh();
this._startLiveSync();
}
@@ -54,98 +46,63 @@ export class WorkflowSidebar {
}
}
- /** Re-read selected nodes and rebuild widget sections. */
- refresh({ force = false } = {}) {
+ refresh() {
if (!this._visible) return;
- const { key, nodes } = _getSelectedNodeSnapshot();
- if (!force && key === this._selectionKey && this._renderers.length === nodes.length) {
- this.syncFromGraph({ allowSelectionRefresh: false });
- return;
- }
-
- this._clear();
- this._selectionKey = key;
- if (!nodes.length) {
- this._showEmpty();
- return;
- }
- for (const node of nodes) {
- const renderer = new NodeWidgetRenderer(node);
- this._renderers.push(renderer);
- this._body.appendChild(renderer.el);
- }
- this.syncFromGraph({ allowSelectionRefresh: false });
+ this._nodesTab.refresh();
}
- /** Sync existing renderers from graph values without full rebuild. */
- syncFromGraph({ allowSelectionRefresh = true } = {}) {
+ syncFromGraph() {
if (!this._visible) return;
- const { key } = _getSelectedNodeSnapshot();
- if (allowSelectionRefresh && key !== this._selectionKey) {
- this.refresh({ force: true });
- return;
- }
- for (const r of this._renderers) r.syncFromGraph();
+ this._nodesTab.refresh();
}
dispose() {
this._stopLiveSync();
- this._clear();
+ this._disposeResize();
+ this._nodesTab?.dispose?.();
+ this._nodesTab = null;
this._el?.remove();
}
- // ── Private ───────────────────────────────────────────────────────────────
-
_build() {
const panel = document.createElement("div");
panel.className = "mjr-ws-sidebar";
- // Header
const header = document.createElement("div");
header.className = "mjr-ws-sidebar-header";
const title = document.createElement("span");
title.className = "mjr-ws-sidebar-title";
- title.textContent = "Node Parameters";
+ title.textContent = "Nodes";
header.appendChild(title);
const closeBtn = document.createElement("button");
closeBtn.type = "button";
closeBtn.className = "mjr-icon-btn";
closeBtn.title = "Close sidebar";
- const closeIcon = document.createElement("i");
- closeIcon.className = "pi pi-times";
- closeIcon.setAttribute("aria-hidden", "true");
- closeBtn.appendChild(closeIcon);
+ closeBtn.innerHTML = '';
closeBtn.addEventListener("click", () => {
this.hide();
this._onClose?.();
});
header.appendChild(closeBtn);
-
panel.appendChild(header);
- // Scrollable body
- this._body = document.createElement("div");
- this._body.className = "mjr-ws-sidebar-body";
+ const resizer = document.createElement("div");
+ resizer.className = "mjr-ws-sidebar-resizer";
+ resizer.setAttribute("role", "separator");
+ resizer.setAttribute("aria-orientation", "vertical");
+ resizer.setAttribute("aria-hidden", "true");
+ panel.appendChild(resizer);
+ this._bindResize(resizer);
+
+ this._body = this._nodesTab.el;
+ this._body.classList.add("mjr-ws-sidebar-body");
panel.appendChild(this._body);
return panel;
}
- _clear() {
- for (const r of this._renderers) r.dispose();
- this._renderers = [];
- if (this._body) this._body.innerHTML = "";
- }
-
- _showEmpty() {
- const empty = document.createElement("div");
- empty.className = "mjr-ws-sidebar-empty";
- empty.textContent = "Select nodes on the canvas to edit their parameters";
- this._body.appendChild(empty);
- }
-
_startLiveSync() {
if (this._liveSyncHandle != null) return;
const frameHost = _getFrameHost(this._el);
@@ -182,38 +139,67 @@ export class WorkflowSidebar {
this._liveSyncHandle = null;
this._liveSyncMode = "";
}
-}
-// ── Helpers ───────────────────────────────────────────────────────────────────
+ _bindResize(handle) {
+ if (!handle) return;
+ const doc = handle.ownerDocument || document;
+ const win = doc.defaultView || window;
+ const MIN_WIDTH = 180;
-/**
- * Read the currently selected nodes from the ComfyUI canvas.
- * Supports multiple ComfyUI versions (object, Map, Array).
- */
-function _getSelectedNodes() {
- try {
- const app = getComfyApp();
- const selected =
- app?.canvas?.selected_nodes ??
- app?.canvas?.selectedNodes ??
- null;
- if (!selected) return [];
- if (Array.isArray(selected)) return selected.filter(Boolean);
- if (selected instanceof Map) return Array.from(selected.values()).filter(Boolean);
- if (typeof selected === "object") return Object.values(selected).filter(Boolean);
- } catch (e) {
- console.debug?.("[MFV sidebar] _getSelectedNodes error", e);
+ const onPointerDown = (event) => {
+ if (event.button !== 0 || !this._el?.classList.contains("open")) return;
+ const wrapper = this._el.parentElement;
+ if (!wrapper) return;
+ const sidebarRect = this._el.getBoundingClientRect();
+ const wrapperRect = wrapper.getBoundingClientRect();
+ const sidebarPos = wrapper.getAttribute("data-sidebar-pos") || "right";
+ const maxWidth = Math.max(
+ MIN_WIDTH,
+ Math.floor(wrapperRect.width * (sidebarPos === "bottom" ? 1 : 0.65)),
+ );
+ if (sidebarPos === "bottom") return;
+
+ event.preventDefault();
+ event.stopPropagation();
+ handle.classList.add("is-dragging");
+ this._el.classList.add("is-resizing");
+
+ const startX = event.clientX;
+ const startWidth = sidebarRect.width;
+
+ const onPointerMove = (moveEvent) => {
+ const deltaX = moveEvent.clientX - startX;
+ const nextWidth =
+ sidebarPos === "left" ? startWidth - deltaX : startWidth + deltaX;
+ const clampedWidth = Math.max(MIN_WIDTH, Math.min(maxWidth, nextWidth));
+ this._el.style.width = `${Math.round(clampedWidth)}px`;
+ };
+
+ const stopResize = () => {
+ handle.classList.remove("is-dragging");
+ this._el.classList.remove("is-resizing");
+ win.removeEventListener("pointermove", onPointerMove);
+ win.removeEventListener("pointerup", stopResize);
+ win.removeEventListener("pointercancel", stopResize);
+ };
+
+ win.addEventListener("pointermove", onPointerMove);
+ win.addEventListener("pointerup", stopResize);
+ win.addEventListener("pointercancel", stopResize);
+ };
+
+ handle.addEventListener("pointerdown", onPointerDown);
+ this._resizeCleanup = () => handle.removeEventListener("pointerdown", onPointerDown);
}
- return [];
-}
-function _getSelectedNodeSnapshot() {
- const nodes = _getSelectedNodes();
- const key = nodes
- .map((node) => String(node?.id ?? ""))
- .filter(Boolean)
- .join("|");
- return { key, nodes };
+ _disposeResize() {
+ try {
+ this._resizeCleanup?.();
+ } catch (e) {
+ console.debug?.(e);
+ }
+ this._resizeCleanup = null;
+ }
}
function _getFrameHost(el) {
diff --git a/js/features/viewer/workflowSidebar/sidebarRunButton.js b/js/features/viewer/workflowSidebar/sidebarRunButton.js
index c5df82c2..9668047b 100644
--- a/js/features/viewer/workflowSidebar/sidebarRunButton.js
+++ b/js/features/viewer/workflowSidebar/sidebarRunButton.js
@@ -295,6 +295,21 @@ function resolveClientId(api, app) {
return "";
}
+/**
+ * Walk all nodes in a ComfyUI graph recursively, including inner nodes of any
+ * subgraphs, and invoke callback(node) for each. This mirrors the graph-walk
+ * ComfyUI's native queuePrompt performs before/after serialising the prompt.
+ */
+function _walkAllNodes(graph, callback) {
+ for (const node of graph?.nodes ?? []) {
+ callback(node);
+ // Recurse into ComfyUI subgraph inner nodes.
+ if (node.subgraph?.nodes) {
+ _walkAllNodes(node.subgraph, callback);
+ }
+ }
+}
+
/**
* Queue the current workflow for execution.
*
@@ -303,31 +318,61 @@ function resolveClientId(api, app) {
* current auth session, same source as the native ComfyUI Queue button).
* 2. api.queuePrompt — broader detection via getComfyApi() (window.api, …).
* 3. api.fetchApi — direct HTTP via ComfyUI's authenticated fetch helper.
- * 4. app.queuePrompt(0) — native ComfyUI app-level path; handles auth tokens
- * and CSRF checks natively; no preview-method enrichment on this path.
+ * 4. app.queuePrompt(0) — native ComfyUI app-level path; handles auth tokens,
+ * beforeQueued/afterQueued and CSRF natively; used only when no direct API
+ * path is available (no preview-method enrichment on this path).
* 5. fetch (last resort) — raw fetch with credentials:'include' for cookie auth.
+ *
+ * Paths 1-3 and 5 manually mirror ComfyUI's beforeQueued/afterQueued widget cycle
+ * so that control_after_generate (randomize / increment / decrement) is applied
+ * correctly on every run, including inside subgraph inner nodes.
*/
async function queueCurrentPrompt() {
const app = getComfyApp();
if (!app) throw new Error("ComfyUI app not available");
+ // Resolve API references early so we can choose the path before touching
+ // widget state (beforeQueued must not be called twice for the same run).
+ const liveApi = (app?.api && typeof app.api.queuePrompt === "function") ? app.api : null;
+ const api = liveApi ?? getComfyApi(app);
+ const hasApiPath = Boolean(
+ (api && typeof api.queuePrompt === "function") ||
+ (api && typeof api.fetchApi === "function"),
+ );
+
+ // Path 4: delegate entirely to app.queuePrompt which handles beforeQueued,
+ // graphToPrompt, afterQueued, and auth internally. Only taken when no direct
+ // API path is available because it cannot carry MFV preview-method enrichment.
+ if (!hasApiPath && typeof app.queuePrompt === "function") {
+ await app.queuePrompt(0);
+ return { tracked: true };
+ }
+
+ // Paths 1-3 and 5: mirror ComfyUI's native beforeQueued cycle.
+ // ComfyUI's queuePrompt walks ALL nodes (including inner subgraph nodes) and
+ // calls widget.beforeQueued() before serialising the graph. This is what
+ // triggers control_after_generate (randomize / increment / decrement) to
+ // update the seed widget value before graphToPrompt reads it.
+ const rootGraph = app.rootGraph ?? app.graph;
+ _walkAllNodes(rootGraph, (node) => {
+ for (const w of node.widgets ?? []) {
+ w.beforeQueued?.({ isPartialExecution: false });
+ }
+ });
+
const promptData = typeof app.graphToPrompt === "function"
? await app.graphToPrompt()
: null;
if (!promptData?.output) throw new Error("graphToPrompt returned empty output");
- // Prefer the live app.api reference — this matches the native Queue button's
- // auth context and avoids stale cached references when ComfyUI refreshes its
- // auth state (e.g. after user logs in or session is renewed).
- const liveApi = (app?.api && typeof app.api.queuePrompt === "function") ? app.api : null;
- const api = liveApi ?? getComfyApi(app);
+ let result;
if (api && typeof api.queuePrompt === "function") {
+ // Prefer the live app.api reference — matches the native Queue button's
+ // auth context and avoids stale cached references after session renewal.
await api.queuePrompt(0, enrichPromptDataForMfv(promptData));
- return { tracked: true };
- }
-
- if (api && typeof api.fetchApi === "function") {
+ result = { tracked: true };
+ } else if (api && typeof api.fetchApi === "function") {
const resp = await api.fetchApi("/prompt", {
method: "POST",
headers: { "Content-Type": "application/json" },
@@ -338,26 +383,30 @@ async function queueCurrentPrompt() {
),
});
if (!resp?.ok) throw new Error(`POST /prompt failed (${resp?.status})`);
- return { tracked: true };
+ result = { tracked: true };
+ } else {
+ const resp = await fetch("/prompt", {
+ method: "POST",
+ credentials: "include",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify(
+ buildPromptRequestBody(promptData, {
+ clientId: resolveClientId(null, app),
+ }),
+ ),
+ });
+ if (!resp.ok) throw new Error(`POST /prompt failed (${resp.status})`);
+ result = { tracked: false };
}
- // Native app-level path: uses ComfyUI's own auth handling (same as the
- // native Queue button). No preview-method enrichment on this fallback.
- if (typeof app.queuePrompt === "function") {
- await app.queuePrompt(0);
- return { tracked: true };
- }
-
- const resp = await fetch("/prompt", {
- method: "POST",
- credentials: "include",
- headers: { "Content-Type": "application/json" },
- body: JSON.stringify(
- buildPromptRequestBody(promptData, {
- clientId: resolveClientId(null, app),
- }),
- ),
+ // Mirror ComfyUI's afterQueued cycle and redraw the canvas so that widget
+ // displays (e.g. the new seed value) reflect the post-queue state immediately.
+ _walkAllNodes(rootGraph, (node) => {
+ for (const w of node.widgets ?? []) {
+ w.afterQueued?.({ isPartialExecution: false });
+ }
});
- if (!resp.ok) throw new Error(`POST /prompt failed (${resp.status})`);
- return { tracked: false };
+ app.canvas?.draw?.(true, true);
+
+ return result;
}
diff --git a/js/features/viewer/workflowSidebar/widgetAdapters.js b/js/features/viewer/workflowSidebar/widgetAdapters.js
index 272c1e5c..2752b83e 100644
--- a/js/features/viewer/workflowSidebar/widgetAdapters.js
+++ b/js/features/viewer/workflowSidebar/widgetAdapters.js
@@ -11,86 +11,159 @@ import { getComfyApp } from "../../../app/comfyApiBridge.js";
* Create an HTML input element matching a ComfyUI widget type.
* @param {object} widget LGraphNode widget ({ name, type, value, options, callback })
* @param {(newValue: unknown) => void} onChange Called when the user edits the input
+ * @param {object|null} [node] Parent LGraphNode — passed to widget.callback for proper ComfyUI compat
* @returns {HTMLElement}
*/
-export function createWidgetInput(widget, onChange) {
+export function createWidgetInput(widget, onChange, node = null) {
const type = String(widget?.type || "").toLowerCase();
switch (type) {
case "number":
- return _numberInput(widget, onChange);
+ case "int":
+ case "float":
+ return _numberInput(widget, onChange, node);
case "combo":
- return _comboInput(widget, onChange);
+ return _comboInput(widget, onChange, node);
case "text":
case "string":
case "customtext":
- return _textInput(widget, onChange);
+ return _textInput(widget, onChange, node);
case "toggle":
- return _toggleInput(widget, onChange);
+ case "boolean":
+ return _toggleInput(widget, onChange, node);
default:
- // Unsupported / complex widget type — show read-only value
return _readonlyInput(widget);
}
}
/**
- * Write a value into a ComfyUI widget and trigger its callback.
- * Returns true on success.
+ * Write a value into a ComfyUI widget and trigger its callback + canvas repaint.
+ * @param {object} widget
+ * @param {unknown} newValue
+ * @param {object|null} [node] Parent LGraphNode
+ * @returns {boolean}
*/
-export function writeWidgetValue(widget, newValue) {
+export function writeWidgetValue(widget, newValue, node = null) {
if (!widget) return false;
const type = String(widget.type || "").toLowerCase();
- if (type === "number") {
+ if (type === "number" || type === "int" || type === "float") {
const n = Number(newValue);
if (Number.isNaN(n)) return false;
const opts = widget.options ?? {};
const min = opts.min ?? -Infinity;
const max = opts.max ?? Infinity;
- widget.value = Math.min(max, Math.max(min, n));
- } else if (type === "toggle") {
+ let clamped = Math.min(max, Math.max(min, n));
+ // Round integers
+ if (type === "int" || opts.precision === 0 || opts.round === 1) {
+ clamped = Math.round(clamped);
+ }
+ widget.value = clamped;
+ } else if (type === "toggle" || type === "boolean") {
widget.value = Boolean(newValue);
} else {
widget.value = newValue;
}
- try { widget.callback?.(widget.value); } catch (e) { console.debug?.(e); }
+ // Sync ComfyUI's own DOM element for this widget.
+ // customtext/string widgets use widget.inputEl (a textarea positioned on the canvas).
+ // Without this, the canvas widget DOM shows the old value even though widget.value changed.
+ // Called AFTER the callback so it reflects the final snapped/clamped value.
+
try {
const app = getComfyApp();
- app?.canvas?.setDirty?.(true, true);
+ const canvas = app?.canvas ?? null;
+ const resolvedNode = node ?? widget?.parent ?? null;
+ // Save value before callback: LiteGraph number callbacks snap widget.value to
+ // multiples of step2 (e.g. 1025 → 1024 for step2=16). We restore afterwards so
+ // the sidebar always writes the exact value the user typed/clicked.
+ const savedValue = widget.value;
+ // Call with full LiteGraph/ComfyUI signature: (value, canvas, node, event, widget)
+ widget.callback?.(widget.value, canvas, resolvedNode, null, widget);
+ // Restore exact value (bypasses step2 snapping while keeping callback side-effects).
+ if (type === "number" || type === "int" || type === "float") {
+ widget.value = savedValue;
+ }
+ _syncWidgetDomElement(widget);
+ canvas?.setDirty?.(true, true);
+ canvas?.draw?.(true, true);
+ // Notify the node's own graph (may be an inner subgraph graph, different from root).
+ const nodeGraph = resolvedNode?.graph ?? null;
+ if (nodeGraph && nodeGraph !== app?.graph) {
+ nodeGraph.setDirtyCanvas?.(true, true);
+ nodeGraph.change?.();
+ }
+ // Always notify root graph (triggers ComfyUI workflow tracking).
app?.graph?.setDirtyCanvas?.(true, true);
- } catch (e) { console.debug?.(e); }
+ app?.graph?.change?.();
+ } catch (e) { console.debug?.("[MFV] writeWidgetValue", e); }
return true;
}
// ── Private builders ──────────────────────────────────────────────────────────
-function _numberInput(widget, onChange) {
+/**
+ * Push widget.value into ComfyUI's own DOM element for this widget.
+ * ComfyUI creates a real textarea/input DOM node for customtext/string widgets
+ * (widget.inputEl) and positions it on top of the canvas. Updating widget.value
+ * alone does not refresh that element — we must set its value directly.
+ */
+function _syncWidgetDomElement(widget) {
+ const strVal = String(widget.value ?? "");
+ // ComfyUI customtext: widget.inputEl is the canvas-overlay textarea.
+ // For PromotedWidgetView (subgraph exposed widgets), there is no direct inputEl:
+ // the real DOM textarea lives on cachedDeepestByFrame.widget.inputEl.
+ const el = widget?.inputEl
+ ?? widget?.element
+ ?? widget?.el
+ ?? widget?.cachedDeepestByFrame?.widget?.inputEl
+ ?? widget?.cachedDeepestByFrame?.widget?.element
+ ?? widget?.cachedDeepestByFrame?.widget?.el
+ ?? null;
+ if (el != null && "value" in el && el.value !== strVal) {
+ el.value = strVal;
+ }
+}
+
+function _numberInput(widget, onChange, node) {
const input = document.createElement("input");
input.type = "number";
input.className = "mjr-ws-input";
input.value = widget.value ?? "";
const opts = widget.options ?? {};
+ const wtype = String(widget?.type || "").toLowerCase();
+ const isInt = wtype === "int" || opts.precision === 0 || opts.round === 1;
+
if (opts.min != null) input.min = String(opts.min);
if (opts.max != null) input.max = String(opts.max);
- if (opts.step != null) input.step = String(opts.step);
- // Real-time: write on every keystroke (skip invalid partial states like "-" or ".").
+
+ // Arrow step: always 1 for integers so the spinner increments by 1.
+ // options.step2 (the LiteGraph snap multiplier) is intentionally ignored here
+ // because writeWidgetValue restores widget.value after the callback, bypassing snap.
+ if (isInt) {
+ input.step = "1";
+ } else {
+ const precision = opts.precision;
+ input.step = precision != null ? String(Math.pow(10, -precision)) : "any";
+ }
+
+ // Real-time: write on every keystroke / arrow click.
input.addEventListener("input", () => {
const raw = input.value;
if (raw === "" || raw === "-" || raw === "." || raw.endsWith(".")) return;
- writeWidgetValue(widget, raw);
+ writeWidgetValue(widget, raw, node);
onChange?.(widget.value);
});
- // On blur/Enter: sync display with possibly-clamped widget value.
+ // On blur / Enter: snap display to the clamped/rounded widget value.
input.addEventListener("change", () => {
- if (writeWidgetValue(widget, input.value)) {
- input.value = widget.value;
+ if (writeWidgetValue(widget, input.value, node)) {
+ input.value = String(widget.value);
onChange?.(widget.value);
}
});
return input;
}
-function _comboInput(widget, onChange) {
+function _comboInput(widget, onChange, node) {
const select = document.createElement("select");
select.className = "mjr-ws-input";
let values = widget.options?.values ?? [];
@@ -107,14 +180,12 @@ function _comboInput(widget, onChange) {
select.appendChild(opt);
}
select.addEventListener("change", () => {
- if (writeWidgetValue(widget, select.value)) onChange?.(widget.value);
+ if (writeWidgetValue(widget, select.value, node)) onChange?.(widget.value);
});
return select;
}
-function _textInput(widget, onChange) {
- const COLLAPSED_MAX = 80;
-
+function _textInput(widget, onChange, node) {
const wrapper = document.createElement("div");
wrapper.className = "mjr-ws-text-wrapper";
@@ -123,56 +194,30 @@ function _textInput(widget, onChange) {
textarea.value = widget.value ?? "";
textarea.rows = 2;
- const expandBtn = document.createElement("button");
- expandBtn.type = "button";
- expandBtn.className = "mjr-ws-expand-btn";
- expandBtn.textContent = "Expand";
- expandBtn.style.display = "none";
-
- let expanded = false;
-
const autoFit = () => {
textarea.style.height = "auto";
- const full = textarea.scrollHeight;
- if (expanded) {
- textarea.style.height = full + "px";
- textarea.style.maxHeight = "none";
- expandBtn.textContent = "Collapse";
- } else {
- textarea.style.height = Math.min(full, COLLAPSED_MAX) + "px";
- textarea.style.maxHeight = COLLAPSED_MAX + "px";
- expandBtn.textContent = "Expand";
- }
- expandBtn.style.display = full > COLLAPSED_MAX ? "" : "none";
+ textarea.style.height = textarea.scrollHeight + "px";
};
textarea.addEventListener("change", () => {
- if (writeWidgetValue(widget, textarea.value)) onChange?.(widget.value);
+ if (writeWidgetValue(widget, textarea.value, node)) onChange?.(widget.value);
});
- // Real-time: write on every keystroke.
textarea.addEventListener("input", () => {
- writeWidgetValue(widget, textarea.value);
+ writeWidgetValue(widget, textarea.value, node);
onChange?.(widget.value);
autoFit();
});
- expandBtn.addEventListener("click", () => {
- expanded = !expanded;
- autoFit();
- });
-
wrapper.appendChild(textarea);
- wrapper.appendChild(expandBtn);
wrapper._mjrAutoFit = autoFit;
textarea._mjrAutoFit = autoFit;
- // Initial fit after insertion
requestAnimationFrame(autoFit);
return wrapper;
}
-function _toggleInput(widget, onChange) {
+function _toggleInput(widget, onChange, node) {
const label = document.createElement("label");
label.className = "mjr-ws-toggle-label";
const input = document.createElement("input");
@@ -180,7 +225,7 @@ function _toggleInput(widget, onChange) {
input.className = "mjr-ws-checkbox";
input.checked = Boolean(widget.value);
input.addEventListener("change", () => {
- if (writeWidgetValue(widget, input.checked)) onChange?.(widget.value);
+ if (writeWidgetValue(widget, input.checked, node)) onChange?.(widget.value);
});
label.appendChild(input);
return label;
diff --git a/js/tests/floating_viewer_media_player_bridge.vitest.mjs b/js/tests/floating_viewer_media_player_bridge.vitest.mjs
new file mode 100644
index 00000000..c64e0645
--- /dev/null
+++ b/js/tests/floating_viewer_media_player_bridge.vitest.mjs
@@ -0,0 +1,84 @@
+// @vitest-environment happy-dom
+
+import { beforeEach, describe, expect, it, vi } from "vitest";
+
+const mountUnifiedMediaControlsMock = vi.fn(() => ({ destroy: vi.fn() }));
+const mountFloatingViewerSimplePlayerMock = vi.fn((mediaEl) => mediaEl);
+
+vi.mock("../api/endpoints.js", () => ({
+ buildViewURL: vi.fn((filename) => `/view/${filename}`),
+ buildAssetViewURL: vi.fn((fileData) => `/asset/${fileData?.filename || ""}`),
+}));
+
+vi.mock("../features/viewer/model3dRenderer.js", () => ({
+ MODEL3D_EXTS: new Set(),
+ createModel3DMediaElement: vi.fn(),
+}));
+
+vi.mock("../features/viewer/mediaPlayer.js", () => ({
+ mountUnifiedMediaControls: mountUnifiedMediaControlsMock,
+}));
+
+vi.mock("../features/viewer/floatingViewerSimplePlayer.js", () => ({
+ mountFloatingViewerSimplePlayer: mountFloatingViewerSimplePlayerMock,
+}));
+
+vi.mock("../utils/mediaFps.js", () => ({
+ readAssetFps: vi.fn(() => 24),
+ readAssetFrameCount: vi.fn(() => 48),
+}));
+
+describe("floating viewer media player bridge", () => {
+ beforeEach(() => {
+ document.body.innerHTML = "";
+ mountUnifiedMediaControlsMock.mockClear();
+ mountFloatingViewerSimplePlayerMock.mockClear();
+ });
+
+ it("uses unified video controls for video assets", async () => {
+ const { buildFloatingViewerMediaElement } = await import(
+ "../features/viewer/floatingViewerMedia.js"
+ );
+
+ const root = buildFloatingViewerMediaElement({
+ filename: "clip.mp4",
+ kind: "video",
+ });
+
+ expect(root?.classList.contains("mjr-mfv-player-host")).toBe(true);
+ expect(root?._mjrMediaControlsHandle?.destroy).toBeTypeOf("function");
+ expect(root?.querySelector("video")).toBeTruthy();
+ expect(mountUnifiedMediaControlsMock).toHaveBeenCalledWith(
+ expect.any(HTMLVideoElement),
+ expect.objectContaining({
+ variant: "viewer",
+ mediaKind: "video",
+ initialFps: 24,
+ initialFrameCount: 48,
+ }),
+ );
+ expect(mountFloatingViewerSimplePlayerMock).not.toHaveBeenCalled();
+ });
+
+ it("uses unified video controls for audio assets", async () => {
+ const { buildFloatingViewerMediaElement } = await import(
+ "../features/viewer/floatingViewerMedia.js"
+ );
+
+ const root = buildFloatingViewerMediaElement({
+ filename: "track.mp3",
+ kind: "audio",
+ });
+
+ expect(root?.classList.contains("mjr-mfv-player-host")).toBe(true);
+ expect(root?.querySelector("audio")).toBeTruthy();
+ expect(mountUnifiedMediaControlsMock).toHaveBeenCalledWith(
+ expect.any(HTMLAudioElement),
+ expect.objectContaining({
+ variant: "viewer",
+ mediaKind: "audio",
+ }),
+ );
+ expect(mountFloatingViewerSimplePlayerMock).not.toHaveBeenCalled();
+ });
+});
diff --git a/js/tests/floating_viewer_toolbar_overlay_controls.vitest.mjs b/js/tests/floating_viewer_toolbar_overlay_controls.vitest.mjs
new file mode 100644
index 00000000..478bae27
--- /dev/null
+++ b/js/tests/floating_viewer_toolbar_overlay_controls.vitest.mjs
@@ -0,0 +1,83 @@
+// @vitest-environment happy-dom
+
+import { describe, expect, it, vi } from "vitest";
+
+vi.mock("../app/i18n.js", () => ({
+ t: (_key, fallback) => fallback || "",
+}));
+
+vi.mock("../app/events.js", () => ({
+ EVENTS: {},
+}));
+
+vi.mock("../app/config.js", () => ({
+ APP_CONFIG: {},
+}));
+
+vi.mock("../utils/tooltipShortcuts.js", () => ({
+ appendTooltipHint: vi.fn(),
+ setTooltipHint: vi.fn(),
+}));
+
+vi.mock("../features/viewer/nodeStream/nodeStreamFeatureFlag.js", () => ({
+ NODE_STREAM_FEATURE_ENABLED: false,
+}));
+
+vi.mock("../features/viewer/workflowSidebar/WorkflowSidebar.js", () => ({
+ WorkflowSidebar: class {
+ constructor() {
+ this.el = document.createElement("div");
+ this.isVisible = false;
+ }
+ toggle() {
+ this.isVisible = !this.isVisible;
+ }
+ },
+}));
+
+vi.mock("../features/viewer/workflowSidebar/sidebarRunButton.js", () => ({
+ createRunButton: () => ({ el: document.createElement("div") }),
+}));
+
+vi.mock("../features/viewer/floatingViewerProgress.js", () => ({
+ buildFloatingViewerMediaProgressOverlay: () => document.createElement("div"),
+ buildFloatingViewerProgressBar: () => document.createElement("div"),
+}));
+
+vi.mock("../components/sidebar/parsers/geninfoParser.js", () => ({
+ normalizeGenerationMetadata: vi.fn((v) => v),
+ sanitizePromptForDisplay: vi.fn((v) => v),
+}));
+
+describe("floating viewer toolbar overlay controls", () => {
+ it("renders guides and mask/format controls in the toolbar", async () => {
+ const { buildFloatingViewerToolbar } = await import("../features/viewer/floatingViewerUi.js");
+
+ const viewer = {
+ _channel: "rgb",
+ _exposureEV: 0,
+ _gridMode: 0,
+ _overlayFormat: "image",
+ _overlayMaskOpacity: 0.65,
+ _overlayMaskEnabled: false,
+ _updateModeBtnUI: vi.fn(),
+ _updatePinUI: vi.fn(),
+ _updateGenBtnUI: vi.fn(),
+ _bindDocumentUiHandlers: vi.fn(),
+ _redrawOverlayGuides: vi.fn(),
+ };
+
+ const bar = buildFloatingViewerToolbar(viewer);
+
+ expect(bar.querySelector(".mjr-mfv-toolbar-select")).toBeTruthy();
+ expect(viewer._guidesSelect).toBeTruthy();
+ expect(viewer._channelSelect).toBeTruthy();
+ expect(viewer._exposureCtl?.input).toBeTruthy();
+ expect(viewer._formatSelect).toBeTruthy();
+ expect(viewer._formatToggle).toBeTruthy();
+ expect(viewer._maskOpacityCtl?.input).toBeTruthy();
+ expect(viewer._guidesSelect.value).toBe("0");
+ expect(viewer._channelSelect.value).toBe("rgb");
+ expect(viewer._formatSelect.value).toBe("image");
+ });
+});
diff --git a/js/tests/video_controls_responsive_layout.vitest.mjs b/js/tests/video_controls_responsive_layout.vitest.mjs
new file mode 100644
index 00000000..f5b9aac0
--- /dev/null
+++ b/js/tests/video_controls_responsive_layout.vitest.mjs
@@ -0,0 +1,50 @@
+import { Window } from "happy-dom";
+import { describe, expect, it, vi } from "vitest";
+
+vi.mock("../app/i18n.js", () => ({
+ t: (_key, fallback) => fallback || "",
+}));
+
+describe("video controls responsive layout", () => {
+ it("switches to stacked layout when the host is narrow", async () => {
+ const window = new Window();
+ globalThis.window = window;
+ globalThis.document = window.document;
+ Object.defineProperty(globalThis, "navigator", {
+ configurable: true,
+ value: window.navigator,
+ });
+
+ const resizeObservers = [];
+ globalThis.ResizeObserver = class {
+ constructor(cb) {
+ this.cb = cb;
+ resizeObservers.push(this);
+ }
+ observe() {}
+ disconnect() {}
+ };
+
+ const { mountVideoControls } = await import("../components/VideoControls.js");
+
+ const host = document.createElement("div");
+ Object.defineProperty(host, "clientWidth", {
+ configurable: true,
+ get: () => 520,
+ });
+ const video = document.createElement("video");
+ host.appendChild(video);
+ document.body.appendChild(host);
+
+ const mounted = mountVideoControls(video, {
+ variant: "viewer",
+ mediaKind: "video",
+ hostEl: host,
+ });
+
+ resizeObservers[0]?.cb?.();
+
+ expect(mounted.controlsEl?.dataset?.mjrLayout).toBe("stacked");
+ mounted.destroy();
+ });
+});
diff --git a/js/theme/theme-comfy.css b/js/theme/theme-comfy.css
index adfdae89..00435f39 100644
--- a/js/theme/theme-comfy.css
+++ b/js/theme/theme-comfy.css
@@ -3270,7 +3270,7 @@
gap: 12px;
display: grid;
align-items: center;
- grid-template-columns: auto 1fr auto auto auto;
+ grid-template-columns: auto auto 1fr auto auto;
}
.mjr-video-controls--viewerbar .mjr-video-row--top {
@@ -4228,6 +4228,13 @@ body.mjr-mfv-popout-body {
border-bottom: 1px solid var(--mjr-border);
flex-shrink: 0;
min-height: 36px;
+ flex-wrap: nowrap;
+ overflow-x: auto;
+ overflow-y: hidden;
+ scrollbar-width: none;
+}
+.mjr-mfv-toolbar::-webkit-scrollbar {
+ display: none;
}
.mjr-mfv-toolbar-sep {
@@ -4336,7 +4343,199 @@ body.mjr-mfv-popout-body {
box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--mjr-accent) 24%, transparent);
}
-/* ── Icon buttons inside MFV (outside .mjr-assets-manager scope) ─────── */
+/* ── Pin group: now a dropdown menu (display:none by default, flex when .is-open) ── */
+.mjr-mfv-pin-group {
+ display: none;
+ flex-direction: column;
+ gap: 2px;
+ position: absolute;
+ top: calc(100% + 4px);
+ left: 0;
+ z-index: 10010;
+ min-width: 70px;
+ padding: 4px;
+ background: var(--comfy-menu-bg, #2a2a2a);
+ border: 1px solid var(--mjr-border, rgba(255,255,255,0.12));
+ border-radius: 8px;
+ box-shadow: 0 8px 24px rgba(0,0,0,0.55);
+}
+.mjr-mfv-pin-group.is-open {
+ display: flex;
+}
+.mjr-mfv-pin-btn {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 100%;
+ height: 30px;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ background: none;
+ color: var(--content-fg, #ddd);
+ font-size: 12px;
+ font-weight: 600;
+ cursor: pointer;
+ padding: 0 10px;
+ text-align: center;
+ transition: background 120ms ease, border-color 120ms ease, color 120ms ease;
+}
+.mjr-mfv-pin-btn:hover {
+ background: rgba(255,255,255,0.08);
+ border-color: color-mix(in srgb, var(--mjr-accent) 35%, transparent);
+}
+.mjr-mfv-pin-btn.is-pinned {
+ border-color: color-mix(in srgb, var(--mjr-accent) 58%, #ffffff 12%);
+ background: color-mix(in srgb, var(--mjr-surface-2, #333) 42%, var(--mjr-accent, #5fb3ff) 58%);
+ color: #eef7ff;
+}
+
+/* ── Icon Dropdown component (.mjr-mfv-idrop) ─────────────────────────── */
+.mjr-mfv-idrop {
+ position: relative;
+ display: inline-flex;
+ align-items: center;
+ flex-shrink: 0;
+}
+
+.mjr-mfv-idrop-menu {
+ display: none;
+ flex-direction: column;
+ gap: 2px;
+ position: absolute;
+ top: calc(100% + 4px);
+ left: 0;
+ z-index: 10010;
+ min-width: 110px;
+ padding: 4px;
+ background: var(--comfy-menu-bg, #2a2a2a);
+ border: 1px solid var(--mjr-border, rgba(255,255,255,0.12));
+ border-radius: 8px;
+ box-shadow: 0 8px 24px rgba(0,0,0,0.55);
+ white-space: nowrap;
+}
+.mjr-mfv-idrop-menu.is-open {
+ display: flex;
+}
+
+.mjr-mfv-idrop-item {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ width: 100%;
+ padding: 6px 10px;
+ background: none;
+ border: none;
+ border-radius: 6px;
+ color: var(--input-text, #ddd);
+ font-size: 12px;
+ font-family: inherit;
+ text-align: left;
+ cursor: pointer;
+ white-space: nowrap;
+ transition: background 0.1s ease;
+}
+.mjr-mfv-idrop-item:hover {
+ background: rgba(255,255,255,0.08);
+}
+.mjr-mfv-idrop-item.is-selected {
+ background: rgba(95,179,255,0.16);
+ color: #a8d8ff;
+}
+.mjr-mfv-idrop-trigger[aria-expanded="true"] {
+ background: rgba(255,255,255,0.1) !important;
+ border-color: rgba(255,255,255,0.2) !important;
+}
+/* Channel trigger: slightly wider to fit "RGB" */
+.mjr-mfv-ch-label {
+ font-size: 12px;
+ letter-spacing: 0.04em;
+ line-height: 1;
+}
+
+/* Toolbar icon-button popovers (channel, guides, pin, format — sort-style context menus) */
+.mjr-mfv-ch-popover,
+.mjr-mfv-guides-popover,
+.mjr-mfv-pin-popover,
+.mjr-mfv-format-popover {
+ position: absolute;
+ min-width: 120px;
+ padding: 6px;
+ border-radius: var(--radius-lg, 0.5rem);
+ background: var(--mjr-surface-1, var(--comfy-menu-bg, #2a2a2a));
+ border: 1px solid var(--mjr-border, rgba(255,255,255,0.12));
+ box-shadow: 0 8px 24px rgba(0,0,0,0.55);
+ z-index: 10010;
+ display: none;
+}
+.mjr-mfv-ch-popover.is-open,
+.mjr-mfv-guides-popover.is-open,
+.mjr-mfv-pin-popover.is-open,
+.mjr-mfv-format-popover.is-open {
+ display: block;
+}
+/* Toolbar icon images — ch icon is black (inverted), guides icon is native white */
+.mjr-mfv-ch-icon {
+ width: 18px;
+ height: 18px;
+ filter: invert(1);
+ opacity: 0.85;
+ display: block;
+}
+.mjr-mfv-guides-icon {
+ width: 18px;
+ height: 18px;
+ opacity: 0.85;
+ display: block;
+}
+.mjr-mfv-ch-trigger[aria-expanded="true"],
+.mjr-mfv-guides-trigger[aria-expanded="true"],
+.mjr-mfv-pin-trigger[aria-expanded="true"],
+.mjr-mfv-format-trigger[aria-expanded="true"] {
+ background: rgba(255,255,255,0.1) !important;
+ border-color: rgba(255,255,255,0.2) !important;
+}
+/* Pin slot active state */
+.mjr-mfv-pin-popover .mjr-menu-item.is-pinned {
+ background: rgba(95,179,255,0.16);
+ color: #a8d8ff;
+}
+.mjr-mfv-pin-popover .mjr-menu-item.is-pinned .mjr-menu-item-check {
+ opacity: 1 !important;
+}
+/* Format popover: separator + opacity slider row */
+.mjr-mfv-format-sep {
+ height: 1px;
+ background: var(--mjr-border, rgba(255,255,255,0.1));
+ margin: 4px 2px;
+}
+.mjr-mfv-format-slider-row {
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ padding: 4px 8px 2px;
+}
+.mjr-mfv-format-slider-label {
+ font-size: 11px;
+ color: var(--input-text, #ddd);
+ opacity: 0.65;
+ white-space: nowrap;
+ flex-shrink: 0;
+}
+.mjr-mfv-format-popover input[type="range"] {
+ flex: 1;
+ min-width: 70px;
+ accent-color: var(--mjr-accent, #5fb3ff);
+}
+.mjr-mfv-format-popover .mjr-mfv-toolbar-range-out {
+ font-size: 11px;
+ color: var(--input-text, #ddd);
+ opacity: 0.65;
+ min-width: 30px;
+ text-align: right;
+ flex-shrink: 0;
+}
+
+
.mjr-mfv .mjr-icon-btn {
width: 30px;
height: 30px;
@@ -4371,6 +4570,18 @@ body.mjr-mfv-popout-body {
opacity: 0.9;
}
+/* Universal active highlight — any aria-pressed="true" button gets accent glow.
+ Placed before the colored active classes so they can override with their own color. */
+.mjr-mfv .mjr-icon-btn[aria-pressed="true"] {
+ border-color: rgba(95, 179, 255, 0.55);
+ color: var(--mjr-accent, #5fb3ff);
+ background: color-mix(in srgb, var(--mjr-surface-2, #333) 80%, var(--mjr-accent, #5fb3ff) 15%);
+ box-shadow: 0 0 0 1px color-mix(in srgb, var(--mjr-accent, #5fb3ff) 25%, transparent);
+}
+.mjr-mfv .mjr-icon-btn[aria-pressed="true"] .pi {
+ opacity: 1;
+}
+
.mjr-mfv .mjr-icon-btn.mjr-live-active {
border-color: color-mix(in srgb, var(--mjr-status-success) 60%, var(--mjr-border));
color: var(--mjr-status-success);
@@ -4681,7 +4892,6 @@ body.mjr-mfv-popout-body {
width: 100%;
height: 220px;
overflow-y: auto;
- resize: vertical;
min-height: 120px;
max-height: 65%;
}
@@ -4695,6 +4905,53 @@ body.mjr-mfv-popout-body {
min-height: 0;
}
+.mjr-mfv-overlay-canvas {
+ position: absolute;
+ inset: 0;
+ width: 100%;
+ height: 100%;
+ pointer-events: none;
+ z-index: 12;
+}
+
+.mjr-mfv-toolbar-select {
+ height: 24px;
+ padding: 0 6px;
+ border-radius: 6px;
+ border: 0.8px solid rgba(196, 202, 210, 0.24);
+ background: linear-gradient(180deg, rgba(210,214,220,0.06), rgba(210,214,220,0.02));
+ color: rgba(230,233,238,0.92);
+ font-size: 11px;
+ outline: none;
+}
+
+.mjr-mfv-toolbar-range {
+ display: inline-flex;
+ align-items: center;
+ gap: 6px;
+}
+
+.mjr-mfv-toolbar-range input[type="range"] {
+ width: 72px;
+ accent-color: rgba(255,255,255,0.85);
+}
+
+.mjr-mfv-toolbar-range-out {
+ min-width: 30px;
+ text-align: right;
+ font-size: 11px;
+ color: rgba(255,255,255,0.9);
+}
+
+/* EV slider active state (value ≠ 0) */
+.mjr-mfv-toolbar-range.is-active input[type="range"] {
+ accent-color: #f5c842;
+}
+.mjr-mfv-toolbar-range.is-active .mjr-mfv-toolbar-range-out {
+ color: #f5c842;
+ font-weight: 600;
+}
+
.mjr-mfv-media-progress {
position: absolute;
top: 10px;
@@ -4737,6 +4994,9 @@ body.mjr-mfv-popout-body {
/* ── Workflow Sidebar ────────────────────────────────────────────────── */
.mjr-ws-sidebar {
+ position: relative;
+ display: flex;
+ flex-direction: column;
width: 0;
overflow: hidden;
background: var(--mjr-surface-1, #2a2a2a);
@@ -4747,17 +5007,12 @@ body.mjr-mfv-popout-body {
.mjr-ws-sidebar.open {
width: 260px;
- overflow-y: auto;
- resize: horizontal;
+ overflow: hidden;
min-width: 180px;
max-width: 65%;
transition: none;
}
-.mjr-mfv-content-wrapper[data-sidebar-pos="bottom"] .mjr-ws-sidebar {
- resize: none;
-}
-
.mjr-ws-sidebar-header {
display: flex;
align-items: center;
@@ -4775,6 +5030,9 @@ body.mjr-mfv-popout-body {
opacity: 0.65;
}
.mjr-ws-sidebar-body {
+ flex: 1;
+ min-height: 0;
+ overflow-y: auto;
padding: 0;
}
.mjr-ws-sidebar-empty {
@@ -4785,26 +5043,275 @@ body.mjr-mfv-popout-body {
line-height: 1.5;
}
+/* ── Tab bar ──────────────────────────────────────────────────────────── */
+.mjr-ws-tab-bar {
+ display: flex;
+ flex-shrink: 0;
+ gap: 2px;
+ padding: 4px 8px;
+ border-bottom: 1px solid var(--mjr-border, rgba(255, 255, 255, 0.12));
+ background: rgba(0, 0, 0, 0.18);
+}
+
+.mjr-ws-tab {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 5px;
+ padding: 4px 8px;
+ border: none;
+ border-radius: 4px;
+ background: transparent;
+ color: rgba(255, 255, 255, 0.45);
+ font-size: 11px;
+ font-weight: 500;
+ cursor: pointer;
+ transition: background 0.15s, color 0.15s;
+}
+
+.mjr-ws-tab:hover {
+ background: rgba(255, 255, 255, 0.07);
+ color: rgba(255, 255, 255, 0.75);
+}
+
+.mjr-ws-tab.is-active {
+ background: rgba(99, 155, 255, 0.15);
+ color: #639bff;
+}
+
+/* ── Nodes tab ────────────────────────────────────────────────────────── */
+.mjr-ws-nodes-tab {
+ display: flex;
+ flex-direction: column;
+ flex: 1;
+ min-height: 0;
+ overflow: hidden;
+}
+
+.mjr-ws-search-wrap {
+ position: relative;
+ display: flex;
+ align-items: center;
+ flex-shrink: 0;
+ padding: 6px 8px;
+ border-bottom: 1px solid var(--mjr-border, rgba(255, 255, 255, 0.12));
+}
+
+.mjr-ws-search-icon {
+ position: absolute;
+ left: 16px;
+ font-size: 11px;
+ color: rgba(255, 255, 255, 0.3);
+ pointer-events: none;
+}
+
+.mjr-ws-search {
+ flex: 1;
+ padding: 4px 28px 4px 26px;
+ background: rgba(0, 0, 0, 0.35);
+ border: 1px solid rgba(255, 255, 255, 0.12);
+ border-radius: 4px;
+ color: rgba(255, 255, 255, 0.85);
+ font-size: 11px;
+ outline: none;
+}
+
+.mjr-ws-search::placeholder {
+ color: rgba(255, 255, 255, 0.28);
+}
+
+.mjr-ws-search:focus {
+ border-color: rgba(99, 155, 255, 0.5);
+}
+
+.mjr-ws-search-clear {
+ position: absolute;
+ right: 14px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 18px;
+ height: 18px;
+ padding: 0;
+ border: none;
+ background: transparent;
+ color: rgba(255, 255, 255, 0.3);
+ font-size: 10px;
+ cursor: pointer;
+ border-radius: 3px;
+}
+
+.mjr-ws-search-clear:hover {
+ color: rgba(255, 255, 255, 0.7);
+ background: rgba(255, 255, 255, 0.08);
+}
+
+.mjr-ws-nodes-list {
+ flex: 1;
+ overflow-y: auto;
+ padding: 4px 0;
+}
+
+.mjr-ws-node-row {
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ padding: 5px 10px 5px 12px;
+ cursor: pointer;
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
+ min-height: 32px;
+ transition: background 0.1s;
+}
+
+.mjr-ws-node-row:hover {
+ background: rgba(255, 255, 255, 0.06);
+}
+
+.mjr-ws-node-row-type {
+ flex: 1;
+ font-size: 11px;
+ color: rgba(255, 255, 255, 0.78);
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.mjr-ws-node-row-title {
+ font-size: 10px;
+ color: rgba(255, 255, 255, 0.4);
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ max-width: 80px;
+ flex-shrink: 0;
+}
+
+.mjr-ws-node-locate {
+ flex-shrink: 0;
+ width: 22px;
+ height: 22px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 0;
+ border: none;
+ background: transparent;
+ color: rgba(255, 255, 255, 0.3);
+ font-size: 11px;
+ border-radius: 3px;
+ cursor: pointer;
+ opacity: 0;
+ transition: opacity 0.1s, color 0.1s, background 0.1s;
+}
+
+.mjr-ws-node-row:hover .mjr-ws-node-locate {
+ opacity: 1;
+}
+
+.mjr-ws-node-locate:hover {
+ color: #639bff;
+ background: rgba(99, 155, 255, 0.15);
+}
+
/* ── Node sections ────────────────────────────────────────────────────── */
.mjr-ws-node {
border-bottom: 1px solid var(--mjr-border, rgba(255, 255, 255, 0.12));
}
+.mjr-ws-sidebar-resizer {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ width: 14px;
+ z-index: 2;
+ cursor: ew-resize;
+ pointer-events: auto;
+}
+
+.mjr-ws-sidebar-resizer::before {
+ content: "";
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 4px;
+ height: 56px;
+ transform: translate(-50%, -50%);
+ border-radius: 999px;
+ background: rgba(255, 255, 255, 0.18);
+ box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.06);
+ opacity: 0;
+ transition: opacity 0.15s ease, background 0.15s ease;
+}
+
+.mjr-ws-sidebar.open:hover .mjr-ws-sidebar-resizer::before,
+.mjr-ws-sidebar.is-resizing .mjr-ws-sidebar-resizer::before,
+.mjr-ws-sidebar-resizer.is-dragging::before {
+ opacity: 1;
+}
+
+.mjr-ws-sidebar.is-resizing .mjr-ws-sidebar-resizer::before,
+.mjr-ws-sidebar-resizer:hover::before,
+.mjr-ws-sidebar-resizer.is-dragging::before {
+ background: rgba(255, 255, 255, 0.34);
+}
+
+.mjr-mfv-content-wrapper[data-sidebar-pos="right"] .mjr-ws-sidebar-resizer {
+ right: 0;
+}
+
+.mjr-mfv-content-wrapper[data-sidebar-pos="left"] .mjr-ws-sidebar-resizer {
+ left: 0;
+}
+
+.mjr-mfv-content-wrapper[data-sidebar-pos="bottom"] .mjr-ws-sidebar-resizer {
+ display: none;
+}
.mjr-ws-node-header {
display: flex;
align-items: center;
- justify-content: space-between;
+ gap: 8px;
padding: 6px 10px;
background: color-mix(in srgb, var(--mjr-surface-0, #1e1e1e) 40%, var(--mjr-surface-1, #2a2a2a) 60%);
+ cursor: default;
+ user-select: none;
+ transition: background 0.12s ease;
}
-.mjr-ws-node-title {
+.mjr-ws-node.is-collapsible .mjr-ws-node-header {
+ cursor: pointer;
+}
+.mjr-ws-node.is-collapsible .mjr-ws-node-header:hover {
+ background: color-mix(in srgb, var(--mjr-surface-0, #1e1e1e) 28%, var(--mjr-surface-1, #2a2a2a) 72%);
+}
+.mjr-ws-node.is-collapsible.is-collapsed .mjr-ws-node-header:hover {
+ background: color-mix(in srgb, var(--mjr-accent, #5b8af0) 8%, var(--mjr-surface-1, #2a2a2a) 92%);
+}
+.mjr-ws-node-toggle {
+ flex: 0 0 auto;
+}
+.mjr-ws-node-title-wrap {
+ display: flex;
+ flex: 1;
+ min-width: 0;
+ flex-direction: column;
+ gap: 1px;
+}
+.mjr-ws-node-type {
font-weight: 600;
font-size: 12px;
color: var(--content-fg, #ddd);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
- flex: 1;
- margin-right: 6px;
+}
+.mjr-ws-node-title {
+ font-size: 10px;
+ color: rgba(255, 255, 255, 0.48);
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.mjr-ws-node.is-collapsed .mjr-ws-node-body {
+ display: none;
}
.mjr-ws-node-body {
display: flex;
@@ -4818,7 +5325,51 @@ body.mjr-mfv-popout-body {
padding: 4px 0;
}
-/* ── Widget rows ──────────────────────────────────────────────────────── */
+/* ── Nested nodes (inside subgraphs) ─────────────────────────────────── */
+.mjr-ws-node--nested {
+ border-left: 2px solid rgba(91, 138, 240, 0.35);
+}
+.mjr-ws-node--nested .mjr-ws-node-header {
+ padding-left: 16px;
+ background: color-mix(in srgb, var(--mjr-accent, #5b8af0) 5%, var(--mjr-surface-1, #2a2a2a) 95%);
+}
+.mjr-ws-node--nested.is-collapsible .mjr-ws-node-header:hover {
+ background: color-mix(in srgb, var(--mjr-accent, #5b8af0) 10%, var(--mjr-surface-1, #2a2a2a) 90%);
+}
+
+/* ── Subgraph children group ──────────────────────────────────────────── */
+.mjr-ws-children-toggle {
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ width: 100%;
+ padding: 5px 10px 5px 20px;
+ background: color-mix(in srgb, var(--mjr-accent, #5b8af0) 6%, var(--mjr-surface-0, #1e1e1e) 94%);
+ border: none;
+ border-bottom: 1px solid var(--mjr-border, rgba(255, 255, 255, 0.12));
+ color: var(--mjr-accent, #5b8af0);
+ font-size: 11px;
+ cursor: pointer;
+ text-align: left;
+ opacity: 0.8;
+ transition: opacity 0.1s ease, background 0.1s ease;
+}
+.mjr-ws-children-toggle--nested {
+ padding-left: 28px;
+}
+.mjr-ws-children-toggle:hover {
+ opacity: 1;
+ background: color-mix(in srgb, var(--mjr-accent, #5b8af0) 12%, var(--mjr-surface-0, #1e1e1e) 88%);
+}
+.mjr-ws-children-toggle[aria-expanded="true"] {
+ opacity: 1;
+}
+.mjr-ws-children {
+ border-left: 2px solid rgba(91, 138, 240, 0.25);
+ margin-left: 6px;
+}
+
+
.mjr-ws-widget-row {
display: flex;
align-items: flex-start;
@@ -4864,12 +5415,10 @@ body.mjr-mfv-popout-body {
border-color: var(--mjr-accent, #5fb3ff);
}
.mjr-ws-textarea {
- resize: vertical;
+ resize: none;
min-height: 28px;
- max-height: 80px;
line-height: 1.4;
- overflow-y: auto;
- transition: max-height 150ms ease;
+ overflow-y: hidden;
}
.mjr-ws-text-wrapper {
display: flex;
@@ -5070,6 +5619,186 @@ body.mjr-mfv-popout-body {
font-variant-numeric: tabular-nums;
}
+.mjr-mfv-player-host {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ overflow: hidden;
+ container-type: inline-size;
+}
+
+.mjr-mfv-player-host .mjr-video-controls {
+ z-index: 30;
+}
+
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"],
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] {
+ left: 8px;
+ right: 8px;
+ bottom: 8px;
+ padding: 8px;
+ gap: 6px;
+}
+
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"] .mjr-video-row--top,
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-row--top {
+ gap: 8px;
+}
+
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"] .mjr-video-timegroup,
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-timegroup {
+ justify-content: flex-start;
+ gap: 6px;
+}
+
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"] .mjr-video-row--bottom,
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-row--bottom {
+ flex-wrap: nowrap;
+ overflow: hidden;
+ gap: 6px;
+}
+
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"] .mjr-video-bottom,
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-bottom {
+ flex-shrink: 1;
+ flex-wrap: nowrap;
+}
+
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"] .mjr-video-transport,
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-transport {
+ flex-wrap: nowrap;
+}
+
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"] .mjr-video-group,
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-group {
+ flex-wrap: nowrap;
+}
+
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"] .mjr-video-seek-wrap,
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-seek-wrap {
+ min-width: 0;
+}
+
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"] .mjr-video-bar-timeline,
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-bar-timeline {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+}
+
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"] .mjr-video-bar-timeline .mjr-video-seek-wrap,
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-bar-timeline .mjr-video-seek-wrap {
+ order: -1;
+ flex: 1 1 100%;
+ width: 100%;
+}
+
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"] .mjr-video-bar-timeline .mjr-video-group--in,
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"] .mjr-video-bar-timeline .mjr-video-group--out,
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-bar-timeline .mjr-video-group--in,
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-bar-timeline .mjr-video-group--out {
+ flex: 0 1 auto;
+}
+
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"] .mjr-video-range-count,
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"] .mjr-video-frame {
+ min-width: auto;
+}
+
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-range-count {
+ display: none !important;
+}
+
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-frame {
+ min-width: auto;
+ padding: 3px 6px;
+}
+
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-btn--in,
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-btn--out,
+.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-btn--mark {
+ min-width: 32px;
+}
+
+@container (max-width: 900px) {
+ .mjr-mfv-player-host .mjr-video-controls {
+ left: 8px;
+ right: 8px;
+ bottom: 8px;
+ padding: 8px;
+ gap: 6px;
+ }
+
+ .mjr-mfv-player-host .mjr-video-row--top {
+ gap: 8px;
+ }
+
+ .mjr-mfv-player-host .mjr-video-timegroup {
+ justify-content: flex-start;
+ gap: 6px;
+ }
+
+ .mjr-mfv-player-host .mjr-video-row--bottom {
+ flex-wrap: nowrap;
+ overflow: hidden;
+ gap: 6px;
+ }
+
+ .mjr-mfv-player-host .mjr-video-bottom {
+ flex-shrink: 1;
+ flex-wrap: nowrap;
+ }
+
+ .mjr-mfv-player-host .mjr-video-transport {
+ flex-wrap: nowrap;
+ }
+
+ .mjr-mfv-player-host .mjr-video-group {
+ flex-wrap: nowrap;
+ }
+
+ .mjr-mfv-player-host .mjr-video-seek-wrap {
+ min-width: 0;
+ }
+
+ .mjr-mfv-player-host .mjr-video-controls--viewerbar .mjr-video-bar-timeline {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ }
+
+ .mjr-mfv-player-host .mjr-video-controls--viewerbar .mjr-video-bar-timeline .mjr-video-seek-wrap {
+ order: -1;
+ flex: 1 1 100%;
+ width: 100%;
+ }
+}
+
+@container (max-width: 680px) {
+ .mjr-mfv-player-host .mjr-video-controls {
+ padding: 6px;
+ }
+
+ .mjr-mfv-player-host .mjr-video-btn {
+ padding: 5px 8px;
+ font-size: 12px;
+ }
+
+ .mjr-mfv-player-host .mjr-video-num {
+ padding: 4px 6px;
+ font-size: 11px;
+ }
+
+ .mjr-mfv-player-host .mjr-video-time,
+ .mjr-mfv-player-host .mjr-video-frame,
+ .mjr-mfv-player-host .mjr-video-range-count {
+ font-size: 11px;
+ }
+}
+
/* ── Settings button active state ─────────────────────────────────────── */
.mjr-mfv-settings-btn.active {
border-color: color-mix(in srgb, var(--mjr-accent, #5fb3ff) 55%, var(--mjr-border, rgba(255, 255, 255, 0.12)));
@@ -5158,8 +5887,8 @@ body.mjr-mfv-popout-body {
position: fixed;
top: var(--mjr-mfv-top-offset, 60px);
right: 20px;
- width: 480px;
- height: 380px;
+ width: 640px;
+ height: 360px;
min-width: 220px;
min-height: 160px;
/* Always flex; visibility + opacity control show/hide so CSS transitions work.
diff --git a/js/vue/components/grid/AssetsGrid.vue b/js/vue/components/grid/AssetsGrid.vue
index 7f96c3dd..112ba78c 100644
--- a/js/vue/components/grid/AssetsGrid.vue
+++ b/js/vue/components/grid/AssetsGrid.vue
@@ -37,6 +37,20 @@ function syncAssetsQueryVisibility() {
}
}
+function onKeepAliveAttached() {
+ // Re-register the grid container in case the global ref was cleared or
+ // became stale during the keep-alive detach/reattach cycle.
+ try {
+ const container = gridContainerRef.value;
+ if (container) {
+ setActiveGridContainer(container);
+ }
+ } catch (e) {
+ console.debug?.(e);
+ }
+ syncAssetsQueryVisibility();
+}
+
function installVisibilityObservers() {
try {
disposeVisibilityObservers?.();
@@ -143,7 +157,7 @@ onMounted(() => {
}
installVisibilityObservers();
try {
- window.addEventListener("mjr:keepalive-attached", syncAssetsQueryVisibility);
+ window.addEventListener("mjr:keepalive-attached", onKeepAliveAttached);
document.addEventListener("visibilitychange", syncAssetsQueryVisibility);
} catch (e) {
console.debug?.(e);
@@ -182,7 +196,7 @@ onBeforeUnmount(() => {
}
assetsQueryController = null;
try {
- window.removeEventListener("mjr:keepalive-attached", syncAssetsQueryVisibility);
+ window.removeEventListener("mjr:keepalive-attached", onKeepAliveAttached);
document.removeEventListener("visibilitychange", syncAssetsQueryVisibility);
} catch (e) {
console.debug?.(e);
diff --git a/js/vue/components/grid/VirtualAssetGridHost.vue b/js/vue/components/grid/VirtualAssetGridHost.vue
index 9acf0698..5704ecd3 100644
--- a/js/vue/components/grid/VirtualAssetGridHost.vue
+++ b/js/vue/components/grid/VirtualAssetGridHost.vue
@@ -1040,19 +1040,22 @@ function _forceVirtualizerMeasure() {
function handleKeepAliveAttached() {
_forceVirtualizerMeasure();
- if (!isGridVisible()) {
- // Le layout du nouveau container n'est pas encore calculé au moment
- // où keepalive-attached est dispatché. On reporte sur le prochain
- // cycle de rendu pour que le navigateur ait fini la mise en page.
+ // Le layout du nouveau container n'est pas encore calculé au moment
+ // où keepalive-attached est dispatché. Double-rAF + setTimeout 150ms
+ // couvrent les layouts complexes (animations ComfyUI, heavy CSS recalc).
+ requestAnimationFrame(() => {
requestAnimationFrame(() => {
- requestAnimationFrame(() => {
- _forceVirtualizerMeasure();
- void maybeFillViewport();
- });
+ _forceVirtualizerMeasure();
+ void maybeFillViewport();
});
- return;
- }
- void maybeFillViewport();
+ });
+ // Fallback: certains environnements (animations, heavy reflow) ne
+ // stabilisent pas les dimensions dans deux frames. Ce setTimeout garantit
+ // une mesure finale après que le navigateur ait fini la mise en page.
+ setTimeout(() => {
+ _forceVirtualizerMeasure();
+ void maybeFillViewport();
+ }, 150);
}
function bindInfiniteScroll(element) {
diff --git a/js/vue/composables/useGridLoader.js b/js/vue/composables/useGridLoader.js
index 8cb3eee7..da397016 100644
--- a/js/vue/composables/useGridLoader.js
+++ b/js/vue/composables/useGridLoader.js
@@ -723,6 +723,12 @@ export function useGridLoader({
const gridContainer = getGridContainer();
if (!gridContainer || state.loading || state.done) return { ok: true, skipped: true };
if (!canLoadFromHost()) {
+ // When the grid is empty (initial load or post-reattach) and the host
+ // isn't measured yet, schedule a single retry so the first page loads
+ // once the layout settles — prevents a permanent blank grid.
+ if (!state.assets.length && !state.loading && APP_CONFIG.PREFETCH_NEXT_PAGE) {
+ scheduleNextPagePrefetch(state.requestId, 400);
+ }
return { ok: true, skipped: true, hidden: true };
}
if (isExecutionBusy()) {
diff --git a/js_dist/assets/comfyui-majoor-assetsmanager.css b/js_dist/assets/comfyui-majoor-assetsmanager.css
index 3c1ead51..b057136d 100644
--- a/js_dist/assets/comfyui-majoor-assetsmanager.css
+++ b/js_dist/assets/comfyui-majoor-assetsmanager.css
@@ -1 +1 @@
-.mjr-rating-badge[data-v-821bf1b1]{position:absolute;top:6px;right:6px;background:#0000008c;border:1px solid rgba(255,255,255,.12);padding:2px 6px;border-radius:6px;font-size:13px;letter-spacing:1px;display:inline-flex;align-items:center;justify-content:center;pointer-events:none;z-index:10;text-shadow:0 2px 6px rgba(0,0,0,.6);box-shadow:0 6px 18px #00000040;animation:mjr-fade-in-821bf1b1 .2s ease-out}@keyframes mjr-fade-in-821bf1b1{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.mjr-tags-badge[data-v-15044260]{position:absolute;bottom:6px;left:6px;padding:3px 6px;border-radius:4px;background:#000c;font-size:9px;max-width:calc(100% - 56px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;z-index:10;box-shadow:0 2px 4px #0000004d;animation:mjr-fade-in-15044260 .2s ease-out}@keyframes mjr-fade-in-15044260{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.mjr-gentime-badge[data-v-60fe3677]{position:absolute;bottom:6px;right:6px;padding:2px 6px;border-radius:4px;font-size:10px;font-weight:800;letter-spacing:.015em;line-height:1.1;background:#0000008c;border:1px solid rgba(255,255,255,.12);pointer-events:none;z-index:10;box-shadow:0 2px 4px #0000004d;text-shadow:0 1px 2px rgba(0,0,0,.9),0 0 10px color-mix(in srgb,currentColor 35%,transparent);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.mjr-popover-row[data-v-d1ebebd4]{display:grid;grid-template-columns:110px 1fr;gap:8px;align-items:center;margin-bottom:8px}.mjr-popover-row--3col[data-v-d1ebebd4]{grid-template-columns:110px 1fr 1fr}.mjr-popover-label[data-v-d1ebebd4]{font-size:12px;color:var(--mjr-muted, var(--descrip-text, rgba(255, 255, 255, .65)));white-space:nowrap}.mjr-popover-toggle[data-v-d1ebebd4]{display:flex;align-items:center;gap:6px;cursor:pointer;font-size:12px;color:var(--fg-color, #e6edf7)}.mjr-filter-group-toggle[data-v-d1ebebd4]{width:100%;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:0;margin:0 0 10px;border:0;background:transparent;color:inherit;cursor:pointer;text-align:left}.mjr-filter-group-title[data-v-d1ebebd4]{font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.mjr-filter-group-chevron[data-v-d1ebebd4]{font-size:12px;line-height:1;color:var(--mjr-muted, var(--descrip-text, rgba(255, 255, 255, .65)))}.mjr-filter-group-body[data-v-d1ebebd4]{padding-top:2px}.mjr-filter-group[data-v-d1ebebd4]:not(.is-open){padding-bottom:8px}.mjr-filter-group:not(.is-open) .mjr-filter-group-toggle[data-v-d1ebebd4]{margin-bottom:0}.mjr-rating-star[data-v-6d012325]{outline:none}.mjr-rating-star[data-v-6d012325]:hover:not(:disabled){transform:scale(1.2)}.mjr-rating-star[data-v-6d012325]:focus-visible{outline:2px solid var(--focus-outline-color, #4dabf7);outline-offset:2px;border-radius:2px}.mjr-grid-skeleton-layout[data-v-d9ff3613]{display:grid;grid-template-columns:repeat(auto-fill,minmax(132px,1fr));gap:12px}.mjr-grid-skeleton-card[data-v-d9ff3613]{border-radius:12px;border:1px solid rgba(255,255,255,.22);background:#c0c6ce33;overflow:hidden;min-height:146px;box-shadow:0 6px 18px #0000003d}.mjr-grid-skeleton-thumb[data-v-d9ff3613]{aspect-ratio:1 / 1;width:100%;background:linear-gradient(90deg,#9ca2ab85,#dce1e8b8 45%,#9ca2ab85);background-size:240% 100%;animation:mjr-grid-skeleton-shimmer-d9ff3613 1.2s linear infinite}.mjr-grid-skeleton-line[data-v-d9ff3613]{height:10px;margin:8px 10px;border-radius:8px;background:linear-gradient(90deg,#a4aab37a,#d6dbe2b3 45%,#a4aab37a);background-size:240% 100%;animation:mjr-grid-skeleton-shimmer-d9ff3613 1.2s linear infinite}.mjr-grid-skeleton-line--title[data-v-d9ff3613]{width:72%}.mjr-grid-skeleton-line--meta[data-v-d9ff3613]{width:48%;margin-top:2px;margin-bottom:10px}@keyframes mjr-grid-skeleton-shimmer-d9ff3613{0%{background-position:100% 0}to{background-position:-100% 0}}
+.mjr-rating-badge[data-v-821bf1b1]{position:absolute;top:6px;right:6px;background:#0000008c;border:1px solid rgba(255,255,255,.12);padding:2px 6px;border-radius:6px;font-size:13px;letter-spacing:1px;display:inline-flex;align-items:center;justify-content:center;pointer-events:none;z-index:10;text-shadow:0 2px 6px rgba(0,0,0,.6);box-shadow:0 6px 18px #00000040;animation:mjr-fade-in-821bf1b1 .2s ease-out}@keyframes mjr-fade-in-821bf1b1{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.mjr-tags-badge[data-v-15044260]{position:absolute;bottom:6px;left:6px;padding:3px 6px;border-radius:4px;background:#000c;font-size:9px;max-width:calc(100% - 56px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;z-index:10;box-shadow:0 2px 4px #0000004d;animation:mjr-fade-in-15044260 .2s ease-out}@keyframes mjr-fade-in-15044260{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.mjr-gentime-badge[data-v-60fe3677]{position:absolute;bottom:6px;right:6px;padding:2px 6px;border-radius:4px;font-size:10px;font-weight:800;letter-spacing:.015em;line-height:1.1;background:#0000008c;border:1px solid rgba(255,255,255,.12);pointer-events:none;z-index:10;box-shadow:0 2px 4px #0000004d;text-shadow:0 1px 2px rgba(0,0,0,.9),0 0 10px color-mix(in srgb,currentColor 35%,transparent);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.mjr-popover-row[data-v-d1ebebd4]{display:grid;grid-template-columns:110px 1fr;gap:8px;align-items:center;margin-bottom:8px}.mjr-popover-row--3col[data-v-d1ebebd4]{grid-template-columns:110px 1fr 1fr}.mjr-popover-label[data-v-d1ebebd4]{font-size:12px;color:var(--mjr-muted, var(--descrip-text, rgba(255, 255, 255, .65)));white-space:nowrap}.mjr-popover-toggle[data-v-d1ebebd4]{display:flex;align-items:center;gap:6px;cursor:pointer;font-size:12px;color:var(--fg-color, #e6edf7)}.mjr-filter-group-toggle[data-v-d1ebebd4]{width:100%;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:0;margin:0 0 10px;border:0;background:transparent;color:inherit;cursor:pointer;text-align:left}.mjr-filter-group-title[data-v-d1ebebd4]{font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.mjr-filter-group-chevron[data-v-d1ebebd4]{font-size:12px;line-height:1;color:var(--mjr-muted, var(--descrip-text, rgba(255, 255, 255, .65)))}.mjr-filter-group-body[data-v-d1ebebd4]{padding-top:2px}.mjr-filter-group[data-v-d1ebebd4]:not(.is-open){padding-bottom:8px}.mjr-filter-group:not(.is-open) .mjr-filter-group-toggle[data-v-d1ebebd4]{margin-bottom:0}.mjr-rating-star[data-v-6d012325]{outline:none}.mjr-rating-star[data-v-6d012325]:hover:not(:disabled){transform:scale(1.2)}.mjr-rating-star[data-v-6d012325]:focus-visible{outline:2px solid var(--focus-outline-color, #4dabf7);outline-offset:2px;border-radius:2px}.mjr-grid-skeleton-layout[data-v-c8da1cb5]{display:grid;grid-template-columns:repeat(auto-fill,minmax(132px,1fr));gap:12px}.mjr-grid-skeleton-card[data-v-c8da1cb5]{border-radius:12px;border:1px solid rgba(255,255,255,.22);background:#c0c6ce33;overflow:hidden;min-height:146px;box-shadow:0 6px 18px #0000003d}.mjr-grid-skeleton-thumb[data-v-c8da1cb5]{aspect-ratio:1 / 1;width:100%;background:linear-gradient(90deg,#9ca2ab85,#dce1e8b8 45%,#9ca2ab85);background-size:240% 100%;animation:mjr-grid-skeleton-shimmer-c8da1cb5 1.2s linear infinite}.mjr-grid-skeleton-line[data-v-c8da1cb5]{height:10px;margin:8px 10px;border-radius:8px;background:linear-gradient(90deg,#a4aab37a,#d6dbe2b3 45%,#a4aab37a);background-size:240% 100%;animation:mjr-grid-skeleton-shimmer-c8da1cb5 1.2s linear infinite}.mjr-grid-skeleton-line--title[data-v-c8da1cb5]{width:72%}.mjr-grid-skeleton-line--meta[data-v-c8da1cb5]{width:48%;margin-top:2px;margin-bottom:10px}@keyframes mjr-grid-skeleton-shimmer-c8da1cb5{0%{background-position:100% 0}to{background-position:-100% 0}}
diff --git a/js_dist/chunks/FloatingViewer-BUg810bV.js b/js_dist/chunks/FloatingViewer-BUg810bV.js
deleted file mode 100644
index 938335f1..00000000
--- a/js_dist/chunks/FloatingViewer-BUg810bV.js
+++ /dev/null
@@ -1,2748 +0,0 @@
-import { p as Dt, M as Ut, c as zt, q as $t, t as Wt, A as q, u as w, v as I, x as Z, y as vt, z as Nt, B as Kt, C as Xt, D as Q, E as W, n as qt, s as st, F as dt, G as wt, H as ut, I as pt, d as it, J as Yt, K as Zt } from "./entry-CuODMrGh.js";
-import { ensureViewerMetadataAsset as tt } from "./genInfo-CgFRoaPM.js";
-const E = Object.freeze({
- SIMPLE: "simple",
- AB: "ab",
- SIDE: "side",
- GRID: "grid"
-}), rt = 0.25, at = 8, Jt = 8e-4, J = 8, Qt = "C", Ft = "L", It = "K", te = "N", ee = "Esc", et = 30;
-function lt(t) {
- const e = Number(t);
- if (!Number.isFinite(e) || e < 0) return "0:00";
- const n = Math.floor(e), o = Math.floor(n / 3600), i = Math.floor(n % 3600 / 60), s = n % 60;
- return o > 0 ? `${o}:${String(i).padStart(2, "0")}:${String(s).padStart(2, "0")}` : `${i}:${String(s).padStart(2, "0")}`;
-}
-function ht(t) {
- var e, n;
- try {
- const o = (e = t == null ? void 0 : t.play) == null ? void 0 : e.call(t);
- o && typeof o.catch == "function" && o.catch(() => {
- });
- } catch (o) {
- (n = console.debug) == null || n.call(console, o);
- }
-}
-function ne(t, e) {
- const n = Math.floor(Number(t) || 0), o = Math.max(0, Math.floor(Number(e) || 0));
- return n < 0 ? 0 : o > 0 && n > o ? o : n;
-}
-function _t(t, e) {
- const n = Number((t == null ? void 0 : t.currentTime) || 0), o = Number(e) > 0 ? Number(e) : et;
- return Math.max(0, Math.floor(n * o));
-}
-function Lt(t, e) {
- const n = Number((t == null ? void 0 : t.duration) || 0), o = Number(e) > 0 ? Number(e) : et;
- return !Number.isFinite(n) || n <= 0 ? 0 : Math.max(0, Math.floor(n * o));
-}
-function oe(t, e, n) {
- var c;
- const o = Number(n) > 0 ? Number(n) : et, i = Lt(t, o), l = ne(e, i) / o;
- try {
- t.currentTime = Math.max(0, l);
- } catch (d) {
- (c = console.debug) == null || c.call(console, d);
- }
-}
-function se(t) {
- return t instanceof HTMLMediaElement;
-}
-function ie(t, e) {
- return String(t || "").toLowerCase() === "video" ? !0 : e instanceof HTMLVideoElement;
-}
-function re(t, e) {
- return String(t || "").toLowerCase() === "audio" ? !0 : e instanceof HTMLAudioElement;
-}
-function ae(t) {
- const e = String(t || "").toLowerCase();
- return e === "gif" || e === "animated-image";
-}
-function le(t) {
- var e;
- try {
- const n = Number((t == null ? void 0 : t.naturalWidth) || (t == null ? void 0 : t.width) || 0), o = Number((t == null ? void 0 : t.naturalHeight) || (t == null ? void 0 : t.height) || 0);
- if (!(n > 0 && o > 0)) return "";
- const i = document.createElement("canvas");
- i.width = n, i.height = o;
- const s = i.getContext("2d");
- return s ? (s.drawImage(t, 0, 0, n, o), i.toDataURL("image/png")) : "";
- } catch (n) {
- return (e = console.debug) == null || e.call(console, n), "";
- }
-}
-function ct(t, e = null, { kind: n = "" } = {}) {
- var ft;
- if (!t || t._mjrSimplePlayerMounted) return (t == null ? void 0 : t.parentElement) || null;
- t._mjrSimplePlayerMounted = !0;
- const o = Dt(e) || et, i = se(t), s = ie(n, t), l = re(n, t), c = ae(n), d = document.createElement("div");
- d.className = "mjr-mfv-simple-player", d.tabIndex = 0, d.setAttribute("role", "group"), d.setAttribute("aria-label", "Media player"), l && d.classList.add("is-audio"), c && d.classList.add("is-animated-image");
- const r = document.createElement("div");
- r.className = "mjr-mfv-simple-player-controls";
- const a = document.createElement("input");
- a.type = "range", a.className = "mjr-mfv-simple-player-seek", a.min = "0", a.max = "1000", a.step = "1", a.value = "0", a.setAttribute("aria-label", "Seek"), i || (a.disabled = !0, a.classList.add("is-disabled"));
- const u = document.createElement("div");
- u.className = "mjr-mfv-simple-player-row";
- const f = document.createElement("button");
- f.type = "button", f.className = "mjr-icon-btn mjr-mfv-simple-player-btn", f.setAttribute("aria-label", "Play/Pause");
- const m = document.createElement("i");
- m.className = "pi pi-pause", m.setAttribute("aria-hidden", "true"), f.appendChild(m);
- const h = document.createElement("button");
- h.type = "button", h.className = "mjr-icon-btn mjr-mfv-simple-player-btn", h.setAttribute("aria-label", "Step back");
- const p = document.createElement("i");
- p.className = "pi pi-step-backward", p.setAttribute("aria-hidden", "true"), h.appendChild(p);
- const g = document.createElement("button");
- g.type = "button", g.className = "mjr-icon-btn mjr-mfv-simple-player-btn", g.setAttribute("aria-label", "Step forward");
- const y = document.createElement("i");
- y.className = "pi pi-step-forward", y.setAttribute("aria-hidden", "true"), g.appendChild(y);
- const S = document.createElement("div");
- S.className = "mjr-mfv-simple-player-time", S.textContent = "0:00 / 0:00";
- const _ = document.createElement("div");
- _.className = "mjr-mfv-simple-player-frame", _.textContent = "F: 0", s || (_.style.display = "none");
- const C = document.createElement("button");
- C.type = "button", C.className = "mjr-icon-btn mjr-mfv-simple-player-btn", C.setAttribute("aria-label", "Mute/Unmute");
- const A = document.createElement("i");
- if (A.className = "pi pi-volume-up", A.setAttribute("aria-hidden", "true"), C.appendChild(A), s || (h.disabled = !0, g.disabled = !0, h.classList.add("is-disabled"), g.classList.add("is-disabled")), u.appendChild(h), u.appendChild(f), u.appendChild(g), u.appendChild(S), u.appendChild(_), u.appendChild(C), r.appendChild(a), r.appendChild(u), d.appendChild(t), l) {
- const b = document.createElement("div");
- b.className = "mjr-mfv-simple-player-audio-backdrop", b.textContent = String((e == null ? void 0 : e.filename) || "Audio"), d.appendChild(b);
- }
- d.appendChild(r);
- try {
- t instanceof HTMLMediaElement && (t.controls = !1, t.playsInline = !0, t.loop = !0, t.muted = !0, t.autoplay = !0);
- } catch (b) {
- (ft = console.debug) == null || ft.call(console, b);
- }
- const M = c ? String((t == null ? void 0 : t.src) || "") : "";
- let B = !1, T = "";
- const k = () => {
- if (i) {
- m.className = t.paused ? "pi pi-play" : "pi pi-pause";
- return;
- }
- if (c) {
- m.className = B ? "pi pi-play" : "pi pi-pause";
- return;
- }
- m.className = "pi pi-play";
- }, R = () => {
- if (t instanceof HTMLMediaElement) {
- A.className = t.muted ? "pi pi-volume-off" : "pi pi-volume-up";
- return;
- }
- A.className = "pi pi-volume-off", C.disabled = !0, C.classList.add("is-disabled");
- }, L = () => {
- if (!s || !(t instanceof HTMLVideoElement)) return;
- const b = _t(t, o), P = Lt(t, o);
- _.textContent = P > 0 ? `F: ${b}/${P}` : `F: ${b}`;
- }, D = () => {
- const b = Math.max(0, Math.min(100, Number(a.value) / 1e3 * 100));
- a.style.setProperty("--mjr-seek-pct", `${b}%`);
- }, G = () => {
- if (!i) {
- S.textContent = c ? "Animated" : "Preview", a.value = "0", D();
- return;
- }
- const b = Number(t.currentTime || 0), P = Number(t.duration || 0);
- if (Number.isFinite(P) && P > 0) {
- const x = Math.max(0, Math.min(1, b / P));
- a.value = String(Math.round(x * 1e3)), S.textContent = `${lt(b)} / ${lt(P)}`;
- } else
- a.value = "0", S.textContent = `${lt(b)} / 0:00`;
- D();
- }, K = (b) => {
- var P;
- try {
- (P = b == null ? void 0 : b.stopPropagation) == null || P.call(b);
- } catch {
- }
- }, mt = (b) => {
- var P, x;
- K(b);
- try {
- if (i)
- t.paused ? ht(t) : (P = t.pause) == null || P.call(t);
- else if (c)
- if (!B)
- T || (T = le(t)), T && (t.src = T), B = !0;
- else {
- const j = M ? `${M}${M.includes("?") ? "&" : "?"}mjr_anim=${Date.now()}` : t.src;
- t.src = j, B = !1;
- }
- } catch (j) {
- (x = console.debug) == null || x.call(console, j);
- }
- k();
- }, Y = (b, P) => {
- var j, V;
- if (K(P), !s || !(t instanceof HTMLVideoElement)) return;
- try {
- (j = t.pause) == null || j.call(t);
- } catch (ot) {
- (V = console.debug) == null || V.call(console, ot);
- }
- const x = _t(t, o);
- oe(t, x + b, o), k(), L(), G();
- }, Gt = (b) => {
- var P;
- if (K(b), t instanceof HTMLMediaElement) {
- try {
- t.muted = !t.muted;
- } catch (x) {
- (P = console.debug) == null || P.call(console, x);
- }
- R();
- }
- }, Ot = (b) => {
- var j;
- if (K(b), !i) return;
- D();
- const P = Number(t.duration || 0);
- if (!Number.isFinite(P) || P <= 0) return;
- const x = Math.max(0, Math.min(1, Number(a.value) / 1e3));
- try {
- t.currentTime = P * x;
- } catch (V) {
- (j = console.debug) == null || j.call(console, V);
- }
- L(), G();
- }, nt = (b) => K(b), Rt = (b) => {
- var P, x, j, V;
- try {
- if ((x = (P = b == null ? void 0 : b.target) == null ? void 0 : P.closest) != null && x.call(P, "button, input, textarea, select")) return;
- (j = d.focus) == null || j.call(d, { preventScroll: !0 });
- } catch (ot) {
- (V = console.debug) == null || V.call(console, ot);
- }
- }, Ht = (b) => {
- var x, j, V;
- const P = String((b == null ? void 0 : b.key) || "");
- if (!(!P || b != null && b.altKey || b != null && b.ctrlKey || b != null && b.metaKey)) {
- if (P === " " || P === "Spacebar") {
- (x = b.preventDefault) == null || x.call(b), mt(b);
- return;
- }
- if (P === "ArrowLeft") {
- if (!s) return;
- (j = b.preventDefault) == null || j.call(b), Y(-1, b);
- return;
- }
- if (P === "ArrowRight") {
- if (!s) return;
- (V = b.preventDefault) == null || V.call(b), Y(1, b);
- }
- }
- };
- return f.addEventListener("click", mt), h.addEventListener("click", (b) => Y(-1, b)), g.addEventListener("click", (b) => Y(1, b)), C.addEventListener("click", Gt), a.addEventListener("input", Ot), r.addEventListener("pointerdown", nt), r.addEventListener("click", nt), r.addEventListener("dblclick", nt), d.addEventListener("pointerdown", Rt), d.addEventListener("keydown", Ht), t instanceof HTMLMediaElement && (t.addEventListener("play", k, { passive: !0 }), t.addEventListener("pause", k, { passive: !0 }), t.addEventListener(
- "timeupdate",
- () => {
- L(), G();
- },
- { passive: !0 }
- ), t.addEventListener(
- "seeked",
- () => {
- L(), G();
- },
- { passive: !0 }
- ), t.addEventListener(
- "loadedmetadata",
- () => {
- L(), G();
- },
- { passive: !0 }
- )), ht(t), k(), R(), L(), G(), d;
-}
-const ce = /* @__PURE__ */ new Set([".mp4", ".webm", ".mov", ".avi", ".mkv"]), de = /* @__PURE__ */ new Set([".mp3", ".wav", ".flac", ".ogg", ".m4a", ".aac", ".opus", ".wma"]);
-function kt(t) {
- try {
- const e = String(t || "").trim(), n = e.lastIndexOf(".");
- return n >= 0 ? e.slice(n).toLowerCase() : "";
- } catch {
- return "";
- }
-}
-function H(t) {
- const e = String((t == null ? void 0 : t.kind) || "").toLowerCase();
- if (e === "video") return "video";
- if (e === "audio") return "audio";
- if (e === "model3d") return "model3d";
- const n = kt((t == null ? void 0 : t.filename) || "");
- return n === ".gif" ? "gif" : ce.has(n) ? "video" : de.has(n) ? "audio" : Ut.has(n) ? "model3d" : "image";
-}
-function xt(t) {
- return t ? t.url ? String(t.url) : t.filename && t.id == null ? $t(t.filename, t.subfolder || "", t.type || "output") : t.filename && Wt(t) || "" : "";
-}
-function O(t = "No media — select assets in the grid") {
- const e = document.createElement("div");
- return e.className = "mjr-mfv-empty", e.textContent = t, e;
-}
-function U(t, e) {
- const n = document.createElement("div");
- return n.className = `mjr-mfv-label label-${e}`, n.textContent = t, n;
-}
-function gt(t) {
- var e;
- if (!(!t || typeof t.play != "function"))
- try {
- const n = t.play();
- n && typeof n.catch == "function" && n.catch(() => {
- });
- } catch (n) {
- (e = console.debug) == null || e.call(console, n);
- }
-}
-function ue(t, e) {
- var o, i;
- let n = t && t.nodeType === 1 ? t : (t == null ? void 0 : t.parentElement) || null;
- for (; n && n !== e; ) {
- try {
- const s = (o = window.getComputedStyle) == null ? void 0 : o.call(window, n), l = /(auto|scroll|overlay)/.test(String((s == null ? void 0 : s.overflowY) || "")), c = /(auto|scroll|overlay)/.test(String((s == null ? void 0 : s.overflowX) || ""));
- if (l || c)
- return n;
- } catch (s) {
- (i = console.debug) == null || i.call(console, s);
- }
- n = n.parentElement || null;
- }
- return null;
-}
-function pe(t, e, n) {
- if (!t) return !1;
- if (Math.abs(Number(n) || 0) >= Math.abs(Number(e) || 0)) {
- const s = Number(t.scrollTop || 0), l = Math.max(0, Number(t.scrollHeight || 0) - Number(t.clientHeight || 0));
- if (n < 0 && s > 0 || n > 0 && s < l) return !0;
- }
- const o = Number(t.scrollLeft || 0), i = Math.max(0, Number(t.scrollWidth || 0) - Number(t.clientWidth || 0));
- return e < 0 && o > 0 || e > 0 && o < i;
-}
-function me(t) {
- var e, n, o, i;
- if (t)
- try {
- const s = (e = t.querySelectorAll) == null ? void 0 : e.call(t, "video, audio");
- if (!s || !s.length) return;
- for (const l of s)
- try {
- (n = l.pause) == null || n.call(l);
- } catch (c) {
- (o = console.debug) == null || o.call(console, c);
- }
- } catch (s) {
- (i = console.debug) == null || i.call(console, s);
- }
-}
-function z(t, { fill: e = !1 } = {}) {
- var d, r;
- const n = xt(t);
- if (!n) return null;
- const o = H(t), i = `mjr-mfv-media mjr-mfv-media--fit-height${e ? " mjr-mfv-media--fill" : ""}`, l = kt((t == null ? void 0 : t.filename) || "") === ".webp" && Number((t == null ? void 0 : t.duration) ?? ((d = t == null ? void 0 : t.metadata_raw) == null ? void 0 : d.duration) ?? 0) > 0;
- if (o === "audio") {
- const a = document.createElement("audio");
- a.className = i, a.src = n, a.controls = !1, a.autoplay = !0, a.preload = "metadata", a.loop = !0, a.muted = !0;
- try {
- a.addEventListener("loadedmetadata", () => gt(a), { once: !0 });
- } catch (f) {
- (r = console.debug) == null || r.call(console, f);
- }
- return gt(a), ct(a, t, { kind: "audio" }) || a;
- }
- if (o === "video") {
- const a = document.createElement("video");
- return a.className = i, a.src = n, a.controls = !1, a.loop = !0, a.muted = !0, a.autoplay = !0, a.playsInline = !0, ct(a, t, { kind: "video" }) || a;
- }
- if (o === "model3d")
- return zt(t, n, {
- hostClassName: `mjr-model3d-host mjr-mfv-model3d-host${e ? " mjr-mfv-model3d-host--fill" : ""}`,
- canvasClassName: `mjr-mfv-media mjr-model3d-render-canvas${e ? " mjr-mfv-media--fill" : ""}`,
- hintText: "Rotate: left drag Pan: right drag Zoom: wheel or middle drag",
- disableViewerTransform: !0,
- pauseDuringExecution: !!q.FLOATING_VIEWER_PAUSE_DURING_EXECUTION
- });
- const c = document.createElement("img");
- return c.className = i, c.src = n, c.alt = String((t == null ? void 0 : t.filename) || ""), c.draggable = !1, (o === "gif" || l) && ct(c, t, {
- kind: o === "gif" ? "gif" : "animated-image"
- }) || c;
-}
-function jt(t, e, n, o, i, s) {
- t.beginPath(), typeof t.roundRect == "function" ? t.roundRect(e, n, o, i, s) : (t.moveTo(e + s, n), t.lineTo(e + o - s, n), t.quadraticCurveTo(e + o, n, e + o, n + s), t.lineTo(e + o, n + i - s), t.quadraticCurveTo(e + o, n + i, e + o - s, n + i), t.lineTo(e + s, n + i), t.quadraticCurveTo(e, n + i, e, n + i - s), t.lineTo(e, n + s), t.quadraticCurveTo(e, n, e + s, n), t.closePath());
-}
-function X(t, e, n, o) {
- t.save(), t.font = "bold 10px system-ui, sans-serif";
- const i = 5, s = t.measureText(e).width;
- t.fillStyle = "rgba(0,0,0,0.58)", jt(t, n, o, s + i * 2, 18, 4), t.fill(), t.fillStyle = "#fff", t.fillText(e, n + i, o + 13), t.restore();
-}
-function fe(t, e) {
- switch (String((t == null ? void 0 : t.type) || "").toLowerCase()) {
- case "number":
- return he(t, e);
- case "combo":
- return _e(t, e);
- case "text":
- case "string":
- case "customtext":
- return ge(t, e);
- case "toggle":
- return be(t, e);
- default:
- return ye(t);
- }
-}
-function v(t, e) {
- var o, i, s, l, c, d, r;
- if (!t) return !1;
- const n = String(t.type || "").toLowerCase();
- if (n === "number") {
- const a = Number(e);
- if (Number.isNaN(a)) return !1;
- const u = t.options ?? {}, f = u.min ?? -1 / 0, m = u.max ?? 1 / 0;
- t.value = Math.min(m, Math.max(f, a));
- } else n === "toggle" ? t.value = !!e : t.value = e;
- try {
- (o = t.callback) == null || o.call(t, t.value);
- } catch (a) {
- (i = console.debug) == null || i.call(console, a);
- }
- try {
- const a = w();
- (l = (s = a == null ? void 0 : a.canvas) == null ? void 0 : s.setDirty) == null || l.call(s, !0, !0), (d = (c = a == null ? void 0 : a.graph) == null ? void 0 : c.setDirtyCanvas) == null || d.call(c, !0, !0);
- } catch (a) {
- (r = console.debug) == null || r.call(console, a);
- }
- return !0;
-}
-function he(t, e) {
- const n = document.createElement("input");
- n.type = "number", n.className = "mjr-ws-input", n.value = t.value ?? "";
- const o = t.options ?? {};
- return o.min != null && (n.min = String(o.min)), o.max != null && (n.max = String(o.max)), o.step != null && (n.step = String(o.step)), n.addEventListener("input", () => {
- const i = n.value;
- i === "" || i === "-" || i === "." || i.endsWith(".") || (v(t, i), e == null || e(t.value));
- }), n.addEventListener("change", () => {
- v(t, n.value) && (n.value = t.value, e == null || e(t.value));
- }), n;
-}
-function _e(t, e) {
- var i;
- const n = document.createElement("select");
- n.className = "mjr-ws-input";
- let o = ((i = t.options) == null ? void 0 : i.values) ?? [];
- if (typeof o == "function")
- try {
- o = o() ?? [];
- } catch {
- o = [];
- }
- Array.isArray(o) || (o = []);
- for (const s of o) {
- const l = document.createElement("option"), c = typeof s == "string" ? s : (s == null ? void 0 : s.content) ?? (s == null ? void 0 : s.value) ?? (s == null ? void 0 : s.text) ?? String(s);
- l.value = c, l.textContent = c, c === String(t.value) && (l.selected = !0), n.appendChild(l);
- }
- return n.addEventListener("change", () => {
- v(t, n.value) && (e == null || e(t.value));
- }), n;
-}
-function ge(t, e) {
- const o = document.createElement("div");
- o.className = "mjr-ws-text-wrapper";
- const i = document.createElement("textarea");
- i.className = "mjr-ws-input mjr-ws-textarea", i.value = t.value ?? "", i.rows = 2;
- const s = document.createElement("button");
- s.type = "button", s.className = "mjr-ws-expand-btn", s.textContent = "Expand", s.style.display = "none";
- let l = !1;
- const c = () => {
- i.style.height = "auto";
- const d = i.scrollHeight;
- l ? (i.style.height = d + "px", i.style.maxHeight = "none", s.textContent = "Collapse") : (i.style.height = Math.min(d, 80) + "px", i.style.maxHeight = "80px", s.textContent = "Expand"), s.style.display = d > 80 ? "" : "none";
- };
- return i.addEventListener("change", () => {
- v(t, i.value) && (e == null || e(t.value));
- }), i.addEventListener("input", () => {
- v(t, i.value), e == null || e(t.value), c();
- }), s.addEventListener("click", () => {
- l = !l, c();
- }), o.appendChild(i), o.appendChild(s), o._mjrAutoFit = c, i._mjrAutoFit = c, requestAnimationFrame(c), o;
-}
-function be(t, e) {
- const n = document.createElement("label");
- n.className = "mjr-ws-toggle-label";
- const o = document.createElement("input");
- return o.type = "checkbox", o.className = "mjr-ws-checkbox", o.checked = !!t.value, o.addEventListener("change", () => {
- v(t, o.checked) && (e == null || e(t.value));
- }), n.appendChild(o), n;
-}
-function ye(t) {
- const e = document.createElement("input");
- return e.type = "text", e.className = "mjr-ws-input mjr-ws-readonly", e.value = t.value != null ? String(t.value) : "", e.readOnly = !0, e.tabIndex = -1, e;
-}
-const Ce = /* @__PURE__ */ new Set(["imageupload", "button", "hidden"]);
-class Se {
- /**
- * @param {object} node LGraphNode instance
- * @param {object} [opts]
- * @param {() => void} [opts.onLocate] Custom locate handler (optional)
- */
- constructor(e, n = {}) {
- this._node = e, this._onLocate = n.onLocate ?? null, this._el = null, this._inputMap = /* @__PURE__ */ new Map();
- }
- get el() {
- return this._el || (this._el = this._render()), this._el;
- }
- /** Re-read widget values from the live graph and update inputs. */
- syncFromGraph() {
- var o, i, s, l;
- if (!((o = this._node) != null && o.widgets)) return;
- const e = ((i = this._el) == null ? void 0 : i.ownerDocument) || document, n = (e == null ? void 0 : e.activeElement) || null;
- for (const c of this._node.widgets) {
- const d = this._inputMap.get(c.name);
- let r = Ae(d);
- if (r)
- if (r.type === "checkbox") {
- const a = !!c.value;
- r.checked !== a && (r.checked = a);
- } else {
- const a = c.value != null ? String(c.value) : "";
- if (String(r.value ?? "") === a || n && r === n) continue;
- r.value = a, (s = d == null ? void 0 : d._mjrAutoFit) == null || s.call(d), (l = r == null ? void 0 : r._mjrAutoFit) == null || l.call(r);
- }
- }
- }
- dispose() {
- var e;
- (e = this._el) == null || e.remove(), this._el = null, this._inputMap.clear();
- }
- // ── Private ───────────────────────────────────────────────────────────────
- _render() {
- var a;
- const e = this._node, n = document.createElement("section");
- n.className = "mjr-ws-node", n.dataset.nodeId = String(e.id ?? "");
- const o = document.createElement("div");
- o.className = "mjr-ws-node-header";
- const i = document.createElement("span");
- i.className = "mjr-ws-node-title", i.textContent = e.title || e.type || `Node #${e.id}`, o.appendChild(i);
- const s = document.createElement("button");
- s.type = "button", s.className = "mjr-icon-btn mjr-ws-locate", s.title = "Locate on canvas";
- const l = document.createElement("i");
- l.className = "pi pi-map-marker", l.setAttribute("aria-hidden", "true"), s.appendChild(l), s.addEventListener("click", () => this._locateNode()), o.appendChild(s), n.appendChild(o);
- const c = document.createElement("div");
- c.className = "mjr-ws-node-body";
- const d = e.widgets ?? [];
- let r = !1;
- for (const u of d) {
- const f = String(u.type || "").toLowerCase();
- if (Ce.has(f) || u.hidden || (a = u.options) != null && a.hidden) continue;
- r = !0;
- const m = f === "text" || f === "string" || f === "customtext", h = document.createElement("div");
- h.className = m ? "mjr-ws-widget-row mjr-ws-widget-row--block" : "mjr-ws-widget-row";
- const p = document.createElement("label");
- p.className = "mjr-ws-widget-label", p.textContent = u.name || "";
- const g = document.createElement("div");
- g.className = "mjr-ws-widget-input";
- const y = fe(u, () => {
- });
- g.appendChild(y), this._inputMap.set(u.name, y), h.appendChild(p), h.appendChild(g), c.appendChild(h);
- }
- if (!r) {
- const u = document.createElement("div");
- u.className = "mjr-ws-node-empty", u.textContent = "No editable parameters", c.appendChild(u);
- }
- return n.appendChild(c), n;
- }
- _locateNode() {
- var n, o, i, s, l, c, d, r;
- if (this._onLocate) {
- this._onLocate();
- return;
- }
- const e = this._node;
- if (e)
- try {
- const a = w(), u = a == null ? void 0 : a.canvas;
- if (!u) return;
- if (typeof u.centerOnNode == "function")
- u.centerOnNode(e);
- else if (u.ds && e.pos) {
- const f = ((n = u.canvas) == null ? void 0 : n.width) || ((o = u.element) == null ? void 0 : o.width) || 800, m = ((i = u.canvas) == null ? void 0 : i.height) || ((s = u.element) == null ? void 0 : s.height) || 600;
- u.ds.offset[0] = -e.pos[0] - (((l = e.size) == null ? void 0 : l[0]) || 0) / 2 + f / 2, u.ds.offset[1] = -e.pos[1] - (((c = e.size) == null ? void 0 : c[1]) || 0) / 2 + m / 2, (d = u.setDirty) == null || d.call(u, !0, !0);
- }
- } catch (a) {
- (r = console.debug) == null || r.call(console, "[MFV sidebar] locateNode error", a);
- }
- }
-}
-function Ae(t) {
- var e, n, o;
- return t ? (n = (e = t.classList) == null ? void 0 : e.contains) != null && n.call(e, "mjr-ws-text-wrapper") ? ((o = t.querySelector) == null ? void 0 : o.call(t, "textarea")) ?? t : t : null;
-}
-const Ee = 16;
-class Pe {
- /**
- * @param {object} opts
- * @param {HTMLElement} opts.hostEl The MFV root element to append to
- * @param {() => void} [opts.onClose]
- */
- constructor({ hostEl: e, onClose: n } = {}) {
- this._hostEl = e, this._onClose = n ?? null, this._renderers = [], this._visible = !1, this._selectionKey = "", this._liveSyncHandle = null, this._liveSyncMode = "", this._el = this._build();
- }
- get el() {
- return this._el;
- }
- get isVisible() {
- return this._visible;
- }
- show() {
- this._visible = !0, this._el.classList.add("open"), this.refresh({ force: !0 }), this._startLiveSync();
- }
- hide() {
- this._visible = !1, this._el.classList.remove("open"), this._stopLiveSync();
- }
- toggle() {
- var e;
- this._visible ? (this.hide(), (e = this._onClose) == null || e.call(this)) : this.show();
- }
- /** Re-read selected nodes and rebuild widget sections. */
- refresh({ force: e = !1 } = {}) {
- if (!this._visible) return;
- const { key: n, nodes: o } = bt();
- if (!e && n === this._selectionKey && this._renderers.length === o.length) {
- this.syncFromGraph({ allowSelectionRefresh: !1 });
- return;
- }
- if (this._clear(), this._selectionKey = n, !o.length) {
- this._showEmpty();
- return;
- }
- for (const i of o) {
- const s = new Se(i);
- this._renderers.push(s), this._body.appendChild(s.el);
- }
- this.syncFromGraph({ allowSelectionRefresh: !1 });
- }
- /** Sync existing renderers from graph values without full rebuild. */
- syncFromGraph({ allowSelectionRefresh: e = !0 } = {}) {
- if (!this._visible) return;
- const { key: n } = bt();
- if (e && n !== this._selectionKey) {
- this.refresh({ force: !0 });
- return;
- }
- for (const o of this._renderers) o.syncFromGraph();
- }
- dispose() {
- var e;
- this._stopLiveSync(), this._clear(), (e = this._el) == null || e.remove();
- }
- // ── Private ───────────────────────────────────────────────────────────────
- _build() {
- const e = document.createElement("div");
- e.className = "mjr-ws-sidebar";
- const n = document.createElement("div");
- n.className = "mjr-ws-sidebar-header";
- const o = document.createElement("span");
- o.className = "mjr-ws-sidebar-title", o.textContent = "Node Parameters", n.appendChild(o);
- const i = document.createElement("button");
- i.type = "button", i.className = "mjr-icon-btn", i.title = "Close sidebar";
- const s = document.createElement("i");
- return s.className = "pi pi-times", s.setAttribute("aria-hidden", "true"), i.appendChild(s), i.addEventListener("click", () => {
- var l;
- this.hide(), (l = this._onClose) == null || l.call(this);
- }), n.appendChild(i), e.appendChild(n), this._body = document.createElement("div"), this._body.className = "mjr-ws-sidebar-body", e.appendChild(this._body), e;
- }
- _clear() {
- for (const e of this._renderers) e.dispose();
- this._renderers = [], this._body && (this._body.innerHTML = "");
- }
- _showEmpty() {
- const e = document.createElement("div");
- e.className = "mjr-ws-sidebar-empty", e.textContent = "Select nodes on the canvas to edit their parameters", this._body.appendChild(e);
- }
- _startLiveSync() {
- if (this._liveSyncHandle != null) return;
- const e = yt(this._el), n = () => {
- this._liveSyncHandle = null, this._liveSyncMode = "", this._visible && (this.syncFromGraph(), this._startLiveSync());
- };
- if (typeof e.requestAnimationFrame == "function") {
- this._liveSyncMode = "raf", this._liveSyncHandle = e.requestAnimationFrame(n);
- return;
- }
- this._liveSyncMode = "timeout", this._liveSyncHandle = e.setTimeout(n, Ee);
- }
- _stopLiveSync() {
- var n;
- if (this._liveSyncHandle == null) return;
- const e = yt(this._el);
- try {
- this._liveSyncMode === "raf" && typeof e.cancelAnimationFrame == "function" ? e.cancelAnimationFrame(this._liveSyncHandle) : typeof e.clearTimeout == "function" && e.clearTimeout(this._liveSyncHandle);
- } catch (o) {
- (n = console.debug) == null || n.call(console, o);
- }
- this._liveSyncHandle = null, this._liveSyncMode = "";
- }
-}
-function Be() {
- var t, e, n;
- try {
- const o = w(), i = ((t = o == null ? void 0 : o.canvas) == null ? void 0 : t.selected_nodes) ?? ((e = o == null ? void 0 : o.canvas) == null ? void 0 : e.selectedNodes) ?? null;
- if (!i) return [];
- if (Array.isArray(i)) return i.filter(Boolean);
- if (i instanceof Map) return Array.from(i.values()).filter(Boolean);
- if (typeof i == "object") return Object.values(i).filter(Boolean);
- } catch (o) {
- (n = console.debug) == null || n.call(console, "[MFV sidebar] _getSelectedNodes error", o);
- }
- return [];
-}
-function bt() {
- const t = Be();
- return { key: t.map((n) => String((n == null ? void 0 : n.id) ?? "")).filter(Boolean).join("|"), nodes: t };
-}
-function yt(t) {
- var n;
- const e = ((n = t == null ? void 0 : t.ownerDocument) == null ? void 0 : n.defaultView) || null;
- return e || (typeof window < "u" ? window : globalThis);
-}
-const N = Object.freeze({
- IDLE: "idle",
- RUNNING: "running",
- STOPPING: "stopping",
- ERROR: "error"
-}), Me = /* @__PURE__ */ new Set(["default", "auto", "latent2rgb", "taesd", "none"]), Ct = "progress-update";
-function Ne() {
- const t = document.createElement("div");
- t.className = "mjr-mfv-run-controls";
- const e = document.createElement("button");
- e.type = "button", e.className = "mjr-icon-btn mjr-mfv-run-btn";
- const n = I("tooltip.queuePrompt", "Queue Prompt (Run)");
- e.title = n, e.setAttribute("aria-label", n);
- const o = document.createElement("i");
- o.className = "pi pi-play", o.setAttribute("aria-hidden", "true"), e.appendChild(o);
- const i = document.createElement("button");
- i.type = "button", i.className = "mjr-icon-btn mjr-mfv-stop-btn";
- const s = document.createElement("i");
- s.className = "pi pi-stop", s.setAttribute("aria-hidden", "true"), i.appendChild(s), t.appendChild(e), t.appendChild(i);
- let l = N.IDLE, c = !1, d = !1, r = null;
- function a() {
- r != null && (clearTimeout(r), r = null);
- }
- function u(_, { canStop: C = !1 } = {}) {
- l = _, e.classList.toggle("running", l === N.RUNNING), e.classList.toggle("stopping", l === N.STOPPING), e.classList.toggle("error", l === N.ERROR), e.disabled = l === N.RUNNING || l === N.STOPPING, i.disabled = !C || l === N.STOPPING, i.classList.toggle("active", C && l !== N.STOPPING), i.classList.toggle("stopping", l === N.STOPPING), l === N.RUNNING || l === N.STOPPING ? o.className = "pi pi-spin pi-spinner" : o.className = "pi pi-play";
- }
- function f() {
- const _ = I("tooltip.queueStop", "Stop Generation");
- i.title = _, i.setAttribute("aria-label", _);
- }
- function m(_ = Z.getSnapshot(), { authoritative: C = !1 } = {}) {
- const A = Math.max(0, Number(_ == null ? void 0 : _.queue) || 0), M = (_ == null ? void 0 : _.prompt) || null, B = !!(M != null && M.currentlyExecuting), T = !!(M && (M.currentlyExecuting || M.errorDetails)), k = A > 0 || T, R = !!(M != null && M.errorDetails);
- C && A === 0 && !M && (c = !1, d = !1);
- const L = c || d || B || A > 0;
- if ((B || k || A > 0) && (c = !1), R) {
- d = !1, a(), u(N.ERROR, { canStop: !1 });
- return;
- }
- if (d) {
- if (!L) {
- d = !1, m(_);
- return;
- }
- u(N.STOPPING, { canStop: !1 });
- return;
- }
- if (c || B || k || A > 0) {
- a(), u(N.RUNNING, { canStop: !0 });
- return;
- }
- a(), u(N.IDLE, { canStop: !1 });
- }
- function h() {
- c = !1, d = !1, a(), u(N.ERROR, { canStop: !1 }), r = setTimeout(() => {
- r = null, m();
- }, 1500);
- }
- async function p() {
- const _ = w(), A = (_ != null && _.api && typeof _.api.interrupt == "function" ? _.api : null) ?? Nt(_);
- if (A && typeof A.interrupt == "function")
- return await A.interrupt(), { tracked: !0 };
- if (A && typeof A.fetchApi == "function") {
- const B = await A.fetchApi("/interrupt", { method: "POST" });
- if (!(B != null && B.ok)) throw new Error(`POST /interrupt failed (${B == null ? void 0 : B.status})`);
- return { tracked: !0 };
- }
- const M = await fetch("/interrupt", { method: "POST", credentials: "include" });
- if (!M.ok) throw new Error(`POST /interrupt failed (${M.status})`);
- return { tracked: !1 };
- }
- async function g() {
- var _;
- if (!(l === N.RUNNING || l === N.STOPPING)) {
- c = !0, d = !1, m();
- try {
- const C = await Ie();
- C != null && C.tracked || (c = !1), m();
- } catch (C) {
- (_ = console.error) == null || _.call(console, "[MFV Run]", C), h();
- }
- }
- }
- async function y() {
- var _;
- if (l === N.RUNNING) {
- d = !0, m();
- try {
- const C = await p();
- C != null && C.tracked || (d = !1, c = !1), m();
- } catch (C) {
- (_ = console.error) == null || _.call(console, "[MFV Stop]", C), d = !1, m();
- } finally {
- }
- }
- }
- f(), i.disabled = !0, e.addEventListener("click", g), i.addEventListener("click", y);
- const S = (_) => {
- m((_ == null ? void 0 : _.detail) || Z.getSnapshot(), {
- authoritative: !0
- });
- };
- return Z.addEventListener(Ct, S), vt({ timeoutMs: 4e3 }).catch((_) => {
- var C;
- (C = console.debug) == null || C.call(console, _);
- }), m(), {
- el: t,
- dispose() {
- a(), e.removeEventListener("click", g), i.removeEventListener("click", y), Z.removeEventListener(
- Ct,
- S
- );
- }
- };
-}
-function Fe(t = q.MFV_PREVIEW_METHOD) {
- const e = String(t || "").trim().toLowerCase();
- return Me.has(e) ? e : "taesd";
-}
-function Tt(t, e = q.MFV_PREVIEW_METHOD) {
- var i;
- const n = Fe(e), o = {
- ...(t == null ? void 0 : t.extra_data) || {},
- extra_pnginfo: {
- ...((i = t == null ? void 0 : t.extra_data) == null ? void 0 : i.extra_pnginfo) || {}
- }
- };
- return (t == null ? void 0 : t.workflow) != null && (o.extra_pnginfo.workflow = t.workflow), n !== "default" ? o.preview_method = n : delete o.preview_method, {
- ...t,
- extra_data: o
- };
-}
-function St(t, { previewMethod: e = q.MFV_PREVIEW_METHOD, clientId: n = null } = {}) {
- const o = Tt(t, e), i = {
- prompt: o == null ? void 0 : o.output,
- extra_data: (o == null ? void 0 : o.extra_data) || {}
- }, s = String(n || "").trim();
- return s && (i.client_id = s), i;
-}
-function At(t, e) {
- const n = [
- t == null ? void 0 : t.clientId,
- t == null ? void 0 : t.clientID,
- t == null ? void 0 : t.client_id,
- e == null ? void 0 : e.clientId,
- e == null ? void 0 : e.clientID,
- e == null ? void 0 : e.client_id
- ];
- for (const o of n) {
- const i = String(o || "").trim();
- if (i) return i;
- }
- return "";
-}
-async function Ie() {
- const t = w();
- if (!t) throw new Error("ComfyUI app not available");
- const e = typeof t.graphToPrompt == "function" ? await t.graphToPrompt() : null;
- if (!(e != null && e.output)) throw new Error("graphToPrompt returned empty output");
- const o = (t != null && t.api && typeof t.api.queuePrompt == "function" ? t.api : null) ?? Nt(t);
- if (o && typeof o.queuePrompt == "function")
- return await o.queuePrompt(0, Tt(e)), { tracked: !0 };
- if (o && typeof o.fetchApi == "function") {
- const s = await o.fetchApi("/prompt", {
- method: "POST",
- headers: { "Content-Type": "application/json" },
- body: JSON.stringify(
- St(e, {
- clientId: At(o, t)
- })
- )
- });
- if (!(s != null && s.ok)) throw new Error(`POST /prompt failed (${s == null ? void 0 : s.status})`);
- return { tracked: !0 };
- }
- if (typeof t.queuePrompt == "function")
- return await t.queuePrompt(0), { tracked: !0 };
- const i = await fetch("/prompt", {
- method: "POST",
- credentials: "include",
- headers: { "Content-Type": "application/json" },
- body: JSON.stringify(
- St(e, {
- clientId: At(null, t)
- })
- )
- });
- if (!i.ok) throw new Error(`POST /prompt failed (${i.status})`);
- return { tracked: !1 };
-}
-function Le(t) {
- const e = document.createElement("div");
- return e.className = "mjr-mfv", e.setAttribute("role", "dialog"), e.setAttribute("aria-modal", "false"), e.setAttribute("aria-hidden", "true"), t.element = e, e.appendChild(t._buildHeader()), e.setAttribute("aria-labelledby", t._titleId), e.appendChild(t._buildToolbar()), e.appendChild(Kt(t)), t._contentWrapper = document.createElement("div"), t._contentWrapper.className = "mjr-mfv-content-wrapper", t._applySidebarPosition(), t._contentEl = document.createElement("div"), t._contentEl.className = "mjr-mfv-content", t._contentWrapper.appendChild(t._contentEl), t._contentEl.appendChild(Xt(t)), t._sidebar = new Pe({
- hostEl: e,
- onClose: () => t._updateSettingsBtnState(!1)
- }), t._contentWrapper.appendChild(t._sidebar.el), e.appendChild(t._contentWrapper), t._rebindControlHandlers(), t._bindPanelInteractions(), t._bindDocumentUiHandlers(), t._onSidebarPosChanged = (n) => {
- var o;
- ((o = n == null ? void 0 : n.detail) == null ? void 0 : o.key) === "viewer.mfvSidebarPosition" && t._applySidebarPosition();
- }, window.addEventListener("mjr-settings-changed", t._onSidebarPosChanged), t._refresh(), e;
-}
-function ke(t) {
- const e = document.createElement("div");
- e.className = "mjr-mfv-header";
- const n = document.createElement("span");
- n.className = "mjr-mfv-header-title", n.id = t._titleId, n.textContent = "〽️ Majoor Viewer Lite";
- const o = document.createElement("button");
- t._closeBtn = o, o.type = "button", o.className = "mjr-icon-btn mjr-mfv-close-btn", Q(o, I("tooltip.closeViewer", "Close viewer"), ee);
- const i = document.createElement("i");
- return i.className = "pi pi-times", i.setAttribute("aria-hidden", "true"), o.appendChild(i), e.appendChild(n), e.appendChild(o), e;
-}
-function xe(t) {
- var u, f;
- const e = document.createElement("div");
- e.className = "mjr-mfv-toolbar", t._modeBtn = document.createElement("button"), t._modeBtn.type = "button", t._modeBtn.className = "mjr-icon-btn", t._updateModeBtnUI(), e.appendChild(t._modeBtn), t._pinGroup = document.createElement("div"), t._pinGroup.className = "mjr-mfv-pin-group", t._pinGroup.setAttribute("role", "group"), t._pinGroup.setAttribute("aria-label", "Pin References"), t._pinBtns = {};
- for (const m of ["A", "B", "C", "D"]) {
- const h = document.createElement("button");
- h.type = "button", h.className = "mjr-mfv-pin-btn", h.textContent = m, h.dataset.slot = m, h.title = `Pin ${m}`, h.setAttribute("aria-pressed", "false"), t._pinBtns[m] = h, t._pinGroup.appendChild(h);
- }
- t._updatePinUI(), e.appendChild(t._pinGroup);
- const n = document.createElement("div");
- n.className = "mjr-mfv-toolbar-sep", n.setAttribute("aria-hidden", "true"), e.appendChild(n), t._liveBtn = document.createElement("button"), t._liveBtn.type = "button", t._liveBtn.className = "mjr-icon-btn", t._liveBtn.innerHTML = '', t._liveBtn.setAttribute("aria-pressed", "false"), Q(
- t._liveBtn,
- I("tooltip.liveStreamOff", "Live Stream: OFF — click to follow"),
- Ft
- ), e.appendChild(t._liveBtn), t._previewBtn = document.createElement("button"), t._previewBtn.type = "button", t._previewBtn.className = "mjr-icon-btn", t._previewBtn.innerHTML = '', t._previewBtn.setAttribute("aria-pressed", "false"), Q(
- t._previewBtn,
- I(
- "tooltip.previewStreamOff",
- "KSampler Preview: OFF — click to stream denoising steps"
- ),
- It
- ), e.appendChild(t._previewBtn), t._nodeStreamBtn = document.createElement("button"), t._nodeStreamBtn.type = "button", t._nodeStreamBtn.className = "mjr-icon-btn", t._nodeStreamBtn.innerHTML = '', t._nodeStreamBtn.setAttribute("aria-pressed", "false"), Q(
- t._nodeStreamBtn,
- I("tooltip.nodeStreamOff", "Node Stream: OFF — click to stream selected node output"),
- te
- ), e.appendChild(t._nodeStreamBtn), (f = (u = t._nodeStreamBtn).remove) == null || f.call(u), t._nodeStreamBtn = null, t._genBtn = document.createElement("button"), t._genBtn.type = "button", t._genBtn.className = "mjr-icon-btn", t._genBtn.setAttribute("aria-haspopup", "dialog"), t._genBtn.setAttribute("aria-expanded", "false");
- const o = document.createElement("i");
- o.className = "pi pi-info-circle", o.setAttribute("aria-hidden", "true"), t._genBtn.appendChild(o), e.appendChild(t._genBtn), t._updateGenBtnUI(), t._popoutBtn = document.createElement("button"), t._popoutBtn.type = "button", t._popoutBtn.className = "mjr-icon-btn";
- const i = I("tooltip.popOutViewer", "Pop out viewer to separate window");
- t._popoutBtn.title = i, t._popoutBtn.setAttribute("aria-label", i), t._popoutBtn.setAttribute("aria-pressed", "false");
- const s = document.createElement("i");
- s.className = "pi pi-external-link", s.setAttribute("aria-hidden", "true"), t._popoutBtn.appendChild(s), e.appendChild(t._popoutBtn), t._captureBtn = document.createElement("button"), t._captureBtn.type = "button", t._captureBtn.className = "mjr-icon-btn";
- const l = I("tooltip.captureView", "Save view as image");
- t._captureBtn.title = l, t._captureBtn.setAttribute("aria-label", l);
- const c = document.createElement("i");
- c.className = "pi pi-download", c.setAttribute("aria-hidden", "true"), t._captureBtn.appendChild(c), e.appendChild(t._captureBtn);
- const d = document.createElement("div");
- d.className = "mjr-mfv-toolbar-sep", d.style.marginLeft = "auto", d.setAttribute("aria-hidden", "true"), e.appendChild(d), t._settingsBtn = document.createElement("button"), t._settingsBtn.type = "button", t._settingsBtn.className = "mjr-icon-btn mjr-mfv-settings-btn";
- const r = I("tooltip.nodeParams", "Node Parameters");
- t._settingsBtn.title = r, t._settingsBtn.setAttribute("aria-label", r), t._settingsBtn.setAttribute("aria-pressed", "false");
- const a = document.createElement("i");
- return a.className = "pi pi-sliders-h", a.setAttribute("aria-hidden", "true"), t._settingsBtn.appendChild(a), e.appendChild(t._settingsBtn), t._runHandle = Ne(), e.appendChild(t._runHandle.el), t._handleDocClick = (m) => {
- var p, g;
- if (!t._genDropdown) return;
- const h = m == null ? void 0 : m.target;
- (g = (p = t._genBtn) == null ? void 0 : p.contains) != null && g.call(p, h) || t._genDropdown.contains(h) || t._closeGenDropdown();
- }, t._bindDocumentUiHandlers(), e;
-}
-function je(t) {
- var n, o, i, s, l, c, d, r, a, u, f, m;
- try {
- (n = t._btnAC) == null || n.abort();
- } catch (h) {
- (o = console.debug) == null || o.call(console, h);
- }
- t._btnAC = new AbortController();
- const e = t._btnAC.signal;
- (i = t._closeBtn) == null || i.addEventListener(
- "click",
- () => {
- t._dispatchControllerAction("close", W.MFV_CLOSE);
- },
- { signal: e }
- ), (s = t._modeBtn) == null || s.addEventListener("click", () => t._cycleMode(), { signal: e }), (l = t._pinGroup) == null || l.addEventListener(
- "click",
- (h) => {
- var y, S;
- const p = (S = (y = h.target) == null ? void 0 : y.closest) == null ? void 0 : S.call(y, ".mjr-mfv-pin-btn");
- if (!p) return;
- const g = p.dataset.slot;
- g && (t._pinnedSlots.has(g) ? t._pinnedSlots.delete(g) : t._pinnedSlots.add(g), t._pinnedSlots.has("C") || t._pinnedSlots.has("D") ? t._mode !== E.GRID && t.setMode(E.GRID) : t._pinnedSlots.size > 0 && t._mode === E.SIMPLE && t.setMode(E.AB), t._updatePinUI());
- },
- { signal: e }
- ), (c = t._liveBtn) == null || c.addEventListener(
- "click",
- () => {
- t._dispatchControllerAction("toggleLive", W.MFV_LIVE_TOGGLE);
- },
- { signal: e }
- ), (d = t._previewBtn) == null || d.addEventListener(
- "click",
- () => {
- t._dispatchControllerAction("togglePreview", W.MFV_PREVIEW_TOGGLE);
- },
- { signal: e }
- ), (r = t._nodeStreamBtn) == null || r.addEventListener(
- "click",
- () => {
- t._dispatchControllerAction("toggleNodeStream", W.MFV_NODESTREAM_TOGGLE);
- },
- { signal: e }
- ), (a = t._genBtn) == null || a.addEventListener(
- "click",
- (h) => {
- var p, g;
- h.stopPropagation(), (g = (p = t._genDropdown) == null ? void 0 : p.classList) != null && g.contains("is-visible") ? t._closeGenDropdown() : t._openGenDropdown();
- },
- { signal: e }
- ), (u = t._popoutBtn) == null || u.addEventListener(
- "click",
- () => {
- t._dispatchControllerAction("popOut", W.MFV_POPOUT);
- },
- { signal: e }
- ), (f = t._captureBtn) == null || f.addEventListener("click", () => t._captureView(), { signal: e }), (m = t._settingsBtn) == null || m.addEventListener(
- "click",
- () => {
- var h, p;
- (h = t._sidebar) == null || h.toggle(), t._updateSettingsBtnState(((p = t._sidebar) == null ? void 0 : p.isVisible) ?? !1);
- },
- { signal: e }
- );
-}
-function Te(t, e) {
- t._settingsBtn && (t._settingsBtn.classList.toggle("active", !!e), t._settingsBtn.setAttribute("aria-pressed", String(!!e)));
-}
-function Ve(t) {
- var n;
- if (!t._contentWrapper) return;
- const e = q.MFV_SIDEBAR_POSITION || "right";
- t._contentWrapper.setAttribute("data-sidebar-pos", e), (n = t._sidebar) != null && n.el && t._contentEl && (e === "left" ? t._contentWrapper.insertBefore(t._sidebar.el, t._contentEl) : t._contentWrapper.appendChild(t._sidebar.el));
-}
-function Ge(t) {
- var e, n, o;
- t._closeGenDropdown();
- try {
- (n = (e = t._genDropdown) == null ? void 0 : e.remove) == null || n.call(e);
- } catch (i) {
- (o = console.debug) == null || o.call(console, i);
- }
- t._genDropdown = null, t._updateGenBtnUI();
-}
-function Oe(t) {
- var n, o, i;
- if (!t._handleDocClick) return;
- const e = ((n = t.element) == null ? void 0 : n.ownerDocument) || document;
- if (t._docClickHost !== e) {
- t._unbindDocumentUiHandlers();
- try {
- (o = t._docAC) == null || o.abort();
- } catch (s) {
- (i = console.debug) == null || i.call(console, s);
- }
- t._docAC = new AbortController(), e.addEventListener("click", t._handleDocClick, { signal: t._docAC.signal }), t._docClickHost = e;
- }
-}
-function Re(t) {
- var e, n;
- try {
- (e = t._docAC) == null || e.abort();
- } catch (o) {
- (n = console.debug) == null || n.call(console, o);
- }
- t._docAC = new AbortController(), t._docClickHost = null;
-}
-function He(t) {
- var e, n;
- return !!((n = (e = t._genDropdown) == null ? void 0 : e.classList) != null && n.contains("is-visible"));
-}
-function De(t) {
- if (!t.element) return;
- t._genDropdown || (t._genDropdown = t._buildGenDropdown(), t.element.appendChild(t._genDropdown)), t._bindDocumentUiHandlers();
- const e = t._genBtn.getBoundingClientRect(), n = t.element.getBoundingClientRect(), o = e.left - n.left, i = e.bottom - n.top + 6;
- t._genDropdown.style.left = `${o}px`, t._genDropdown.style.top = `${i}px`, t._genDropdown.classList.add("is-visible"), t._updateGenBtnUI();
-}
-function Ue(t) {
- t._genDropdown && (t._genDropdown.classList.remove("is-visible"), t._updateGenBtnUI());
-}
-function ze(t) {
- if (!t._genBtn) return;
- const e = t._genInfoSelections.size, n = e > 0, o = t._isGenDropdownOpen();
- t._genBtn.classList.toggle("is-on", n), t._genBtn.classList.toggle("is-open", o);
- const i = n ? `Gen Info (${e} field${e > 1 ? "s" : ""} shown)${o ? " — open" : " — click to configure"}` : `Gen Info${o ? " — open" : " — click to show overlay"}`;
- t._genBtn.title = i, t._genBtn.setAttribute("aria-label", i), t._genBtn.setAttribute("aria-expanded", String(o)), t._genDropdown ? t._genBtn.setAttribute("aria-controls", t._genDropdownId) : t._genBtn.removeAttribute("aria-controls");
-}
-function $e(t) {
- const e = document.createElement("div");
- e.className = "mjr-mfv-gen-dropdown", e.id = t._genDropdownId, e.setAttribute("role", "group"), e.setAttribute("aria-label", "Generation info fields");
- const n = [
- ["prompt", "Prompt"],
- ["seed", "Seed"],
- ["model", "Model"],
- ["lora", "LoRA"],
- ["sampler", "Sampler"],
- ["scheduler", "Scheduler"],
- ["cfg", "CFG"],
- ["step", "Step"],
- ["genTime", "Gen Time"]
- ];
- for (const [o, i] of n) {
- const s = document.createElement("label");
- s.className = "mjr-mfv-gen-dropdown-row";
- const l = document.createElement("input");
- l.type = "checkbox", l.checked = t._genInfoSelections.has(o), l.addEventListener("change", () => {
- l.checked ? t._genInfoSelections.add(o) : t._genInfoSelections.delete(o), t._updateGenBtnUI(), t._refresh();
- });
- const c = document.createElement("span");
- c.textContent = i, s.appendChild(l), s.appendChild(c), e.appendChild(s);
- }
- return e;
-}
-function Et(t) {
- const e = Number(t);
- return !Number.isFinite(e) || e <= 0 ? "" : e >= 60 ? `${(e / 60).toFixed(1)}m` : `${e.toFixed(1)}s`;
-}
-function We(t) {
- const e = String(t || "").trim().toLowerCase();
- if (!e) return 0;
- if (e.endsWith("m")) {
- const o = Number.parseFloat(e.slice(0, -1));
- return Number.isFinite(o) ? o * 60 : 0;
- }
- if (e.endsWith("s")) {
- const o = Number.parseFloat(e.slice(0, -1));
- return Number.isFinite(o) ? o : 0;
- }
- const n = Number.parseFloat(e);
- return Number.isFinite(n) ? n : 0;
-}
-function ve(t, e) {
- var s, l, c, d;
- if (!e) return {};
- try {
- const r = e.geninfo ? { geninfo: e.geninfo } : e.metadata || e.metadata_raw || e, a = qt(r) || null, u = {
- prompt: "",
- seed: "",
- model: "",
- lora: "",
- sampler: "",
- scheduler: "",
- cfg: "",
- step: "",
- genTime: ""
- };
- if (a && typeof a == "object") {
- a.prompt && (u.prompt = st(String(a.prompt))), a.seed != null && (u.seed = String(a.seed)), a.model && (u.model = Array.isArray(a.model) ? a.model.join(", ") : String(a.model)), Array.isArray(a.loras) && (u.lora = a.loras.map(
- (m) => typeof m == "string" ? m : (m == null ? void 0 : m.name) || (m == null ? void 0 : m.lora_name) || (m == null ? void 0 : m.model_name) || ""
- ).filter(Boolean).join(", ")), a.sampler && (u.sampler = String(a.sampler)), a.scheduler && (u.scheduler = String(a.scheduler)), a.cfg != null && (u.cfg = String(a.cfg)), a.steps != null && (u.step = String(a.steps)), !u.prompt && (r != null && r.prompt) && (u.prompt = st(String(r.prompt || "")));
- const f = e.generation_time_ms ?? ((s = e.metadata_raw) == null ? void 0 : s.generation_time_ms) ?? (r == null ? void 0 : r.generation_time_ms) ?? ((l = r == null ? void 0 : r.geninfo) == null ? void 0 : l.generation_time_ms) ?? 0;
- return f && Number.isFinite(Number(f)) && f > 0 && f < 864e5 && (u.genTime = Et(Number(f) / 1e3)), u;
- }
- } catch (r) {
- (c = console.debug) == null || c.call(console, "[MFV] geninfo normalize failed", r);
- }
- const n = (e == null ? void 0 : e.metadata) || (e == null ? void 0 : e.metadata_raw) || e || {}, o = {
- prompt: st(String((n == null ? void 0 : n.prompt) || (n == null ? void 0 : n.positive) || "")),
- seed: (n == null ? void 0 : n.seed) != null ? String(n.seed) : "",
- model: (n == null ? void 0 : n.checkpoint) || (n == null ? void 0 : n.ckpt_name) || (n == null ? void 0 : n.model) || "",
- lora: Array.isArray(n == null ? void 0 : n.loras) ? n.loras.join(", ") : (n == null ? void 0 : n.lora) || "",
- sampler: (n == null ? void 0 : n.sampler_name) || (n == null ? void 0 : n.sampler) || "",
- scheduler: (n == null ? void 0 : n.scheduler) || "",
- cfg: (n == null ? void 0 : n.cfg) != null ? String(n.cfg) : (n == null ? void 0 : n.cfg_scale) != null ? String(n.cfg_scale) : "",
- step: (n == null ? void 0 : n.steps) != null ? String(n.steps) : "",
- genTime: ""
- }, i = e.generation_time_ms ?? ((d = e.metadata_raw) == null ? void 0 : d.generation_time_ms) ?? (n == null ? void 0 : n.generation_time_ms) ?? 0;
- return i && Number.isFinite(Number(i)) && i > 0 && i < 864e5 && (o.genTime = Et(Number(i) / 1e3)), o;
-}
-function Ke(t, e) {
- const n = t._getGenFields(e);
- if (!n) return null;
- const o = document.createDocumentFragment(), i = [
- "prompt",
- "seed",
- "model",
- "lora",
- "sampler",
- "scheduler",
- "cfg",
- "step",
- "genTime"
- ];
- for (const s of i) {
- if (!t._genInfoSelections.has(s)) continue;
- const l = n[s] != null ? String(n[s]) : "";
- if (!l) continue;
- let c = s.charAt(0).toUpperCase() + s.slice(1);
- s === "lora" ? c = "LoRA" : s === "cfg" ? c = "CFG" : s === "genTime" && (c = "Gen Time");
- const d = document.createElement("div");
- d.dataset.field = s;
- const r = document.createElement("strong");
- if (r.textContent = `${c}: `, d.appendChild(r), s === "prompt")
- d.appendChild(document.createTextNode(l));
- else if (s === "genTime") {
- const a = We(l);
- let u = "#4CAF50";
- a >= 60 ? u = "#FF9800" : a >= 30 ? u = "#FFC107" : a >= 10 && (u = "#8BC34A");
- const f = document.createElement("span");
- f.style.color = u, f.style.fontWeight = "600", f.textContent = l, d.appendChild(f);
- } else
- d.appendChild(document.createTextNode(l));
- o.appendChild(d);
- }
- return o.childNodes.length > 0 ? o : null;
-}
-function Xe(t) {
- var e, n, o;
- try {
- (n = (e = t._controller) == null ? void 0 : e.onModeChanged) == null || n.call(e, t._mode);
- } catch (i) {
- (o = console.debug) == null || o.call(console, i);
- }
-}
-function qe(t) {
- const e = [E.SIMPLE, E.AB, E.SIDE, E.GRID];
- t._mode = e[(e.indexOf(t._mode) + 1) % e.length], t._updateModeBtnUI(), t._refresh(), t._notifyModeChanged();
-}
-function we(t, e) {
- Object.values(E).includes(e) && (t._mode = e, t._updateModeBtnUI(), t._refresh(), t._notifyModeChanged());
-}
-function Ye(t) {
- return t._pinnedSlots;
-}
-function Ze(t) {
- if (t._pinBtns)
- for (const e of ["A", "B", "C", "D"]) {
- const n = t._pinBtns[e];
- if (!n) continue;
- const o = t._pinnedSlots.has(e);
- n.classList.toggle("is-pinned", o), n.setAttribute("aria-pressed", String(o)), n.title = o ? `Unpin ${e}` : `Pin ${e}`;
- }
-}
-function Je(t) {
- if (!t._modeBtn) return;
- const e = {
- [E.SIMPLE]: { icon: "pi-image", label: "Mode: Simple - click to switch" },
- [E.AB]: { icon: "pi-clone", label: "Mode: A/B Compare - click to switch" },
- [E.SIDE]: { icon: "pi-table", label: "Mode: Side-by-Side - click to switch" },
- [E.GRID]: {
- icon: "pi-th-large",
- label: "Mode: Grid Compare (up to 4) - click to switch"
- }
- }, { icon: n = "pi-image", label: o = "" } = e[t._mode] || {}, i = dt(o, Qt), s = document.createElement("i");
- s.className = `pi ${n}`, s.setAttribute("aria-hidden", "true"), t._modeBtn.replaceChildren(s), t._modeBtn.title = i, t._modeBtn.setAttribute("aria-label", i), t._modeBtn.removeAttribute("aria-pressed");
-}
-function Qe(t, e) {
- if (!t._liveBtn) return;
- const n = !!e;
- t._liveBtn.classList.toggle("mjr-live-active", n);
- const o = n ? I("tooltip.liveStreamOn", "Live Stream: ON — click to disable") : I("tooltip.liveStreamOff", "Live Stream: OFF — click to follow"), i = dt(o, Ft);
- t._liveBtn.setAttribute("aria-pressed", String(n)), t._liveBtn.setAttribute("aria-label", i);
- const s = document.createElement("i");
- s.className = n ? "pi pi-circle-fill" : "pi pi-circle", s.setAttribute("aria-hidden", "true"), t._liveBtn.replaceChildren(s), t._liveBtn.title = i;
-}
-function tn(t, e) {
- if (t._previewActive = !!e, !t._previewBtn) return;
- t._previewBtn.classList.toggle("mjr-preview-active", t._previewActive);
- const n = t._previewActive ? I("tooltip.previewStreamOn", "KSampler Preview: ON — streaming denoising steps") : I(
- "tooltip.previewStreamOff",
- "KSampler Preview: OFF — click to stream denoising steps"
- ), o = dt(n, It);
- t._previewBtn.setAttribute("aria-pressed", String(t._previewActive)), t._previewBtn.setAttribute("aria-label", o);
- const i = document.createElement("i");
- i.className = t._previewActive ? "pi pi-eye" : "pi pi-eye-slash", i.setAttribute("aria-hidden", "true"), t._previewBtn.replaceChildren(i), t._previewBtn.title = o, t._previewActive || t._revokePreviewBlob();
-}
-function en(t, e, n = {}) {
- if (!e || !(e instanceof Blob)) return;
- t._revokePreviewBlob();
- const o = URL.createObjectURL(e);
- t._previewBlobUrl = o;
- const i = {
- url: o,
- filename: "preview.jpg",
- kind: "image",
- _isPreview: !0,
- _sourceLabel: (n == null ? void 0 : n.sourceLabel) || null
- };
- if (t._mode === E.AB || t._mode === E.SIDE || t._mode === E.GRID) {
- const l = t.getPinnedSlots();
- if (t._mode === E.GRID) {
- const c = ["A", "B", "C", "D"].find((d) => !l.has(d)) || "A";
- t[`_media${c}`] = i;
- } else l.has("B") ? t._mediaA = i : t._mediaB = i;
- } else
- t._mediaA = i, t._resetMfvZoom(), t._mode !== E.SIMPLE && (t._mode = E.SIMPLE, t._updateModeBtnUI());
- ++t._refreshGen, t._refresh();
-}
-function nn(t) {
- if (t._previewBlobUrl) {
- try {
- URL.revokeObjectURL(t._previewBlobUrl);
- } catch {
- }
- t._previewBlobUrl = null;
- }
-}
-function on(t, e) {
- {
- t._nodeStreamActive = !1;
- return;
- }
-}
-const sn = [
- "--border-color",
- "--border-default",
- "--button-hover-surface",
- "--button-surface",
- "--comfy-accent",
- "--comfy-font",
- "--comfy-input-bg",
- "--comfy-menu-bg",
- "--comfy-menu-secondary-bg",
- "--comfy-status-error",
- "--comfy-status-success",
- "--comfy-status-warning",
- "--content-bg",
- "--content-fg",
- "--descrip-text",
- "--destructive-background",
- "--font-inter",
- "--input-text",
- "--interface-menu-surface",
- "--interface-panel-hover-surface",
- "--interface-panel-selected-surface",
- "--interface-panel-surface",
- "--modal-card-background",
- "--muted-foreground",
- "--primary-background",
- "--primary-background-hover",
- "--radius-lg",
- "--radius-md",
- "--radius-sm",
- "--success-background",
- "--warning-background"
-];
-function rn() {
- var t, e, n, o, i;
- try {
- const s = typeof window < "u" ? window : globalThis, l = (e = (t = s == null ? void 0 : s.process) == null ? void 0 : t.versions) == null ? void 0 : e.electron;
- if (typeof l == "string" && l.trim() || s != null && s.electron || s != null && s.ipcRenderer || s != null && s.electronAPI)
- return !0;
- const c = String(((n = s == null ? void 0 : s.navigator) == null ? void 0 : n.userAgent) || ((o = globalThis == null ? void 0 : globalThis.navigator) == null ? void 0 : o.userAgent) || ""), d = /\bElectron\//i.test(c), r = /\bCode\//i.test(c);
- if (d && !r)
- return !0;
- } catch (s) {
- (i = console.debug) == null || i.call(console, s);
- }
- return !1;
-}
-function F(t, e = null, n = "info") {
- var i, s;
- const o = {
- stage: String(t || "unknown"),
- detail: e,
- ts: Date.now()
- };
- try {
- const l = typeof window < "u" ? window : globalThis, c = "__MJR_MFV_POPOUT_TRACE__", d = Array.isArray(l[c]) ? l[c] : [];
- d.push(o), l[c] = d.slice(-20), l.__MJR_MFV_POPOUT_LAST__ = o;
- } catch (l) {
- (i = console.debug) == null || i.call(console, l);
- }
- try {
- const l = n === "error" ? console.error : n === "warn" ? console.warn : console.info;
- l == null || l("[MFV popout]", o);
- } catch (l) {
- (s = console.debug) == null || s.call(console, l);
- }
-}
-function Pt(t, ...e) {
- return Array.from(
- new Set(
- [String(t || ""), ...e].join(" ").split(/\s+/).filter(Boolean)
- )
- ).join(" ");
-}
-function Bt(t, e) {
- var n;
- if (!(!t || !e))
- for (const o of Array.from(t.attributes || [])) {
- const i = String((o == null ? void 0 : o.name) || "");
- if (!(!i || i === "class" || i === "style"))
- try {
- e.setAttribute(i, o.value);
- } catch (s) {
- (n = console.debug) == null || n.call(console, s);
- }
- }
-}
-function Mt(t, e) {
- var i, s, l, c, d;
- if (!t || !(e != null && e.style)) return;
- const n = typeof window < "u" && (window == null ? void 0 : window.getComputedStyle) || (globalThis == null ? void 0 : globalThis.getComputedStyle);
- if (typeof n != "function") return;
- let o = null;
- try {
- o = n(t);
- } catch (r) {
- (i = console.debug) == null || i.call(console, r);
- }
- if (o) {
- for (const r of sn)
- try {
- const a = String(((s = o.getPropertyValue) == null ? void 0 : s.call(o, r)) || "").trim();
- a && e.style.setProperty(r, a);
- } catch (a) {
- (l = console.debug) == null || l.call(console, a);
- }
- try {
- const r = String(((c = o.getPropertyValue) == null ? void 0 : c.call(o, "color-scheme")) || "").trim();
- r && (e.style.colorScheme = r);
- } catch (r) {
- (d = console.debug) == null || d.call(console, r);
- }
- }
-}
-function an(t) {
- if (!(t != null && t.documentElement) || !(t != null && t.body) || !(document != null && document.documentElement)) return;
- const e = document.documentElement, n = document.body, o = t.documentElement, i = t.body;
- o.className = Pt(
- e.className,
- "mjr-mfv-popout-document"
- ), i.className = Pt(
- n == null ? void 0 : n.className,
- "mjr-mfv-popout-body"
- ), Bt(e, o), Bt(n, i), Mt(e, o), Mt(n, i), e != null && e.lang && (o.lang = e.lang), e != null && e.dir && (o.dir = e.dir);
-}
-function Vt(t) {
- var n, o, i;
- if (!(t != null && t.body)) return null;
- try {
- const s = (n = t.getElementById) == null ? void 0 : n.call(t, "mjr-mfv-popout-root");
- (o = s == null ? void 0 : s.remove) == null || o.call(s);
- } catch (s) {
- (i = console.debug) == null || i.call(console, s);
- }
- const e = t.createElement("div");
- return e.id = "mjr-mfv-popout-root", e.className = "mjr-mfv-popout-root", t.body.appendChild(e), e;
-}
-function ln(t, e) {
- if (!t.element) return;
- const n = !!e;
- if (t._desktopExpanded === n) return;
- const o = t.element;
- if (n) {
- t._desktopExpandRestore = {
- parent: o.parentNode || null,
- nextSibling: o.nextSibling || null,
- styleAttr: o.getAttribute("style")
- }, o.parentNode !== document.body && document.body.appendChild(o), o.classList.add("mjr-mfv--desktop-expanded", "is-visible"), o.setAttribute("aria-hidden", "false"), o.style.position = "fixed", o.style.top = "12px", o.style.left = "12px", o.style.right = "12px", o.style.bottom = "12px", o.style.width = "auto", o.style.height = "auto", o.style.maxWidth = "none", o.style.maxHeight = "none", o.style.minWidth = "320px", o.style.minHeight = "240px", o.style.resize = "none", o.style.margin = "0", o.style.zIndex = "2147483000", t._desktopExpanded = !0, t.isVisible = !0, t._resetGenDropdownForCurrentDocument(), t._rebindControlHandlers(), t._bindPanelInteractions(), t._bindDocumentUiHandlers(), t._updatePopoutBtnUI(), F("electron-in-app-expanded", { isVisible: t.isVisible });
- return;
- }
- const i = t._desktopExpandRestore;
- t._desktopExpanded = !1, o.classList.remove("mjr-mfv--desktop-expanded"), (i == null ? void 0 : i.styleAttr) == null || i.styleAttr === "" ? o.removeAttribute("style") : o.setAttribute("style", i.styleAttr), i != null && i.parent && i.parent.isConnected && (i.nextSibling && i.nextSibling.parentNode === i.parent ? i.parent.insertBefore(o, i.nextSibling) : i.parent.appendChild(o)), t._desktopExpandRestore = null, t._resetGenDropdownForCurrentDocument(), t._rebindControlHandlers(), t._bindPanelInteractions(), t._bindDocumentUiHandlers(), t._updatePopoutBtnUI(), F("electron-in-app-restored", null);
-}
-function cn(t, e) {
- var n;
- t._desktopPopoutUnsupported = !0, F(
- "electron-in-app-fallback",
- { message: (e == null ? void 0 : e.message) || String(e || "unknown error") },
- "warn"
- ), t._setDesktopExpanded(!0);
- try {
- wt(
- I(
- "toast.popoutElectronInAppFallback",
- "Desktop PiP is unavailable here. Viewer expanded inside the app instead."
- ),
- "warning",
- 4500
- );
- } catch (o) {
- (n = console.debug) == null || n.call(console, o);
- }
-}
-function dn(t, e, n, o, i) {
- return F(
- "electron-popup-fallback-attempt",
- { reason: (i == null ? void 0 : i.message) || String(i || "unknown") },
- "warn"
- ), t._fallbackPopout(e, n, o), t._popoutWindow ? (t._desktopPopoutUnsupported = !1, F("electron-popup-fallback-opened", null), !0) : !1;
-}
-function un(t) {
- var c, d;
- if (t._isPopped || !t.element) return;
- const e = t.element;
- t._stopEdgeResize();
- const n = rn(), o = typeof window < "u" && "documentPictureInPicture" in window, i = String(((c = window == null ? void 0 : window.navigator) == null ? void 0 : c.userAgent) || ((d = globalThis == null ? void 0 : globalThis.navigator) == null ? void 0 : d.userAgent) || ""), s = Math.max(e.offsetWidth || 520, 400), l = Math.max(e.offsetHeight || 420, 300);
- if (F("start", {
- isElectronHost: n,
- hasDocumentPiP: o,
- userAgent: i,
- width: s,
- height: l,
- desktopPopoutUnsupported: t._desktopPopoutUnsupported
- }), n && t._desktopPopoutUnsupported) {
- F("electron-in-app-fallback-reuse", null), t._setDesktopExpanded(!0);
- return;
- }
- if (!(n && (F("electron-popup-request", { width: s, height: l }), t._tryElectronPopupFallback(e, s, l, new Error("Desktop popup requested"))))) {
- if (n && "documentPictureInPicture" in window) {
- F("electron-pip-request", { width: s, height: l }), window.documentPictureInPicture.requestWindow({ width: s, height: l }).then((r) => {
- var h, p, g;
- F("electron-pip-opened", {
- hasDocument: !!(r != null && r.document)
- }), t._popoutWindow = r, t._isPopped = !0, t._popoutRestoreGuard = !1;
- try {
- (h = t._popoutAC) == null || h.abort();
- } catch (y) {
- (p = console.debug) == null || p.call(console, y);
- }
- t._popoutAC = new AbortController();
- const a = t._popoutAC.signal, u = () => t._schedulePopInFromPopupClose();
- t._popoutCloseHandler = u;
- const f = r.document;
- f.title = "Majoor Viewer", t._installPopoutStyles(f);
- const m = Vt(f);
- if (!m) {
- t._activateDesktopExpandedFallback(new Error("Popup root creation failed"));
- return;
- }
- try {
- const y = typeof f.adoptNode == "function" ? f.adoptNode(e) : e;
- m.appendChild(y), F("electron-pip-adopted", {
- usedAdoptNode: typeof f.adoptNode == "function"
- });
- } catch (y) {
- F(
- "electron-pip-adopt-failed",
- { message: (y == null ? void 0 : y.message) || String(y) },
- "warn"
- ), console.warn("[MFV] PiP adoptNode failed", y), t._isPopped = !1, t._popoutWindow = null;
- try {
- r.close();
- } catch (S) {
- (g = console.debug) == null || g.call(console, S);
- }
- t._activateDesktopExpandedFallback(y);
- return;
- }
- e.classList.add("is-visible"), t.isVisible = !0, t._resetGenDropdownForCurrentDocument(), t._rebindControlHandlers(), t._bindDocumentUiHandlers(), t._updatePopoutBtnUI(), F("electron-pip-ready", { isPopped: t._isPopped }), r.addEventListener("pagehide", u, {
- signal: a
- }), t._startPopoutCloseWatch(), t._popoutKeydownHandler = (y) => {
- var _, C;
- const S = String(((_ = y == null ? void 0 : y.target) == null ? void 0 : _.tagName) || "").toLowerCase();
- y != null && y.defaultPrevented || (C = y == null ? void 0 : y.target) != null && C.isContentEditable || S === "input" || S === "textarea" || S === "select" || t._forwardKeydownToController(y);
- }, r.addEventListener("keydown", t._popoutKeydownHandler, {
- signal: a
- });
- }).catch((r) => {
- F(
- "electron-pip-request-failed",
- { message: (r == null ? void 0 : r.message) || String(r) },
- "warn"
- ), t._activateDesktopExpandedFallback(r);
- });
- return;
- }
- if (n) {
- F("electron-no-pip-api", { hasDocumentPiP: o }), t._activateDesktopExpandedFallback(
- new Error("Document Picture-in-Picture unavailable after popup failure")
- );
- return;
- }
- F("browser-fallback-popup", { width: s, height: l }), t._fallbackPopout(e, s, l);
- }
-}
-function pn(t, e, n, o) {
- var u, f, m, h;
- F("browser-popup-open", { width: n, height: o });
- const i = (window.screenX || window.screenLeft) + Math.round((window.outerWidth - n) / 2), s = (window.screenY || window.screenTop) + Math.round((window.outerHeight - o) / 2), l = `width=${n},height=${o},left=${i},top=${s},resizable=yes,scrollbars=no,toolbar=no,menubar=no,location=no,status=no`, c = window.open("about:blank", "_mjr_viewer", l);
- if (!c) {
- F("browser-popup-blocked", null, "warn"), console.warn("[MFV] Pop-out blocked — allow popups for this site.");
- return;
- }
- F("browser-popup-opened", { hasDocument: !!(c != null && c.document) }), t._popoutWindow = c, t._isPopped = !0, t._popoutRestoreGuard = !1;
- try {
- (u = t._popoutAC) == null || u.abort();
- } catch (p) {
- (f = console.debug) == null || f.call(console, p);
- }
- t._popoutAC = new AbortController();
- const d = t._popoutAC.signal, r = () => t._schedulePopInFromPopupClose();
- t._popoutCloseHandler = r;
- const a = () => {
- let p;
- try {
- p = c.document;
- } catch {
- return;
- }
- if (!p) return;
- p.title = "Majoor Viewer", t._installPopoutStyles(p);
- const g = Vt(p);
- if (g) {
- try {
- g.appendChild(p.adoptNode(e));
- } catch (y) {
- console.warn("[MFV] adoptNode failed", y);
- return;
- }
- e.classList.add("is-visible"), t.isVisible = !0, t._resetGenDropdownForCurrentDocument(), t._rebindControlHandlers(), t._bindDocumentUiHandlers(), t._updatePopoutBtnUI();
- }
- };
- try {
- a();
- } catch (p) {
- (m = console.debug) == null || m.call(console, "[MFV] immediate mount failed, retrying on load", p);
- try {
- c.addEventListener("load", a, { signal: d });
- } catch (g) {
- (h = console.debug) == null || h.call(console, "[MFV] pop-out page load listener failed", g);
- }
- }
- c.addEventListener("beforeunload", r, { signal: d }), c.addEventListener("pagehide", r, { signal: d }), c.addEventListener("unload", r, { signal: d }), t._startPopoutCloseWatch(), t._popoutKeydownHandler = (p) => {
- var S, _, C, A;
- const g = String(((S = p == null ? void 0 : p.target) == null ? void 0 : S.tagName) || "").toLowerCase();
- if (p != null && p.defaultPrevented || (_ = p == null ? void 0 : p.target) != null && _.isContentEditable || g === "input" || g === "textarea" || g === "select")
- return;
- if (String((p == null ? void 0 : p.key) || "").toLowerCase() === "v" && (p != null && p.ctrlKey || p != null && p.metaKey) && !(p != null && p.altKey) && !(p != null && p.shiftKey)) {
- p.preventDefault(), (C = p.stopPropagation) == null || C.call(p), (A = p.stopImmediatePropagation) == null || A.call(p), t._dispatchControllerAction("toggle", W.MFV_TOGGLE);
- return;
- }
- t._forwardKeydownToController(p);
- }, c.addEventListener("keydown", t._popoutKeydownHandler, { signal: d });
-}
-function mn(t) {
- var e;
- if (t._popoutCloseTimer != null) {
- try {
- window.clearInterval(t._popoutCloseTimer);
- } catch (n) {
- (e = console.debug) == null || e.call(console, n);
- }
- t._popoutCloseTimer = null;
- }
-}
-function fn(t) {
- t._clearPopoutCloseWatch(), t._popoutCloseTimer = window.setInterval(() => {
- if (!t._isPopped) {
- t._clearPopoutCloseWatch();
- return;
- }
- const e = t._popoutWindow;
- (!e || e.closed) && (t._clearPopoutCloseWatch(), t._schedulePopInFromPopupClose());
- }, 250);
-}
-function hn(t) {
- !t._isPopped || t._popoutRestoreGuard || (t._popoutRestoreGuard = !0, window.setTimeout(() => {
- try {
- t.popIn({ closePopupWindow: !1 });
- } finally {
- t._popoutRestoreGuard = !1;
- }
- }, 0));
-}
-function _n(t, e) {
- var o, i, s;
- if (!(e != null && e.head)) return;
- try {
- for (const l of e.head.querySelectorAll("[data-mjr-popout-cloned-style='1']"))
- l.remove();
- } catch (l) {
- (o = console.debug) == null || o.call(console, l);
- }
- an(e);
- try {
- const l = document.documentElement.style.cssText;
- if (l) {
- const c = e.createElement("style");
- c.setAttribute("data-mjr-popout-cloned-style", "1"), c.textContent = `:root { ${l} }`, e.head.appendChild(c);
- }
- } catch (l) {
- (i = console.debug) == null || i.call(console, l);
- }
- for (const l of document.querySelectorAll('link[rel="stylesheet"], style'))
- try {
- let c = null;
- if (l.tagName === "LINK") {
- c = e.createElement("link");
- for (const d of Array.from(l.attributes || []))
- (d == null ? void 0 : d.name) !== "href" && c.setAttribute(d.name, d.value);
- c.setAttribute("href", l.href || l.getAttribute("href") || "");
- } else
- c = e.importNode(l, !0);
- c.setAttribute("data-mjr-popout-cloned-style", "1"), e.head.appendChild(c);
- } catch (c) {
- (s = console.debug) == null || s.call(console, c);
- }
- const n = e.createElement("style");
- n.setAttribute("data-mjr-popout-cloned-style", "1"), n.textContent = `
- html.mjr-mfv-popout-document {
- min-height: 100%;
- background:
- radial-gradient(
- 1200px 420px at 50% 0%,
- color-mix(in srgb, var(--primary-background, var(--comfy-accent, #5fb3ff)) 10%, transparent),
- transparent 62%
- ),
- linear-gradient(
- 180deg,
- color-mix(in srgb, var(--interface-panel-surface, var(--content-bg, #16191f)) 82%, #000 18%),
- color-mix(in srgb, var(--interface-menu-surface, var(--comfy-menu-bg, #1f2227)) 84%, #000 16%)
- ) !important;
- }
- body.mjr-mfv-popout-body {
- margin: 0 !important;
- display: flex !important;
- min-height: 100vh !important;
- overflow: hidden !important;
- background: transparent !important;
- }
- #mjr-mfv-popout-root,
- .mjr-mfv-popout-root {
- flex: 1 !important;
- min-width: 0 !important;
- min-height: 0 !important;
- display: flex !important;
- isolation: isolate;
- }
- body.mjr-mfv-popout-body .mjr-mfv {
- position: static !important;
- width: 100% !important;
- height: 100% !important;
- min-width: 0 !important;
- min-height: 0 !important;
- resize: none !important;
- border-radius: 0 !important;
- display: flex !important;
- opacity: 1 !important;
- visibility: visible !important;
- pointer-events: auto !important;
- transform: none !important;
- max-width: none !important;
- max-height: none !important;
- overflow: hidden !important;
- }
- `, e.head.appendChild(n);
-}
-function gn(t, { closePopupWindow: e = !0 } = {}) {
- var i, s, l, c;
- if (t._desktopExpanded) {
- t._setDesktopExpanded(!1);
- return;
- }
- if (!t._isPopped || !t.element) return;
- const n = t._popoutWindow;
- t._clearPopoutCloseWatch();
- try {
- (i = t._popoutAC) == null || i.abort();
- } catch (d) {
- (s = console.debug) == null || s.call(console, d);
- }
- t._popoutAC = null, t._popoutCloseHandler = null, t._popoutKeydownHandler = null, t._isPopped = !1;
- let o = t.element;
- try {
- o = (o == null ? void 0 : o.ownerDocument) === document ? o : document.adoptNode(o);
- } catch (d) {
- (l = console.debug) == null || l.call(console, "[MFV] pop-in adopt failed", d);
- }
- if (document.body.appendChild(o), t._resetGenDropdownForCurrentDocument(), t._rebindControlHandlers(), t._bindPanelInteractions(), t._bindDocumentUiHandlers(), o.classList.add("is-visible"), o.setAttribute("aria-hidden", "false"), t.isVisible = !0, t._updatePopoutBtnUI(), e)
- try {
- n == null || n.close();
- } catch (d) {
- (c = console.debug) == null || c.call(console, d);
- }
- t._popoutWindow = null;
-}
-function bn(t) {
- if (!t._popoutBtn) return;
- const e = t._isPopped || t._desktopExpanded;
- t.element && t.element.classList.toggle("mjr-mfv--popped", e), t._popoutBtn.classList.toggle("mjr-popin-active", e);
- const n = t._popoutBtn.querySelector("i") || document.createElement("i"), o = e ? I("tooltip.popInViewer", "Return to floating panel") : I("tooltip.popOutViewer", "Pop out viewer to separate window");
- n.className = e ? "pi pi-sign-in" : "pi pi-external-link", t._popoutBtn.title = o, t._popoutBtn.setAttribute("aria-label", o), t._popoutBtn.setAttribute("aria-pressed", String(e)), t._popoutBtn.contains(n) || t._popoutBtn.replaceChildren(n);
-}
-function yn(t) {
- return {
- n: "ns-resize",
- s: "ns-resize",
- e: "ew-resize",
- w: "ew-resize",
- ne: "nesw-resize",
- nw: "nwse-resize",
- se: "nwse-resize",
- sw: "nesw-resize"
- }[t] || "";
-}
-function Cn(t, e, n) {
- if (!n) return "";
- const o = t <= n.left + J, i = t >= n.right - J, s = e <= n.top + J, l = e >= n.bottom - J;
- return s && o ? "nw" : s && i ? "ne" : l && o ? "sw" : l && i ? "se" : s ? "n" : l ? "s" : o ? "w" : i ? "e" : "";
-}
-function Sn(t) {
- var e, n;
- if (t.element) {
- if (((e = t._resizeState) == null ? void 0 : e.pointerId) != null)
- try {
- t.element.releasePointerCapture(t._resizeState.pointerId);
- } catch (o) {
- (n = console.debug) == null || n.call(console, o);
- }
- t._resizeState = null, t.element.classList.remove("mjr-mfv--resizing"), t.element.style.cursor = "";
- }
-}
-function An(t) {
- var e, n;
- if (t.element) {
- t._stopEdgeResize();
- try {
- (e = t._panelAC) == null || e.abort();
- } catch (o) {
- (n = console.debug) == null || n.call(console, o);
- }
- t._panelAC = new AbortController(), t._initEdgeResize(t.element), t._initDrag(t.element.querySelector(".mjr-mfv-header"));
- }
-}
-function En(t, e) {
- var c;
- if (!e) return;
- const n = (d) => {
- if (!t.element || t._isPopped) return "";
- const r = t.element.getBoundingClientRect();
- return t._getResizeDirectionFromPoint(d.clientX, d.clientY, r);
- }, o = (c = t._panelAC) == null ? void 0 : c.signal, i = (d) => {
- var h;
- if (d.button !== 0 || !t.element || t._isPopped) return;
- const r = n(d);
- if (!r) return;
- d.preventDefault(), d.stopPropagation();
- const a = t.element.getBoundingClientRect(), u = window.getComputedStyle(t.element), f = Math.max(120, Number.parseFloat(u.minWidth) || 0), m = Math.max(100, Number.parseFloat(u.minHeight) || 0);
- t._resizeState = {
- pointerId: d.pointerId,
- dir: r,
- startX: d.clientX,
- startY: d.clientY,
- startLeft: a.left,
- startTop: a.top,
- startWidth: a.width,
- startHeight: a.height,
- minWidth: f,
- minHeight: m
- }, t.element.style.left = `${Math.round(a.left)}px`, t.element.style.top = `${Math.round(a.top)}px`, t.element.style.right = "auto", t.element.style.bottom = "auto", t.element.classList.add("mjr-mfv--resizing"), t.element.style.cursor = t._resizeCursorForDirection(r);
- try {
- t.element.setPointerCapture(d.pointerId);
- } catch (p) {
- (h = console.debug) == null || h.call(console, p);
- }
- }, s = (d) => {
- if (!t.element || t._isPopped) return;
- const r = t._resizeState;
- if (!r) {
- const g = n(d);
- t.element.style.cursor = g ? t._resizeCursorForDirection(g) : "";
- return;
- }
- if (r.pointerId !== d.pointerId) return;
- const a = d.clientX - r.startX, u = d.clientY - r.startY;
- let f = r.startWidth, m = r.startHeight, h = r.startLeft, p = r.startTop;
- r.dir.includes("e") && (f = r.startWidth + a), r.dir.includes("s") && (m = r.startHeight + u), r.dir.includes("w") && (f = r.startWidth - a, h = r.startLeft + a), r.dir.includes("n") && (m = r.startHeight - u, p = r.startTop + u), f < r.minWidth && (r.dir.includes("w") && (h -= r.minWidth - f), f = r.minWidth), m < r.minHeight && (r.dir.includes("n") && (p -= r.minHeight - m), m = r.minHeight), f = Math.min(f, Math.max(r.minWidth, window.innerWidth)), m = Math.min(m, Math.max(r.minHeight, window.innerHeight)), h = Math.min(Math.max(0, h), Math.max(0, window.innerWidth - f)), p = Math.min(Math.max(0, p), Math.max(0, window.innerHeight - m)), t.element.style.width = `${Math.round(f)}px`, t.element.style.height = `${Math.round(m)}px`, t.element.style.left = `${Math.round(h)}px`, t.element.style.top = `${Math.round(p)}px`, t.element.style.right = "auto", t.element.style.bottom = "auto";
- }, l = (d) => {
- if (!t.element || !t._resizeState || t._resizeState.pointerId !== d.pointerId) return;
- const r = n(d);
- t._stopEdgeResize(), r && (t.element.style.cursor = t._resizeCursorForDirection(r));
- };
- e.addEventListener("pointerdown", i, { capture: !0, signal: o }), e.addEventListener("pointermove", s, { signal: o }), e.addEventListener("pointerup", l, { signal: o }), e.addEventListener("pointercancel", l, { signal: o }), e.addEventListener(
- "pointerleave",
- () => {
- !t._resizeState && t.element && (t.element.style.cursor = "");
- },
- { signal: o }
- );
-}
-function Pn(t, e) {
- var i;
- if (!e) return;
- const n = (i = t._panelAC) == null ? void 0 : i.signal;
- let o = null;
- e.addEventListener(
- "pointerdown",
- (s) => {
- if (s.button !== 0 || s.target.closest("button") || s.target.closest("select") || t._isPopped || !t.element || t._getResizeDirectionFromPoint(
- s.clientX,
- s.clientY,
- t.element.getBoundingClientRect()
- )) return;
- s.preventDefault(), e.setPointerCapture(s.pointerId);
- try {
- o == null || o.abort();
- } catch {
- }
- o = new AbortController();
- const c = o.signal, d = t.element, r = d.getBoundingClientRect(), a = s.clientX - r.left, u = s.clientY - r.top, f = (h) => {
- const p = Math.min(
- window.innerWidth - d.offsetWidth,
- Math.max(0, h.clientX - a)
- ), g = Math.min(
- window.innerHeight - d.offsetHeight,
- Math.max(0, h.clientY - u)
- );
- d.style.left = `${p}px`, d.style.top = `${g}px`, d.style.right = "auto", d.style.bottom = "auto";
- }, m = () => {
- try {
- o == null || o.abort();
- } catch {
- }
- };
- e.addEventListener("pointermove", f, { signal: c }), e.addEventListener("pointerup", m, { signal: c });
- },
- n ? { signal: n } : void 0
- );
-}
-async function Bn(t, e, n, o, i, s, l, c) {
- var m, h, p, g, y;
- if (!n) return;
- const d = H(n);
- let r = null;
- if (d === "video" && (r = c instanceof HTMLVideoElement ? c : ((m = t._contentEl) == null ? void 0 : m.querySelector("video")) || null), !r && d === "model3d") {
- const S = (n == null ? void 0 : n.id) != null ? String(n.id) : "";
- S && (r = ((p = (h = t._contentEl) == null ? void 0 : h.querySelector) == null ? void 0 : p.call(
- h,
- `.mjr-model3d-render-canvas[data-mjr-asset-id="${S}"]`
- )) || null), r || (r = ((y = (g = t._contentEl) == null ? void 0 : g.querySelector) == null ? void 0 : y.call(g, ".mjr-model3d-render-canvas")) || null);
- }
- if (!r) {
- const S = xt(n);
- if (!S) return;
- r = await new Promise((_) => {
- const C = new Image();
- C.crossOrigin = "anonymous", C.onload = () => _(C), C.onerror = () => _(null), C.src = S;
- });
- }
- if (!r) return;
- const a = r.videoWidth || r.naturalWidth || s, u = r.videoHeight || r.naturalHeight || l;
- if (!a || !u) return;
- const f = Math.min(s / a, l / u);
- e.drawImage(
- r,
- o + (s - a * f) / 2,
- i + (l - u * f) / 2,
- a * f,
- u * f
- );
-}
-function Mn(t, e, n, o) {
- if (!e || !n || !t._genInfoSelections.size) return 0;
- const i = t._getGenFields(n), s = [
- "prompt",
- "seed",
- "model",
- "lora",
- "sampler",
- "scheduler",
- "cfg",
- "step",
- "genTime"
- ], l = 11, c = 16, d = 8, r = Math.max(100, Number(o || 0) - d * 2);
- let a = 0;
- for (const u of s) {
- if (!t._genInfoSelections.has(u)) continue;
- const f = i[u] != null ? String(i[u]) : "";
- if (!f) continue;
- let m = u.charAt(0).toUpperCase() + u.slice(1);
- u === "lora" ? m = "LoRA" : u === "cfg" ? m = "CFG" : u === "genTime" && (m = "Gen Time");
- const h = `${m}: `;
- e.font = `bold ${l}px system-ui, sans-serif`;
- const p = e.measureText(h).width;
- e.font = `${l}px system-ui, sans-serif`;
- const g = Math.max(32, r - d * 2 - p);
- let y = 0, S = "";
- for (const _ of f.split(" ")) {
- const C = S ? S + " " + _ : _;
- e.measureText(C).width > g && S ? (y += 1, S = _) : S = C;
- }
- S && (y += 1), a += y;
- }
- return a > 0 ? a * c + d * 2 : 0;
-}
-function Nn(t, e, n, o, i, s, l) {
- if (!n || !t._genInfoSelections.size) return;
- const c = t._getGenFields(n), d = {
- prompt: "#7ec8ff",
- seed: "#ffd47a",
- model: "#7dda8a",
- lora: "#d48cff",
- sampler: "#ff9f7a",
- scheduler: "#ff7a9f",
- cfg: "#7a9fff",
- step: "#7affd4",
- genTime: "#e0ff7a"
- }, r = [
- "prompt",
- "seed",
- "model",
- "lora",
- "sampler",
- "scheduler",
- "cfg",
- "step",
- "genTime"
- ], a = [];
- for (const A of r) {
- if (!t._genInfoSelections.has(A)) continue;
- const M = c[A] != null ? String(c[A]) : "";
- if (!M) continue;
- let B = A.charAt(0).toUpperCase() + A.slice(1);
- A === "lora" ? B = "LoRA" : A === "cfg" ? B = "CFG" : A === "genTime" && (B = "Gen Time"), a.push({
- label: `${B}: `,
- value: M,
- color: d[A] || "#ffffff"
- });
- }
- if (!a.length) return;
- const u = 11, f = 16, m = 8, h = Math.max(100, s - m * 2);
- e.save();
- const p = [];
- for (const { label: A, value: M, color: B } of a) {
- e.font = `bold ${u}px system-ui, sans-serif`;
- const T = e.measureText(A).width;
- e.font = `${u}px system-ui, sans-serif`;
- const k = h - m * 2 - T, R = [];
- let L = "";
- for (const D of M.split(" ")) {
- const G = L ? L + " " + D : D;
- e.measureText(G).width > k && L ? (R.push(L), L = D) : L = G;
- }
- L && R.push(L), p.push({ label: A, labelW: T, lines: R, color: B });
- }
- const y = p.reduce((A, M) => A + M.lines.length, 0) * f + m * 2, S = o + m, _ = i + l - y - m;
- e.globalAlpha = 0.72, e.fillStyle = "#000", jt(e, S, _, h, y, 6), e.fill(), e.globalAlpha = 1;
- let C = _ + m + u;
- for (const { label: A, labelW: M, lines: B, color: T } of p)
- for (let k = 0; k < B.length; k++)
- k === 0 ? (e.font = `bold ${u}px system-ui, sans-serif`, e.fillStyle = T, e.fillText(A, S + m, C), e.font = `${u}px system-ui, sans-serif`, e.fillStyle = "rgba(255,255,255,0.88)", e.fillText(B[k], S + m + M, C)) : (e.font = `${u}px system-ui, sans-serif`, e.fillStyle = "rgba(255,255,255,0.88)", e.fillText(B[k], S + m + M, C)), C += f;
- e.restore();
-}
-async function Fn(t) {
- var d;
- if (!t._contentEl) return;
- t._captureBtn && (t._captureBtn.disabled = !0, t._captureBtn.setAttribute("aria-label", I("tooltip.capturingView", "Capturing…")));
- const e = t._contentEl.clientWidth || 480, n = t._contentEl.clientHeight || 360;
- let o = n;
- if (t._mode === E.SIMPLE && t._mediaA && t._genInfoSelections.size) {
- const r = document.createElement("canvas");
- r.width = e, r.height = n;
- const a = r.getContext("2d"), u = t._estimateGenInfoOverlayHeight(a, t._mediaA, e);
- if (u > 0) {
- const f = Math.max(n, u + 24);
- o = Math.min(f, n * 4);
- }
- }
- const i = document.createElement("canvas");
- i.width = e, i.height = o;
- const s = i.getContext("2d");
- s.fillStyle = "#0d0d0d", s.fillRect(0, 0, e, o);
- try {
- if (t._mode === E.SIMPLE)
- t._mediaA && (await t._drawMediaFit(s, t._mediaA, 0, 0, e, n), t._drawGenInfoOverlay(s, t._mediaA, 0, 0, e, o));
- else if (t._mode === E.AB) {
- const r = Math.round(t._abDividerX * e), a = t._contentEl.querySelector(
- ".mjr-mfv-ab-layer:not(.mjr-mfv-ab-layer--b) video"
- ), u = t._contentEl.querySelector(".mjr-mfv-ab-layer--b video");
- t._mediaA && await t._drawMediaFit(s, t._mediaA, 0, 0, e, o, a), t._mediaB && (s.save(), s.beginPath(), s.rect(r, 0, e - r, o), s.clip(), await t._drawMediaFit(s, t._mediaB, 0, 0, e, o, u), s.restore()), s.save(), s.strokeStyle = "rgba(255,255,255,0.88)", s.lineWidth = 2, s.beginPath(), s.moveTo(r, 0), s.lineTo(r, o), s.stroke(), s.restore(), X(s, "A", 8, 8), X(s, "B", r + 8, 8), t._mediaA && t._drawGenInfoOverlay(s, t._mediaA, 0, 0, r, o), t._mediaB && t._drawGenInfoOverlay(s, t._mediaB, r, 0, e - r, o);
- } else if (t._mode === E.SIDE) {
- const r = Math.floor(e / 2), a = t._contentEl.querySelector(".mjr-mfv-side-panel:first-child video"), u = t._contentEl.querySelector(".mjr-mfv-side-panel:last-child video");
- t._mediaA && (await t._drawMediaFit(s, t._mediaA, 0, 0, r, o, a), t._drawGenInfoOverlay(s, t._mediaA, 0, 0, r, o)), s.fillStyle = "#111", s.fillRect(r, 0, 2, o), t._mediaB && (await t._drawMediaFit(s, t._mediaB, r, 0, r, o, u), t._drawGenInfoOverlay(s, t._mediaB, r, 0, r, o)), X(s, "A", 8, 8), X(s, "B", r + 8, 8);
- } else if (t._mode === E.GRID) {
- const r = Math.floor(e / 2), a = Math.floor(o / 2), u = 1, f = [
- { media: t._mediaA, label: "A", x: 0, y: 0, w: r - u, h: a - u },
- {
- media: t._mediaB,
- label: "B",
- x: r + u,
- y: 0,
- w: r - u,
- h: a - u
- },
- {
- media: t._mediaC,
- label: "C",
- x: 0,
- y: a + u,
- w: r - u,
- h: a - u
- },
- {
- media: t._mediaD,
- label: "D",
- x: r + u,
- y: a + u,
- w: r - u,
- h: a - u
- }
- ], m = t._contentEl.querySelectorAll(".mjr-mfv-grid-cell");
- for (let h = 0; h < f.length; h++) {
- const p = f[h], g = ((d = m[h]) == null ? void 0 : d.querySelector("video")) || null;
- p.media && (await t._drawMediaFit(s, p.media, p.x, p.y, p.w, p.h, g), t._drawGenInfoOverlay(s, p.media, p.x, p.y, p.w, p.h)), X(s, p.label, p.x + 8, p.y + 8);
- }
- s.save(), s.fillStyle = "#111", s.fillRect(r - u, 0, u * 2, o), s.fillRect(0, a - u, e, u * 2), s.restore();
- }
- } catch (r) {
- console.debug("[MFV] capture error:", r);
- }
- const c = `${{
- [E.AB]: "mfv-ab",
- [E.SIDE]: "mfv-side",
- [E.GRID]: "mfv-grid"
- }[t._mode] ?? "mfv"}-${Date.now()}.png`;
- try {
- const r = i.toDataURL("image/png"), a = document.createElement("a");
- a.href = r, a.download = c, document.body.appendChild(a), a.click(), setTimeout(() => document.body.removeChild(a), 100);
- } catch (r) {
- console.warn("[MFV] download failed:", r);
- } finally {
- t._captureBtn && (t._captureBtn.disabled = !1, t._captureBtn.setAttribute("aria-label", I("tooltip.captureView", "Save view as image")));
- }
-}
-function In(t, e, { autoMode: n = !1 } = {}) {
- if (t._mediaA = e || null, t._resetMfvZoom(), n && t._mode !== E.SIMPLE && (t._mode = E.SIMPLE, t._updateModeBtnUI()), t._mediaA && typeof tt == "function") {
- const o = ++t._refreshGen;
- (async () => {
- var i;
- try {
- const s = await tt(t._mediaA, {
- getAssetMetadata: pt,
- getFileMetadataScoped: ut
- });
- if (t._refreshGen !== o) return;
- s && typeof s == "object" && (t._mediaA = s, t._refresh());
- } catch (s) {
- (i = console.debug) == null || i.call(console, "[MFV] metadata enrich error", s);
- }
- })();
- } else
- t._refresh();
-}
-function Ln(t, e, n) {
- t._mediaA = e || null, t._mediaB = n || null, t._resetMfvZoom(), t._mode === E.SIMPLE && (t._mode = E.AB, t._updateModeBtnUI());
- const o = ++t._refreshGen, i = async (s) => {
- if (!s) return s;
- try {
- return await tt(s, {
- getAssetMetadata: pt,
- getFileMetadataScoped: ut
- }) || s;
- } catch {
- return s;
- }
- };
- (async () => {
- const [s, l] = await Promise.all([i(t._mediaA), i(t._mediaB)]);
- t._refreshGen === o && (t._mediaA = s || null, t._mediaB = l || null, t._refresh());
- })();
-}
-function kn(t, e, n, o, i) {
- t._mediaA = e || null, t._mediaB = n || null, t._mediaC = o || null, t._mediaD = i || null, t._resetMfvZoom(), t._mode !== E.GRID && (t._mode = E.GRID, t._updateModeBtnUI());
- const s = ++t._refreshGen, l = async (c) => {
- if (!c) return c;
- try {
- return await tt(c, {
- getAssetMetadata: pt,
- getFileMetadataScoped: ut
- }) || c;
- } catch {
- return c;
- }
- };
- (async () => {
- const [c, d, r, a] = await Promise.all([
- l(t._mediaA),
- l(t._mediaB),
- l(t._mediaC),
- l(t._mediaD)
- ]);
- t._refreshGen === s && (t._mediaA = c || null, t._mediaB = d || null, t._mediaC = r || null, t._mediaD = a || null, t._refresh());
- })();
-}
-function $(t) {
- var e, n;
- try {
- return !!((e = t == null ? void 0 : t.classList) != null && e.contains("mjr-mfv-simple-player"));
- } catch (o) {
- return (n = console.debug) == null || n.call(console, o), !1;
- }
-}
-let xn = 0;
-class Vn {
- constructor({ controller: e = null } = {}) {
- this._instanceId = ++xn, this._controller = e && typeof e == "object" ? { ...e } : null, this.element = null, this.isVisible = !1, this._contentEl = null, this._closeBtn = null, this._modeBtn = null, this._pinGroup = null, this._pinBtns = null, this._liveBtn = null, this._genBtn = null, this._genDropdown = null, this._captureBtn = null, this._genInfoSelections = /* @__PURE__ */ new Set(["genTime"]), this._mode = E.SIMPLE, this._mediaA = null, this._mediaB = null, this._mediaC = null, this._mediaD = null, this._pinnedSlots = /* @__PURE__ */ new Set(), this._abDividerX = 0.5, this._zoom = 1, this._panX = 0, this._panY = 0, this._panzoomAC = null, this._dragging = !1, this._compareSyncAC = null, this._btnAC = null, this._refreshGen = 0, this._popoutWindow = null, this._popoutBtn = null, this._isPopped = !1, this._desktopExpanded = !1, this._desktopExpandRestore = null, this._desktopPopoutUnsupported = !1, this._popoutCloseHandler = null, this._popoutKeydownHandler = null, this._popoutCloseTimer = null, this._popoutRestoreGuard = !1, this._previewBtn = null, this._previewBlobUrl = null, this._previewActive = !1, this._nodeStreamBtn = null, this._nodeStreamActive = !1, this._docAC = new AbortController(), this._popoutAC = null, this._panelAC = new AbortController(), this._resizeState = null, this._titleId = `mjr-mfv-title-${this._instanceId}`, this._genDropdownId = `mjr-mfv-gen-dropdown-${this._instanceId}`, this._progressEl = null, this._progressNodesEl = null, this._progressStepsEl = null, this._progressTextEl = null, this._mediaProgressEl = null, this._mediaProgressTextEl = null, this._progressUpdateHandler = null, this._progressCurrentNodeId = null, this._docClickHost = null, this._handleDocClick = null;
- }
- _dispatchControllerAction(e, n) {
- var o, i, s;
- try {
- const l = (o = this._controller) == null ? void 0 : o[e];
- if (typeof l == "function")
- return l();
- } catch (l) {
- (i = console.debug) == null || i.call(console, l);
- }
- if (n)
- try {
- window.dispatchEvent(new Event(n));
- } catch (l) {
- (s = console.debug) == null || s.call(console, l);
- }
- }
- _forwardKeydownToController(e) {
- var n, o, i;
- try {
- const s = (n = this._controller) == null ? void 0 : n.handleForwardedKeydown;
- if (typeof s == "function") {
- s(e);
- return;
- }
- } catch (s) {
- (o = console.debug) == null || o.call(console, s);
- }
- try {
- window.dispatchEvent(
- new KeyboardEvent("keydown", {
- key: e == null ? void 0 : e.key,
- code: e == null ? void 0 : e.code,
- keyCode: e == null ? void 0 : e.keyCode,
- ctrlKey: e == null ? void 0 : e.ctrlKey,
- shiftKey: e == null ? void 0 : e.shiftKey,
- altKey: e == null ? void 0 : e.altKey,
- metaKey: e == null ? void 0 : e.metaKey
- })
- );
- } catch (s) {
- (i = console.debug) == null || i.call(console, s);
- }
- }
- // ── Build DOM ─────────────────────────────────────────────────────────────
- render() {
- return Le(this);
- }
- _buildHeader() {
- return ke(this);
- }
- _buildToolbar() {
- return xe(this);
- }
- _rebindControlHandlers() {
- return je(this);
- }
- _updateSettingsBtnState(e) {
- return Te(this, e);
- }
- _applySidebarPosition() {
- return Ve(this);
- }
- refreshSidebar() {
- var e;
- (e = this._sidebar) == null || e.refresh();
- }
- _resetGenDropdownForCurrentDocument() {
- return Ge(this);
- }
- _bindDocumentUiHandlers() {
- return Oe(this);
- }
- _unbindDocumentUiHandlers() {
- return Re(this);
- }
- _isGenDropdownOpen() {
- return He(this);
- }
- _openGenDropdown() {
- return De(this);
- }
- _closeGenDropdown() {
- return Ue(this);
- }
- _updateGenBtnUI() {
- return ze(this);
- }
- _buildGenDropdown() {
- return $e(this);
- }
- _getGenFields(e) {
- return ve(this, e);
- }
- _buildGenInfoDOM(e) {
- return Ke(this, e);
- }
- _notifyModeChanged() {
- return Xe(this);
- }
- _cycleMode() {
- return qe(this);
- }
- setMode(e) {
- return we(this, e);
- }
- getPinnedSlots() {
- return Ye(this);
- }
- _updatePinUI() {
- return Ze(this);
- }
- _updateModeBtnUI() {
- return Je(this);
- }
- setLiveActive(e) {
- return Qe(this, e);
- }
- setPreviewActive(e) {
- return tn(this, e);
- }
- loadPreviewBlob(e, n = {}) {
- return en(this, e, n);
- }
- _revokePreviewBlob() {
- return nn(this);
- }
- setNodeStreamActive(e) {
- return on(this);
- }
- loadMediaA(e, { autoMode: n = !1 } = {}) {
- return In(this, e, { autoMode: n });
- }
- /**
- * Load two assets for compare modes.
- * Auto-switches from SIMPLE → AB on first call.
- */
- loadMediaPair(e, n) {
- return Ln(this, e, n);
- }
- /**
- * Load up to 4 assets for grid compare mode.
- * Auto-switches to GRID mode if not already.
- */
- loadMediaQuad(e, n, o, i) {
- return kn(this, e, n, o, i);
- }
- /** Apply current zoom+pan state to all media elements (img/video only — divider/overlays unaffected). */
- _applyTransform() {
- if (!this._contentEl) return;
- const e = Math.max(rt, Math.min(at, this._zoom)), n = this._contentEl.clientWidth || 0, o = this._contentEl.clientHeight || 0, i = Math.max(0, (e - 1) * n / 2), s = Math.max(0, (e - 1) * o / 2);
- this._panX = Math.max(-i, Math.min(i, this._panX)), this._panY = Math.max(-s, Math.min(s, this._panY));
- const l = `translate(${this._panX}px,${this._panY}px) scale(${e})`;
- for (const c of this._contentEl.querySelectorAll(".mjr-mfv-media"))
- c != null && c._mjrDisableViewerTransform || (c.style.transform = l, c.style.transformOrigin = "center");
- this._contentEl.classList.remove("mjr-mfv-content--grab", "mjr-mfv-content--grabbing"), e > 1.01 && this._contentEl.classList.add(
- this._dragging ? "mjr-mfv-content--grabbing" : "mjr-mfv-content--grab"
- );
- }
- /**
- * Set zoom, optionally centered at (clientX, clientY).
- * Keeps the image point under the cursor stationary.
- */
- _setMfvZoom(e, n, o) {
- const i = Math.max(rt, Math.min(at, this._zoom)), s = Math.max(rt, Math.min(at, Number(e) || 1));
- if (n != null && o != null && this._contentEl) {
- const l = s / i, c = this._contentEl.getBoundingClientRect(), d = n - (c.left + c.width / 2), r = o - (c.top + c.height / 2);
- this._panX = this._panX * l + (1 - l) * d, this._panY = this._panY * l + (1 - l) * r;
- }
- this._zoom = s, Math.abs(s - 1) < 1e-3 && (this._zoom = 1, this._panX = 0, this._panY = 0), this._applyTransform();
- }
- /** Reset zoom and pan to the default 1:1 fit. Called when new media is loaded. */
- _resetMfvZoom() {
- this._zoom = 1, this._panX = 0, this._panY = 0, this._applyTransform();
- }
- /** Bind wheel + pointer events to the clip viewport element. */
- _initPanZoom(e) {
- if (this._destroyPanZoom(), !e) return;
- this._panzoomAC = new AbortController();
- const n = { signal: this._panzoomAC.signal };
- e.addEventListener(
- "wheel",
- (r) => {
- var m, h, p, g;
- if ((h = (m = r.target) == null ? void 0 : m.closest) != null && h.call(m, "audio") || (g = (p = r.target) == null ? void 0 : p.closest) != null && g.call(p, ".mjr-mfv-simple-player-controls") || it(r.target)) return;
- const a = ue(r.target, e);
- if (a && pe(
- a,
- Number(r.deltaX || 0),
- Number(r.deltaY || 0)
- ))
- return;
- r.preventDefault();
- const f = 1 - (r.deltaY || r.deltaX || 0) * Jt;
- this._setMfvZoom(this._zoom * f, r.clientX, r.clientY);
- },
- { ...n, passive: !1 }
- );
- let o = !1, i = 0, s = 0, l = 0, c = 0;
- e.addEventListener(
- "pointerdown",
- (r) => {
- var a, u, f, m, h, p, g, y, S;
- if (!(r.button !== 0 && r.button !== 1) && !(this._zoom <= 1.01) && !((u = (a = r.target) == null ? void 0 : a.closest) != null && u.call(a, "video")) && !((m = (f = r.target) == null ? void 0 : f.closest) != null && m.call(f, "audio")) && !((p = (h = r.target) == null ? void 0 : h.closest) != null && p.call(h, ".mjr-mfv-simple-player-controls")) && !((y = (g = r.target) == null ? void 0 : g.closest) != null && y.call(g, ".mjr-mfv-ab-divider")) && !it(r.target)) {
- r.preventDefault(), o = !0, this._dragging = !0, i = r.clientX, s = r.clientY, l = this._panX, c = this._panY;
- try {
- e.setPointerCapture(r.pointerId);
- } catch (_) {
- (S = console.debug) == null || S.call(console, _);
- }
- this._applyTransform();
- }
- },
- n
- ), e.addEventListener(
- "pointermove",
- (r) => {
- o && (this._panX = l + (r.clientX - i), this._panY = c + (r.clientY - s), this._applyTransform());
- },
- n
- );
- const d = (r) => {
- var a;
- if (o) {
- o = !1, this._dragging = !1;
- try {
- e.releasePointerCapture(r.pointerId);
- } catch (u) {
- (a = console.debug) == null || a.call(console, u);
- }
- this._applyTransform();
- }
- };
- e.addEventListener("pointerup", d, n), e.addEventListener("pointercancel", d, n), e.addEventListener(
- "dblclick",
- (r) => {
- var u, f, m, h, p, g;
- if ((f = (u = r.target) == null ? void 0 : u.closest) != null && f.call(u, "video") || (h = (m = r.target) == null ? void 0 : m.closest) != null && h.call(m, "audio") || (g = (p = r.target) == null ? void 0 : p.closest) != null && g.call(p, ".mjr-mfv-simple-player-controls") || it(r.target)) return;
- const a = Math.abs(this._zoom - 1) < 0.05;
- this._setMfvZoom(a ? Math.min(4, this._zoom * 4) : 1, r.clientX, r.clientY);
- },
- n
- );
- }
- /** Remove all pan/zoom event listeners. */
- _destroyPanZoom() {
- var e, n;
- try {
- (e = this._panzoomAC) == null || e.abort();
- } catch (o) {
- (n = console.debug) == null || n.call(console, o);
- }
- this._panzoomAC = null, this._dragging = !1;
- }
- _destroyCompareSync() {
- var e, n, o;
- try {
- (n = (e = this._compareSyncAC) == null ? void 0 : e.abort) == null || n.call(e);
- } catch (i) {
- (o = console.debug) == null || o.call(console, i);
- }
- this._compareSyncAC = null;
- }
- _initCompareSync() {
- var e;
- if (this._destroyCompareSync(), !!this._contentEl && this._mode !== E.SIMPLE)
- try {
- const n = Array.from(this._contentEl.querySelectorAll("video, audio"));
- if (n.length < 2) return;
- const o = n[0] || null, i = n.slice(1);
- if (!o || !i.length) return;
- this._compareSyncAC = Yt(o, i, { threshold: 0.08 });
- } catch (n) {
- (e = console.debug) == null || e.call(console, n);
- }
- }
- // ── Render ────────────────────────────────────────────────────────────────
- _refresh() {
- if (this._contentEl) {
- switch (this._destroyPanZoom(), this._destroyCompareSync(), this._contentEl.replaceChildren(), this._contentEl.style.overflow = "hidden", this._mode) {
- case E.SIMPLE:
- this._renderSimple();
- break;
- case E.AB:
- this._renderAB();
- break;
- case E.SIDE:
- this._renderSide();
- break;
- case E.GRID:
- this._renderGrid();
- break;
- }
- this._mediaProgressEl && this._contentEl.appendChild(this._mediaProgressEl), this._applyTransform(), this._initPanZoom(this._contentEl), this._initCompareSync();
- }
- }
- _renderSimple() {
- if (!this._mediaA) {
- this._contentEl.appendChild(O());
- return;
- }
- const e = H(this._mediaA), n = z(this._mediaA);
- if (!n) {
- this._contentEl.appendChild(O("Could not load media"));
- return;
- }
- const o = document.createElement("div");
- if (o.className = "mjr-mfv-simple-container", o.appendChild(n), e !== "audio") {
- const i = this._buildGenInfoDOM(this._mediaA);
- if (i) {
- const s = document.createElement("div");
- s.className = "mjr-mfv-geninfo", $(n) && s.classList.add("mjr-mfv-geninfo--above-player"), s.appendChild(i), o.appendChild(s);
- }
- }
- this._contentEl.appendChild(o);
- }
- _renderAB() {
- var p;
- const e = this._mediaA ? z(this._mediaA, { fill: !0 }) : null, n = this._mediaB ? z(this._mediaB, { fill: !0 }) : null, o = this._mediaA ? H(this._mediaA) : "", i = this._mediaB ? H(this._mediaB) : "";
- if (!e && !n) {
- this._contentEl.appendChild(O("Select 2 assets for A/B compare"));
- return;
- }
- if (!n) {
- this._renderSimple();
- return;
- }
- if (o === "audio" || i === "audio" || o === "model3d" || i === "model3d") {
- this._renderSide();
- return;
- }
- const s = document.createElement("div");
- s.className = "mjr-mfv-ab-container";
- const l = document.createElement("div");
- l.className = "mjr-mfv-ab-layer", e && l.appendChild(e);
- const c = document.createElement("div");
- c.className = "mjr-mfv-ab-layer mjr-mfv-ab-layer--b";
- const d = Math.round(this._abDividerX * 100);
- c.style.clipPath = `inset(0 0 0 ${d}%)`, c.appendChild(n);
- const r = document.createElement("div");
- r.className = "mjr-mfv-ab-divider", r.style.left = `${d}%`;
- const a = this._buildGenInfoDOM(this._mediaA);
- let u = null;
- a && (u = document.createElement("div"), u.className = "mjr-mfv-geninfo-a", $(e) && u.classList.add("mjr-mfv-geninfo--above-player"), u.appendChild(a), u.style.right = `calc(${100 - d}% + 8px)`);
- const f = this._buildGenInfoDOM(this._mediaB);
- let m = null;
- f && (m = document.createElement("div"), m.className = "mjr-mfv-geninfo-b", $(n) && m.classList.add("mjr-mfv-geninfo--above-player"), m.appendChild(f), m.style.left = `calc(${d}% + 8px)`);
- let h = null;
- r.addEventListener(
- "pointerdown",
- (g) => {
- g.preventDefault(), r.setPointerCapture(g.pointerId);
- try {
- h == null || h.abort();
- } catch {
- }
- h = new AbortController();
- const y = h.signal, S = s.getBoundingClientRect(), _ = (A) => {
- const M = Math.max(0.02, Math.min(0.98, (A.clientX - S.left) / S.width));
- this._abDividerX = M;
- const B = Math.round(M * 100);
- c.style.clipPath = `inset(0 0 0 ${B}%)`, r.style.left = `${B}%`, u && (u.style.right = `calc(${100 - B}% + 8px)`), m && (m.style.left = `calc(${B}% + 8px)`);
- }, C = () => {
- try {
- h == null || h.abort();
- } catch {
- }
- };
- r.addEventListener("pointermove", _, { signal: y }), r.addEventListener("pointerup", C, { signal: y });
- },
- (p = this._panelAC) != null && p.signal ? { signal: this._panelAC.signal } : void 0
- ), s.appendChild(l), s.appendChild(c), s.appendChild(r), u && s.appendChild(u), m && s.appendChild(m), s.appendChild(U("A", "left")), s.appendChild(U("B", "right")), this._contentEl.appendChild(s);
- }
- _renderSide() {
- const e = this._mediaA ? z(this._mediaA) : null, n = this._mediaB ? z(this._mediaB) : null, o = this._mediaA ? H(this._mediaA) : "", i = this._mediaB ? H(this._mediaB) : "";
- if (!e && !n) {
- this._contentEl.appendChild(O("Select 2 assets for Side-by-Side"));
- return;
- }
- const s = document.createElement("div");
- s.className = "mjr-mfv-side-container";
- const l = document.createElement("div");
- l.className = "mjr-mfv-side-panel", e ? l.appendChild(e) : l.appendChild(O("—")), l.appendChild(U("A", "left"));
- const c = o === "audio" ? null : this._buildGenInfoDOM(this._mediaA);
- if (c) {
- const a = document.createElement("div");
- a.className = "mjr-mfv-geninfo-a", $(e) && a.classList.add("mjr-mfv-geninfo--above-player"), a.appendChild(c), l.appendChild(a);
- }
- const d = document.createElement("div");
- d.className = "mjr-mfv-side-panel", n ? d.appendChild(n) : d.appendChild(O("—")), d.appendChild(U("B", "right"));
- const r = i === "audio" ? null : this._buildGenInfoDOM(this._mediaB);
- if (r) {
- const a = document.createElement("div");
- a.className = "mjr-mfv-geninfo-b", $(n) && a.classList.add("mjr-mfv-geninfo--above-player"), a.appendChild(r), d.appendChild(a);
- }
- s.appendChild(l), s.appendChild(d), this._contentEl.appendChild(s);
- }
- _renderGrid() {
- const e = [
- { media: this._mediaA, label: "A" },
- { media: this._mediaB, label: "B" },
- { media: this._mediaC, label: "C" },
- { media: this._mediaD, label: "D" }
- ];
- if (!e.filter((i) => i.media).length) {
- this._contentEl.appendChild(O("Select up to 4 assets for Grid Compare"));
- return;
- }
- const o = document.createElement("div");
- o.className = "mjr-mfv-grid-container";
- for (const { media: i, label: s } of e) {
- const l = document.createElement("div");
- if (l.className = "mjr-mfv-grid-cell", i) {
- const c = H(i), d = z(i);
- if (d ? l.appendChild(d) : l.appendChild(O("—")), l.appendChild(
- U(s, s === "A" || s === "C" ? "left" : "right")
- ), c !== "audio") {
- const r = this._buildGenInfoDOM(i);
- if (r) {
- const a = document.createElement("div");
- a.className = `mjr-mfv-geninfo-${s.toLowerCase()}`, $(d) && a.classList.add("mjr-mfv-geninfo--above-player"), a.appendChild(r), l.appendChild(a);
- }
- }
- } else
- l.appendChild(O("—")), l.appendChild(
- U(s, s === "A" || s === "C" ? "left" : "right")
- );
- o.appendChild(l);
- }
- this._contentEl.appendChild(o);
- }
- // ── Visibility ────────────────────────────────────────────────────────────
- show() {
- this.element && (this._bindDocumentUiHandlers(), this.element.classList.add("is-visible"), this.element.setAttribute("aria-hidden", "false"), this.isVisible = !0);
- }
- hide() {
- this.element && (this._destroyPanZoom(), this._destroyCompareSync(), this._stopEdgeResize(), this._closeGenDropdown(), me(this.element), this.element.classList.remove("is-visible"), this.element.setAttribute("aria-hidden", "true"), this.isVisible = !1);
- }
- // ── Pop-out / Pop-in (separate OS window for second monitor) ────────────
- _setDesktopExpanded(e) {
- return ln(this, e);
- }
- _activateDesktopExpandedFallback(e) {
- return cn(this, e);
- }
- _tryElectronPopupFallback(e, n, o, i) {
- return dn(this, e, n, o, i);
- }
- popOut() {
- return un(this);
- }
- _fallbackPopout(e, n, o) {
- return pn(this, e, n, o);
- }
- _clearPopoutCloseWatch() {
- return mn(this);
- }
- _startPopoutCloseWatch() {
- return fn(this);
- }
- _schedulePopInFromPopupClose() {
- return hn(this);
- }
- _installPopoutStyles(e) {
- return _n(this, e);
- }
- popIn(e) {
- return gn(this, e);
- }
- _updatePopoutBtnUI() {
- return bn(this);
- }
- get isPopped() {
- return this._isPopped || this._desktopExpanded;
- }
- _resizeCursorForDirection(e) {
- return yn(e);
- }
- _getResizeDirectionFromPoint(e, n, o) {
- return Cn(e, n, o);
- }
- _stopEdgeResize() {
- return Sn(this);
- }
- _bindPanelInteractions() {
- return An(this);
- }
- _initEdgeResize(e) {
- return En(this, e);
- }
- _initDrag(e) {
- return Pn(this, e);
- }
- async _drawMediaFit(e, n, o, i, s, l, c) {
- return Bn(this, e, n, o, i, s, l, c);
- }
- _estimateGenInfoOverlayHeight(e, n, o) {
- return Mn(this, e, n, o);
- }
- _drawGenInfoOverlay(e, n, o, i, s, l) {
- return Nn(this, e, n, o, i, s, l);
- }
- async _captureView() {
- return Fn(this);
- }
- dispose() {
- var e, n, o, i, s, l, c, d, r, a, u, f, m, h, p, g, y, S;
- Zt(this), this._destroyPanZoom(), this._destroyCompareSync(), this._stopEdgeResize(), this._clearPopoutCloseWatch();
- try {
- (e = this._panelAC) == null || e.abort(), this._panelAC = null;
- } catch (_) {
- (n = console.debug) == null || n.call(console, _);
- }
- try {
- (o = this._btnAC) == null || o.abort(), this._btnAC = null;
- } catch (_) {
- (i = console.debug) == null || i.call(console, _);
- }
- try {
- (s = this._docAC) == null || s.abort(), this._docAC = null;
- } catch (_) {
- (l = console.debug) == null || l.call(console, _);
- }
- try {
- (c = this._popoutAC) == null || c.abort(), this._popoutAC = null;
- } catch (_) {
- (d = console.debug) == null || d.call(console, _);
- }
- try {
- (r = this._panzoomAC) == null || r.abort(), this._panzoomAC = null;
- } catch (_) {
- (a = console.debug) == null || a.call(console, _);
- }
- try {
- (f = (u = this._compareSyncAC) == null ? void 0 : u.abort) == null || f.call(u), this._compareSyncAC = null;
- } catch (_) {
- (m = console.debug) == null || m.call(console, _);
- }
- try {
- this._isPopped && this.popIn();
- } catch (_) {
- (h = console.debug) == null || h.call(console, _);
- }
- this._revokePreviewBlob(), this._onSidebarPosChanged && (window.removeEventListener("mjr-settings-changed", this._onSidebarPosChanged), this._onSidebarPosChanged = null);
- try {
- (p = this.element) == null || p.remove();
- } catch (_) {
- (g = console.debug) == null || g.call(console, _);
- }
- this.element = null, this._contentEl = null, this._closeBtn = null, this._modeBtn = null, this._pinGroup = null, this._pinBtns = null, this._liveBtn = null, this._nodeStreamBtn = null, this._popoutBtn = null, this._captureBtn = null, this._unbindDocumentUiHandlers();
- try {
- (y = this._genDropdown) == null || y.remove();
- } catch (_) {
- (S = console.debug) == null || S.call(console, _);
- }
- this._mediaA = null, this._mediaB = null, this._mediaC = null, this._mediaD = null, this.isVisible = !1;
- }
-}
-export {
- Vn as FloatingViewer,
- E as MFV_MODES
-};
diff --git a/js_dist/chunks/FloatingViewer-C4ghYm3b.js b/js_dist/chunks/FloatingViewer-C4ghYm3b.js
new file mode 100644
index 00000000..98a056ff
--- /dev/null
+++ b/js_dist/chunks/FloatingViewer-C4ghYm3b.js
@@ -0,0 +1,3444 @@
+import { p as re, M as Ce, c as Ae, q as Se, t as Ee, u as Me, v as Be, A as pt, x as Z, y as v, z as gt, B as Ne, C as le, D as xe, F as Pe, G as yt, E as st, n as Le, s as St, H as Pt, I as Fe, J as Lt, K as Ft, d as Et, L as Ie, N as Te } from "./entry-CfyS4_5Z.js";
+import { ensureViewerMetadataAsset as Ct } from "./genInfo-cg-2k0dV.js";
+const T = Object.freeze({
+ SIMPLE: "simple",
+ AB: "ab",
+ SIDE: "side",
+ GRID: "grid"
+}), Mt = 0.25, Bt = 8, ke = 8e-4, bt = 8, je = "C", ce = "L", de = "K", Ge = "N", Ve = "Esc", At = 30;
+function Nt(t) {
+ const e = Number(t);
+ if (!Number.isFinite(e) || e < 0) return "0:00";
+ const n = Math.floor(e), o = Math.floor(n / 3600), s = Math.floor(n % 3600 / 60), i = n % 60;
+ return o > 0 ? `${o}:${String(s).padStart(2, "0")}:${String(i).padStart(2, "0")}` : `${s}:${String(i).padStart(2, "0")}`;
+}
+function Xt(t) {
+ var e, n;
+ try {
+ const o = (e = t == null ? void 0 : t.play) == null ? void 0 : e.call(t);
+ o && typeof o.catch == "function" && o.catch(() => {
+ });
+ } catch (o) {
+ (n = console.debug) == null || n.call(console, o);
+ }
+}
+function Re(t, e) {
+ const n = Math.floor(Number(t) || 0), o = Math.max(0, Math.floor(Number(e) || 0));
+ return n < 0 ? 0 : o > 0 && n > o ? o : n;
+}
+function Zt(t, e) {
+ const n = Number((t == null ? void 0 : t.currentTime) || 0), o = Number(e) > 0 ? Number(e) : At;
+ return Math.max(0, Math.floor(n * o));
+}
+function ue(t, e) {
+ const n = Number((t == null ? void 0 : t.duration) || 0), o = Number(e) > 0 ? Number(e) : At;
+ return !Number.isFinite(n) || n <= 0 ? 0 : Math.max(0, Math.floor(n * o));
+}
+function Oe(t, e, n) {
+ var l;
+ const o = Number(n) > 0 ? Number(n) : At, s = ue(t, o), r = Re(e, s) / o;
+ try {
+ t.currentTime = Math.max(0, r);
+ } catch (u) {
+ (l = console.debug) == null || l.call(console, u);
+ }
+}
+function He(t) {
+ return t instanceof HTMLMediaElement;
+}
+function De(t, e) {
+ return String(t || "").toLowerCase() === "video" ? !0 : e instanceof HTMLVideoElement;
+}
+function ve(t, e) {
+ return String(t || "").toLowerCase() === "audio" ? !0 : e instanceof HTMLAudioElement;
+}
+function Ue(t) {
+ const e = String(t || "").toLowerCase();
+ return e === "gif" || e === "animated-image";
+}
+function ze(t) {
+ var e;
+ try {
+ const n = Number((t == null ? void 0 : t.naturalWidth) || (t == null ? void 0 : t.width) || 0), o = Number((t == null ? void 0 : t.naturalHeight) || (t == null ? void 0 : t.height) || 0);
+ if (!(n > 0 && o > 0)) return "";
+ const s = document.createElement("canvas");
+ s.width = n, s.height = o;
+ const i = s.getContext("2d");
+ return i ? (i.drawImage(t, 0, 0, n, o), s.toDataURL("image/png")) : "";
+ } catch (n) {
+ return (e = console.debug) == null || e.call(console, n), "";
+ }
+}
+function We(t, e = null, { kind: n = "" } = {}) {
+ var dt;
+ if (!t || t._mjrSimplePlayerMounted) return (t == null ? void 0 : t.parentElement) || null;
+ t._mjrSimplePlayerMounted = !0;
+ const o = re(e) || At, s = He(t), i = De(n, t), r = ve(n, t), l = Ue(n), u = document.createElement("div");
+ u.className = "mjr-mfv-simple-player", u.tabIndex = 0, u.setAttribute("role", "group"), u.setAttribute("aria-label", "Media player"), r && u.classList.add("is-audio"), l && u.classList.add("is-animated-image");
+ const a = document.createElement("div");
+ a.className = "mjr-mfv-simple-player-controls";
+ const d = document.createElement("input");
+ d.type = "range", d.className = "mjr-mfv-simple-player-seek", d.min = "0", d.max = "1000", d.step = "1", d.value = "0", d.setAttribute("aria-label", "Seek"), s || (d.disabled = !0, d.classList.add("is-disabled"));
+ const c = document.createElement("div");
+ c.className = "mjr-mfv-simple-player-row";
+ const f = document.createElement("button");
+ f.type = "button", f.className = "mjr-icon-btn mjr-mfv-simple-player-btn", f.setAttribute("aria-label", "Play/Pause");
+ const h = document.createElement("i");
+ h.className = "pi pi-pause", h.setAttribute("aria-hidden", "true"), f.appendChild(h);
+ const m = document.createElement("button");
+ m.type = "button", m.className = "mjr-icon-btn mjr-mfv-simple-player-btn", m.setAttribute("aria-label", "Step back");
+ const p = document.createElement("i");
+ p.className = "pi pi-step-backward", p.setAttribute("aria-hidden", "true"), m.appendChild(p);
+ const g = document.createElement("button");
+ g.type = "button", g.className = "mjr-icon-btn mjr-mfv-simple-player-btn", g.setAttribute("aria-label", "Step forward");
+ const b = document.createElement("i");
+ b.className = "pi pi-step-forward", b.setAttribute("aria-hidden", "true"), g.appendChild(b);
+ const C = document.createElement("div");
+ C.className = "mjr-mfv-simple-player-time", C.textContent = "0:00 / 0:00";
+ const _ = document.createElement("div");
+ _.className = "mjr-mfv-simple-player-frame", _.textContent = "F: 0", i || (_.style.display = "none");
+ const y = document.createElement("button");
+ y.type = "button", y.className = "mjr-icon-btn mjr-mfv-simple-player-btn", y.setAttribute("aria-label", "Mute/Unmute");
+ const S = document.createElement("i");
+ if (S.className = "pi pi-volume-up", S.setAttribute("aria-hidden", "true"), y.appendChild(S), i || (m.disabled = !0, g.disabled = !0, m.classList.add("is-disabled"), g.classList.add("is-disabled")), c.appendChild(m), c.appendChild(f), c.appendChild(g), c.appendChild(C), c.appendChild(_), c.appendChild(y), a.appendChild(d), a.appendChild(c), u.appendChild(t), r) {
+ const E = document.createElement("div");
+ E.className = "mjr-mfv-simple-player-audio-backdrop", E.textContent = String((e == null ? void 0 : e.filename) || "Audio"), u.appendChild(E);
+ }
+ u.appendChild(a);
+ try {
+ t instanceof HTMLMediaElement && (t.controls = !1, t.playsInline = !0, t.loop = !0, t.muted = !0, t.autoplay = !0);
+ } catch (E) {
+ (dt = console.debug) == null || dt.call(console, E);
+ }
+ const x = l ? String((t == null ? void 0 : t.src) || "") : "";
+ let B = !1, F = "";
+ const P = () => {
+ if (s) {
+ h.className = t.paused ? "pi pi-play" : "pi pi-pause";
+ return;
+ }
+ if (l) {
+ h.className = B ? "pi pi-play" : "pi pi-pause";
+ return;
+ }
+ h.className = "pi pi-play";
+ }, L = () => {
+ if (t instanceof HTMLMediaElement) {
+ S.className = t.muted ? "pi pi-volume-off" : "pi pi-volume-up";
+ return;
+ }
+ S.className = "pi pi-volume-off", y.disabled = !0, y.classList.add("is-disabled");
+ }, I = () => {
+ if (!i || !(t instanceof HTMLVideoElement)) return;
+ const E = Zt(t, o), j = ue(t, o);
+ _.textContent = j > 0 ? `F: ${E}/${j}` : `F: ${E}`;
+ }, V = () => {
+ const E = Math.max(0, Math.min(100, Number(d.value) / 1e3 * 100));
+ d.style.setProperty("--mjr-seek-pct", `${E}%`);
+ }, U = () => {
+ if (!s) {
+ C.textContent = l ? "Animated" : "Preview", d.value = "0", V();
+ return;
+ }
+ const E = Number(t.currentTime || 0), j = Number(t.duration || 0);
+ if (Number.isFinite(j) && j > 0) {
+ const R = Math.max(0, Math.min(1, E / j));
+ d.value = String(Math.round(R * 1e3)), C.textContent = `${Nt(E)} / ${Nt(j)}`;
+ } else
+ d.value = "0", C.textContent = `${Nt(E)} / 0:00`;
+ V();
+ }, q = (E) => {
+ var j;
+ try {
+ (j = E == null ? void 0 : E.stopPropagation) == null || j.call(E);
+ } catch {
+ }
+ }, tt = (E) => {
+ var j, R;
+ q(E);
+ try {
+ if (s)
+ t.paused ? Xt(t) : (j = t.pause) == null || j.call(t);
+ else if (l)
+ if (!B)
+ F || (F = ze(t)), F && (t.src = F), B = !0;
+ else {
+ const O = x ? `${x}${x.includes("?") ? "&" : "?"}mjr_anim=${Date.now()}` : t.src;
+ t.src = O, B = !1;
+ }
+ } catch (O) {
+ (R = console.debug) == null || R.call(console, O);
+ }
+ P();
+ }, K = (E, j) => {
+ var O, z;
+ if (q(j), !i || !(t instanceof HTMLVideoElement)) return;
+ try {
+ (O = t.pause) == null || O.call(t);
+ } catch (w) {
+ (z = console.debug) == null || z.call(console, w);
+ }
+ const R = Zt(t, o);
+ Oe(t, R + E, o), P(), I(), U();
+ }, J = (E) => {
+ var j;
+ if (q(E), t instanceof HTMLMediaElement) {
+ try {
+ t.muted = !t.muted;
+ } catch (R) {
+ (j = console.debug) == null || j.call(console, R);
+ }
+ L();
+ }
+ }, at = (E) => {
+ var O;
+ if (q(E), !s) return;
+ V();
+ const j = Number(t.duration || 0);
+ if (!Number.isFinite(j) || j <= 0) return;
+ const R = Math.max(0, Math.min(1, Number(d.value) / 1e3));
+ try {
+ t.currentTime = j * R;
+ } catch (z) {
+ (O = console.debug) == null || O.call(console, z);
+ }
+ I(), U();
+ }, rt = (E) => q(E), lt = (E) => {
+ var j, R, O, z;
+ try {
+ if ((R = (j = E == null ? void 0 : E.target) == null ? void 0 : j.closest) != null && R.call(j, "button, input, textarea, select")) return;
+ (O = u.focus) == null || O.call(u, { preventScroll: !0 });
+ } catch (w) {
+ (z = console.debug) == null || z.call(console, w);
+ }
+ }, ct = (E) => {
+ var R, O, z;
+ const j = String((E == null ? void 0 : E.key) || "");
+ if (!(!j || E != null && E.altKey || E != null && E.ctrlKey || E != null && E.metaKey)) {
+ if (j === " " || j === "Spacebar") {
+ (R = E.preventDefault) == null || R.call(E), tt(E);
+ return;
+ }
+ if (j === "ArrowLeft") {
+ if (!i) return;
+ (O = E.preventDefault) == null || O.call(E), K(-1, E);
+ return;
+ }
+ if (j === "ArrowRight") {
+ if (!i) return;
+ (z = E.preventDefault) == null || z.call(E), K(1, E);
+ }
+ }
+ };
+ return f.addEventListener("click", tt), m.addEventListener("click", (E) => K(-1, E)), g.addEventListener("click", (E) => K(1, E)), y.addEventListener("click", J), d.addEventListener("input", at), a.addEventListener("pointerdown", rt), a.addEventListener("click", rt), a.addEventListener("dblclick", rt), u.addEventListener("pointerdown", lt), u.addEventListener("keydown", ct), t instanceof HTMLMediaElement && (t.addEventListener("play", P, { passive: !0 }), t.addEventListener("pause", P, { passive: !0 }), t.addEventListener(
+ "timeupdate",
+ () => {
+ I(), U();
+ },
+ { passive: !0 }
+ ), t.addEventListener(
+ "seeked",
+ () => {
+ I(), U();
+ },
+ { passive: !0 }
+ ), t.addEventListener(
+ "loadedmetadata",
+ () => {
+ I(), U();
+ },
+ { passive: !0 }
+ )), Xt(t), P(), L(), I(), U(), u;
+}
+const Ye = /* @__PURE__ */ new Set([".mp4", ".webm", ".mov", ".avi", ".mkv"]), Qe = /* @__PURE__ */ new Set([".mp3", ".wav", ".flac", ".ogg", ".m4a", ".aac", ".opus", ".wma"]);
+function pe(t) {
+ try {
+ const e = String(t || "").trim(), n = e.lastIndexOf(".");
+ return n >= 0 ? e.slice(n).toLowerCase() : "";
+ } catch {
+ return "";
+ }
+}
+function X(t) {
+ const e = String((t == null ? void 0 : t.kind) || "").toLowerCase();
+ if (e === "video") return "video";
+ if (e === "audio") return "audio";
+ if (e === "model3d") return "model3d";
+ const n = pe((t == null ? void 0 : t.filename) || "");
+ return n === ".gif" ? "gif" : Ye.has(n) ? "video" : Qe.has(n) ? "audio" : Ce.has(n) ? "model3d" : "image";
+}
+function me(t) {
+ return t ? t.url ? String(t.url) : t.filename && t.id == null ? Se(t.filename, t.subfolder || "", t.type || "output") : t.filename && Ee(t) || "" : "";
+}
+function Q(t = "No media — select assets in the grid") {
+ const e = document.createElement("div");
+ return e.className = "mjr-mfv-empty", e.textContent = t, e;
+}
+function et(t, e) {
+ const n = document.createElement("div");
+ return n.className = `mjr-mfv-label label-${e}`, n.textContent = t, n;
+}
+function Kt(t) {
+ var e;
+ if (!(!t || typeof t.play != "function"))
+ try {
+ const n = t.play();
+ n && typeof n.catch == "function" && n.catch(() => {
+ });
+ } catch (n) {
+ (e = console.debug) == null || e.call(console, n);
+ }
+}
+function qe(t, e) {
+ var o, s;
+ let n = t && t.nodeType === 1 ? t : (t == null ? void 0 : t.parentElement) || null;
+ for (; n && n !== e; ) {
+ try {
+ const i = (o = window.getComputedStyle) == null ? void 0 : o.call(window, n), r = /(auto|scroll|overlay)/.test(String((i == null ? void 0 : i.overflowY) || "")), l = /(auto|scroll|overlay)/.test(String((i == null ? void 0 : i.overflowX) || ""));
+ if (r || l)
+ return n;
+ } catch (i) {
+ (s = console.debug) == null || s.call(console, i);
+ }
+ n = n.parentElement || null;
+ }
+ return null;
+}
+function Xe(t, e, n) {
+ if (!t) return !1;
+ if (Math.abs(Number(n) || 0) >= Math.abs(Number(e) || 0)) {
+ const i = Number(t.scrollTop || 0), r = Math.max(0, Number(t.scrollHeight || 0) - Number(t.clientHeight || 0));
+ if (n < 0 && i > 0 || n > 0 && i < r) return !0;
+ }
+ const o = Number(t.scrollLeft || 0), s = Math.max(0, Number(t.scrollWidth || 0) - Number(t.clientWidth || 0));
+ return e < 0 && o > 0 || e > 0 && o < s;
+}
+function Ze(t) {
+ var e, n, o, s;
+ if (t)
+ try {
+ const i = (e = t.querySelectorAll) == null ? void 0 : e.call(t, "video, audio");
+ if (!i || !i.length) return;
+ for (const r of i)
+ try {
+ (n = r.pause) == null || n.call(r);
+ } catch (l) {
+ (o = console.debug) == null || o.call(console, l);
+ }
+ } catch (i) {
+ (s = console.debug) == null || s.call(console, i);
+ }
+}
+function nt(t, { fill: e = !1 } = {}) {
+ var a, d;
+ const n = me(t);
+ if (!n) return null;
+ const o = X(t), s = `mjr-mfv-media mjr-mfv-media--fit-height${e ? " mjr-mfv-media--fill" : ""}`, r = pe((t == null ? void 0 : t.filename) || "") === ".webp" && Number((t == null ? void 0 : t.duration) ?? ((a = t == null ? void 0 : t.metadata_raw) == null ? void 0 : a.duration) ?? 0) > 0, l = (c, f) => {
+ var p;
+ const h = document.createElement("div");
+ h.className = `mjr-mfv-player-host${e ? " mjr-mfv-player-host--fill" : ""}`, h.appendChild(c);
+ const m = Me(c, {
+ variant: "viewer",
+ hostEl: h,
+ mediaKind: f,
+ initialFps: re(t) || void 0,
+ initialFrameCount: Be(t) || void 0
+ });
+ try {
+ m && (h._mjrMediaControlsHandle = m);
+ } catch (g) {
+ (p = console.debug) == null || p.call(console, g);
+ }
+ return h;
+ };
+ if (o === "audio") {
+ const c = document.createElement("audio");
+ c.className = s, c.src = n, c.controls = !1, c.autoplay = !0, c.preload = "metadata", c.loop = !0, c.muted = !0;
+ try {
+ c.addEventListener("loadedmetadata", () => Kt(c), { once: !0 });
+ } catch (f) {
+ (d = console.debug) == null || d.call(console, f);
+ }
+ return Kt(c), l(c, "audio");
+ }
+ if (o === "video") {
+ const c = document.createElement("video");
+ return c.className = s, c.src = n, c.controls = !1, c.loop = !0, c.muted = !0, c.autoplay = !0, c.playsInline = !0, l(c, "video");
+ }
+ if (o === "model3d")
+ return Ae(t, n, {
+ hostClassName: `mjr-model3d-host mjr-mfv-model3d-host${e ? " mjr-mfv-model3d-host--fill" : ""}`,
+ canvasClassName: `mjr-mfv-media mjr-model3d-render-canvas${e ? " mjr-mfv-media--fill" : ""}`,
+ hintText: "Rotate: left drag Pan: right drag Zoom: wheel or middle drag",
+ disableViewerTransform: !0,
+ pauseDuringExecution: !!pt.FLOATING_VIEWER_PAUSE_DURING_EXECUTION
+ });
+ const u = document.createElement("img");
+ return u.className = s, u.src = n, u.alt = String((t == null ? void 0 : t.filename) || ""), u.draggable = !1, (o === "gif" || r) && We(u, t, {
+ kind: o === "gif" ? "gif" : "animated-image"
+ }) || u;
+}
+function he(t, e, n, o, s, i) {
+ t.beginPath(), typeof t.roundRect == "function" ? t.roundRect(e, n, o, s, i) : (t.moveTo(e + i, n), t.lineTo(e + o - i, n), t.quadraticCurveTo(e + o, n, e + o, n + i), t.lineTo(e + o, n + s - i), t.quadraticCurveTo(e + o, n + s, e + o - i, n + s), t.lineTo(e + i, n + s), t.quadraticCurveTo(e, n + s, e, n + s - i), t.lineTo(e, n + i), t.quadraticCurveTo(e, n, e + i, n), t.closePath());
+}
+function ut(t, e, n, o) {
+ t.save(), t.font = "bold 10px system-ui, sans-serif";
+ const s = 5, i = t.measureText(e).width;
+ t.fillStyle = "rgba(0,0,0,0.58)", he(t, n, o, i + s * 2, 18, 4), t.fill(), t.fillStyle = "#fff", t.fillText(e, n + s, o + 13), t.restore();
+}
+function Ke(t, e, n = null) {
+ switch (String((t == null ? void 0 : t.type) || "").toLowerCase()) {
+ case "number":
+ case "int":
+ case "float":
+ return we(t, e, n);
+ case "combo":
+ return $e(t, e, n);
+ case "text":
+ case "string":
+ case "customtext":
+ return tn(t, e, n);
+ case "toggle":
+ case "boolean":
+ return en(t, e, n);
+ default:
+ return nn(t);
+ }
+}
+function it(t, e, n = null) {
+ var s, i, r, l, u, a, d, c, f, h;
+ if (!t) return !1;
+ const o = String(t.type || "").toLowerCase();
+ if (o === "number" || o === "int" || o === "float") {
+ const m = Number(e);
+ if (Number.isNaN(m)) return !1;
+ const p = t.options ?? {}, g = p.min ?? -1 / 0, b = p.max ?? 1 / 0;
+ let C = Math.min(b, Math.max(g, m));
+ (o === "int" || p.precision === 0 || p.round === 1) && (C = Math.round(C)), t.value = C;
+ } else o === "toggle" || o === "boolean" ? t.value = !!e : t.value = e;
+ try {
+ const m = Z(), p = (m == null ? void 0 : m.canvas) ?? null, g = n ?? (t == null ? void 0 : t.parent) ?? null, b = t.value;
+ (s = t.callback) == null || s.call(t, t.value, p, g, null, t), (o === "number" || o === "int" || o === "float") && (t.value = b), Je(t), (i = p == null ? void 0 : p.setDirty) == null || i.call(p, !0, !0), (r = p == null ? void 0 : p.draw) == null || r.call(p, !0, !0);
+ const C = (g == null ? void 0 : g.graph) ?? null;
+ C && C !== (m == null ? void 0 : m.graph) && ((l = C.setDirtyCanvas) == null || l.call(C, !0, !0), (u = C.change) == null || u.call(C)), (d = (a = m == null ? void 0 : m.graph) == null ? void 0 : a.setDirtyCanvas) == null || d.call(a, !0, !0), (f = (c = m == null ? void 0 : m.graph) == null ? void 0 : c.change) == null || f.call(c);
+ } catch (m) {
+ (h = console.debug) == null || h.call(console, "[MFV] writeWidgetValue", m);
+ }
+ return !0;
+}
+function Je(t) {
+ var o, s, i, r, l, u;
+ const e = String(t.value ?? ""), n = (t == null ? void 0 : t.inputEl) ?? (t == null ? void 0 : t.element) ?? (t == null ? void 0 : t.el) ?? ((s = (o = t == null ? void 0 : t.cachedDeepestByFrame) == null ? void 0 : o.widget) == null ? void 0 : s.inputEl) ?? ((r = (i = t == null ? void 0 : t.cachedDeepestByFrame) == null ? void 0 : i.widget) == null ? void 0 : r.element) ?? ((u = (l = t == null ? void 0 : t.cachedDeepestByFrame) == null ? void 0 : l.widget) == null ? void 0 : u.el) ?? null;
+ n != null && "value" in n && n.value !== e && (n.value = e);
+}
+function we(t, e, n) {
+ const o = document.createElement("input");
+ o.type = "number", o.className = "mjr-ws-input", o.value = t.value ?? "";
+ const s = t.options ?? {}, r = String((t == null ? void 0 : t.type) || "").toLowerCase() === "int" || s.precision === 0 || s.round === 1;
+ if (s.min != null && (o.min = String(s.min)), s.max != null && (o.max = String(s.max)), r)
+ o.step = "1";
+ else {
+ const l = s.precision;
+ o.step = l != null ? String(Math.pow(10, -l)) : "any";
+ }
+ return o.addEventListener("input", () => {
+ const l = o.value;
+ l === "" || l === "-" || l === "." || l.endsWith(".") || (it(t, l, n), e == null || e(t.value));
+ }), o.addEventListener("change", () => {
+ it(t, o.value, n) && (o.value = String(t.value), e == null || e(t.value));
+ }), o;
+}
+function $e(t, e, n) {
+ var i;
+ const o = document.createElement("select");
+ o.className = "mjr-ws-input";
+ let s = ((i = t.options) == null ? void 0 : i.values) ?? [];
+ if (typeof s == "function")
+ try {
+ s = s() ?? [];
+ } catch {
+ s = [];
+ }
+ Array.isArray(s) || (s = []);
+ for (const r of s) {
+ const l = document.createElement("option"), u = typeof r == "string" ? r : (r == null ? void 0 : r.content) ?? (r == null ? void 0 : r.value) ?? (r == null ? void 0 : r.text) ?? String(r);
+ l.value = u, l.textContent = u, u === String(t.value) && (l.selected = !0), o.appendChild(l);
+ }
+ return o.addEventListener("change", () => {
+ it(t, o.value, n) && (e == null || e(t.value));
+ }), o;
+}
+function tn(t, e, n) {
+ const o = document.createElement("div");
+ o.className = "mjr-ws-text-wrapper";
+ const s = document.createElement("textarea");
+ s.className = "mjr-ws-input mjr-ws-textarea", s.value = t.value ?? "", s.rows = 2;
+ const i = () => {
+ s.style.height = "auto", s.style.height = s.scrollHeight + "px";
+ };
+ return s.addEventListener("change", () => {
+ it(t, s.value, n) && (e == null || e(t.value));
+ }), s.addEventListener("input", () => {
+ it(t, s.value, n), e == null || e(t.value), i();
+ }), o.appendChild(s), o._mjrAutoFit = i, s._mjrAutoFit = i, requestAnimationFrame(i), o;
+}
+function en(t, e, n) {
+ const o = document.createElement("label");
+ o.className = "mjr-ws-toggle-label";
+ const s = document.createElement("input");
+ return s.type = "checkbox", s.className = "mjr-ws-checkbox", s.checked = !!t.value, s.addEventListener("change", () => {
+ it(t, s.checked, n) && (e == null || e(t.value));
+ }), o.appendChild(s), o;
+}
+function nn(t) {
+ const e = document.createElement("input");
+ return e.type = "text", e.className = "mjr-ws-input mjr-ws-readonly", e.value = t.value != null ? String(t.value) : "", e.readOnly = !0, e.tabIndex = -1, e;
+}
+const on = /* @__PURE__ */ new Set(["imageupload", "button", "hidden"]), sn = /\bnote\b|markdown/i;
+function an(t) {
+ return sn.test(String((t == null ? void 0 : t.type) || ""));
+}
+function Jt(t) {
+ var o;
+ const e = (t == null ? void 0 : t.properties) ?? {};
+ if (typeof e.text == "string") return e.text;
+ if (typeof e.value == "string") return e.value;
+ if (typeof e.markdown == "string") return e.markdown;
+ const n = (o = t == null ? void 0 : t.widgets) == null ? void 0 : o[0];
+ return n != null && n.value != null ? String(n.value) : "";
+}
+function rn(t, e) {
+ var s;
+ const n = t == null ? void 0 : t.properties;
+ n && ("text" in n ? n.text = e : "value" in n ? n.value = e : "markdown" in n ? n.markdown = e : n.text = e);
+ const o = (s = t == null ? void 0 : t.widgets) == null ? void 0 : s[0];
+ o && (o.value = e);
+}
+const ln = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i, cn = /^[0-9a-f]{20,}$/i;
+function dn(t) {
+ const e = String((t == null ? void 0 : t.type) || "");
+ return ln.test(e) || cn.test(e) ? String((t == null ? void 0 : t.title) || "Subgraph").trim() || "Subgraph" : e || `Node #${t == null ? void 0 : t.id}`;
+}
+class un {
+ /**
+ * @param {object} node
+ * @param {object} [opts]
+ * @param {() => void} [opts.onLocate]
+ * @param {boolean} [opts.collapsible]
+ * @param {boolean} [opts.expanded]
+ * @param {(expanded: boolean) => void} [opts.onToggle]
+ * @param {number} [opts.depth] — 0 = top-level, >0 = inside a subgraph
+ */
+ constructor(e, n = {}) {
+ this._node = e, this._onLocate = n.onLocate ?? null, this._onToggle = typeof n.onToggle == "function" ? n.onToggle : null, this._collapsible = !!n.collapsible, this._expanded = n.expanded !== !1, this._depth = n.depth ?? 0, this._el = null, this._body = null, this._toggleBtn = null, this._inputMap = /* @__PURE__ */ new Map(), this._autoFits = [], this._noteTextarea = null;
+ }
+ get el() {
+ return this._el || (this._el = this._render()), this._el;
+ }
+ syncFromGraph() {
+ var o, s, i, r, l, u, a;
+ if (this._noteTextarea) {
+ const d = ((o = this._el) == null ? void 0 : o.ownerDocument) || document;
+ if ((d == null ? void 0 : d.activeElement) !== this._noteTextarea) {
+ const c = Jt(this._node);
+ this._noteTextarea.value !== c && (this._noteTextarea.value = c, (i = (s = this._noteTextarea)._mjrAutoFit) == null || i.call(s));
+ }
+ return;
+ }
+ if (!((r = this._node) != null && r.widgets)) return;
+ const e = ((l = this._el) == null ? void 0 : l.ownerDocument) || document, n = (e == null ? void 0 : e.activeElement) || null;
+ for (const d of this._node.widgets) {
+ const c = this._inputMap.get(d.name), f = pn(c);
+ if (!f) continue;
+ if (f.type === "checkbox") {
+ const m = !!d.value;
+ f.checked !== m && (f.checked = m);
+ continue;
+ }
+ const h = d.value != null ? String(d.value) : "";
+ String(f.value ?? "") !== h && (n && f === n || (f.value = h, (u = c == null ? void 0 : c._mjrAutoFit) == null || u.call(c), (a = f == null ? void 0 : f._mjrAutoFit) == null || a.call(f)));
+ }
+ }
+ dispose() {
+ var e;
+ (e = this._el) == null || e.remove(), this._el = null, this._autoFits = [], this._inputMap.clear();
+ }
+ setExpanded(e) {
+ var n, o;
+ this._expanded = !!e, this._applyExpandedState(), this._expanded && ((n = this._autoFits) != null && n.length) && requestAnimationFrame(() => {
+ for (const s of this._autoFits) s();
+ }), (o = this._onToggle) == null || o.call(this, this._expanded);
+ }
+ _render() {
+ var c, f, h;
+ const e = this._node, n = document.createElement("section");
+ n.className = "mjr-ws-node", n.dataset.nodeId = String(e.id ?? ""), this._depth > 0 && (n.dataset.depth = String(this._depth), n.classList.add("mjr-ws-node--nested"));
+ const o = document.createElement("div");
+ if (o.className = "mjr-ws-node-header", this._collapsible) {
+ this._header = o;
+ const m = document.createElement("button");
+ m.type = "button", m.className = "mjr-icon-btn mjr-ws-node-toggle", m.title = this._expanded ? "Collapse node" : "Expand node", m.addEventListener("click", (p) => {
+ p.stopPropagation(), this.setExpanded(!this._expanded);
+ }), o.appendChild(m), this._toggleBtn = m, o.addEventListener("click", (p) => {
+ p.target.closest("button") || this.setExpanded(!this._expanded);
+ }), o.title = this._expanded ? "Collapse node" : "Expand node";
+ }
+ const s = document.createElement("div");
+ s.className = "mjr-ws-node-title-wrap";
+ const i = document.createElement("span");
+ i.className = "mjr-ws-node-type", i.textContent = dn(e), s.appendChild(i);
+ const r = String(e.title || "").trim();
+ if (r && r !== e.type) {
+ const m = document.createElement("span");
+ m.className = "mjr-ws-node-title", m.textContent = r, s.appendChild(m);
+ }
+ o.appendChild(s);
+ const l = document.createElement("button");
+ l.type = "button", l.className = "mjr-icon-btn mjr-ws-locate", l.title = "Locate on canvas", l.innerHTML = '', l.addEventListener("click", (m) => {
+ m.stopPropagation(), this._locateNode();
+ }), o.appendChild(l), n.appendChild(o);
+ const u = document.createElement("div");
+ if (u.className = "mjr-ws-node-body", an(e)) {
+ const m = document.createElement("textarea");
+ m.className = "mjr-ws-input mjr-ws-textarea mjr-ws-note-textarea", m.value = Jt(e), m.rows = 4;
+ const p = () => {
+ m.style.height = "auto", m.style.height = m.scrollHeight + "px";
+ };
+ return m.addEventListener("input", () => {
+ var C, _, y, S, x, B, F;
+ rn(e, m.value);
+ const g = (C = e == null ? void 0 : e.widgets) == null ? void 0 : C[0], b = (g == null ? void 0 : g.inputEl) ?? (g == null ? void 0 : g.element) ?? (g == null ? void 0 : g.el) ?? null;
+ b != null && "value" in b && b.value !== m.value && (b.value = m.value), p();
+ try {
+ const P = Z(), L = (P == null ? void 0 : P.canvas) ?? null;
+ (_ = L == null ? void 0 : L.setDirty) == null || _.call(L, !0, !0), (y = L == null ? void 0 : L.draw) == null || y.call(L, !0, !0);
+ const I = (e == null ? void 0 : e.graph) ?? null;
+ I && I !== (P == null ? void 0 : P.graph) && ((S = I.setDirtyCanvas) == null || S.call(I, !0, !0), (x = I.change) == null || x.call(I)), (F = (B = P == null ? void 0 : P.graph) == null ? void 0 : B.change) == null || F.call(B);
+ } catch {
+ }
+ }), m._mjrAutoFit = p, this._noteTextarea = m, this._autoFits.push(p), u.appendChild(m), this._body = u, n.appendChild(u), this._el = n, this._applyExpandedState(), requestAnimationFrame(p), n;
+ }
+ const a = e.widgets ?? [];
+ let d = !1;
+ for (const m of a) {
+ const p = String(m.type || "").toLowerCase();
+ if (on.has(p) || m.hidden || (c = m.options) != null && c.hidden) continue;
+ d = !0;
+ const g = p === "text" || p === "string" || p === "customtext", b = document.createElement("div");
+ b.className = g ? "mjr-ws-widget-row mjr-ws-widget-row--block" : "mjr-ws-widget-row";
+ const C = document.createElement("label");
+ C.className = "mjr-ws-widget-label", C.textContent = m.name || "";
+ const _ = document.createElement("div");
+ _.className = "mjr-ws-widget-input";
+ const y = Ke(m, () => {
+ }, e);
+ _.appendChild(y), this._inputMap.set(m.name, y);
+ const S = y._mjrAutoFit ?? ((h = (f = y.querySelector) == null ? void 0 : f.call(y, "textarea")) == null ? void 0 : h._mjrAutoFit);
+ S && this._autoFits.push(S), b.appendChild(C), b.appendChild(_), u.appendChild(b);
+ }
+ if (!d) {
+ const m = document.createElement("div");
+ m.className = "mjr-ws-node-empty", m.textContent = "No editable parameters", u.appendChild(m);
+ }
+ return this._body = u, n.appendChild(u), this._el = n, this._applyExpandedState(), n;
+ }
+ _applyExpandedState() {
+ if (!(!this._el || !this._body)) {
+ if (this._el.classList.toggle("is-collapsible", this._collapsible), this._el.classList.toggle("is-collapsed", this._collapsible && !this._expanded), this._toggleBtn) {
+ const e = this._expanded ? "pi pi-chevron-down" : "pi pi-chevron-right";
+ this._toggleBtn.innerHTML = ``, this._toggleBtn.title = this._expanded ? "Collapse node" : "Expand node", this._toggleBtn.setAttribute("aria-expanded", String(this._expanded));
+ }
+ this._header && (this._header.title = this._expanded ? "Collapse node" : "Expand node");
+ }
+ }
+ _locateNode() {
+ var n, o, s, i, r, l, u, a;
+ if (this._onLocate) {
+ this._onLocate();
+ return;
+ }
+ const e = this._node;
+ if (e)
+ try {
+ const d = Z(), c = d == null ? void 0 : d.canvas;
+ if (!c) return;
+ if (typeof c.centerOnNode == "function")
+ c.centerOnNode(e);
+ else if (c.ds && e.pos) {
+ const f = ((n = c.canvas) == null ? void 0 : n.width) || ((o = c.element) == null ? void 0 : o.width) || 800, h = ((s = c.canvas) == null ? void 0 : s.height) || ((i = c.element) == null ? void 0 : i.height) || 600;
+ c.ds.offset[0] = -e.pos[0] - (((r = e.size) == null ? void 0 : r[0]) || 0) / 2 + f / 2, c.ds.offset[1] = -e.pos[1] - (((l = e.size) == null ? void 0 : l[1]) || 0) / 2 + h / 2, (u = c.setDirty) == null || u.call(c, !0, !0);
+ }
+ } catch (d) {
+ (a = console.debug) == null || a.call(console, "[MFV sidebar] locateNode error", d);
+ }
+ }
+}
+function pn(t) {
+ var e, n, o;
+ return t ? (n = (e = t.classList) == null ? void 0 : e.contains) != null && n.call(e, "mjr-ws-text-wrapper") ? ((o = t.querySelector) == null ? void 0 : o.call(t, "textarea")) ?? t : t : null;
+}
+class mn {
+ constructor() {
+ this._searchQuery = "", this._expandedNodeIds = /* @__PURE__ */ new Set(), this._expandedChildrenIds = /* @__PURE__ */ new Set(), this._renderers = [], this._el = this._build(), this._lastNodeSig = "", this._lastSelectedId = "";
+ }
+ get el() {
+ return this._el;
+ }
+ refresh() {
+ this._maybeRebuildList();
+ for (const e of this._renderers) e.syncFromGraph();
+ }
+ forceRebuild() {
+ this._lastNodeSig = "", this._maybeRebuildList();
+ }
+ dispose() {
+ var e, n;
+ for (const o of this._renderers) o.dispose();
+ this._renderers = [], (n = (e = this._el) == null ? void 0 : e.remove) == null || n.call(e);
+ }
+ _build() {
+ const e = document.createElement("div");
+ e.className = "mjr-ws-nodes-tab";
+ const n = document.createElement("div");
+ n.className = "mjr-ws-search-wrap";
+ const o = document.createElement("i");
+ o.className = "pi pi-search mjr-ws-search-icon", o.setAttribute("aria-hidden", "true"), n.appendChild(o), this._searchInput = document.createElement("input"), this._searchInput.type = "text", this._searchInput.className = "mjr-ws-search", this._searchInput.placeholder = "Search nodes...", this._searchInput.addEventListener("input", () => {
+ this._searchQuery = this._searchInput.value, this.forceRebuild();
+ }), n.appendChild(this._searchInput);
+ const s = document.createElement("button");
+ return s.type = "button", s.className = "mjr-ws-search-clear", s.title = "Clear search", s.innerHTML = '', s.addEventListener("click", () => {
+ this._searchInput.value = "", this._searchQuery = "", this.forceRebuild();
+ }), n.appendChild(s), e.appendChild(n), this._list = document.createElement("div"), this._list.className = "mjr-ws-nodes-list", e.appendChild(this._list), e;
+ }
+ _syncCanvasSelection() {
+ var o;
+ const n = bn()[0] || "";
+ if (!(!n || n === this._lastSelectedId)) {
+ this._lastSelectedId = n;
+ for (const s of this._renderers)
+ if (String(((o = s._node) == null ? void 0 : o.id) ?? "") === n && !s._expanded) {
+ s.setExpanded(!0);
+ break;
+ }
+ }
+ }
+ _maybeRebuildList() {
+ const e = hn(), n = e ? fe(e) : [], o = (this._searchQuery || "").toLowerCase().trim(), s = o ? _e(n, o) : n, i = _n(s);
+ if (this._syncCanvasSelection(), i !== this._lastNodeSig) {
+ this._lastNodeSig = i;
+ for (const r of this._renderers) r.dispose();
+ if (this._renderers = [], this._list.innerHTML = "", !s.length) {
+ const r = document.createElement("div");
+ r.className = "mjr-ws-sidebar-empty", r.textContent = n.length ? "No nodes match your search" : "No nodes in workflow", this._list.appendChild(r);
+ return;
+ }
+ this._renderItems(s, this._list, 0);
+ }
+ }
+ /**
+ * Recursively render tree items into a container.
+ * @param {{node: object, children: object[]}[]} items
+ * @param {HTMLElement} container
+ * @param {number} depth
+ */
+ _renderItems(e, n, o) {
+ for (const { node: s, children: i } of e) {
+ const r = String((s == null ? void 0 : s.id) ?? ""), l = new un(s, {
+ collapsible: !0,
+ expanded: this._expandedNodeIds.has(r),
+ depth: o,
+ onLocate: () => gn(s),
+ onToggle: (u) => {
+ if (u) {
+ this._expandedNodeIds = /* @__PURE__ */ new Set([r]);
+ for (const a of this._renderers)
+ a !== l && a.setExpanded(!1);
+ } else
+ this._expandedNodeIds.delete(r);
+ }
+ });
+ if (this._renderers.push(l), n.appendChild(l.el), i.length > 0) {
+ const u = this._expandedChildrenIds.has(r), a = document.createElement("button");
+ a.type = "button", a.className = "mjr-ws-children-toggle", o > 0 && a.classList.add("mjr-ws-children-toggle--nested"), wt(a, i.length, u);
+ const d = document.createElement("div");
+ d.className = "mjr-ws-children", d.hidden = !u, this._renderItems(i, d, o + 1), a.addEventListener("click", () => {
+ const c = d.hidden;
+ d.hidden = !c, c ? this._expandedChildrenIds.add(r) : this._expandedChildrenIds.delete(r), wt(a, i.length, c);
+ }), n.appendChild(a), n.appendChild(d);
+ }
+ }
+ }
+}
+function hn() {
+ var t;
+ try {
+ const e = Z();
+ return (e == null ? void 0 : e.graph) ?? ((t = e == null ? void 0 : e.canvas) == null ? void 0 : t.graph) ?? null;
+ } catch {
+ return null;
+ }
+}
+function fn(t) {
+ var n, o, s, i, r;
+ const e = [
+ t == null ? void 0 : t.subgraph,
+ t == null ? void 0 : t._subgraph,
+ (n = t == null ? void 0 : t.subgraph) == null ? void 0 : n.graph,
+ (o = t == null ? void 0 : t.subgraph) == null ? void 0 : o.lgraph,
+ (s = t == null ? void 0 : t.properties) == null ? void 0 : s.subgraph,
+ t == null ? void 0 : t.subgraph_instance,
+ (i = t == null ? void 0 : t.subgraph_instance) == null ? void 0 : i.graph,
+ t == null ? void 0 : t.inner_graph,
+ t == null ? void 0 : t.subgraph_graph
+ ].filter((l) => l && typeof l == "object" && Array.isArray(l.nodes));
+ return Array.isArray(t == null ? void 0 : t.nodes) && t.nodes.length > 0 && t.nodes !== ((r = t == null ? void 0 : t.graph) == null ? void 0 : r.nodes) && e.push({ nodes: t.nodes }), e;
+}
+function fe(t, e = /* @__PURE__ */ new Set()) {
+ if (!t || e.has(t)) return [];
+ e.add(t);
+ const n = Array.isArray(t.nodes) ? t.nodes : [], o = [];
+ for (const s of n) {
+ if (!s) continue;
+ const r = fn(s).flatMap((l) => fe(l, e));
+ o.push({ node: s, children: r });
+ }
+ return o;
+}
+function _e(t, e) {
+ const n = [];
+ for (const { node: o, children: s } of t) {
+ const i = (o.type || "").toLowerCase().includes(e) || (o.title || "").toLowerCase().includes(e), r = _e(s, e);
+ (i || r.length > 0) && n.push({ node: o, children: r });
+ }
+ return n;
+}
+function _n(t) {
+ const e = [];
+ function n(o) {
+ for (const { node: s, children: i } of o)
+ e.push(s.id), n(i);
+ }
+ return n(t), e.join(",");
+}
+function wt(t, e, n) {
+ const o = n ? "pi-chevron-down" : "pi-chevron-right";
+ t.innerHTML = `${e} inner node${e !== 1 ? "s" : ""}`, t.setAttribute("aria-expanded", String(n));
+}
+function gn(t) {
+ var e, n, o, s, i, r, l;
+ try {
+ const u = Z(), a = u == null ? void 0 : u.canvas;
+ if (!a) return;
+ if ((e = a.selectNode) == null || e.call(a, t, !1), typeof a.centerOnNode == "function")
+ a.centerOnNode(t);
+ else if (t.pos && a.ds) {
+ const d = a.canvas, c = (d == null ? void 0 : d.width) ?? 800, f = (d == null ? void 0 : d.height) ?? 600, h = a.ds.scale ?? 1;
+ a.ds.offset = [
+ -t.pos[0] + c / (2 * h) - (((n = t.size) == null ? void 0 : n[0]) ?? 100) / 2,
+ -t.pos[1] + f / (2 * h) - (((o = t.size) == null ? void 0 : o[1]) ?? 80) / 2
+ ], (s = a.setDirty) == null || s.call(a, !0, !0);
+ }
+ (r = (i = a.canvas) == null ? void 0 : i.focus) == null || r.call(i);
+ } catch (u) {
+ (l = console.debug) == null || l.call(console, "[MFV] _focusNode", u);
+ }
+}
+function bn() {
+ var t, e, n;
+ try {
+ const o = Z(), s = ((t = o == null ? void 0 : o.canvas) == null ? void 0 : t.selected_nodes) ?? ((e = o == null ? void 0 : o.canvas) == null ? void 0 : e.selectedNodes) ?? null;
+ if (!s) return [];
+ if (Array.isArray(s)) return s.map((i) => String((i == null ? void 0 : i.id) ?? "")).filter(Boolean);
+ if (s instanceof Map)
+ return Array.from(s.values()).map((i) => String((i == null ? void 0 : i.id) ?? "")).filter(Boolean);
+ if (typeof s == "object")
+ return Object.values(s).map((i) => String((i == null ? void 0 : i.id) ?? "")).filter(Boolean);
+ } catch (o) {
+ (n = console.debug) == null || n.call(console, "[MFV] _getSelectedNodeIds", o);
+ }
+ return [];
+}
+const yn = 16;
+class Cn {
+ constructor({ hostEl: e, onClose: n } = {}) {
+ this._hostEl = e, this._onClose = n ?? null, this._visible = !1, this._liveSyncHandle = null, this._liveSyncMode = "", this._resizeCleanup = null, this._nodesTab = new mn(), this._el = this._build();
+ }
+ get el() {
+ return this._el;
+ }
+ get isVisible() {
+ return this._visible;
+ }
+ show() {
+ this._visible = !0, this._el.classList.add("open"), this._nodesTab.refresh(), this._startLiveSync();
+ }
+ hide() {
+ this._visible = !1, this._el.classList.remove("open"), this._stopLiveSync();
+ }
+ toggle() {
+ var e;
+ this._visible ? (this.hide(), (e = this._onClose) == null || e.call(this)) : this.show();
+ }
+ refresh() {
+ this._visible && this._nodesTab.refresh();
+ }
+ syncFromGraph() {
+ this._visible && this._nodesTab.refresh();
+ }
+ dispose() {
+ var e, n, o;
+ this._stopLiveSync(), this._disposeResize(), (n = (e = this._nodesTab) == null ? void 0 : e.dispose) == null || n.call(e), this._nodesTab = null, (o = this._el) == null || o.remove();
+ }
+ _build() {
+ const e = document.createElement("div");
+ e.className = "mjr-ws-sidebar";
+ const n = document.createElement("div");
+ n.className = "mjr-ws-sidebar-header";
+ const o = document.createElement("span");
+ o.className = "mjr-ws-sidebar-title", o.textContent = "Nodes", n.appendChild(o);
+ const s = document.createElement("button");
+ s.type = "button", s.className = "mjr-icon-btn", s.title = "Close sidebar", s.innerHTML = '', s.addEventListener("click", () => {
+ var r;
+ this.hide(), (r = this._onClose) == null || r.call(this);
+ }), n.appendChild(s), e.appendChild(n);
+ const i = document.createElement("div");
+ return i.className = "mjr-ws-sidebar-resizer", i.setAttribute("role", "separator"), i.setAttribute("aria-orientation", "vertical"), i.setAttribute("aria-hidden", "true"), e.appendChild(i), this._bindResize(i), this._body = this._nodesTab.el, this._body.classList.add("mjr-ws-sidebar-body"), e.appendChild(this._body), e;
+ }
+ _startLiveSync() {
+ if (this._liveSyncHandle != null) return;
+ const e = $t(this._el), n = () => {
+ this._liveSyncHandle = null, this._liveSyncMode = "", this._visible && (this.syncFromGraph(), this._startLiveSync());
+ };
+ if (typeof e.requestAnimationFrame == "function") {
+ this._liveSyncMode = "raf", this._liveSyncHandle = e.requestAnimationFrame(n);
+ return;
+ }
+ this._liveSyncMode = "timeout", this._liveSyncHandle = e.setTimeout(n, yn);
+ }
+ _stopLiveSync() {
+ var n;
+ if (this._liveSyncHandle == null) return;
+ const e = $t(this._el);
+ try {
+ this._liveSyncMode === "raf" && typeof e.cancelAnimationFrame == "function" ? e.cancelAnimationFrame(this._liveSyncHandle) : typeof e.clearTimeout == "function" && e.clearTimeout(this._liveSyncHandle);
+ } catch (o) {
+ (n = console.debug) == null || n.call(console, o);
+ }
+ this._liveSyncHandle = null, this._liveSyncMode = "";
+ }
+ _bindResize(e) {
+ if (!e) return;
+ const o = (e.ownerDocument || document).defaultView || window, s = 180, i = (r) => {
+ var g;
+ if (r.button !== 0 || !((g = this._el) != null && g.classList.contains("open"))) return;
+ const l = this._el.parentElement;
+ if (!l) return;
+ const u = this._el.getBoundingClientRect(), a = l.getBoundingClientRect(), d = l.getAttribute("data-sidebar-pos") || "right", c = Math.max(
+ s,
+ Math.floor(a.width * (d === "bottom" ? 1 : 0.65))
+ );
+ if (d === "bottom") return;
+ r.preventDefault(), r.stopPropagation(), e.classList.add("is-dragging"), this._el.classList.add("is-resizing");
+ const f = r.clientX, h = u.width, m = (b) => {
+ const C = b.clientX - f, _ = d === "left" ? h - C : h + C, y = Math.max(s, Math.min(c, _));
+ this._el.style.width = `${Math.round(y)}px`;
+ }, p = () => {
+ e.classList.remove("is-dragging"), this._el.classList.remove("is-resizing"), o.removeEventListener("pointermove", m), o.removeEventListener("pointerup", p), o.removeEventListener("pointercancel", p);
+ };
+ o.addEventListener("pointermove", m), o.addEventListener("pointerup", p), o.addEventListener("pointercancel", p);
+ };
+ e.addEventListener("pointerdown", i), this._resizeCleanup = () => e.removeEventListener("pointerdown", i);
+ }
+ _disposeResize() {
+ var e, n;
+ try {
+ (e = this._resizeCleanup) == null || e.call(this);
+ } catch (o) {
+ (n = console.debug) == null || n.call(console, o);
+ }
+ this._resizeCleanup = null;
+ }
+}
+function $t(t) {
+ var n;
+ const e = ((n = t == null ? void 0 : t.ownerDocument) == null ? void 0 : n.defaultView) || null;
+ return e || (typeof window < "u" ? window : globalThis);
+}
+const H = Object.freeze({
+ IDLE: "idle",
+ RUNNING: "running",
+ STOPPING: "stopping",
+ ERROR: "error"
+}), An = /* @__PURE__ */ new Set(["default", "auto", "latent2rgb", "taesd", "none"]), te = "progress-update";
+function Sn() {
+ const t = document.createElement("div");
+ t.className = "mjr-mfv-run-controls";
+ const e = document.createElement("button");
+ e.type = "button", e.className = "mjr-icon-btn mjr-mfv-run-btn";
+ const n = v("tooltip.queuePrompt", "Queue Prompt (Run)");
+ e.title = n, e.setAttribute("aria-label", n);
+ const o = document.createElement("i");
+ o.className = "pi pi-play", o.setAttribute("aria-hidden", "true"), e.appendChild(o);
+ const s = document.createElement("button");
+ s.type = "button", s.className = "mjr-icon-btn mjr-mfv-stop-btn";
+ const i = document.createElement("i");
+ i.className = "pi pi-stop", i.setAttribute("aria-hidden", "true"), s.appendChild(i), t.appendChild(e), t.appendChild(s);
+ let r = H.IDLE, l = !1, u = !1, a = null;
+ function d() {
+ a != null && (clearTimeout(a), a = null);
+ }
+ function c(_, { canStop: y = !1 } = {}) {
+ r = _, e.classList.toggle("running", r === H.RUNNING), e.classList.toggle("stopping", r === H.STOPPING), e.classList.toggle("error", r === H.ERROR), e.disabled = r === H.RUNNING || r === H.STOPPING, s.disabled = !y || r === H.STOPPING, s.classList.toggle("active", y && r !== H.STOPPING), s.classList.toggle("stopping", r === H.STOPPING), r === H.RUNNING || r === H.STOPPING ? o.className = "pi pi-spin pi-spinner" : o.className = "pi pi-play";
+ }
+ function f() {
+ const _ = v("tooltip.queueStop", "Stop Generation");
+ s.title = _, s.setAttribute("aria-label", _);
+ }
+ function h(_ = gt.getSnapshot(), { authoritative: y = !1 } = {}) {
+ const S = Math.max(0, Number(_ == null ? void 0 : _.queue) || 0), x = (_ == null ? void 0 : _.prompt) || null, B = !!(x != null && x.currentlyExecuting), F = !!(x && (x.currentlyExecuting || x.errorDetails)), P = S > 0 || F, L = !!(x != null && x.errorDetails);
+ y && S === 0 && !x && (l = !1, u = !1);
+ const I = l || u || B || S > 0;
+ if ((B || P || S > 0) && (l = !1), L) {
+ u = !1, d(), c(H.ERROR, { canStop: !1 });
+ return;
+ }
+ if (u) {
+ if (!I) {
+ u = !1, h(_);
+ return;
+ }
+ c(H.STOPPING, { canStop: !1 });
+ return;
+ }
+ if (l || B || P || S > 0) {
+ d(), c(H.RUNNING, { canStop: !0 });
+ return;
+ }
+ d(), c(H.IDLE, { canStop: !1 });
+ }
+ function m() {
+ l = !1, u = !1, d(), c(H.ERROR, { canStop: !1 }), a = setTimeout(() => {
+ a = null, h();
+ }, 1500);
+ }
+ async function p() {
+ const _ = Z(), S = (_ != null && _.api && typeof _.api.interrupt == "function" ? _.api : null) ?? le(_);
+ if (S && typeof S.interrupt == "function")
+ return await S.interrupt(), { tracked: !0 };
+ if (S && typeof S.fetchApi == "function") {
+ const B = await S.fetchApi("/interrupt", { method: "POST" });
+ if (!(B != null && B.ok)) throw new Error(`POST /interrupt failed (${B == null ? void 0 : B.status})`);
+ return { tracked: !0 };
+ }
+ const x = await fetch("/interrupt", { method: "POST", credentials: "include" });
+ if (!x.ok) throw new Error(`POST /interrupt failed (${x.status})`);
+ return { tracked: !1 };
+ }
+ async function g() {
+ var _;
+ if (!(r === H.RUNNING || r === H.STOPPING)) {
+ l = !0, u = !1, h();
+ try {
+ const y = await Mn();
+ y != null && y.tracked || (l = !1), h();
+ } catch (y) {
+ (_ = console.error) == null || _.call(console, "[MFV Run]", y), m();
+ }
+ }
+ }
+ async function b() {
+ var _;
+ if (r === H.RUNNING) {
+ u = !0, h();
+ try {
+ const y = await p();
+ y != null && y.tracked || (u = !1, l = !1), h();
+ } catch (y) {
+ (_ = console.error) == null || _.call(console, "[MFV Stop]", y), u = !1, h();
+ } finally {
+ }
+ }
+ }
+ f(), s.disabled = !0, e.addEventListener("click", g), s.addEventListener("click", b);
+ const C = (_) => {
+ h((_ == null ? void 0 : _.detail) || gt.getSnapshot(), {
+ authoritative: !0
+ });
+ };
+ return gt.addEventListener(te, C), Ne({ timeoutMs: 4e3 }).catch((_) => {
+ var y;
+ (y = console.debug) == null || y.call(console, _);
+ }), h(), {
+ el: t,
+ dispose() {
+ d(), e.removeEventListener("click", g), s.removeEventListener("click", b), gt.removeEventListener(
+ te,
+ C
+ );
+ }
+ };
+}
+function En(t = pt.MFV_PREVIEW_METHOD) {
+ const e = String(t || "").trim().toLowerCase();
+ return An.has(e) ? e : "taesd";
+}
+function ge(t, e = pt.MFV_PREVIEW_METHOD) {
+ var s;
+ const n = En(e), o = {
+ ...(t == null ? void 0 : t.extra_data) || {},
+ extra_pnginfo: {
+ ...((s = t == null ? void 0 : t.extra_data) == null ? void 0 : s.extra_pnginfo) || {}
+ }
+ };
+ return (t == null ? void 0 : t.workflow) != null && (o.extra_pnginfo.workflow = t.workflow), n !== "default" ? o.preview_method = n : delete o.preview_method, {
+ ...t,
+ extra_data: o
+ };
+}
+function ee(t, { previewMethod: e = pt.MFV_PREVIEW_METHOD, clientId: n = null } = {}) {
+ const o = ge(t, e), s = {
+ prompt: o == null ? void 0 : o.output,
+ extra_data: (o == null ? void 0 : o.extra_data) || {}
+ }, i = String(n || "").trim();
+ return i && (s.client_id = i), s;
+}
+function ne(t, e) {
+ const n = [
+ t == null ? void 0 : t.clientId,
+ t == null ? void 0 : t.clientID,
+ t == null ? void 0 : t.client_id,
+ e == null ? void 0 : e.clientId,
+ e == null ? void 0 : e.clientID,
+ e == null ? void 0 : e.client_id
+ ];
+ for (const o of n) {
+ const s = String(o || "").trim();
+ if (s) return s;
+ }
+ return "";
+}
+function xt(t, e) {
+ var n;
+ for (const o of (t == null ? void 0 : t.nodes) ?? [])
+ e(o), (n = o.subgraph) != null && n.nodes && xt(o.subgraph, e);
+}
+async function Mn() {
+ var l, u;
+ const t = Z();
+ if (!t) throw new Error("ComfyUI app not available");
+ const n = (t != null && t.api && typeof t.api.queuePrompt == "function" ? t.api : null) ?? le(t);
+ if (!!!(n && typeof n.queuePrompt == "function" || n && typeof n.fetchApi == "function") && typeof t.queuePrompt == "function")
+ return await t.queuePrompt(0), { tracked: !0 };
+ const s = t.rootGraph ?? t.graph;
+ xt(s, (a) => {
+ var d;
+ for (const c of a.widgets ?? [])
+ (d = c.beforeQueued) == null || d.call(c, { isPartialExecution: !1 });
+ });
+ const i = typeof t.graphToPrompt == "function" ? await t.graphToPrompt() : null;
+ if (!(i != null && i.output)) throw new Error("graphToPrompt returned empty output");
+ let r;
+ if (n && typeof n.queuePrompt == "function")
+ await n.queuePrompt(0, ge(i)), r = { tracked: !0 };
+ else if (n && typeof n.fetchApi == "function") {
+ const a = await n.fetchApi("/prompt", {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify(
+ ee(i, {
+ clientId: ne(n, t)
+ })
+ )
+ });
+ if (!(a != null && a.ok)) throw new Error(`POST /prompt failed (${a == null ? void 0 : a.status})`);
+ r = { tracked: !0 };
+ } else {
+ const a = await fetch("/prompt", {
+ method: "POST",
+ credentials: "include",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify(
+ ee(i, {
+ clientId: ne(null, t)
+ })
+ )
+ });
+ if (!a.ok) throw new Error(`POST /prompt failed (${a.status})`);
+ r = { tracked: !1 };
+ }
+ return xt(s, (a) => {
+ var d;
+ for (const c of a.widgets ?? [])
+ (d = c.afterQueued) == null || d.call(c, { isPartialExecution: !1 });
+ }), (u = (l = t.canvas) == null ? void 0 : l.draw) == null || u.call(l, !0, !0), r;
+}
+const Bn = { rgb: "#e0e0e0", r: "#ff5555", g: "#44dd66", b: "#5599ff", a: "#ffffff", l: "#bbbbbb" }, Nn = { rgb: "RGB", r: "R", g: "G", b: "B", a: "A", l: "L" }, xn = { rgb: "500", r: "700", g: "700", b: "700", a: "700", l: "400" };
+function Pn(t) {
+ var n;
+ const e = document.createElement("div");
+ return e.className = "mjr-mfv", e.setAttribute("role", "dialog"), e.setAttribute("aria-modal", "false"), e.setAttribute("aria-hidden", "true"), t.element = e, e.appendChild(t._buildHeader()), e.setAttribute("aria-labelledby", t._titleId), e.appendChild(t._buildToolbar()), e.appendChild(xe(t)), t._contentWrapper = document.createElement("div"), t._contentWrapper.className = "mjr-mfv-content-wrapper", t._applySidebarPosition(), t._contentEl = document.createElement("div"), t._contentEl.className = "mjr-mfv-content", t._contentWrapper.appendChild(t._contentEl), t._overlayCanvas = document.createElement("canvas"), t._overlayCanvas.className = "mjr-mfv-overlay-canvas", t._contentEl.appendChild(t._overlayCanvas), t._contentEl.appendChild(Pe(t)), t._sidebar = new Cn({
+ hostEl: e,
+ onClose: () => t._updateSettingsBtnState(!1)
+ }), t._contentWrapper.appendChild(t._sidebar.el), e.appendChild(t._contentWrapper), t._rebindControlHandlers(), t._bindPanelInteractions(), t._bindDocumentUiHandlers(), (n = t._bindLayoutObserver) == null || n.call(t), t._onSidebarPosChanged = (o) => {
+ var s;
+ ((s = o == null ? void 0 : o.detail) == null ? void 0 : s.key) === "viewer.mfvSidebarPosition" && t._applySidebarPosition();
+ }, window.addEventListener("mjr-settings-changed", t._onSidebarPosChanged), t._refresh(), e;
+}
+function Ln(t) {
+ const e = document.createElement("div");
+ e.className = "mjr-mfv-header";
+ const n = document.createElement("span");
+ n.className = "mjr-mfv-header-title", n.id = t._titleId, n.textContent = "〽️ Majoor Floating Viewer";
+ const o = document.createElement("button");
+ t._closeBtn = o, o.type = "button", o.className = "mjr-icon-btn mjr-mfv-close-btn", yt(o, v("tooltip.closeViewer", "Close viewer"), Ve);
+ const s = document.createElement("i");
+ return s.className = "pi pi-times", s.setAttribute("aria-hidden", "true"), o.appendChild(s), e.appendChild(n), e.appendChild(o), e;
+}
+function Fn(t) {
+ var It, Tt;
+ const e = (M, { min: A, max: N, step: k, value: G } = {}) => {
+ const Y = document.createElement("div");
+ Y.className = "mjr-mfv-toolbar-range";
+ const W = document.createElement("input");
+ W.type = "range", W.min = String(A), W.max = String(N), W.step = String(k), W.value = String(G), W.title = M || "";
+ const $ = document.createElement("span");
+ return $.className = "mjr-mfv-toolbar-range-out", $.textContent = Number(G).toFixed(2), Y.appendChild(W), Y.appendChild($), { wrap: Y, input: W, out: $ };
+ }, n = document.createElement("div");
+ n.className = "mjr-mfv-toolbar", t._modeBtn = document.createElement("button"), t._modeBtn.type = "button", t._modeBtn.className = "mjr-icon-btn", t._updateModeBtnUI(), n.appendChild(t._modeBtn);
+ const o = document.createElement("button");
+ o.type = "button", o.className = "mjr-icon-btn mjr-mfv-pin-trigger", o.title = "Pin slots A/B/C/D", o.setAttribute("aria-haspopup", "dialog"), o.setAttribute("aria-expanded", "false"), o.innerHTML = '', n.appendChild(o);
+ const s = document.createElement("div");
+ s.className = "mjr-mfv-pin-popover", t.element.appendChild(s);
+ const i = document.createElement("div");
+ i.className = "mjr-menu", i.style.cssText = "display:grid;gap:4px;", i.setAttribute("role", "group"), i.setAttribute("aria-label", "Pin References"), s.appendChild(i), t._pinGroup = i, t._pinBtns = {};
+ for (const M of ["A", "B", "C", "D"]) {
+ const A = document.createElement("button");
+ A.type = "button", A.className = "mjr-menu-item mjr-mfv-pin-btn", A.dataset.slot = M, A.title = `Pin Asset ${M}`, A.setAttribute("aria-pressed", "false");
+ const N = document.createElement("span");
+ N.className = "mjr-menu-item-label", N.textContent = `Asset ${M}`;
+ const k = document.createElement("i");
+ k.className = "pi pi-map-marker mjr-menu-item-check", k.style.opacity = "0", A.appendChild(N), A.appendChild(k), i.appendChild(A), t._pinBtns[M] = A;
+ }
+ t._updatePinUI(), t._pinBtn = o, t._pinPopover = s;
+ const r = () => {
+ const M = o.getBoundingClientRect(), A = t.element.getBoundingClientRect();
+ s.style.left = `${M.left - A.left}px`, s.style.top = `${M.bottom - A.top + 4}px`, s.classList.add("is-open"), o.setAttribute("aria-expanded", "true");
+ };
+ t._closePinPopover = () => {
+ s.classList.remove("is-open"), o.setAttribute("aria-expanded", "false");
+ }, o.addEventListener("click", (M) => {
+ var A;
+ M.stopPropagation(), s.classList.contains("is-open") ? t._closePinPopover() : ((A = t._closeAllToolbarPopovers) == null || A.call(t), r());
+ });
+ const l = document.createElement("button");
+ l.type = "button", l.className = "mjr-icon-btn mjr-mfv-guides-trigger", l.title = "Guides", l.setAttribute("aria-haspopup", "listbox"), l.setAttribute("aria-expanded", "false");
+ const u = document.createElement("img");
+ u.src = new URL("data:image/png;base64,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", import.meta.url).href, u.className = "mjr-mfv-guides-icon", u.alt = "", u.setAttribute("aria-hidden", "true"), l.appendChild(u), n.appendChild(l);
+ const a = document.createElement("div");
+ a.className = "mjr-mfv-guides-popover", t.element.appendChild(a);
+ const d = document.createElement("div");
+ d.className = "mjr-menu", d.style.cssText = "display:grid;gap:4px;", a.appendChild(d);
+ const c = document.createElement("select");
+ c.style.cssText = "position:absolute;opacity:0;pointer-events:none;width:0;height:0;overflow:hidden;", a.appendChild(c);
+ const f = [
+ { value: "0", label: "Off" },
+ { value: "1", label: "Thirds" },
+ { value: "2", label: "Center" },
+ { value: "3", label: "Safe" }
+ ], h = String(t._gridMode || 0), m = [];
+ for (const M of f) {
+ const A = document.createElement("option");
+ A.value = M.value, c.appendChild(A);
+ const N = document.createElement("button");
+ N.type = "button", N.className = "mjr-menu-item", N.dataset.value = M.value;
+ const k = document.createElement("span");
+ k.className = "mjr-menu-item-label", k.textContent = M.label;
+ const G = document.createElement("i");
+ G.className = "pi pi-check mjr-menu-item-check", G.style.opacity = M.value === h ? "1" : "0", N.appendChild(k), N.appendChild(G), d.appendChild(N), m.push(N), M.value === h && N.classList.add("is-active");
+ }
+ c.value = h, l.classList.toggle("is-on", h !== "0"), t._guidesSelect = c, t._guideBtn = l, t._guidePopover = a;
+ const p = () => {
+ const M = l.getBoundingClientRect(), A = t.element.getBoundingClientRect();
+ a.style.left = `${M.left - A.left}px`, a.style.top = `${M.bottom - A.top + 4}px`, a.classList.add("is-open"), l.setAttribute("aria-expanded", "true");
+ };
+ t._closeGuidePopover = () => {
+ a.classList.remove("is-open"), l.setAttribute("aria-expanded", "false");
+ }, l.addEventListener("click", (M) => {
+ var A;
+ M.stopPropagation(), a.classList.contains("is-open") ? t._closeGuidePopover() : ((A = t._closeAllToolbarPopovers) == null || A.call(t), p());
+ }), d.addEventListener("click", (M) => {
+ const A = M.target.closest(".mjr-menu-item");
+ if (!A) return;
+ const N = A.dataset.value;
+ c.value = N, c.dispatchEvent(new Event("change", { bubbles: !0 })), m.forEach((k) => {
+ const G = k.dataset.value === N;
+ k.classList.toggle("is-active", G), k.querySelector(".mjr-menu-item-check").style.opacity = G ? "1" : "0";
+ }), l.classList.toggle("is-on", N !== "0"), t._closeGuidePopover();
+ });
+ const g = String(t._channel || "rgb"), b = document.createElement("button");
+ b.type = "button", b.className = "mjr-icon-btn mjr-mfv-ch-trigger", b.title = "Channel", b.setAttribute("aria-haspopup", "listbox"), b.setAttribute("aria-expanded", "false");
+ const C = document.createElement("img");
+ C.src = new URL("data:image/png;base64,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", import.meta.url).href, C.className = "mjr-mfv-ch-icon", C.alt = "", C.setAttribute("aria-hidden", "true"), b.appendChild(C), n.appendChild(b);
+ const _ = (M) => {
+ if (!M || M === "rgb")
+ b.replaceChildren(C);
+ else {
+ const A = Bn[M] || "#e0e0e0", N = xn[M] || "500", k = Nn[M] || M.toUpperCase(), G = document.createElement("span");
+ G.className = "mjr-mfv-ch-label", G.style.color = A, G.style.fontWeight = N, G.textContent = k, b.replaceChildren(G);
+ }
+ }, y = document.createElement("div");
+ y.className = "mjr-mfv-ch-popover", t.element.appendChild(y);
+ const S = document.createElement("div");
+ S.className = "mjr-menu", S.style.cssText = "display:grid;gap:4px;", y.appendChild(S);
+ const x = document.createElement("select");
+ x.style.cssText = "position:absolute;opacity:0;pointer-events:none;width:0;height:0;overflow:hidden;", y.appendChild(x);
+ const B = [
+ { value: "rgb", color: "#e0e0e0", weight: "500", label: "RGB" },
+ { value: "r", color: "#ff5555", weight: "700", label: "R" },
+ { value: "g", color: "#44dd66", weight: "700", label: "G" },
+ { value: "b", color: "#5599ff", weight: "700", label: "B" },
+ { value: "a", color: "#ffffff", weight: "700", label: "A" },
+ { value: "l", color: "#bbbbbb", weight: "400", label: "L" }
+ ], F = [];
+ for (const M of B) {
+ const A = document.createElement("option");
+ A.value = M.value, x.appendChild(A);
+ const N = document.createElement("button");
+ N.type = "button", N.className = "mjr-menu-item", N.dataset.value = M.value;
+ const k = document.createElement("span");
+ k.className = "mjr-menu-item-label";
+ const G = document.createElement("span");
+ G.textContent = M.label, G.style.color = M.color, G.style.fontWeight = M.weight, k.appendChild(G);
+ const Y = document.createElement("i");
+ Y.className = "pi pi-check mjr-menu-item-check", Y.style.opacity = M.value === g ? "1" : "0", N.appendChild(k), N.appendChild(Y), S.appendChild(N), F.push(N), M.value === g && N.classList.add("is-active");
+ }
+ x.value = g, _(g), b.classList.toggle("is-on", g !== "rgb"), t._channelSelect = x, t._chBtn = b, t._chPopover = y;
+ const P = () => {
+ const M = b.getBoundingClientRect(), A = t.element.getBoundingClientRect();
+ y.style.left = `${M.left - A.left}px`, y.style.top = `${M.bottom - A.top + 4}px`, y.classList.add("is-open"), b.setAttribute("aria-expanded", "true");
+ };
+ t._closeChPopover = () => {
+ y.classList.remove("is-open"), b.setAttribute("aria-expanded", "false");
+ }, b.addEventListener("click", (M) => {
+ var A;
+ M.stopPropagation(), y.classList.contains("is-open") ? t._closeChPopover() : ((A = t._closeAllToolbarPopovers) == null || A.call(t), P());
+ }), S.addEventListener("click", (M) => {
+ const A = M.target.closest(".mjr-menu-item");
+ if (!A) return;
+ const N = A.dataset.value;
+ x.value = N, x.dispatchEvent(new Event("change", { bubbles: !0 })), F.forEach((k) => {
+ const G = k.dataset.value === N;
+ k.classList.toggle("is-active", G), k.querySelector(".mjr-menu-item-check").style.opacity = G ? "1" : "0";
+ }), _(N), b.classList.toggle("is-on", N !== "rgb"), t._closeChPopover();
+ }), t._closeAllToolbarPopovers = () => {
+ var M, A, N, k, G;
+ (M = t._closeChPopover) == null || M.call(t), (A = t._closeGuidePopover) == null || A.call(t), (N = t._closePinPopover) == null || N.call(t), (k = t._closeFormatPopover) == null || k.call(t), (G = t._closeGenDropdown) == null || G.call(t);
+ }, t._exposureCtl = e("Exposure (EV)", {
+ min: -10,
+ max: 10,
+ step: 0.1,
+ value: Number(t._exposureEV || 0)
+ }), t._exposureCtl.out.textContent = `${Number(t._exposureEV || 0).toFixed(1)}EV`, t._exposureCtl.out.title = "Click to reset to 0 EV", t._exposureCtl.out.style.cursor = "pointer", t._exposureCtl.wrap.classList.toggle("is-active", (t._exposureEV || 0) !== 0), n.appendChild(t._exposureCtl.wrap), t._formatToggle = document.createElement("button"), t._formatToggle.type = "button", t._formatToggle.className = "mjr-icon-btn mjr-mfv-format-trigger", t._formatToggle.setAttribute("aria-haspopup", "dialog"), t._formatToggle.setAttribute("aria-expanded", "false"), t._formatToggle.setAttribute("aria-pressed", "false"), t._formatToggle.title = "Format mask", t._formatToggle.innerHTML = '', n.appendChild(t._formatToggle);
+ const L = document.createElement("div");
+ L.className = "mjr-mfv-format-popover", t.element.appendChild(L);
+ const I = document.createElement("div");
+ I.className = "mjr-menu", I.style.cssText = "display:grid;gap:4px;", L.appendChild(I);
+ const V = document.createElement("select");
+ V.style.cssText = "position:absolute;opacity:0;pointer-events:none;width:0;height:0;overflow:hidden;", L.appendChild(V);
+ const U = [
+ { value: "off", label: "Off" },
+ { value: "image", label: "Image" },
+ { value: "16:9", label: "16:9" },
+ { value: "1:1", label: "1:1" },
+ { value: "4:3", label: "4:3" },
+ { value: "9:16", label: "9:16" },
+ { value: "2.39", label: "2.39" }
+ ], q = [], tt = t._overlayMaskEnabled ? String(t._overlayFormat || "image") : "off";
+ for (const M of U) {
+ const A = document.createElement("option");
+ A.value = M.value, V.appendChild(A);
+ const N = document.createElement("button");
+ N.type = "button", N.className = "mjr-menu-item", N.dataset.value = M.value;
+ const k = document.createElement("span");
+ k.className = "mjr-menu-item-label", k.textContent = M.label;
+ const G = document.createElement("i");
+ G.className = "pi pi-check mjr-menu-item-check", G.style.opacity = M.value === tt ? "1" : "0", N.appendChild(k), N.appendChild(G), I.appendChild(N), q.push(N), M.value === tt && N.classList.add("is-active");
+ }
+ V.value = tt;
+ const K = document.createElement("div");
+ K.className = "mjr-mfv-format-sep", L.appendChild(K);
+ const J = document.createElement("div");
+ J.className = "mjr-mfv-format-slider-row", L.appendChild(J);
+ const at = document.createElement("span");
+ at.className = "mjr-mfv-format-slider-label", at.textContent = "Opacity", J.appendChild(at), t._maskOpacityCtl = e("Mask opacity", {
+ min: 0,
+ max: 0.9,
+ step: 0.01,
+ value: Number(t._overlayMaskOpacity ?? 0.65)
+ }), J.appendChild(t._maskOpacityCtl.input), J.appendChild(t._maskOpacityCtl.out), t._formatSelect = V, t._formatPopover = L;
+ const rt = () => {
+ const M = t._formatToggle.getBoundingClientRect(), A = t.element.getBoundingClientRect();
+ L.style.left = `${M.left - A.left}px`, L.style.top = `${M.bottom - A.top + 4}px`, L.classList.add("is-open"), t._formatToggle.setAttribute("aria-expanded", "true");
+ };
+ t._closeFormatPopover = () => {
+ L.classList.remove("is-open"), t._formatToggle.setAttribute("aria-expanded", "false");
+ }, t._formatToggle.addEventListener("click", (M) => {
+ var A;
+ M.stopPropagation(), L.classList.contains("is-open") ? t._closeFormatPopover() : ((A = t._closeAllToolbarPopovers) == null || A.call(t), rt());
+ }), I.addEventListener("click", (M) => {
+ const A = M.target.closest(".mjr-menu-item");
+ if (!A) return;
+ const N = A.dataset.value;
+ V.value = N, V.dispatchEvent(new Event("change", { bubbles: !0 })), q.forEach((k) => {
+ const G = k.dataset.value === N;
+ k.classList.toggle("is-active", G), k.querySelector(".mjr-menu-item-check").style.opacity = G ? "1" : "0";
+ }), t._closeFormatPopover();
+ });
+ const lt = document.createElement("div");
+ lt.className = "mjr-mfv-toolbar-sep", lt.setAttribute("aria-hidden", "true"), n.appendChild(lt), t._liveBtn = document.createElement("button"), t._liveBtn.type = "button", t._liveBtn.className = "mjr-icon-btn", t._liveBtn.innerHTML = '', t._liveBtn.setAttribute("aria-pressed", "false"), yt(
+ t._liveBtn,
+ v("tooltip.liveStreamOff", "Live Stream: OFF — click to follow"),
+ ce
+ ), n.appendChild(t._liveBtn), t._previewBtn = document.createElement("button"), t._previewBtn.type = "button", t._previewBtn.className = "mjr-icon-btn", t._previewBtn.innerHTML = '', t._previewBtn.setAttribute("aria-pressed", "false"), yt(
+ t._previewBtn,
+ v(
+ "tooltip.previewStreamOff",
+ "KSampler Preview: OFF — click to stream denoising steps"
+ ),
+ de
+ ), n.appendChild(t._previewBtn), t._nodeStreamBtn = document.createElement("button"), t._nodeStreamBtn.type = "button", t._nodeStreamBtn.className = "mjr-icon-btn", t._nodeStreamBtn.innerHTML = '', t._nodeStreamBtn.setAttribute("aria-pressed", "false"), yt(
+ t._nodeStreamBtn,
+ v("tooltip.nodeStreamOff", "Node Stream: OFF — click to stream selected node output"),
+ Ge
+ ), n.appendChild(t._nodeStreamBtn), (Tt = (It = t._nodeStreamBtn).remove) == null || Tt.call(It), t._nodeStreamBtn = null, t._genBtn = document.createElement("button"), t._genBtn.type = "button", t._genBtn.className = "mjr-icon-btn", t._genBtn.setAttribute("aria-haspopup", "dialog"), t._genBtn.setAttribute("aria-expanded", "false");
+ const ct = document.createElement("i");
+ ct.className = "pi pi-info-circle", ct.setAttribute("aria-hidden", "true"), t._genBtn.appendChild(ct), n.appendChild(t._genBtn), t._updateGenBtnUI(), t._popoutBtn = document.createElement("button"), t._popoutBtn.type = "button", t._popoutBtn.className = "mjr-icon-btn";
+ const dt = v("tooltip.popOutViewer", "Pop out viewer to separate window");
+ t._popoutBtn.title = dt, t._popoutBtn.setAttribute("aria-label", dt), t._popoutBtn.setAttribute("aria-pressed", "false");
+ const E = document.createElement("i");
+ E.className = "pi pi-external-link", E.setAttribute("aria-hidden", "true"), t._popoutBtn.appendChild(E), n.appendChild(t._popoutBtn), t._captureBtn = document.createElement("button"), t._captureBtn.type = "button", t._captureBtn.className = "mjr-icon-btn";
+ const j = v("tooltip.captureView", "Save view as image");
+ t._captureBtn.title = j, t._captureBtn.setAttribute("aria-label", j);
+ const R = document.createElement("i");
+ R.className = "pi pi-download", R.setAttribute("aria-hidden", "true"), t._captureBtn.appendChild(R), n.appendChild(t._captureBtn);
+ const O = document.createElement("div");
+ O.className = "mjr-mfv-toolbar-sep", O.style.marginLeft = "auto", O.setAttribute("aria-hidden", "true"), n.appendChild(O), t._settingsBtn = document.createElement("button"), t._settingsBtn.type = "button", t._settingsBtn.className = "mjr-icon-btn mjr-mfv-settings-btn";
+ const z = v("tooltip.nodeParams", "Node Parameters");
+ t._settingsBtn.title = z, t._settingsBtn.setAttribute("aria-label", z), t._settingsBtn.setAttribute("aria-pressed", "false");
+ const w = document.createElement("i");
+ return w.className = "pi pi-sliders-h", w.setAttribute("aria-hidden", "true"), t._settingsBtn.appendChild(w), n.appendChild(t._settingsBtn), t._runHandle = Sn(), n.appendChild(t._runHandle.el), t._handleDocClick = (M) => {
+ var N, k, G, Y, W, $, kt, jt, Gt, mt, Vt, Rt, Ot, Ht, ht, Dt, vt, Ut, zt, ft, Wt, Yt, Qt, _t, qt;
+ const A = M == null ? void 0 : M.target;
+ t._genDropdown && !((k = (N = t._genBtn) == null ? void 0 : N.contains) != null && k.call(N, A)) && !t._genDropdown.contains(A) && t._closeGenDropdown(), (Y = (G = t._chPopover) == null ? void 0 : G.classList) != null && Y.contains("is-open") && !(($ = (W = t._chBtn) == null ? void 0 : W.contains) != null && $.call(W, A)) && !t._chPopover.contains(A) && ((kt = t._closeChPopover) == null || kt.call(t)), (Gt = (jt = t._guidePopover) == null ? void 0 : jt.classList) != null && Gt.contains("is-open") && !((Vt = (mt = t._guideBtn) == null ? void 0 : mt.contains) != null && Vt.call(mt, A)) && !t._guidePopover.contains(A) && ((Rt = t._closeGuidePopover) == null || Rt.call(t)), (Ht = (Ot = t._pinPopover) == null ? void 0 : Ot.classList) != null && Ht.contains("is-open") && !((Dt = (ht = t._pinBtn) == null ? void 0 : ht.contains) != null && Dt.call(ht, A)) && !t._pinPopover.contains(A) && ((vt = t._closePinPopover) == null || vt.call(t)), (zt = (Ut = t._formatPopover) == null ? void 0 : Ut.classList) != null && zt.contains("is-open") && !((Wt = (ft = t._formatToggle) == null ? void 0 : ft.contains) != null && Wt.call(ft, A)) && !t._formatPopover.contains(A) && ((Yt = t._closeFormatPopover) == null || Yt.call(t)), (Qt = A == null ? void 0 : A.closest) != null && Qt.call(A, ".mjr-mfv-idrop") || (qt = (_t = t.element) == null ? void 0 : _t.querySelectorAll) == null || qt.call(_t, ".mjr-mfv-idrop-menu.is-open").forEach((ye) => ye.classList.remove("is-open"));
+ }, t._bindDocumentUiHandlers(), n;
+}
+function In(t) {
+ var n, o, s, i, r, l, u, a, d, c, f, h, m, p, g, b, C, _, y, S, x;
+ try {
+ (n = t._btnAC) == null || n.abort();
+ } catch (B) {
+ (o = console.debug) == null || o.call(console, B);
+ }
+ t._btnAC = new AbortController();
+ const e = t._btnAC.signal;
+ (s = t._closeBtn) == null || s.addEventListener(
+ "click",
+ () => {
+ t._dispatchControllerAction("close", st.MFV_CLOSE);
+ },
+ { signal: e }
+ ), (i = t._modeBtn) == null || i.addEventListener("click", () => t._cycleMode(), { signal: e }), (r = t._pinGroup) == null || r.addEventListener(
+ "click",
+ (B) => {
+ var L, I;
+ const F = (I = (L = B.target) == null ? void 0 : L.closest) == null ? void 0 : I.call(L, ".mjr-mfv-pin-btn");
+ if (!F) return;
+ const P = F.dataset.slot;
+ P && (t._pinnedSlots.has(P) ? t._pinnedSlots.delete(P) : t._pinnedSlots.add(P), t._pinnedSlots.has("C") || t._pinnedSlots.has("D") ? t._mode !== T.GRID && t.setMode(T.GRID) : t._pinnedSlots.size > 0 && t._mode === T.SIMPLE && t.setMode(T.AB), t._updatePinUI());
+ },
+ { signal: e }
+ ), (l = t._liveBtn) == null || l.addEventListener(
+ "click",
+ () => {
+ t._dispatchControllerAction("toggleLive", st.MFV_LIVE_TOGGLE);
+ },
+ { signal: e }
+ ), (u = t._previewBtn) == null || u.addEventListener(
+ "click",
+ () => {
+ t._dispatchControllerAction("togglePreview", st.MFV_PREVIEW_TOGGLE);
+ },
+ { signal: e }
+ ), (a = t._nodeStreamBtn) == null || a.addEventListener(
+ "click",
+ () => {
+ t._dispatchControllerAction("toggleNodeStream", st.MFV_NODESTREAM_TOGGLE);
+ },
+ { signal: e }
+ ), (d = t._genBtn) == null || d.addEventListener(
+ "click",
+ (B) => {
+ var F, P, L;
+ B.stopPropagation(), (P = (F = t._genDropdown) == null ? void 0 : F.classList) != null && P.contains("is-visible") ? t._closeGenDropdown() : ((L = t._closeAllToolbarPopovers) == null || L.call(t), t._openGenDropdown());
+ },
+ { signal: e }
+ ), (c = t._popoutBtn) == null || c.addEventListener(
+ "click",
+ () => {
+ t._dispatchControllerAction("popOut", st.MFV_POPOUT);
+ },
+ { signal: e }
+ ), (f = t._captureBtn) == null || f.addEventListener("click", () => t._captureView(), { signal: e }), (h = t._settingsBtn) == null || h.addEventListener(
+ "click",
+ () => {
+ var B, F;
+ (B = t._sidebar) == null || B.toggle(), t._updateSettingsBtnState(((F = t._sidebar) == null ? void 0 : F.isVisible) ?? !1);
+ },
+ { signal: e }
+ ), (m = t._guidesSelect) == null || m.addEventListener(
+ "change",
+ () => {
+ var B, F;
+ t._gridMode = Number(t._guidesSelect.value) || 0, (B = t._guideBtn) == null || B.classList.toggle("is-on", t._gridMode !== 0), (F = t._redrawOverlayGuides) == null || F.call(t);
+ },
+ { signal: e }
+ ), (p = t._channelSelect) == null || p.addEventListener(
+ "change",
+ () => {
+ var B, F;
+ t._channel = String(t._channelSelect.value || "rgb"), (B = t._chBtn) == null || B.classList.toggle("is-on", t._channel !== "rgb"), (F = t._applyMediaToneControls) == null || F.call(t);
+ },
+ { signal: e }
+ ), (b = (g = t._exposureCtl) == null ? void 0 : g.input) == null || b.addEventListener(
+ "input",
+ () => {
+ var F;
+ const B = Math.max(-10, Math.min(10, Number(t._exposureCtl.input.value) || 0));
+ t._exposureEV = Math.round(B * 10) / 10, t._exposureCtl.out.textContent = `${t._exposureEV.toFixed(1)}EV`, t._exposureCtl.wrap.classList.toggle("is-active", t._exposureEV !== 0), (F = t._applyMediaToneControls) == null || F.call(t);
+ },
+ { signal: e }
+ ), (_ = (C = t._exposureCtl) == null ? void 0 : C.out) == null || _.addEventListener(
+ "click",
+ () => {
+ var B;
+ t._exposureEV = 0, t._exposureCtl.input.value = "0", t._exposureCtl.out.textContent = "0.0EV", t._exposureCtl.wrap.classList.remove("is-active"), (B = t._applyMediaToneControls) == null || B.call(t);
+ },
+ { signal: e }
+ ), (y = t._formatSelect) == null || y.addEventListener(
+ "change",
+ () => {
+ var F, P, L;
+ const B = String(t._formatSelect.value || "image");
+ B === "off" ? t._overlayMaskEnabled = !1 : (t._overlayMaskEnabled = !0, t._overlayFormat = B), (F = t._formatToggle) == null || F.classList.toggle("is-on", !!t._overlayMaskEnabled), (P = t._formatToggle) == null || P.setAttribute("aria-pressed", String(!!t._overlayMaskEnabled)), (L = t._redrawOverlayGuides) == null || L.call(t);
+ },
+ { signal: e }
+ ), (x = (S = t._maskOpacityCtl) == null ? void 0 : S.input) == null || x.addEventListener(
+ "input",
+ () => {
+ var P;
+ const B = Number(t._maskOpacityCtl.input.value), F = Math.max(0, Math.min(0.9, Number.isFinite(B) ? B : 0.65));
+ t._overlayMaskOpacity = Math.round(F * 100) / 100, t._maskOpacityCtl.out.textContent = t._overlayMaskOpacity.toFixed(2), (P = t._redrawOverlayGuides) == null || P.call(t);
+ },
+ { signal: e }
+ );
+}
+function Tn(t, e) {
+ t._settingsBtn && (t._settingsBtn.classList.toggle("active", !!e), t._settingsBtn.setAttribute("aria-pressed", String(!!e)));
+}
+function kn(t) {
+ var n;
+ if (!t._contentWrapper) return;
+ const e = pt.MFV_SIDEBAR_POSITION || "right";
+ t._contentWrapper.setAttribute("data-sidebar-pos", e), (n = t._sidebar) != null && n.el && t._contentEl && (e === "left" ? t._contentWrapper.insertBefore(t._sidebar.el, t._contentEl) : t._contentWrapper.appendChild(t._sidebar.el));
+}
+function jn(t) {
+ var e, n, o;
+ t._closeGenDropdown();
+ try {
+ (n = (e = t._genDropdown) == null ? void 0 : e.remove) == null || n.call(e);
+ } catch (s) {
+ (o = console.debug) == null || o.call(console, s);
+ }
+ t._genDropdown = null, t._updateGenBtnUI();
+}
+function Gn(t) {
+ var n, o, s;
+ if (!t._handleDocClick) return;
+ const e = ((n = t.element) == null ? void 0 : n.ownerDocument) || document;
+ if (t._docClickHost !== e) {
+ t._unbindDocumentUiHandlers();
+ try {
+ (o = t._docAC) == null || o.abort();
+ } catch (i) {
+ (s = console.debug) == null || s.call(console, i);
+ }
+ t._docAC = new AbortController(), e.addEventListener("click", t._handleDocClick, { signal: t._docAC.signal }), t._docClickHost = e;
+ }
+}
+function Vn(t) {
+ var e, n;
+ try {
+ (e = t._docAC) == null || e.abort();
+ } catch (o) {
+ (n = console.debug) == null || n.call(console, o);
+ }
+ t._docAC = new AbortController(), t._docClickHost = null;
+}
+function Rn(t) {
+ var e, n;
+ return !!((n = (e = t._genDropdown) == null ? void 0 : e.classList) != null && n.contains("is-visible"));
+}
+function On(t) {
+ if (!t.element) return;
+ t._genDropdown || (t._genDropdown = t._buildGenDropdown(), t.element.appendChild(t._genDropdown)), t._bindDocumentUiHandlers();
+ const e = t._genBtn.getBoundingClientRect(), n = t.element.getBoundingClientRect(), o = e.left - n.left, s = e.bottom - n.top + 6;
+ t._genDropdown.style.left = `${o}px`, t._genDropdown.style.top = `${s}px`, t._genDropdown.classList.add("is-visible"), t._updateGenBtnUI();
+}
+function Hn(t) {
+ t._genDropdown && (t._genDropdown.classList.remove("is-visible"), t._updateGenBtnUI());
+}
+function Dn(t) {
+ if (!t._genBtn) return;
+ const e = t._genInfoSelections.size, n = e > 0, o = t._isGenDropdownOpen();
+ t._genBtn.classList.toggle("is-on", n), t._genBtn.classList.toggle("is-open", o);
+ const s = n ? `Gen Info (${e} field${e > 1 ? "s" : ""} shown)${o ? " — open" : " — click to configure"}` : `Gen Info${o ? " — open" : " — click to show overlay"}`;
+ t._genBtn.title = s, t._genBtn.setAttribute("aria-label", s), t._genBtn.setAttribute("aria-expanded", String(o)), t._genDropdown ? t._genBtn.setAttribute("aria-controls", t._genDropdownId) : t._genBtn.removeAttribute("aria-controls");
+}
+function vn(t) {
+ const e = document.createElement("div");
+ e.className = "mjr-mfv-gen-dropdown", e.id = t._genDropdownId, e.setAttribute("role", "group"), e.setAttribute("aria-label", "Generation info fields");
+ const n = [
+ ["prompt", "Prompt"],
+ ["seed", "Seed"],
+ ["model", "Model"],
+ ["lora", "LoRA"],
+ ["sampler", "Sampler"],
+ ["scheduler", "Scheduler"],
+ ["cfg", "CFG"],
+ ["step", "Step"],
+ ["genTime", "Gen Time"]
+ ];
+ for (const [o, s] of n) {
+ const i = document.createElement("label");
+ i.className = "mjr-mfv-gen-dropdown-row";
+ const r = document.createElement("input");
+ r.type = "checkbox", r.checked = t._genInfoSelections.has(o), r.addEventListener("change", () => {
+ r.checked ? t._genInfoSelections.add(o) : t._genInfoSelections.delete(o), t._updateGenBtnUI(), t._refresh();
+ });
+ const l = document.createElement("span");
+ l.textContent = s, i.appendChild(r), i.appendChild(l), e.appendChild(i);
+ }
+ return e;
+}
+function oe(t) {
+ const e = Number(t);
+ return !Number.isFinite(e) || e <= 0 ? "" : e >= 60 ? `${(e / 60).toFixed(1)}m` : `${e.toFixed(1)}s`;
+}
+function Un(t) {
+ const e = String(t || "").trim().toLowerCase();
+ if (!e) return 0;
+ if (e.endsWith("m")) {
+ const o = Number.parseFloat(e.slice(0, -1));
+ return Number.isFinite(o) ? o * 60 : 0;
+ }
+ if (e.endsWith("s")) {
+ const o = Number.parseFloat(e.slice(0, -1));
+ return Number.isFinite(o) ? o : 0;
+ }
+ const n = Number.parseFloat(e);
+ return Number.isFinite(n) ? n : 0;
+}
+function zn(t, e) {
+ var i, r, l, u;
+ if (!e) return {};
+ try {
+ const a = e.geninfo ? { geninfo: e.geninfo } : e.metadata || e.metadata_raw || e, d = Le(a) || null, c = {
+ prompt: "",
+ seed: "",
+ model: "",
+ lora: "",
+ sampler: "",
+ scheduler: "",
+ cfg: "",
+ step: "",
+ genTime: ""
+ };
+ if (d && typeof d == "object") {
+ d.prompt && (c.prompt = St(String(d.prompt))), d.seed != null && (c.seed = String(d.seed)), d.model && (c.model = Array.isArray(d.model) ? d.model.join(", ") : String(d.model)), Array.isArray(d.loras) && (c.lora = d.loras.map(
+ (h) => typeof h == "string" ? h : (h == null ? void 0 : h.name) || (h == null ? void 0 : h.lora_name) || (h == null ? void 0 : h.model_name) || ""
+ ).filter(Boolean).join(", ")), d.sampler && (c.sampler = String(d.sampler)), d.scheduler && (c.scheduler = String(d.scheduler)), d.cfg != null && (c.cfg = String(d.cfg)), d.steps != null && (c.step = String(d.steps)), !c.prompt && (a != null && a.prompt) && (c.prompt = St(String(a.prompt || "")));
+ const f = e.generation_time_ms ?? ((i = e.metadata_raw) == null ? void 0 : i.generation_time_ms) ?? (a == null ? void 0 : a.generation_time_ms) ?? ((r = a == null ? void 0 : a.geninfo) == null ? void 0 : r.generation_time_ms) ?? 0;
+ return f && Number.isFinite(Number(f)) && f > 0 && f < 864e5 && (c.genTime = oe(Number(f) / 1e3)), c;
+ }
+ } catch (a) {
+ (l = console.debug) == null || l.call(console, "[MFV] geninfo normalize failed", a);
+ }
+ const n = (e == null ? void 0 : e.metadata) || (e == null ? void 0 : e.metadata_raw) || e || {}, o = {
+ prompt: St(String((n == null ? void 0 : n.prompt) || (n == null ? void 0 : n.positive) || "")),
+ seed: (n == null ? void 0 : n.seed) != null ? String(n.seed) : "",
+ model: (n == null ? void 0 : n.checkpoint) || (n == null ? void 0 : n.ckpt_name) || (n == null ? void 0 : n.model) || "",
+ lora: Array.isArray(n == null ? void 0 : n.loras) ? n.loras.join(", ") : (n == null ? void 0 : n.lora) || "",
+ sampler: (n == null ? void 0 : n.sampler_name) || (n == null ? void 0 : n.sampler) || "",
+ scheduler: (n == null ? void 0 : n.scheduler) || "",
+ cfg: (n == null ? void 0 : n.cfg) != null ? String(n.cfg) : (n == null ? void 0 : n.cfg_scale) != null ? String(n.cfg_scale) : "",
+ step: (n == null ? void 0 : n.steps) != null ? String(n.steps) : "",
+ genTime: ""
+ }, s = e.generation_time_ms ?? ((u = e.metadata_raw) == null ? void 0 : u.generation_time_ms) ?? (n == null ? void 0 : n.generation_time_ms) ?? 0;
+ return s && Number.isFinite(Number(s)) && s > 0 && s < 864e5 && (o.genTime = oe(Number(s) / 1e3)), o;
+}
+function Wn(t, e) {
+ const n = t._getGenFields(e);
+ if (!n) return null;
+ const o = document.createDocumentFragment(), s = [
+ "prompt",
+ "seed",
+ "model",
+ "lora",
+ "sampler",
+ "scheduler",
+ "cfg",
+ "step",
+ "genTime"
+ ];
+ for (const i of s) {
+ if (!t._genInfoSelections.has(i)) continue;
+ const r = n[i] != null ? String(n[i]) : "";
+ if (!r) continue;
+ let l = i.charAt(0).toUpperCase() + i.slice(1);
+ i === "lora" ? l = "LoRA" : i === "cfg" ? l = "CFG" : i === "genTime" && (l = "Gen Time");
+ const u = document.createElement("div");
+ u.dataset.field = i;
+ const a = document.createElement("strong");
+ if (a.textContent = `${l}: `, u.appendChild(a), i === "prompt")
+ u.appendChild(document.createTextNode(r));
+ else if (i === "genTime") {
+ const d = Un(r);
+ let c = "#4CAF50";
+ d >= 60 ? c = "#FF9800" : d >= 30 ? c = "#FFC107" : d >= 10 && (c = "#8BC34A");
+ const f = document.createElement("span");
+ f.style.color = c, f.style.fontWeight = "600", f.textContent = r, u.appendChild(f);
+ } else
+ u.appendChild(document.createTextNode(r));
+ o.appendChild(u);
+ }
+ return o.childNodes.length > 0 ? o : null;
+}
+function Yn(t) {
+ var e, n, o;
+ try {
+ (n = (e = t._controller) == null ? void 0 : e.onModeChanged) == null || n.call(e, t._mode);
+ } catch (s) {
+ (o = console.debug) == null || o.call(console, s);
+ }
+}
+function Qn(t) {
+ const e = [T.SIMPLE, T.AB, T.SIDE, T.GRID];
+ t._mode = e[(e.indexOf(t._mode) + 1) % e.length], t._updateModeBtnUI(), t._refresh(), t._notifyModeChanged();
+}
+function qn(t, e) {
+ Object.values(T).includes(e) && (t._mode = e, t._updateModeBtnUI(), t._refresh(), t._notifyModeChanged());
+}
+function Xn(t) {
+ return t._pinnedSlots;
+}
+function Zn(t) {
+ var e, n;
+ if (t._pinBtns) {
+ for (const o of ["A", "B", "C", "D"]) {
+ const s = t._pinBtns[o];
+ if (!s) continue;
+ const i = t._pinnedSlots.has(o);
+ s.classList.toggle("is-pinned", i), s.setAttribute("aria-pressed", String(i)), s.title = i ? `Unpin Asset ${o}` : `Pin Asset ${o}`;
+ }
+ (n = t._pinBtn) == null || n.classList.toggle("is-on", (((e = t._pinnedSlots) == null ? void 0 : e.size) ?? 0) > 0);
+ }
+}
+function Kn(t) {
+ if (!t._modeBtn) return;
+ const e = {
+ [T.SIMPLE]: { icon: "pi-image", label: "Mode: Simple - click to switch" },
+ [T.AB]: { icon: "pi-clone", label: "Mode: A/B Compare - click to switch" },
+ [T.SIDE]: { icon: "pi-table", label: "Mode: Side-by-Side - click to switch" },
+ [T.GRID]: {
+ icon: "pi-th-large",
+ label: "Mode: Grid Compare (up to 4) - click to switch"
+ }
+ }, { icon: n = "pi-image", label: o = "" } = e[t._mode] || {}, s = Pt(o, je), i = document.createElement("i");
+ i.className = `pi ${n}`, i.setAttribute("aria-hidden", "true"), t._modeBtn.replaceChildren(i), t._modeBtn.title = s, t._modeBtn.setAttribute("aria-label", s), t._modeBtn.removeAttribute("aria-pressed"), t._modeBtn.classList.toggle("is-on", t._mode !== T.SIMPLE);
+}
+function Jn(t, e) {
+ if (!t._liveBtn) return;
+ const n = !!e;
+ t._liveBtn.classList.toggle("mjr-live-active", n);
+ const o = n ? v("tooltip.liveStreamOn", "Live Stream: ON — click to disable") : v("tooltip.liveStreamOff", "Live Stream: OFF — click to follow"), s = Pt(o, ce);
+ t._liveBtn.setAttribute("aria-pressed", String(n)), t._liveBtn.setAttribute("aria-label", s);
+ const i = document.createElement("i");
+ i.className = n ? "pi pi-circle-fill" : "pi pi-circle", i.setAttribute("aria-hidden", "true"), t._liveBtn.replaceChildren(i), t._liveBtn.title = s;
+}
+function wn(t, e) {
+ if (t._previewActive = !!e, !t._previewBtn) return;
+ t._previewBtn.classList.toggle("mjr-preview-active", t._previewActive);
+ const n = t._previewActive ? v("tooltip.previewStreamOn", "KSampler Preview: ON — streaming denoising steps") : v(
+ "tooltip.previewStreamOff",
+ "KSampler Preview: OFF — click to stream denoising steps"
+ ), o = Pt(n, de);
+ t._previewBtn.setAttribute("aria-pressed", String(t._previewActive)), t._previewBtn.setAttribute("aria-label", o);
+ const s = document.createElement("i");
+ s.className = t._previewActive ? "pi pi-eye" : "pi pi-eye-slash", s.setAttribute("aria-hidden", "true"), t._previewBtn.replaceChildren(s), t._previewBtn.title = o, t._previewActive || t._revokePreviewBlob();
+}
+function $n(t, e, n = {}) {
+ if (!e || !(e instanceof Blob)) return;
+ t._revokePreviewBlob();
+ const o = URL.createObjectURL(e);
+ t._previewBlobUrl = o;
+ const s = {
+ url: o,
+ filename: "preview.jpg",
+ kind: "image",
+ _isPreview: !0,
+ _sourceLabel: (n == null ? void 0 : n.sourceLabel) || null
+ };
+ if (t._mode === T.AB || t._mode === T.SIDE || t._mode === T.GRID) {
+ const r = t.getPinnedSlots();
+ if (t._mode === T.GRID) {
+ const l = ["A", "B", "C", "D"].find((u) => !r.has(u)) || "A";
+ t[`_media${l}`] = s;
+ } else r.has("B") ? t._mediaA = s : t._mediaB = s;
+ } else
+ t._mediaA = s, t._resetMfvZoom(), t._mode !== T.SIMPLE && (t._mode = T.SIMPLE, t._updateModeBtnUI());
+ ++t._refreshGen, t._refresh();
+}
+function to(t) {
+ if (t._previewBlobUrl) {
+ try {
+ URL.revokeObjectURL(t._previewBlobUrl);
+ } catch {
+ }
+ t._previewBlobUrl = null;
+ }
+}
+function eo(t, e) {
+ {
+ t._nodeStreamActive = !1;
+ return;
+ }
+}
+const no = [
+ "--border-color",
+ "--border-default",
+ "--button-hover-surface",
+ "--button-surface",
+ "--comfy-accent",
+ "--comfy-font",
+ "--comfy-input-bg",
+ "--comfy-menu-bg",
+ "--comfy-menu-secondary-bg",
+ "--comfy-status-error",
+ "--comfy-status-success",
+ "--comfy-status-warning",
+ "--content-bg",
+ "--content-fg",
+ "--descrip-text",
+ "--destructive-background",
+ "--font-inter",
+ "--input-text",
+ "--interface-menu-surface",
+ "--interface-panel-hover-surface",
+ "--interface-panel-selected-surface",
+ "--interface-panel-surface",
+ "--modal-card-background",
+ "--muted-foreground",
+ "--primary-background",
+ "--primary-background-hover",
+ "--radius-lg",
+ "--radius-md",
+ "--radius-sm",
+ "--success-background",
+ "--warning-background"
+];
+function oo() {
+ var t, e, n, o, s;
+ try {
+ const i = typeof window < "u" ? window : globalThis, r = (e = (t = i == null ? void 0 : i.process) == null ? void 0 : t.versions) == null ? void 0 : e.electron;
+ if (typeof r == "string" && r.trim() || i != null && i.electron || i != null && i.ipcRenderer || i != null && i.electronAPI)
+ return !0;
+ const l = String(((n = i == null ? void 0 : i.navigator) == null ? void 0 : n.userAgent) || ((o = globalThis == null ? void 0 : globalThis.navigator) == null ? void 0 : o.userAgent) || ""), u = /\bElectron\//i.test(l), a = /\bCode\//i.test(l);
+ if (u && !a)
+ return !0;
+ } catch (i) {
+ (s = console.debug) == null || s.call(console, i);
+ }
+ return !1;
+}
+function D(t, e = null, n = "info") {
+ var s, i;
+ const o = {
+ stage: String(t || "unknown"),
+ detail: e,
+ ts: Date.now()
+ };
+ try {
+ const r = typeof window < "u" ? window : globalThis, l = "__MJR_MFV_POPOUT_TRACE__", u = Array.isArray(r[l]) ? r[l] : [];
+ u.push(o), r[l] = u.slice(-20), r.__MJR_MFV_POPOUT_LAST__ = o;
+ } catch (r) {
+ (s = console.debug) == null || s.call(console, r);
+ }
+ try {
+ const r = n === "error" ? console.error : n === "warn" ? console.warn : console.info;
+ r == null || r("[MFV popout]", o);
+ } catch (r) {
+ (i = console.debug) == null || i.call(console, r);
+ }
+}
+function se(t, ...e) {
+ return Array.from(
+ new Set(
+ [String(t || ""), ...e].join(" ").split(/\s+/).filter(Boolean)
+ )
+ ).join(" ");
+}
+function ie(t, e) {
+ var n;
+ if (!(!t || !e))
+ for (const o of Array.from(t.attributes || [])) {
+ const s = String((o == null ? void 0 : o.name) || "");
+ if (!(!s || s === "class" || s === "style"))
+ try {
+ e.setAttribute(s, o.value);
+ } catch (i) {
+ (n = console.debug) == null || n.call(console, i);
+ }
+ }
+}
+function ae(t, e) {
+ var s, i, r, l, u;
+ if (!t || !(e != null && e.style)) return;
+ const n = typeof window < "u" && (window == null ? void 0 : window.getComputedStyle) || (globalThis == null ? void 0 : globalThis.getComputedStyle);
+ if (typeof n != "function") return;
+ let o = null;
+ try {
+ o = n(t);
+ } catch (a) {
+ (s = console.debug) == null || s.call(console, a);
+ }
+ if (o) {
+ for (const a of no)
+ try {
+ const d = String(((i = o.getPropertyValue) == null ? void 0 : i.call(o, a)) || "").trim();
+ d && e.style.setProperty(a, d);
+ } catch (d) {
+ (r = console.debug) == null || r.call(console, d);
+ }
+ try {
+ const a = String(((l = o.getPropertyValue) == null ? void 0 : l.call(o, "color-scheme")) || "").trim();
+ a && (e.style.colorScheme = a);
+ } catch (a) {
+ (u = console.debug) == null || u.call(console, a);
+ }
+ }
+}
+function so(t) {
+ if (!(t != null && t.documentElement) || !(t != null && t.body) || !(document != null && document.documentElement)) return;
+ const e = document.documentElement, n = document.body, o = t.documentElement, s = t.body;
+ o.className = se(
+ e.className,
+ "mjr-mfv-popout-document"
+ ), s.className = se(
+ n == null ? void 0 : n.className,
+ "mjr-mfv-popout-body"
+ ), ie(e, o), ie(n, s), ae(e, o), ae(n, s), e != null && e.lang && (o.lang = e.lang), e != null && e.dir && (o.dir = e.dir);
+}
+function be(t) {
+ var n, o, s;
+ if (!(t != null && t.body)) return null;
+ try {
+ const i = (n = t.getElementById) == null ? void 0 : n.call(t, "mjr-mfv-popout-root");
+ (o = i == null ? void 0 : i.remove) == null || o.call(i);
+ } catch (i) {
+ (s = console.debug) == null || s.call(console, i);
+ }
+ const e = t.createElement("div");
+ return e.id = "mjr-mfv-popout-root", e.className = "mjr-mfv-popout-root", t.body.appendChild(e), e;
+}
+function io(t, e) {
+ if (!t.element) return;
+ const n = !!e;
+ if (t._desktopExpanded === n) return;
+ const o = t.element;
+ if (n) {
+ t._desktopExpandRestore = {
+ parent: o.parentNode || null,
+ nextSibling: o.nextSibling || null,
+ styleAttr: o.getAttribute("style")
+ }, o.parentNode !== document.body && document.body.appendChild(o), o.classList.add("mjr-mfv--desktop-expanded", "is-visible"), o.setAttribute("aria-hidden", "false"), o.style.position = "fixed", o.style.top = "12px", o.style.left = "12px", o.style.right = "12px", o.style.bottom = "12px", o.style.width = "auto", o.style.height = "auto", o.style.maxWidth = "none", o.style.maxHeight = "none", o.style.minWidth = "320px", o.style.minHeight = "240px", o.style.resize = "none", o.style.margin = "0", o.style.zIndex = "2147483000", t._desktopExpanded = !0, t.isVisible = !0, t._resetGenDropdownForCurrentDocument(), t._rebindControlHandlers(), t._bindPanelInteractions(), t._bindDocumentUiHandlers(), t._updatePopoutBtnUI(), D("electron-in-app-expanded", { isVisible: t.isVisible });
+ return;
+ }
+ const s = t._desktopExpandRestore;
+ t._desktopExpanded = !1, o.classList.remove("mjr-mfv--desktop-expanded"), (s == null ? void 0 : s.styleAttr) == null || s.styleAttr === "" ? o.removeAttribute("style") : o.setAttribute("style", s.styleAttr), s != null && s.parent && s.parent.isConnected && (s.nextSibling && s.nextSibling.parentNode === s.parent ? s.parent.insertBefore(o, s.nextSibling) : s.parent.appendChild(o)), t._desktopExpandRestore = null, t._resetGenDropdownForCurrentDocument(), t._rebindControlHandlers(), t._bindPanelInteractions(), t._bindDocumentUiHandlers(), t._updatePopoutBtnUI(), D("electron-in-app-restored", null);
+}
+function ao(t, e) {
+ var n;
+ t._desktopPopoutUnsupported = !0, D(
+ "electron-in-app-fallback",
+ { message: (e == null ? void 0 : e.message) || String(e || "unknown error") },
+ "warn"
+ ), t._setDesktopExpanded(!0);
+ try {
+ Fe(
+ v(
+ "toast.popoutElectronInAppFallback",
+ "Desktop PiP is unavailable here. Viewer expanded inside the app instead."
+ ),
+ "warning",
+ 4500
+ );
+ } catch (o) {
+ (n = console.debug) == null || n.call(console, o);
+ }
+}
+function ro(t, e, n, o, s) {
+ return D(
+ "electron-popup-fallback-attempt",
+ { reason: (s == null ? void 0 : s.message) || String(s || "unknown") },
+ "warn"
+ ), t._fallbackPopout(e, n, o), t._popoutWindow ? (t._desktopPopoutUnsupported = !1, D("electron-popup-fallback-opened", null), !0) : !1;
+}
+function lo(t) {
+ var l, u;
+ if (t._isPopped || !t.element) return;
+ const e = t.element;
+ t._stopEdgeResize();
+ const n = oo(), o = typeof window < "u" && "documentPictureInPicture" in window, s = String(((l = window == null ? void 0 : window.navigator) == null ? void 0 : l.userAgent) || ((u = globalThis == null ? void 0 : globalThis.navigator) == null ? void 0 : u.userAgent) || ""), i = Math.max(e.offsetWidth || 520, 400), r = Math.max(e.offsetHeight || 420, 300);
+ if (D("start", {
+ isElectronHost: n,
+ hasDocumentPiP: o,
+ userAgent: s,
+ width: i,
+ height: r,
+ desktopPopoutUnsupported: t._desktopPopoutUnsupported
+ }), n && t._desktopPopoutUnsupported) {
+ D("electron-in-app-fallback-reuse", null), t._setDesktopExpanded(!0);
+ return;
+ }
+ if (!(n && (D("electron-popup-request", { width: i, height: r }), t._tryElectronPopupFallback(e, i, r, new Error("Desktop popup requested"))))) {
+ if (n && "documentPictureInPicture" in window) {
+ D("electron-pip-request", { width: i, height: r }), window.documentPictureInPicture.requestWindow({ width: i, height: r }).then((a) => {
+ var m, p, g;
+ D("electron-pip-opened", {
+ hasDocument: !!(a != null && a.document)
+ }), t._popoutWindow = a, t._isPopped = !0, t._popoutRestoreGuard = !1;
+ try {
+ (m = t._popoutAC) == null || m.abort();
+ } catch (b) {
+ (p = console.debug) == null || p.call(console, b);
+ }
+ t._popoutAC = new AbortController();
+ const d = t._popoutAC.signal, c = () => t._schedulePopInFromPopupClose();
+ t._popoutCloseHandler = c;
+ const f = a.document;
+ f.title = "Majoor Viewer", t._installPopoutStyles(f);
+ const h = be(f);
+ if (!h) {
+ t._activateDesktopExpandedFallback(new Error("Popup root creation failed"));
+ return;
+ }
+ try {
+ const b = typeof f.adoptNode == "function" ? f.adoptNode(e) : e;
+ h.appendChild(b), D("electron-pip-adopted", {
+ usedAdoptNode: typeof f.adoptNode == "function"
+ });
+ } catch (b) {
+ D(
+ "electron-pip-adopt-failed",
+ { message: (b == null ? void 0 : b.message) || String(b) },
+ "warn"
+ ), console.warn("[MFV] PiP adoptNode failed", b), t._isPopped = !1, t._popoutWindow = null;
+ try {
+ a.close();
+ } catch (C) {
+ (g = console.debug) == null || g.call(console, C);
+ }
+ t._activateDesktopExpandedFallback(b);
+ return;
+ }
+ e.classList.add("is-visible"), t.isVisible = !0, t._resetGenDropdownForCurrentDocument(), t._rebindControlHandlers(), t._bindDocumentUiHandlers(), t._updatePopoutBtnUI(), D("electron-pip-ready", { isPopped: t._isPopped }), a.addEventListener("pagehide", c, {
+ signal: d
+ }), t._startPopoutCloseWatch(), t._popoutKeydownHandler = (b) => {
+ var _, y;
+ const C = String(((_ = b == null ? void 0 : b.target) == null ? void 0 : _.tagName) || "").toLowerCase();
+ b != null && b.defaultPrevented || (y = b == null ? void 0 : b.target) != null && y.isContentEditable || C === "input" || C === "textarea" || C === "select" || t._forwardKeydownToController(b);
+ }, a.addEventListener("keydown", t._popoutKeydownHandler, {
+ signal: d
+ });
+ }).catch((a) => {
+ D(
+ "electron-pip-request-failed",
+ { message: (a == null ? void 0 : a.message) || String(a) },
+ "warn"
+ ), t._activateDesktopExpandedFallback(a);
+ });
+ return;
+ }
+ if (n) {
+ D("electron-no-pip-api", { hasDocumentPiP: o }), t._activateDesktopExpandedFallback(
+ new Error("Document Picture-in-Picture unavailable after popup failure")
+ );
+ return;
+ }
+ D("browser-fallback-popup", { width: i, height: r }), t._fallbackPopout(e, i, r);
+ }
+}
+function co(t, e, n, o) {
+ var c, f, h, m;
+ D("browser-popup-open", { width: n, height: o });
+ const s = (window.screenX || window.screenLeft) + Math.round((window.outerWidth - n) / 2), i = (window.screenY || window.screenTop) + Math.round((window.outerHeight - o) / 2), r = `width=${n},height=${o},left=${s},top=${i},resizable=yes,scrollbars=no,toolbar=no,menubar=no,location=no,status=no`, l = window.open("about:blank", "_mjr_viewer", r);
+ if (!l) {
+ D("browser-popup-blocked", null, "warn"), console.warn("[MFV] Pop-out blocked — allow popups for this site.");
+ return;
+ }
+ D("browser-popup-opened", { hasDocument: !!(l != null && l.document) }), t._popoutWindow = l, t._isPopped = !0, t._popoutRestoreGuard = !1;
+ try {
+ (c = t._popoutAC) == null || c.abort();
+ } catch (p) {
+ (f = console.debug) == null || f.call(console, p);
+ }
+ t._popoutAC = new AbortController();
+ const u = t._popoutAC.signal, a = () => t._schedulePopInFromPopupClose();
+ t._popoutCloseHandler = a;
+ const d = () => {
+ let p;
+ try {
+ p = l.document;
+ } catch {
+ return;
+ }
+ if (!p) return;
+ p.title = "Majoor Viewer", t._installPopoutStyles(p);
+ const g = be(p);
+ if (g) {
+ try {
+ g.appendChild(p.adoptNode(e));
+ } catch (b) {
+ console.warn("[MFV] adoptNode failed", b);
+ return;
+ }
+ e.classList.add("is-visible"), t.isVisible = !0, t._resetGenDropdownForCurrentDocument(), t._rebindControlHandlers(), t._bindDocumentUiHandlers(), t._updatePopoutBtnUI();
+ }
+ };
+ try {
+ d();
+ } catch (p) {
+ (h = console.debug) == null || h.call(console, "[MFV] immediate mount failed, retrying on load", p);
+ try {
+ l.addEventListener("load", d, { signal: u });
+ } catch (g) {
+ (m = console.debug) == null || m.call(console, "[MFV] pop-out page load listener failed", g);
+ }
+ }
+ l.addEventListener("beforeunload", a, { signal: u }), l.addEventListener("pagehide", a, { signal: u }), l.addEventListener("unload", a, { signal: u }), t._startPopoutCloseWatch(), t._popoutKeydownHandler = (p) => {
+ var C, _, y, S;
+ const g = String(((C = p == null ? void 0 : p.target) == null ? void 0 : C.tagName) || "").toLowerCase();
+ if (p != null && p.defaultPrevented || (_ = p == null ? void 0 : p.target) != null && _.isContentEditable || g === "input" || g === "textarea" || g === "select")
+ return;
+ if (String((p == null ? void 0 : p.key) || "").toLowerCase() === "v" && (p != null && p.ctrlKey || p != null && p.metaKey) && !(p != null && p.altKey) && !(p != null && p.shiftKey)) {
+ p.preventDefault(), (y = p.stopPropagation) == null || y.call(p), (S = p.stopImmediatePropagation) == null || S.call(p), t._dispatchControllerAction("toggle", st.MFV_TOGGLE);
+ return;
+ }
+ t._forwardKeydownToController(p);
+ }, l.addEventListener("keydown", t._popoutKeydownHandler, { signal: u });
+}
+function uo(t) {
+ var e;
+ if (t._popoutCloseTimer != null) {
+ try {
+ window.clearInterval(t._popoutCloseTimer);
+ } catch (n) {
+ (e = console.debug) == null || e.call(console, n);
+ }
+ t._popoutCloseTimer = null;
+ }
+}
+function po(t) {
+ t._clearPopoutCloseWatch(), t._popoutCloseTimer = window.setInterval(() => {
+ if (!t._isPopped) {
+ t._clearPopoutCloseWatch();
+ return;
+ }
+ const e = t._popoutWindow;
+ (!e || e.closed) && (t._clearPopoutCloseWatch(), t._schedulePopInFromPopupClose());
+ }, 250);
+}
+function mo(t) {
+ !t._isPopped || t._popoutRestoreGuard || (t._popoutRestoreGuard = !0, window.setTimeout(() => {
+ try {
+ t.popIn({ closePopupWindow: !1 });
+ } finally {
+ t._popoutRestoreGuard = !1;
+ }
+ }, 0));
+}
+function ho(t, e) {
+ var o, s, i;
+ if (!(e != null && e.head)) return;
+ try {
+ for (const r of e.head.querySelectorAll("[data-mjr-popout-cloned-style='1']"))
+ r.remove();
+ } catch (r) {
+ (o = console.debug) == null || o.call(console, r);
+ }
+ so(e);
+ try {
+ const r = document.documentElement.style.cssText;
+ if (r) {
+ const l = e.createElement("style");
+ l.setAttribute("data-mjr-popout-cloned-style", "1"), l.textContent = `:root { ${r} }`, e.head.appendChild(l);
+ }
+ } catch (r) {
+ (s = console.debug) == null || s.call(console, r);
+ }
+ for (const r of document.querySelectorAll('link[rel="stylesheet"], style'))
+ try {
+ let l = null;
+ if (r.tagName === "LINK") {
+ l = e.createElement("link");
+ for (const u of Array.from(r.attributes || []))
+ (u == null ? void 0 : u.name) !== "href" && l.setAttribute(u.name, u.value);
+ l.setAttribute("href", r.href || r.getAttribute("href") || "");
+ } else
+ l = e.importNode(r, !0);
+ l.setAttribute("data-mjr-popout-cloned-style", "1"), e.head.appendChild(l);
+ } catch (l) {
+ (i = console.debug) == null || i.call(console, l);
+ }
+ const n = e.createElement("style");
+ n.setAttribute("data-mjr-popout-cloned-style", "1"), n.textContent = `
+ html.mjr-mfv-popout-document {
+ min-height: 100%;
+ background:
+ radial-gradient(
+ 1200px 420px at 50% 0%,
+ color-mix(in srgb, var(--primary-background, var(--comfy-accent, #5fb3ff)) 10%, transparent),
+ transparent 62%
+ ),
+ linear-gradient(
+ 180deg,
+ color-mix(in srgb, var(--interface-panel-surface, var(--content-bg, #16191f)) 82%, #000 18%),
+ color-mix(in srgb, var(--interface-menu-surface, var(--comfy-menu-bg, #1f2227)) 84%, #000 16%)
+ ) !important;
+ }
+ body.mjr-mfv-popout-body {
+ margin: 0 !important;
+ display: flex !important;
+ min-height: 100vh !important;
+ overflow: hidden !important;
+ background: transparent !important;
+ }
+ #mjr-mfv-popout-root,
+ .mjr-mfv-popout-root {
+ flex: 1 !important;
+ min-width: 0 !important;
+ min-height: 0 !important;
+ display: flex !important;
+ isolation: isolate;
+ }
+ body.mjr-mfv-popout-body .mjr-mfv {
+ position: static !important;
+ width: 100% !important;
+ height: 100% !important;
+ min-width: 0 !important;
+ min-height: 0 !important;
+ resize: none !important;
+ border-radius: 0 !important;
+ display: flex !important;
+ opacity: 1 !important;
+ visibility: visible !important;
+ pointer-events: auto !important;
+ transform: none !important;
+ max-width: none !important;
+ max-height: none !important;
+ overflow: hidden !important;
+ }
+ `, e.head.appendChild(n);
+}
+function fo(t, { closePopupWindow: e = !0 } = {}) {
+ var s, i, r, l;
+ if (t._desktopExpanded) {
+ t._setDesktopExpanded(!1);
+ return;
+ }
+ if (!t._isPopped || !t.element) return;
+ const n = t._popoutWindow;
+ t._clearPopoutCloseWatch();
+ try {
+ (s = t._popoutAC) == null || s.abort();
+ } catch (u) {
+ (i = console.debug) == null || i.call(console, u);
+ }
+ t._popoutAC = null, t._popoutCloseHandler = null, t._popoutKeydownHandler = null, t._isPopped = !1;
+ let o = t.element;
+ try {
+ o = (o == null ? void 0 : o.ownerDocument) === document ? o : document.adoptNode(o);
+ } catch (u) {
+ (r = console.debug) == null || r.call(console, "[MFV] pop-in adopt failed", u);
+ }
+ if (document.body.appendChild(o), t._resetGenDropdownForCurrentDocument(), t._rebindControlHandlers(), t._bindPanelInteractions(), t._bindDocumentUiHandlers(), o.classList.add("is-visible"), o.setAttribute("aria-hidden", "false"), t.isVisible = !0, t._updatePopoutBtnUI(), e)
+ try {
+ n == null || n.close();
+ } catch (u) {
+ (l = console.debug) == null || l.call(console, u);
+ }
+ t._popoutWindow = null;
+}
+function _o(t) {
+ if (!t._popoutBtn) return;
+ const e = t._isPopped || t._desktopExpanded;
+ t.element && t.element.classList.toggle("mjr-mfv--popped", e), t._popoutBtn.classList.toggle("mjr-popin-active", e);
+ const n = t._popoutBtn.querySelector("i") || document.createElement("i"), o = e ? v("tooltip.popInViewer", "Return to floating panel") : v("tooltip.popOutViewer", "Pop out viewer to separate window");
+ n.className = e ? "pi pi-sign-in" : "pi pi-external-link", t._popoutBtn.title = o, t._popoutBtn.setAttribute("aria-label", o), t._popoutBtn.setAttribute("aria-pressed", String(e)), t._popoutBtn.contains(n) || t._popoutBtn.replaceChildren(n);
+}
+function go(t) {
+ return {
+ n: "ns-resize",
+ s: "ns-resize",
+ e: "ew-resize",
+ w: "ew-resize",
+ ne: "nesw-resize",
+ nw: "nwse-resize",
+ se: "nwse-resize",
+ sw: "nesw-resize"
+ }[t] || "";
+}
+function bo(t, e, n) {
+ if (!n) return "";
+ const o = t <= n.left + bt, s = t >= n.right - bt, i = e <= n.top + bt, r = e >= n.bottom - bt;
+ return i && o ? "nw" : i && s ? "ne" : r && o ? "sw" : r && s ? "se" : i ? "n" : r ? "s" : o ? "w" : s ? "e" : "";
+}
+function yo(t) {
+ var e, n;
+ if (t.element) {
+ if (((e = t._resizeState) == null ? void 0 : e.pointerId) != null)
+ try {
+ t.element.releasePointerCapture(t._resizeState.pointerId);
+ } catch (o) {
+ (n = console.debug) == null || n.call(console, o);
+ }
+ t._resizeState = null, t.element.classList.remove("mjr-mfv--resizing"), t.element.style.cursor = "";
+ }
+}
+function Co(t) {
+ var e, n;
+ if (t.element) {
+ t._stopEdgeResize();
+ try {
+ (e = t._panelAC) == null || e.abort();
+ } catch (o) {
+ (n = console.debug) == null || n.call(console, o);
+ }
+ t._panelAC = new AbortController(), t._initEdgeResize(t.element), t._initDrag(t.element.querySelector(".mjr-mfv-header"));
+ }
+}
+function Ao(t, e) {
+ var l;
+ if (!e) return;
+ const n = (u) => {
+ if (!t.element || t._isPopped) return "";
+ const a = t.element.getBoundingClientRect();
+ return t._getResizeDirectionFromPoint(u.clientX, u.clientY, a);
+ }, o = (l = t._panelAC) == null ? void 0 : l.signal, s = (u) => {
+ var m;
+ if (u.button !== 0 || !t.element || t._isPopped) return;
+ const a = n(u);
+ if (!a) return;
+ u.preventDefault(), u.stopPropagation();
+ const d = t.element.getBoundingClientRect(), c = window.getComputedStyle(t.element), f = Math.max(120, Number.parseFloat(c.minWidth) || 0), h = Math.max(100, Number.parseFloat(c.minHeight) || 0);
+ t._resizeState = {
+ pointerId: u.pointerId,
+ dir: a,
+ startX: u.clientX,
+ startY: u.clientY,
+ startLeft: d.left,
+ startTop: d.top,
+ startWidth: d.width,
+ startHeight: d.height,
+ minWidth: f,
+ minHeight: h
+ }, t.element.style.left = `${Math.round(d.left)}px`, t.element.style.top = `${Math.round(d.top)}px`, t.element.style.right = "auto", t.element.style.bottom = "auto", t.element.classList.add("mjr-mfv--resizing"), t.element.style.cursor = t._resizeCursorForDirection(a);
+ try {
+ t.element.setPointerCapture(u.pointerId);
+ } catch (p) {
+ (m = console.debug) == null || m.call(console, p);
+ }
+ }, i = (u) => {
+ if (!t.element || t._isPopped) return;
+ const a = t._resizeState;
+ if (!a) {
+ const g = n(u);
+ t.element.style.cursor = g ? t._resizeCursorForDirection(g) : "";
+ return;
+ }
+ if (a.pointerId !== u.pointerId) return;
+ const d = u.clientX - a.startX, c = u.clientY - a.startY;
+ let f = a.startWidth, h = a.startHeight, m = a.startLeft, p = a.startTop;
+ a.dir.includes("e") && (f = a.startWidth + d), a.dir.includes("s") && (h = a.startHeight + c), a.dir.includes("w") && (f = a.startWidth - d, m = a.startLeft + d), a.dir.includes("n") && (h = a.startHeight - c, p = a.startTop + c), f < a.minWidth && (a.dir.includes("w") && (m -= a.minWidth - f), f = a.minWidth), h < a.minHeight && (a.dir.includes("n") && (p -= a.minHeight - h), h = a.minHeight), f = Math.min(f, Math.max(a.minWidth, window.innerWidth)), h = Math.min(h, Math.max(a.minHeight, window.innerHeight)), m = Math.min(Math.max(0, m), Math.max(0, window.innerWidth - f)), p = Math.min(Math.max(0, p), Math.max(0, window.innerHeight - h)), t.element.style.width = `${Math.round(f)}px`, t.element.style.height = `${Math.round(h)}px`, t.element.style.left = `${Math.round(m)}px`, t.element.style.top = `${Math.round(p)}px`, t.element.style.right = "auto", t.element.style.bottom = "auto";
+ }, r = (u) => {
+ if (!t.element || !t._resizeState || t._resizeState.pointerId !== u.pointerId) return;
+ const a = n(u);
+ t._stopEdgeResize(), a && (t.element.style.cursor = t._resizeCursorForDirection(a));
+ };
+ e.addEventListener("pointerdown", s, { capture: !0, signal: o }), e.addEventListener("pointermove", i, { signal: o }), e.addEventListener("pointerup", r, { signal: o }), e.addEventListener("pointercancel", r, { signal: o }), e.addEventListener(
+ "pointerleave",
+ () => {
+ !t._resizeState && t.element && (t.element.style.cursor = "");
+ },
+ { signal: o }
+ );
+}
+function So(t, e) {
+ var s;
+ if (!e) return;
+ const n = (s = t._panelAC) == null ? void 0 : s.signal;
+ let o = null;
+ e.addEventListener(
+ "pointerdown",
+ (i) => {
+ if (i.button !== 0 || i.target.closest("button") || i.target.closest("select") || t._isPopped || !t.element || t._getResizeDirectionFromPoint(
+ i.clientX,
+ i.clientY,
+ t.element.getBoundingClientRect()
+ )) return;
+ i.preventDefault(), e.setPointerCapture(i.pointerId);
+ try {
+ o == null || o.abort();
+ } catch {
+ }
+ o = new AbortController();
+ const l = o.signal, u = t.element, a = u.getBoundingClientRect(), d = i.clientX - a.left, c = i.clientY - a.top, f = (m) => {
+ const p = Math.min(
+ window.innerWidth - u.offsetWidth,
+ Math.max(0, m.clientX - d)
+ ), g = Math.min(
+ window.innerHeight - u.offsetHeight,
+ Math.max(0, m.clientY - c)
+ );
+ u.style.left = `${p}px`, u.style.top = `${g}px`, u.style.right = "auto", u.style.bottom = "auto";
+ }, h = () => {
+ try {
+ o == null || o.abort();
+ } catch {
+ }
+ };
+ e.addEventListener("pointermove", f, { signal: l }), e.addEventListener("pointerup", h, { signal: l });
+ },
+ n ? { signal: n } : void 0
+ );
+}
+async function Eo(t, e, n, o, s, i, r, l) {
+ var h, m, p, g, b;
+ if (!n) return;
+ const u = X(n);
+ let a = null;
+ if (u === "video" && (a = l instanceof HTMLVideoElement ? l : ((h = t._contentEl) == null ? void 0 : h.querySelector("video")) || null), !a && u === "model3d") {
+ const C = (n == null ? void 0 : n.id) != null ? String(n.id) : "";
+ C && (a = ((p = (m = t._contentEl) == null ? void 0 : m.querySelector) == null ? void 0 : p.call(
+ m,
+ `.mjr-model3d-render-canvas[data-mjr-asset-id="${C}"]`
+ )) || null), a || (a = ((b = (g = t._contentEl) == null ? void 0 : g.querySelector) == null ? void 0 : b.call(g, ".mjr-model3d-render-canvas")) || null);
+ }
+ if (!a) {
+ const C = me(n);
+ if (!C) return;
+ a = await new Promise((_) => {
+ const y = new Image();
+ y.crossOrigin = "anonymous", y.onload = () => _(y), y.onerror = () => _(null), y.src = C;
+ });
+ }
+ if (!a) return;
+ const d = a.videoWidth || a.naturalWidth || i, c = a.videoHeight || a.naturalHeight || r;
+ if (!d || !c) return;
+ const f = Math.min(i / d, r / c);
+ e.drawImage(
+ a,
+ o + (i - d * f) / 2,
+ s + (r - c * f) / 2,
+ d * f,
+ c * f
+ );
+}
+function Mo(t, e, n, o) {
+ if (!e || !n || !t._genInfoSelections.size) return 0;
+ const s = t._getGenFields(n), i = [
+ "prompt",
+ "seed",
+ "model",
+ "lora",
+ "sampler",
+ "scheduler",
+ "cfg",
+ "step",
+ "genTime"
+ ], r = 11, l = 16, u = 8, a = Math.max(100, Number(o || 0) - u * 2);
+ let d = 0;
+ for (const c of i) {
+ if (!t._genInfoSelections.has(c)) continue;
+ const f = s[c] != null ? String(s[c]) : "";
+ if (!f) continue;
+ let h = c.charAt(0).toUpperCase() + c.slice(1);
+ c === "lora" ? h = "LoRA" : c === "cfg" ? h = "CFG" : c === "genTime" && (h = "Gen Time");
+ const m = `${h}: `;
+ e.font = `bold ${r}px system-ui, sans-serif`;
+ const p = e.measureText(m).width;
+ e.font = `${r}px system-ui, sans-serif`;
+ const g = Math.max(32, a - u * 2 - p);
+ let b = 0, C = "";
+ for (const _ of f.split(" ")) {
+ const y = C ? C + " " + _ : _;
+ e.measureText(y).width > g && C ? (b += 1, C = _) : C = y;
+ }
+ C && (b += 1), d += b;
+ }
+ return d > 0 ? d * l + u * 2 : 0;
+}
+function Bo(t, e, n, o, s, i, r) {
+ if (!n || !t._genInfoSelections.size) return;
+ const l = t._getGenFields(n), u = {
+ prompt: "#7ec8ff",
+ seed: "#ffd47a",
+ model: "#7dda8a",
+ lora: "#d48cff",
+ sampler: "#ff9f7a",
+ scheduler: "#ff7a9f",
+ cfg: "#7a9fff",
+ step: "#7affd4",
+ genTime: "#e0ff7a"
+ }, a = [
+ "prompt",
+ "seed",
+ "model",
+ "lora",
+ "sampler",
+ "scheduler",
+ "cfg",
+ "step",
+ "genTime"
+ ], d = [];
+ for (const S of a) {
+ if (!t._genInfoSelections.has(S)) continue;
+ const x = l[S] != null ? String(l[S]) : "";
+ if (!x) continue;
+ let B = S.charAt(0).toUpperCase() + S.slice(1);
+ S === "lora" ? B = "LoRA" : S === "cfg" ? B = "CFG" : S === "genTime" && (B = "Gen Time"), d.push({
+ label: `${B}: `,
+ value: x,
+ color: u[S] || "#ffffff"
+ });
+ }
+ if (!d.length) return;
+ const c = 11, f = 16, h = 8, m = Math.max(100, i - h * 2);
+ e.save();
+ const p = [];
+ for (const { label: S, value: x, color: B } of d) {
+ e.font = `bold ${c}px system-ui, sans-serif`;
+ const F = e.measureText(S).width;
+ e.font = `${c}px system-ui, sans-serif`;
+ const P = m - h * 2 - F, L = [];
+ let I = "";
+ for (const V of x.split(" ")) {
+ const U = I ? I + " " + V : V;
+ e.measureText(U).width > P && I ? (L.push(I), I = V) : I = U;
+ }
+ I && L.push(I), p.push({ label: S, labelW: F, lines: L, color: B });
+ }
+ const b = p.reduce((S, x) => S + x.lines.length, 0) * f + h * 2, C = o + h, _ = s + r - b - h;
+ e.globalAlpha = 0.72, e.fillStyle = "#000", he(e, C, _, m, b, 6), e.fill(), e.globalAlpha = 1;
+ let y = _ + h + c;
+ for (const { label: S, labelW: x, lines: B, color: F } of p)
+ for (let P = 0; P < B.length; P++)
+ P === 0 ? (e.font = `bold ${c}px system-ui, sans-serif`, e.fillStyle = F, e.fillText(S, C + h, y), e.font = `${c}px system-ui, sans-serif`, e.fillStyle = "rgba(255,255,255,0.88)", e.fillText(B[P], C + h + x, y)) : (e.font = `${c}px system-ui, sans-serif`, e.fillStyle = "rgba(255,255,255,0.88)", e.fillText(B[P], C + h + x, y)), y += f;
+ e.restore();
+}
+async function No(t) {
+ var u;
+ if (!t._contentEl) return;
+ t._captureBtn && (t._captureBtn.disabled = !0, t._captureBtn.setAttribute("aria-label", v("tooltip.capturingView", "Capturing…")));
+ const e = t._contentEl.clientWidth || 480, n = t._contentEl.clientHeight || 360;
+ let o = n;
+ if (t._mode === T.SIMPLE && t._mediaA && t._genInfoSelections.size) {
+ const a = document.createElement("canvas");
+ a.width = e, a.height = n;
+ const d = a.getContext("2d"), c = t._estimateGenInfoOverlayHeight(d, t._mediaA, e);
+ if (c > 0) {
+ const f = Math.max(n, c + 24);
+ o = Math.min(f, n * 4);
+ }
+ }
+ const s = document.createElement("canvas");
+ s.width = e, s.height = o;
+ const i = s.getContext("2d");
+ i.fillStyle = "#0d0d0d", i.fillRect(0, 0, e, o);
+ try {
+ if (t._mode === T.SIMPLE)
+ t._mediaA && (await t._drawMediaFit(i, t._mediaA, 0, 0, e, n), t._drawGenInfoOverlay(i, t._mediaA, 0, 0, e, o));
+ else if (t._mode === T.AB) {
+ const a = Math.round(t._abDividerX * e), d = t._contentEl.querySelector(
+ ".mjr-mfv-ab-layer:not(.mjr-mfv-ab-layer--b) video"
+ ), c = t._contentEl.querySelector(".mjr-mfv-ab-layer--b video");
+ t._mediaA && await t._drawMediaFit(i, t._mediaA, 0, 0, e, o, d), t._mediaB && (i.save(), i.beginPath(), i.rect(a, 0, e - a, o), i.clip(), await t._drawMediaFit(i, t._mediaB, 0, 0, e, o, c), i.restore()), i.save(), i.strokeStyle = "rgba(255,255,255,0.88)", i.lineWidth = 2, i.beginPath(), i.moveTo(a, 0), i.lineTo(a, o), i.stroke(), i.restore(), ut(i, "A", 8, 8), ut(i, "B", a + 8, 8), t._mediaA && t._drawGenInfoOverlay(i, t._mediaA, 0, 0, a, o), t._mediaB && t._drawGenInfoOverlay(i, t._mediaB, a, 0, e - a, o);
+ } else if (t._mode === T.SIDE) {
+ const a = Math.floor(e / 2), d = t._contentEl.querySelector(".mjr-mfv-side-panel:first-child video"), c = t._contentEl.querySelector(".mjr-mfv-side-panel:last-child video");
+ t._mediaA && (await t._drawMediaFit(i, t._mediaA, 0, 0, a, o, d), t._drawGenInfoOverlay(i, t._mediaA, 0, 0, a, o)), i.fillStyle = "#111", i.fillRect(a, 0, 2, o), t._mediaB && (await t._drawMediaFit(i, t._mediaB, a, 0, a, o, c), t._drawGenInfoOverlay(i, t._mediaB, a, 0, a, o)), ut(i, "A", 8, 8), ut(i, "B", a + 8, 8);
+ } else if (t._mode === T.GRID) {
+ const a = Math.floor(e / 2), d = Math.floor(o / 2), c = 1, f = [
+ { media: t._mediaA, label: "A", x: 0, y: 0, w: a - c, h: d - c },
+ {
+ media: t._mediaB,
+ label: "B",
+ x: a + c,
+ y: 0,
+ w: a - c,
+ h: d - c
+ },
+ {
+ media: t._mediaC,
+ label: "C",
+ x: 0,
+ y: d + c,
+ w: a - c,
+ h: d - c
+ },
+ {
+ media: t._mediaD,
+ label: "D",
+ x: a + c,
+ y: d + c,
+ w: a - c,
+ h: d - c
+ }
+ ], h = t._contentEl.querySelectorAll(".mjr-mfv-grid-cell");
+ for (let m = 0; m < f.length; m++) {
+ const p = f[m], g = ((u = h[m]) == null ? void 0 : u.querySelector("video")) || null;
+ p.media && (await t._drawMediaFit(i, p.media, p.x, p.y, p.w, p.h, g), t._drawGenInfoOverlay(i, p.media, p.x, p.y, p.w, p.h)), ut(i, p.label, p.x + 8, p.y + 8);
+ }
+ i.save(), i.fillStyle = "#111", i.fillRect(a - c, 0, c * 2, o), i.fillRect(0, d - c, e, c * 2), i.restore();
+ }
+ } catch (a) {
+ console.debug("[MFV] capture error:", a);
+ }
+ const l = `${{
+ [T.AB]: "mfv-ab",
+ [T.SIDE]: "mfv-side",
+ [T.GRID]: "mfv-grid"
+ }[t._mode] ?? "mfv"}-${Date.now()}.png`;
+ try {
+ const a = s.toDataURL("image/png"), d = document.createElement("a");
+ d.href = a, d.download = l, document.body.appendChild(d), d.click(), setTimeout(() => document.body.removeChild(d), 100);
+ } catch (a) {
+ console.warn("[MFV] download failed:", a);
+ } finally {
+ t._captureBtn && (t._captureBtn.disabled = !1, t._captureBtn.setAttribute("aria-label", v("tooltip.captureView", "Save view as image")));
+ }
+}
+function xo(t, e, { autoMode: n = !1 } = {}) {
+ if (t._mediaA = e || null, t._resetMfvZoom(), n && t._mode !== T.SIMPLE && (t._mode = T.SIMPLE, t._updateModeBtnUI()), t._mediaA && typeof Ct == "function") {
+ const o = ++t._refreshGen;
+ (async () => {
+ var s;
+ try {
+ const i = await Ct(t._mediaA, {
+ getAssetMetadata: Ft,
+ getFileMetadataScoped: Lt
+ });
+ if (t._refreshGen !== o) return;
+ i && typeof i == "object" && (t._mediaA = i, t._refresh());
+ } catch (i) {
+ (s = console.debug) == null || s.call(console, "[MFV] metadata enrich error", i);
+ }
+ })();
+ } else
+ t._refresh();
+}
+function Po(t, e, n) {
+ t._mediaA = e || null, t._mediaB = n || null, t._resetMfvZoom(), t._mode === T.SIMPLE && (t._mode = T.AB, t._updateModeBtnUI());
+ const o = ++t._refreshGen, s = async (i) => {
+ if (!i) return i;
+ try {
+ return await Ct(i, {
+ getAssetMetadata: Ft,
+ getFileMetadataScoped: Lt
+ }) || i;
+ } catch {
+ return i;
+ }
+ };
+ (async () => {
+ const [i, r] = await Promise.all([s(t._mediaA), s(t._mediaB)]);
+ t._refreshGen === o && (t._mediaA = i || null, t._mediaB = r || null, t._refresh());
+ })();
+}
+function Lo(t, e, n, o, s) {
+ t._mediaA = e || null, t._mediaB = n || null, t._mediaC = o || null, t._mediaD = s || null, t._resetMfvZoom(), t._mode !== T.GRID && (t._mode = T.GRID, t._updateModeBtnUI());
+ const i = ++t._refreshGen, r = async (l) => {
+ if (!l) return l;
+ try {
+ return await Ct(l, {
+ getAssetMetadata: Ft,
+ getFileMetadataScoped: Lt
+ }) || l;
+ } catch {
+ return l;
+ }
+ };
+ (async () => {
+ const [l, u, a, d] = await Promise.all([
+ r(t._mediaA),
+ r(t._mediaB),
+ r(t._mediaC),
+ r(t._mediaD)
+ ]);
+ t._refreshGen === i && (t._mediaA = l || null, t._mediaB = u || null, t._mediaC = a || null, t._mediaD = d || null, t._refresh());
+ })();
+}
+function ot(t) {
+ var e, n, o, s;
+ try {
+ return !!((e = t == null ? void 0 : t.classList) != null && e.contains("mjr-mfv-simple-player")) || !!((n = t == null ? void 0 : t.classList) != null && n.contains("mjr-mfv-player-host")) || !!((o = t == null ? void 0 : t.querySelector) != null && o.call(t, ".mjr-video-controls, .mjr-mfv-simple-player-controls"));
+ } catch (i) {
+ return (s = console.debug) == null || s.call(console, i), !1;
+ }
+}
+let Fo = 0;
+class ko {
+ constructor({ controller: e = null } = {}) {
+ this._instanceId = ++Fo, this._controller = e && typeof e == "object" ? { ...e } : null, this.element = null, this.isVisible = !1, this._contentEl = null, this._closeBtn = null, this._modeBtn = null, this._pinGroup = null, this._pinBtns = null, this._liveBtn = null, this._genBtn = null, this._genDropdown = null, this._captureBtn = null, this._genInfoSelections = /* @__PURE__ */ new Set(["genTime"]), this._mode = T.SIMPLE, this._mediaA = null, this._mediaB = null, this._mediaC = null, this._mediaD = null, this._pinnedSlots = /* @__PURE__ */ new Set(), this._abDividerX = 0.5, this._zoom = 1, this._panX = 0, this._panY = 0, this._panzoomAC = null, this._dragging = !1, this._compareSyncAC = null, this._btnAC = null, this._refreshGen = 0, this._popoutWindow = null, this._popoutBtn = null, this._isPopped = !1, this._desktopExpanded = !1, this._desktopExpandRestore = null, this._desktopPopoutUnsupported = !1, this._popoutCloseHandler = null, this._popoutKeydownHandler = null, this._popoutCloseTimer = null, this._popoutRestoreGuard = !1, this._previewBtn = null, this._previewBlobUrl = null, this._previewActive = !1, this._nodeStreamBtn = null, this._nodeStreamActive = !1, this._docAC = new AbortController(), this._popoutAC = null, this._panelAC = new AbortController(), this._resizeState = null, this._titleId = `mjr-mfv-title-${this._instanceId}`, this._genDropdownId = `mjr-mfv-gen-dropdown-${this._instanceId}`, this._progressEl = null, this._progressNodesEl = null, this._progressStepsEl = null, this._progressTextEl = null, this._mediaProgressEl = null, this._mediaProgressTextEl = null, this._progressUpdateHandler = null, this._progressCurrentNodeId = null, this._docClickHost = null, this._handleDocClick = null, this._mediaControlHandles = [], this._layoutObserver = null, this._channel = "rgb", this._exposureEV = 0, this._gridMode = 0, this._overlayMaskEnabled = !1, this._overlayMaskOpacity = 0.65, this._overlayFormat = "image";
+ }
+ _dispatchControllerAction(e, n) {
+ var o, s, i;
+ try {
+ const r = (o = this._controller) == null ? void 0 : o[e];
+ if (typeof r == "function")
+ return r();
+ } catch (r) {
+ (s = console.debug) == null || s.call(console, r);
+ }
+ if (n)
+ try {
+ window.dispatchEvent(new Event(n));
+ } catch (r) {
+ (i = console.debug) == null || i.call(console, r);
+ }
+ }
+ _forwardKeydownToController(e) {
+ var n, o, s;
+ try {
+ const i = (n = this._controller) == null ? void 0 : n.handleForwardedKeydown;
+ if (typeof i == "function") {
+ i(e);
+ return;
+ }
+ } catch (i) {
+ (o = console.debug) == null || o.call(console, i);
+ }
+ try {
+ window.dispatchEvent(
+ new KeyboardEvent("keydown", {
+ key: e == null ? void 0 : e.key,
+ code: e == null ? void 0 : e.code,
+ keyCode: e == null ? void 0 : e.keyCode,
+ ctrlKey: e == null ? void 0 : e.ctrlKey,
+ shiftKey: e == null ? void 0 : e.shiftKey,
+ altKey: e == null ? void 0 : e.altKey,
+ metaKey: e == null ? void 0 : e.metaKey
+ })
+ );
+ } catch (i) {
+ (s = console.debug) == null || s.call(console, i);
+ }
+ }
+ // ── Build DOM ─────────────────────────────────────────────────────────────
+ render() {
+ return Pn(this);
+ }
+ _buildHeader() {
+ return Ln(this);
+ }
+ _buildToolbar() {
+ return Fn(this);
+ }
+ _rebindControlHandlers() {
+ return In(this);
+ }
+ _updateSettingsBtnState(e) {
+ return Tn(this, e);
+ }
+ _applySidebarPosition() {
+ return kn(this);
+ }
+ refreshSidebar() {
+ var e;
+ (e = this._sidebar) == null || e.refresh();
+ }
+ _resetGenDropdownForCurrentDocument() {
+ return jn(this);
+ }
+ _bindDocumentUiHandlers() {
+ return Gn(this);
+ }
+ _unbindDocumentUiHandlers() {
+ return Vn(this);
+ }
+ _isGenDropdownOpen() {
+ return Rn(this);
+ }
+ _openGenDropdown() {
+ return On(this);
+ }
+ _closeGenDropdown() {
+ return Hn(this);
+ }
+ _updateGenBtnUI() {
+ return Dn(this);
+ }
+ _buildGenDropdown() {
+ return vn(this);
+ }
+ _getGenFields(e) {
+ return zn(this, e);
+ }
+ _buildGenInfoDOM(e) {
+ return Wn(this, e);
+ }
+ _notifyModeChanged() {
+ return Yn(this);
+ }
+ _cycleMode() {
+ return Qn(this);
+ }
+ setMode(e) {
+ return qn(this, e);
+ }
+ getPinnedSlots() {
+ return Xn(this);
+ }
+ _updatePinUI() {
+ return Zn(this);
+ }
+ _updateModeBtnUI() {
+ return Kn(this);
+ }
+ setLiveActive(e) {
+ return Jn(this, e);
+ }
+ setPreviewActive(e) {
+ return wn(this, e);
+ }
+ loadPreviewBlob(e, n = {}) {
+ return $n(this, e, n);
+ }
+ _revokePreviewBlob() {
+ return to(this);
+ }
+ setNodeStreamActive(e) {
+ return eo(this);
+ }
+ loadMediaA(e, { autoMode: n = !1 } = {}) {
+ return xo(this, e, { autoMode: n });
+ }
+ /**
+ * Load two assets for compare modes.
+ * Auto-switches from SIMPLE → AB on first call.
+ */
+ loadMediaPair(e, n) {
+ return Po(this, e, n);
+ }
+ /**
+ * Load up to 4 assets for grid compare mode.
+ * Auto-switches to GRID mode if not already.
+ */
+ loadMediaQuad(e, n, o, s) {
+ return Lo(this, e, n, o, s);
+ }
+ /** Apply current zoom+pan state to all media elements (img/video only — divider/overlays unaffected). */
+ _applyTransform() {
+ if (!this._contentEl) return;
+ const e = Math.max(Mt, Math.min(Bt, this._zoom)), n = this._contentEl.clientWidth || 0, o = this._contentEl.clientHeight || 0, s = Math.max(0, (e - 1) * n / 2), i = Math.max(0, (e - 1) * o / 2);
+ this._panX = Math.max(-s, Math.min(s, this._panX)), this._panY = Math.max(-i, Math.min(i, this._panY));
+ const r = `translate(${this._panX}px,${this._panY}px) scale(${e})`;
+ for (const l of this._contentEl.querySelectorAll(".mjr-mfv-media"))
+ l != null && l._mjrDisableViewerTransform || (l.style.transform = r, l.style.transformOrigin = "center");
+ this._contentEl.classList.remove("mjr-mfv-content--grab", "mjr-mfv-content--grabbing"), e > 1.01 && this._contentEl.classList.add(
+ this._dragging ? "mjr-mfv-content--grabbing" : "mjr-mfv-content--grab"
+ ), this._applyMediaToneControls(), this._redrawOverlayGuides();
+ }
+ _ensureToneFilterDefs() {
+ var i, r;
+ if ((i = this._toneFilterDefsEl) != null && i.isConnected) return this._toneFilterDefsEl;
+ const e = "http://www.w3.org/2000/svg", n = document.createElementNS(e, "svg");
+ n.setAttribute("aria-hidden", "true"), n.style.position = "absolute", n.style.width = "0", n.style.height = "0", n.style.pointerEvents = "none";
+ const o = document.createElementNS(e, "defs"), s = [
+ ["mjr-mfv-ch-r", "1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0"],
+ ["mjr-mfv-ch-g", "0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0"],
+ ["mjr-mfv-ch-b", "0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0"],
+ ["mjr-mfv-ch-a", "0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0"],
+ ["mjr-mfv-ch-l", "0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0"]
+ ];
+ for (const [l, u] of s) {
+ const a = document.createElementNS(e, "filter");
+ a.setAttribute("id", l);
+ const d = document.createElementNS(e, "feColorMatrix");
+ d.setAttribute("type", "matrix"), d.setAttribute("values", u), a.appendChild(d), o.appendChild(a);
+ }
+ return n.appendChild(o), (r = this.element) == null || r.appendChild(n), this._toneFilterDefsEl = n, n;
+ }
+ _applyMediaToneControls() {
+ var l, u, a;
+ if (this._ensureToneFilterDefs(), !this._contentEl) return;
+ const e = String(this._channel || "rgb"), n = Math.pow(2, Number(this._exposureEV) || 0), o = e === "rgb" ? "" : `url(#mjr-mfv-ch-${e})`, s = Math.abs(n - 1) < 1e-4 ? "" : `brightness(${n})`, i = [o, s].filter(Boolean).join(" ").trim(), r = ((u = (l = this._contentEl).querySelectorAll) == null ? void 0 : u.call(l, ".mjr-mfv-media")) || [];
+ for (const d of r)
+ try {
+ d.style.filter = i || "";
+ } catch (c) {
+ (a = console.debug) == null || a.call(console, c);
+ }
+ }
+ _getOverlayAspect(e, n, o) {
+ var s;
+ try {
+ const i = String(e || "image");
+ if (i === "image") {
+ const r = Number(n == null ? void 0 : n.videoWidth) || Number(n == null ? void 0 : n.naturalWidth) || Number(o == null ? void 0 : o.width) || 1, l = Number(n == null ? void 0 : n.videoHeight) || Number(n == null ? void 0 : n.naturalHeight) || Number(o == null ? void 0 : o.height) || 1, u = r / l;
+ return Number.isFinite(u) && u > 0 ? u : 1;
+ }
+ if (i === "16:9") return 16 / 9;
+ if (i === "9:16") return 9 / 16;
+ if (i === "1:1") return 1;
+ if (i === "4:3") return 4 / 3;
+ if (i === "2.39") return 2.39;
+ } catch (i) {
+ (s = console.debug) == null || s.call(console, i);
+ }
+ return 1;
+ }
+ _fitAspectInBox(e, n, o) {
+ var s;
+ try {
+ const i = Number(e) || 0, r = Number(n) || 0, l = Number(o) || 1;
+ if (!(i > 0 && r > 0 && l > 0)) return { x: 0, y: 0, w: i, h: r };
+ const u = i / r;
+ let a = i, d = r;
+ return l >= u ? d = i / l : a = r * l, { x: (i - a) / 2, y: (r - d) / 2, w: a, h: d };
+ } catch (i) {
+ return (s = console.debug) == null || s.call(console, i), { x: 0, y: 0, w: Number(e) || 0, h: Number(n) || 0 };
+ }
+ }
+ _drawMaskOutside(e, n, o, s) {
+ var i;
+ try {
+ const r = Math.max(0, Math.min(0.92, Number(s) || 0));
+ if (!(r > 0)) return;
+ e.save(), e.fillStyle = `rgba(0,0,0,${r})`, e.fillRect(0, 0, n.width, n.height), e.globalCompositeOperation = "destination-out";
+ for (const l of o)
+ !l || !(l.w > 1 && l.h > 1) || e.fillRect(l.x, l.y, l.w, l.h);
+ e.restore();
+ } catch (r) {
+ (i = console.debug) == null || i.call(console, r);
+ }
+ }
+ _redrawOverlayGuides() {
+ var h, m, p, g, b, C;
+ const e = this._overlayCanvas, n = this._contentEl;
+ if (!e || !n) return;
+ const o = (h = e.getContext) == null ? void 0 : h.call(e, "2d");
+ if (!o) return;
+ const s = Math.max(1, Math.min(3, Number(window.devicePixelRatio) || 1)), i = n.clientWidth || 0, r = n.clientHeight || 0;
+ if (e.width = Math.max(1, Math.floor(i * s)), e.height = Math.max(1, Math.floor(r * s)), e.style.width = `${i}px`, e.style.height = `${r}px`, o.clearRect(0, 0, e.width, e.height), !(this._gridMode || this._overlayMaskEnabled)) return;
+ const l = (m = n.getBoundingClientRect) == null ? void 0 : m.call(n);
+ if (!l) return;
+ const u = Array.from(
+ ((p = n.querySelectorAll) == null ? void 0 : p.call(
+ n,
+ ".mjr-mfv-simple-container, .mjr-mfv-side-panel, .mjr-mfv-grid-cell, .mjr-mfv-ab-layer"
+ )) || []
+ ), a = u.length ? u : [n], d = [];
+ for (const _ of a) {
+ const y = (g = _.querySelector) == null ? void 0 : g.call(_, ".mjr-mfv-media");
+ if (!y) continue;
+ const S = (b = _.getBoundingClientRect) == null ? void 0 : b.call(_);
+ if (!(S != null && S.width) || !(S != null && S.height)) continue;
+ const x = Number(S.width) || 0, B = Number(S.height) || 0, F = this._getOverlayAspect(this._overlayFormat, y, S), P = this._fitAspectInBox(x, B, F), L = S.left - l.left + x / 2, I = S.top - l.top + B / 2, V = Math.max(0.1, Math.min(16, Number(this._zoom) || 1)), U = {
+ x: L + P.x * V - x * V / 2 + (Number(this._panX) || 0),
+ y: I + P.y * V - B * V / 2 + (Number(this._panY) || 0),
+ w: P.w * V,
+ h: P.h * V
+ };
+ d.push({
+ x: U.x * s,
+ y: U.y * s,
+ w: U.w * s,
+ h: U.h * s
+ });
+ }
+ if (!d.length) return;
+ if (this._overlayMaskEnabled) {
+ this._drawMaskOutside(o, e, d, this._overlayMaskOpacity), o.save(), (C = o.setLineDash) == null || C.call(o, [Math.max(2, 4 * s), Math.max(2, 3 * s)]), o.strokeStyle = "rgba(255,255,255,0.22)", o.lineWidth = Math.max(1, Math.floor(s));
+ for (const _ of d)
+ o.strokeRect(_.x + 0.5, _.y + 0.5, _.w - 1, _.h - 1);
+ o.restore();
+ }
+ if (this._mode !== T.SIMPLE || !this._gridMode) return;
+ const c = d[0];
+ if (!c) return;
+ o.save(), o.translate(c.x, c.y), o.strokeStyle = "rgba(255,255,255,0.22)", o.lineWidth = Math.max(2, Math.round(1.25 * s));
+ const f = (_, y, S, x) => {
+ o.beginPath(), o.moveTo(Math.round(_) + 0.5, Math.round(y) + 0.5), o.lineTo(Math.round(S) + 0.5, Math.round(x) + 0.5), o.stroke();
+ };
+ this._gridMode === 1 ? (f(c.w / 3, 0, c.w / 3, c.h), f(2 * c.w / 3, 0, 2 * c.w / 3, c.h), f(0, c.h / 3, c.w, c.h / 3), f(0, 2 * c.h / 3, c.w, 2 * c.h / 3)) : this._gridMode === 2 ? (f(c.w / 2, 0, c.w / 2, c.h), f(0, c.h / 2, c.w, c.h / 2)) : this._gridMode === 3 && (o.strokeRect(c.w * 0.1 + 0.5, c.h * 0.1 + 0.5, c.w * 0.8 - 1, c.h * 0.8 - 1), o.strokeRect(c.w * 0.05 + 0.5, c.h * 0.05 + 0.5, c.w * 0.9 - 1, c.h * 0.9 - 1)), o.restore();
+ }
+ /**
+ * Set zoom, optionally centered at (clientX, clientY).
+ * Keeps the image point under the cursor stationary.
+ */
+ _setMfvZoom(e, n, o) {
+ const s = Math.max(Mt, Math.min(Bt, this._zoom)), i = Math.max(Mt, Math.min(Bt, Number(e) || 1));
+ if (n != null && o != null && this._contentEl) {
+ const r = i / s, l = this._contentEl.getBoundingClientRect(), u = n - (l.left + l.width / 2), a = o - (l.top + l.height / 2);
+ this._panX = this._panX * r + (1 - r) * u, this._panY = this._panY * r + (1 - r) * a;
+ }
+ this._zoom = i, Math.abs(i - 1) < 1e-3 && (this._zoom = 1, this._panX = 0, this._panY = 0), this._applyTransform();
+ }
+ /** Reset zoom and pan to the default 1:1 fit. Called when new media is loaded. */
+ _resetMfvZoom() {
+ this._zoom = 1, this._panX = 0, this._panY = 0, this._applyTransform();
+ }
+ _bindLayoutObserver() {
+ var n;
+ this._unbindLayoutObserver();
+ const e = this._contentEl;
+ if (!(!e || typeof ResizeObserver > "u"))
+ try {
+ this._layoutObserver = new ResizeObserver(() => {
+ this._applyTransform();
+ }), this._layoutObserver.observe(e);
+ } catch (o) {
+ (n = console.debug) == null || n.call(console, o), this._layoutObserver = null;
+ }
+ }
+ _unbindLayoutObserver() {
+ var e, n, o;
+ try {
+ (n = (e = this._layoutObserver) == null ? void 0 : e.disconnect) == null || n.call(e);
+ } catch (s) {
+ (o = console.debug) == null || o.call(console, s);
+ }
+ this._layoutObserver = null;
+ }
+ /** Bind wheel + pointer events to the clip viewport element. */
+ _initPanZoom(e) {
+ if (this._destroyPanZoom(), !e) return;
+ this._panzoomAC = new AbortController();
+ const n = { signal: this._panzoomAC.signal };
+ e.addEventListener(
+ "wheel",
+ (a) => {
+ var h, m, p, g;
+ if ((m = (h = a.target) == null ? void 0 : h.closest) != null && m.call(h, "audio") || (g = (p = a.target) == null ? void 0 : p.closest) != null && g.call(p, ".mjr-video-controls, .mjr-mfv-simple-player-controls") || Et(a.target)) return;
+ const d = qe(a.target, e);
+ if (d && Xe(
+ d,
+ Number(a.deltaX || 0),
+ Number(a.deltaY || 0)
+ ))
+ return;
+ a.preventDefault();
+ const f = 1 - (a.deltaY || a.deltaX || 0) * ke;
+ this._setMfvZoom(this._zoom * f, a.clientX, a.clientY);
+ },
+ { ...n, passive: !1 }
+ );
+ let o = !1, s = 0, i = 0, r = 0, l = 0;
+ e.addEventListener(
+ "pointerdown",
+ (a) => {
+ var d, c, f, h, m, p, g, b, C;
+ if (!(a.button !== 0 && a.button !== 1) && !(this._zoom <= 1.01) && !((c = (d = a.target) == null ? void 0 : d.closest) != null && c.call(d, "video")) && !((h = (f = a.target) == null ? void 0 : f.closest) != null && h.call(f, "audio")) && !((p = (m = a.target) == null ? void 0 : m.closest) != null && p.call(m, ".mjr-video-controls, .mjr-mfv-simple-player-controls")) && !((b = (g = a.target) == null ? void 0 : g.closest) != null && b.call(g, ".mjr-mfv-ab-divider")) && !Et(a.target)) {
+ a.preventDefault(), o = !0, this._dragging = !0, s = a.clientX, i = a.clientY, r = this._panX, l = this._panY;
+ try {
+ e.setPointerCapture(a.pointerId);
+ } catch (_) {
+ (C = console.debug) == null || C.call(console, _);
+ }
+ this._applyTransform();
+ }
+ },
+ n
+ ), e.addEventListener(
+ "pointermove",
+ (a) => {
+ o && (this._panX = r + (a.clientX - s), this._panY = l + (a.clientY - i), this._applyTransform());
+ },
+ n
+ );
+ const u = (a) => {
+ var d;
+ if (o) {
+ o = !1, this._dragging = !1;
+ try {
+ e.releasePointerCapture(a.pointerId);
+ } catch (c) {
+ (d = console.debug) == null || d.call(console, c);
+ }
+ this._applyTransform();
+ }
+ };
+ e.addEventListener("pointerup", u, n), e.addEventListener("pointercancel", u, n), e.addEventListener(
+ "dblclick",
+ (a) => {
+ var c, f, h, m, p, g;
+ if ((f = (c = a.target) == null ? void 0 : c.closest) != null && f.call(c, "video") || (m = (h = a.target) == null ? void 0 : h.closest) != null && m.call(h, "audio") || (g = (p = a.target) == null ? void 0 : p.closest) != null && g.call(p, ".mjr-video-controls, .mjr-mfv-simple-player-controls") || Et(a.target)) return;
+ const d = Math.abs(this._zoom - 1) < 0.05;
+ this._setMfvZoom(d ? Math.min(4, this._zoom * 4) : 1, a.clientX, a.clientY);
+ },
+ n
+ );
+ }
+ /** Remove all pan/zoom event listeners. */
+ _destroyPanZoom() {
+ var e, n;
+ try {
+ (e = this._panzoomAC) == null || e.abort();
+ } catch (o) {
+ (n = console.debug) == null || n.call(console, o);
+ }
+ this._panzoomAC = null, this._dragging = !1;
+ }
+ _destroyCompareSync() {
+ var e, n, o;
+ try {
+ (n = (e = this._compareSyncAC) == null ? void 0 : e.abort) == null || n.call(e);
+ } catch (s) {
+ (o = console.debug) == null || o.call(console, s);
+ }
+ this._compareSyncAC = null;
+ }
+ _destroyMediaControls() {
+ var n, o;
+ const e = Array.isArray(this._mediaControlHandles) ? this._mediaControlHandles : [];
+ for (const s of e)
+ try {
+ (n = s == null ? void 0 : s.destroy) == null || n.call(s);
+ } catch (i) {
+ (o = console.debug) == null || o.call(console, i);
+ }
+ this._mediaControlHandles = [];
+ }
+ _trackMediaControls(e) {
+ var n;
+ try {
+ const o = (e == null ? void 0 : e._mjrMediaControlsHandle) || null;
+ o != null && o.destroy && this._mediaControlHandles.push(o);
+ } catch (o) {
+ (n = console.debug) == null || n.call(console, o);
+ }
+ return e;
+ }
+ _initCompareSync() {
+ var e;
+ if (this._destroyCompareSync(), !!this._contentEl && this._mode !== T.SIMPLE)
+ try {
+ const n = Array.from(this._contentEl.querySelectorAll("video, audio"));
+ if (n.length < 2) return;
+ const o = n[0] || null, s = n.slice(1);
+ if (!o || !s.length) return;
+ this._compareSyncAC = Ie(o, s, { threshold: 0.08 });
+ } catch (n) {
+ (e = console.debug) == null || e.call(console, n);
+ }
+ }
+ // ── Render ────────────────────────────────────────────────────────────────
+ _refresh() {
+ if (!this._contentEl) return;
+ this._destroyPanZoom(), this._destroyCompareSync(), this._destroyMediaControls();
+ const e = this._overlayCanvas || null;
+ switch (this._contentEl.replaceChildren(), this._contentEl.style.overflow = "hidden", this._mode) {
+ case T.SIMPLE:
+ this._renderSimple();
+ break;
+ case T.AB:
+ this._renderAB();
+ break;
+ case T.SIDE:
+ this._renderSide();
+ break;
+ case T.GRID:
+ this._renderGrid();
+ break;
+ }
+ e && this._contentEl.appendChild(e), this._mediaProgressEl && this._contentEl.appendChild(this._mediaProgressEl), this._applyMediaToneControls(), this._applyTransform(), this._initPanZoom(this._contentEl), this._initCompareSync();
+ }
+ _renderSimple() {
+ var i;
+ if (!this._mediaA) {
+ this._contentEl.appendChild(Q());
+ return;
+ }
+ const e = X(this._mediaA), n = nt(this._mediaA), o = ((i = this._trackMediaControls) == null ? void 0 : i.call(this, n)) || n;
+ if (!o) {
+ this._contentEl.appendChild(Q("Could not load media"));
+ return;
+ }
+ const s = document.createElement("div");
+ if (s.className = "mjr-mfv-simple-container", s.appendChild(o), e !== "audio") {
+ const r = this._buildGenInfoDOM(this._mediaA);
+ if (r) {
+ const l = document.createElement("div");
+ l.className = "mjr-mfv-geninfo", ot(o) && l.classList.add("mjr-mfv-geninfo--above-player"), l.appendChild(r), s.appendChild(l);
+ }
+ }
+ this._contentEl.appendChild(s);
+ }
+ _renderAB() {
+ var b, C, _;
+ const e = this._mediaA ? nt(this._mediaA, { fill: !0 }) : null, n = this._mediaB ? nt(this._mediaB, { fill: !0 }) : null, o = ((b = this._trackMediaControls) == null ? void 0 : b.call(this, e)) || e, s = ((C = this._trackMediaControls) == null ? void 0 : C.call(this, n)) || n, i = this._mediaA ? X(this._mediaA) : "", r = this._mediaB ? X(this._mediaB) : "";
+ if (!o && !s) {
+ this._contentEl.appendChild(Q("Select 2 assets for A/B compare"));
+ return;
+ }
+ if (!s) {
+ this._renderSimple();
+ return;
+ }
+ if (i === "audio" || r === "audio" || i === "model3d" || r === "model3d") {
+ this._renderSide();
+ return;
+ }
+ const l = document.createElement("div");
+ l.className = "mjr-mfv-ab-container";
+ const u = document.createElement("div");
+ u.className = "mjr-mfv-ab-layer", o && u.appendChild(o);
+ const a = document.createElement("div");
+ a.className = "mjr-mfv-ab-layer mjr-mfv-ab-layer--b";
+ const d = Math.round(this._abDividerX * 100);
+ a.style.clipPath = `inset(0 0 0 ${d}%)`, a.appendChild(s);
+ const c = document.createElement("div");
+ c.className = "mjr-mfv-ab-divider", c.style.left = `${d}%`;
+ const f = this._buildGenInfoDOM(this._mediaA);
+ let h = null;
+ f && (h = document.createElement("div"), h.className = "mjr-mfv-geninfo-a", ot(o) && h.classList.add("mjr-mfv-geninfo--above-player"), h.appendChild(f), h.style.right = `calc(${100 - d}% + 8px)`);
+ const m = this._buildGenInfoDOM(this._mediaB);
+ let p = null;
+ m && (p = document.createElement("div"), p.className = "mjr-mfv-geninfo-b", ot(s) && p.classList.add("mjr-mfv-geninfo--above-player"), p.appendChild(m), p.style.left = `calc(${d}% + 8px)`);
+ let g = null;
+ c.addEventListener(
+ "pointerdown",
+ (y) => {
+ y.preventDefault(), c.setPointerCapture(y.pointerId);
+ try {
+ g == null || g.abort();
+ } catch {
+ }
+ g = new AbortController();
+ const S = g.signal, x = l.getBoundingClientRect(), B = (P) => {
+ const L = Math.max(0.02, Math.min(0.98, (P.clientX - x.left) / x.width));
+ this._abDividerX = L;
+ const I = Math.round(L * 100);
+ a.style.clipPath = `inset(0 0 0 ${I}%)`, c.style.left = `${I}%`, h && (h.style.right = `calc(${100 - I}% + 8px)`), p && (p.style.left = `calc(${I}% + 8px)`);
+ }, F = () => {
+ try {
+ g == null || g.abort();
+ } catch {
+ }
+ };
+ c.addEventListener("pointermove", B, { signal: S }), c.addEventListener("pointerup", F, { signal: S });
+ },
+ (_ = this._panelAC) != null && _.signal ? { signal: this._panelAC.signal } : void 0
+ ), l.appendChild(u), l.appendChild(a), l.appendChild(c), h && l.appendChild(h), p && l.appendChild(p), l.appendChild(et("A", "left")), l.appendChild(et("B", "right")), this._contentEl.appendChild(l);
+ }
+ _renderSide() {
+ var f, h;
+ const e = this._mediaA ? nt(this._mediaA) : null, n = this._mediaB ? nt(this._mediaB) : null, o = ((f = this._trackMediaControls) == null ? void 0 : f.call(this, e)) || e, s = ((h = this._trackMediaControls) == null ? void 0 : h.call(this, n)) || n, i = this._mediaA ? X(this._mediaA) : "", r = this._mediaB ? X(this._mediaB) : "";
+ if (!o && !s) {
+ this._contentEl.appendChild(Q("Select 2 assets for Side-by-Side"));
+ return;
+ }
+ const l = document.createElement("div");
+ l.className = "mjr-mfv-side-container";
+ const u = document.createElement("div");
+ u.className = "mjr-mfv-side-panel", o ? u.appendChild(o) : u.appendChild(Q("—")), u.appendChild(et("A", "left"));
+ const a = i === "audio" ? null : this._buildGenInfoDOM(this._mediaA);
+ if (a) {
+ const m = document.createElement("div");
+ m.className = "mjr-mfv-geninfo-a", ot(o) && m.classList.add("mjr-mfv-geninfo--above-player"), m.appendChild(a), u.appendChild(m);
+ }
+ const d = document.createElement("div");
+ d.className = "mjr-mfv-side-panel", s ? d.appendChild(s) : d.appendChild(Q("—")), d.appendChild(et("B", "right"));
+ const c = r === "audio" ? null : this._buildGenInfoDOM(this._mediaB);
+ if (c) {
+ const m = document.createElement("div");
+ m.className = "mjr-mfv-geninfo-b", ot(s) && m.classList.add("mjr-mfv-geninfo--above-player"), m.appendChild(c), d.appendChild(m);
+ }
+ l.appendChild(u), l.appendChild(d), this._contentEl.appendChild(l);
+ }
+ _renderGrid() {
+ var s;
+ const e = [
+ { media: this._mediaA, label: "A" },
+ { media: this._mediaB, label: "B" },
+ { media: this._mediaC, label: "C" },
+ { media: this._mediaD, label: "D" }
+ ];
+ if (!e.filter((i) => i.media).length) {
+ this._contentEl.appendChild(Q("Select up to 4 assets for Grid Compare"));
+ return;
+ }
+ const o = document.createElement("div");
+ o.className = "mjr-mfv-grid-container";
+ for (const { media: i, label: r } of e) {
+ const l = document.createElement("div");
+ if (l.className = "mjr-mfv-grid-cell", i) {
+ const u = X(i), a = nt(i), d = ((s = this._trackMediaControls) == null ? void 0 : s.call(this, a)) || a;
+ if (d ? l.appendChild(d) : l.appendChild(Q("—")), l.appendChild(
+ et(r, r === "A" || r === "C" ? "left" : "right")
+ ), u !== "audio") {
+ const c = this._buildGenInfoDOM(i);
+ if (c) {
+ const f = document.createElement("div");
+ f.className = `mjr-mfv-geninfo-${r.toLowerCase()}`, ot(d) && f.classList.add("mjr-mfv-geninfo--above-player"), f.appendChild(c), l.appendChild(f);
+ }
+ }
+ } else
+ l.appendChild(Q("—")), l.appendChild(
+ et(r, r === "A" || r === "C" ? "left" : "right")
+ );
+ o.appendChild(l);
+ }
+ this._contentEl.appendChild(o);
+ }
+ // ── Visibility ────────────────────────────────────────────────────────────
+ show() {
+ this.element && (this._bindDocumentUiHandlers(), this.element.classList.add("is-visible"), this.element.setAttribute("aria-hidden", "false"), this.isVisible = !0);
+ }
+ hide() {
+ this.element && (this._destroyPanZoom(), this._destroyCompareSync(), this._stopEdgeResize(), this._closeGenDropdown(), Ze(this.element), this.element.classList.remove("is-visible"), this.element.setAttribute("aria-hidden", "true"), this.isVisible = !1);
+ }
+ // ── Pop-out / Pop-in (separate OS window for second monitor) ────────────
+ _setDesktopExpanded(e) {
+ return io(this, e);
+ }
+ _activateDesktopExpandedFallback(e) {
+ return ao(this, e);
+ }
+ _tryElectronPopupFallback(e, n, o, s) {
+ return ro(this, e, n, o, s);
+ }
+ popOut() {
+ return lo(this);
+ }
+ _fallbackPopout(e, n, o) {
+ return co(this, e, n, o);
+ }
+ _clearPopoutCloseWatch() {
+ return uo(this);
+ }
+ _startPopoutCloseWatch() {
+ return po(this);
+ }
+ _schedulePopInFromPopupClose() {
+ return mo(this);
+ }
+ _installPopoutStyles(e) {
+ return ho(this, e);
+ }
+ popIn(e) {
+ return fo(this, e);
+ }
+ _updatePopoutBtnUI() {
+ return _o(this);
+ }
+ get isPopped() {
+ return this._isPopped || this._desktopExpanded;
+ }
+ _resizeCursorForDirection(e) {
+ return go(e);
+ }
+ _getResizeDirectionFromPoint(e, n, o) {
+ return bo(e, n, o);
+ }
+ _stopEdgeResize() {
+ return yo(this);
+ }
+ _bindPanelInteractions() {
+ return Co(this);
+ }
+ _initEdgeResize(e) {
+ return Ao(this, e);
+ }
+ _initDrag(e) {
+ return So(this, e);
+ }
+ async _drawMediaFit(e, n, o, s, i, r, l) {
+ return Eo(this, e, n, o, s, i, r, l);
+ }
+ _estimateGenInfoOverlayHeight(e, n, o) {
+ return Mo(this, e, n, o);
+ }
+ _drawGenInfoOverlay(e, n, o, s, i, r) {
+ return Bo(this, e, n, o, s, i, r);
+ }
+ async _captureView() {
+ return No(this);
+ }
+ dispose() {
+ var e, n, o, s, i, r, l, u, a, d, c, f, h, m, p, g, b, C;
+ Te(this), this._destroyPanZoom(), this._destroyCompareSync(), this._destroyMediaControls(), this._unbindLayoutObserver(), this._stopEdgeResize(), this._clearPopoutCloseWatch();
+ try {
+ (e = this._panelAC) == null || e.abort(), this._panelAC = null;
+ } catch (_) {
+ (n = console.debug) == null || n.call(console, _);
+ }
+ try {
+ (o = this._btnAC) == null || o.abort(), this._btnAC = null;
+ } catch (_) {
+ (s = console.debug) == null || s.call(console, _);
+ }
+ try {
+ (i = this._docAC) == null || i.abort(), this._docAC = null;
+ } catch (_) {
+ (r = console.debug) == null || r.call(console, _);
+ }
+ try {
+ (l = this._popoutAC) == null || l.abort(), this._popoutAC = null;
+ } catch (_) {
+ (u = console.debug) == null || u.call(console, _);
+ }
+ try {
+ (a = this._panzoomAC) == null || a.abort(), this._panzoomAC = null;
+ } catch (_) {
+ (d = console.debug) == null || d.call(console, _);
+ }
+ try {
+ (f = (c = this._compareSyncAC) == null ? void 0 : c.abort) == null || f.call(c), this._compareSyncAC = null;
+ } catch (_) {
+ (h = console.debug) == null || h.call(console, _);
+ }
+ try {
+ this._isPopped && this.popIn();
+ } catch (_) {
+ (m = console.debug) == null || m.call(console, _);
+ }
+ this._revokePreviewBlob(), this._onSidebarPosChanged && (window.removeEventListener("mjr-settings-changed", this._onSidebarPosChanged), this._onSidebarPosChanged = null);
+ try {
+ (p = this.element) == null || p.remove();
+ } catch (_) {
+ (g = console.debug) == null || g.call(console, _);
+ }
+ this.element = null, this._contentEl = null, this._closeBtn = null, this._modeBtn = null, this._pinGroup = null, this._pinBtns = null, this._liveBtn = null, this._nodeStreamBtn = null, this._popoutBtn = null, this._captureBtn = null, this._unbindDocumentUiHandlers();
+ try {
+ (b = this._genDropdown) == null || b.remove();
+ } catch (_) {
+ (C = console.debug) == null || C.call(console, _);
+ }
+ this._mediaA = null, this._mediaB = null, this._mediaC = null, this._mediaD = null, this.isVisible = !1;
+ }
+}
+export {
+ ko as FloatingViewer,
+ T as MFV_MODES
+};
diff --git a/js_dist/chunks/LiveStreamTracker-CC4jZbCd.js b/js_dist/chunks/LiveStreamTracker-BWRfNIz3.js
similarity index 99%
rename from js_dist/chunks/LiveStreamTracker-CC4jZbCd.js
rename to js_dist/chunks/LiveStreamTracker-BWRfNIz3.js
index 5f634eca..6b6ea37c 100644
--- a/js_dist/chunks/LiveStreamTracker-CC4jZbCd.js
+++ b/js_dist/chunks/LiveStreamTracker-BWRfNIz3.js
@@ -1,4 +1,4 @@
-import { E as S, w as L, e as s } from "./entry-CuODMrGh.js";
+import { E as S, w as L, e as s } from "./entry-CfyS4_5Z.js";
let l = null, c = null, d = null, m = !1, u = null, g = null, h = 0, _ = 0, f = null;
const v = /* @__PURE__ */ new WeakMap();
function k() {
diff --git a/js_dist/chunks/entry-CuODMrGh.js b/js_dist/chunks/entry-CfyS4_5Z.js
similarity index 87%
rename from js_dist/chunks/entry-CuODMrGh.js
rename to js_dist/chunks/entry-CfyS4_5Z.js
index 4122c281..704877eb 100644
--- a/js_dist/chunks/entry-CuODMrGh.js
+++ b/js_dist/chunks/entry-CfyS4_5Z.js
@@ -1,6 +1,6 @@
-import { f as rg, r as Ae, e as ze, g as lg, h as Vs, i as Up, j as Kp, u as xe, w as cn, k as Rd, l as ag, s as Ys, o as be, c as Ce, F as Nt, m as Cn, n as Lt, a as ft, t as Ye, p as Dp, q as Dn, v as _n, x as Ep, b as ie, y as fn, z as On, A as Zn, B as Hp, C as xr, D as qp, E as Ko, G as Pp, H as yr, d as Pi, T as ks, I as wo, J as jl, K as Fd, L as vl, M as cg } from "./mjr-vue-vendor-DZo-ZbFS.js";
+import { f as rg, r as We, e as ze, g as lg, h as Vs, i as Bp, j as Up, u as ve, w as dn, k as Rd, l as ag, s as Xs, o as be, c as Ze, F as Nt, m as Zn, n as vt, a as yt, t as Ne, p as Dp, q as Dn, v as _n, x as Hp, b as te, y as Cn, z as Fn, A as An, B as Ep, C as xr, D as qp, E as Uo, G as Pp, H as yr, d as Pi, T as Ns, I as wo, J as jl, K as Od, L as vl, M as cg } from "./mjr-vue-vendor-DZo-ZbFS.js";
import { app as vo } from "../../../scripts/app.js";
-const Oi = "mjrSettings", sg = 1, Od = "mjrMinimapSettings";
+const Fi = "mjrSettings", sg = 1, Fd = "mjrMinimapSettings";
function dg(e) {
try {
return String(e ?? "").trim();
@@ -26,7 +26,7 @@ function Qp(e = "", t = 16) {
throw new Error("Secure token generation requires crypto.getRandomValues().");
return `${String(e || "")}${n}`;
}
-function Xs(e = "", t = 8) {
+function ks(e = "", t = 8) {
const n = ug(t);
return n ? `${String(e || "")}${n}` : (zd += 1, `${String(e || "")}${Date.now().toString(36)}_${zd.toString(36)}`);
}
@@ -68,7 +68,7 @@ function $p(e) {
function ey(e) {
return /^[a-zA-Z]:\//.test(String(e || ""));
}
-const ty = 200, ny = 0, ct = {
+const ty = 200, ny = 0, st = {
// Health & Config
HEALTH: "/mjr/am/health",
HEALTH_COUNTERS: "/mjr/am/health/counters",
@@ -164,10 +164,10 @@ const ty = 200, ny = 0, ct = {
// Library audit
AUDIT: "/mjr/am/audit"
};
-function Da(e, t = {}) {
+function Ha(e, t = {}) {
let n = String(e || "");
- const i = () => n.includes("?") ? "&" : "?", o = (A) => {
- n += i() + A;
+ const i = () => n.includes("?") ? "&" : "?", o = (y) => {
+ n += i() + y;
}, {
subfolder: r = null,
kind: l = null,
@@ -177,21 +177,21 @@ function Da(e, t = {}) {
maxSizeMB: d = null,
minWidth: u = null,
minHeight: I = null,
- maxWidth: y = null,
- maxHeight: S = null,
- workflowType: Z = null,
- dateRange: C = null,
+ maxWidth: A = null,
+ maxHeight: h = null,
+ workflowType: S = null,
+ dateRange: W = null,
dateExact: g = null
} = t || {};
- return r && o(`subfolder=${encodeURIComponent(String(r))}`), l && o(`kind=${encodeURIComponent(l)}`), a != null && o(`has_workflow=${encodeURIComponent(a ? "true" : "false")}`), c != null && Number(c) > 0 && o(`min_rating=${encodeURIComponent(String(c))}`), s != null && Number(s) > 0 && o(`min_size_mb=${encodeURIComponent(String(s))}`), d != null && Number(d) > 0 && o(`max_size_mb=${encodeURIComponent(String(d))}`), u != null && Number(u) > 0 && o(`min_width=${encodeURIComponent(String(u))}`), I != null && Number(I) > 0 && o(`min_height=${encodeURIComponent(String(I))}`), y != null && Number(y) > 0 && o(`max_width=${encodeURIComponent(String(y))}`), S != null && Number(S) > 0 && o(`max_height=${encodeURIComponent(String(S))}`), Z && o(`workflow_type=${encodeURIComponent(String(Z))}`), C && o(`date_range=${encodeURIComponent(String(C))}`), g && o(`date_exact=${encodeURIComponent(String(g))}`), n;
+ return r && o(`subfolder=${encodeURIComponent(String(r))}`), l && o(`kind=${encodeURIComponent(l)}`), a != null && o(`has_workflow=${encodeURIComponent(a ? "true" : "false")}`), c != null && Number(c) > 0 && o(`min_rating=${encodeURIComponent(String(c))}`), s != null && Number(s) > 0 && o(`min_size_mb=${encodeURIComponent(String(s))}`), d != null && Number(d) > 0 && o(`max_size_mb=${encodeURIComponent(String(d))}`), u != null && Number(u) > 0 && o(`min_width=${encodeURIComponent(String(u))}`), I != null && Number(I) > 0 && o(`min_height=${encodeURIComponent(String(I))}`), A != null && Number(A) > 0 && o(`max_width=${encodeURIComponent(String(A))}`), h != null && Number(h) > 0 && o(`max_height=${encodeURIComponent(String(h))}`), S && o(`workflow_type=${encodeURIComponent(String(S))}`), W && o(`date_range=${encodeURIComponent(String(W))}`), g && o(`date_exact=${encodeURIComponent(String(g))}`), n;
}
function ul(e, t = null, n = "output") {
const i = String(e || "").trim();
if (!i) return "";
- let o = `${ct.VIEW}?filename=${encodeURIComponent(i)}`;
+ let o = `${st.VIEW}?filename=${encodeURIComponent(i)}`;
return t && (o += `&subfolder=${encodeURIComponent(t)}`), o += `&type=${encodeURIComponent(n)}`, o;
}
-function Ns(e = {}) {
+function Rs(e = {}) {
const {
q: t = "*",
limit: n = ty,
@@ -205,54 +205,54 @@ function Ns(e = {}) {
minSizeMB: d = null,
maxSizeMB: u = null,
resolutionCompare: I = null,
- minWidth: y = null,
- minHeight: S = null,
- maxWidth: Z = null,
- maxHeight: C = null,
+ minWidth: A = null,
+ minHeight: h = null,
+ maxWidth: S = null,
+ maxHeight: W = null,
workflowType: g = null,
- dateRange: A = null,
+ dateRange: y = null,
dateExact: p = null,
sort: b = null,
includeTotal: L = !0,
- groupStacks: h = !1
+ groupStacks: C = !1
} = e;
- let G = `${ct.LIST}?q=${encodeURIComponent(t)}&limit=${n}&offset=${i}&scope=${encodeURIComponent(o)}`;
- return r && (G += `&subfolder=${encodeURIComponent(r)}`), l ? G += `&custom_root_id=${encodeURIComponent(l)}` : String(o || "").toLowerCase() === "custom" && (G += "&browser_mode=1"), G = Da(G, {
+ let G = `${st.LIST}?q=${encodeURIComponent(t)}&limit=${n}&offset=${i}&scope=${encodeURIComponent(o)}`;
+ return r && (G += `&subfolder=${encodeURIComponent(r)}`), l ? G += `&custom_root_id=${encodeURIComponent(l)}` : String(o || "").toLowerCase() === "custom" && (G += "&browser_mode=1"), G = Ha(G, {
kind: a,
hasWorkflow: c,
minRating: s,
minSizeMB: d,
maxSizeMB: u,
- minWidth: y,
- minHeight: S,
- maxWidth: Z,
- maxHeight: C,
+ minWidth: A,
+ minHeight: h,
+ maxWidth: S,
+ maxHeight: W,
workflowType: g,
- dateRange: A,
+ dateRange: y,
dateExact: p
- }), I && (G += `&resolution_compare=${encodeURIComponent(String(I))}`), b && (G += `&sort=${encodeURIComponent(String(b))}`), L === !1 && (G += "&include_total=0"), h && (G += "&group_stacks=1"), G;
+ }), I && (G += `&resolution_compare=${encodeURIComponent(String(I))}`), b && (G += `&sort=${encodeURIComponent(String(b))}`), L === !1 && (G += "&include_total=0"), C && (G += "&group_stacks=1"), G;
}
function mg(e, t = "", n = "") {
const i = String(e || "").trim(), o = String(n || "").trim();
if (!i || !o) return "";
- let r = `${ct.CUSTOM_VIEW}?root_id=${encodeURIComponent(o)}&filename=${encodeURIComponent(i)}`;
+ let r = `${st.CUSTOM_VIEW}?root_id=${encodeURIComponent(o)}&filename=${encodeURIComponent(i)}`;
return t && (r += `&subfolder=${encodeURIComponent(t)}`), r;
}
function iy(e) {
- return `${ct.BATCH_ZIP_CREATE}/${encodeURIComponent(String(e || ""))}`;
+ return `${st.BATCH_ZIP_CREATE}/${encodeURIComponent(String(e || ""))}`;
}
function oy(e) {
- return `${ct.STACKS}/${encodeURIComponent(String(e || ""))}`;
+ return `${st.STACKS}/${encodeURIComponent(String(e || ""))}`;
}
function ry(e) {
return `${oy(e)}/members`;
}
function ly(e, t = "") {
- var u, I, y, S, Z;
+ var u, I, A, h, S;
const n = e && typeof e == "object" ? e : {}, i = String(t || "").trim();
if (!i) return "";
const o = fi((n == null ? void 0 : n.asset_id) ?? (n == null ? void 0 : n.id) ?? null);
- let r = `${ct.VIEWER_RESOURCE}?relpath=${encodeURIComponent(i)}`;
+ let r = `${st.VIEWER_RESOURCE}?relpath=${encodeURIComponent(i)}`;
if (o)
return `${r}&asset_id=${encodeURIComponent(o)}`;
const l = pa(
@@ -262,12 +262,12 @@ function ly(e, t = "") {
);
if (l)
return `${r}&filepath=${encodeURIComponent(l)}`;
- const a = String((n == null ? void 0 : n.filename) || (n == null ? void 0 : n.name) || ((y = n == null ? void 0 : n.file_info) == null ? void 0 : y.filename) || "").trim();
+ const a = String((n == null ? void 0 : n.filename) || (n == null ? void 0 : n.name) || ((A = n == null ? void 0 : n.file_info) == null ? void 0 : A.filename) || "").trim();
if (!a) return "";
r += `&filename=${encodeURIComponent(a)}`;
- const c = String((n == null ? void 0 : n.subfolder) || ((S = n == null ? void 0 : n.file_info) == null ? void 0 : S.subfolder) || "").trim();
+ const c = String((n == null ? void 0 : n.subfolder) || ((h = n == null ? void 0 : n.file_info) == null ? void 0 : h.subfolder) || "").trim();
c && (r += `&subfolder=${encodeURIComponent(c)}`);
- const s = String((n == null ? void 0 : n.type) || ((Z = n == null ? void 0 : n.file_info) == null ? void 0 : Z.type) || "").trim().toLowerCase();
+ const s = String((n == null ? void 0 : n.type) || ((S = n == null ? void 0 : n.file_info) == null ? void 0 : S.type) || "").trim().toLowerCase();
s && s !== "custom" && (r += `&type=${encodeURIComponent(s)}`);
const d = String(Mi(n) || (n == null ? void 0 : n.root_id) || (n == null ? void 0 : n.custom_root_id) || "").trim();
return d && (r += `&root_id=${encodeURIComponent(d)}`), r;
@@ -281,8 +281,8 @@ function ay(e = {}) {
hasWorkflow: r = null,
minRating: l = null
} = e;
- let a = `${ct.DATE_HISTOGRAM}?scope=${encodeURIComponent(t)}&month=${encodeURIComponent(String(i || ""))}`;
- return n && (a += `&custom_root_id=${encodeURIComponent(n)}`), Da(a, {
+ let a = `${st.DATE_HISTOGRAM}?scope=${encodeURIComponent(t)}&month=${encodeURIComponent(String(i || ""))}`;
+ return n && (a += `&custom_root_id=${encodeURIComponent(n)}`), Ha(a, {
subfolder: e.subfolder ?? null,
kind: o,
hasWorkflow: r,
@@ -298,46 +298,46 @@ function ay(e = {}) {
dateExact: e.dateExact ?? null
});
}
-function Ki(e) {
- var u, I, y, S, Z;
- const t = e == null ? void 0 : e.mtime, n = (C) => !C || !t ? C : `${C}${C.includes("?") ? "&" : "?"}v=${encodeURIComponent(t)}`, i = pa(
+function Ui(e) {
+ var u, I, A, h, S;
+ const t = e == null ? void 0 : e.mtime, n = (W) => !W || !t ? W : `${W}${W.includes("?") ? "&" : "?"}v=${encodeURIComponent(t)}`, i = pa(
String(
(e == null ? void 0 : e.filepath) || (e == null ? void 0 : e.path) || (e == null ? void 0 : e.fullpath) || (e == null ? void 0 : e.full_path) || ((u = e == null ? void 0 : e.file_info) == null ? void 0 : u.filepath) || ((I = e == null ? void 0 : e.file_info) == null ? void 0 : I.path) || ""
).trim()
);
let o = String(
- (e == null ? void 0 : e.filename) || (e == null ? void 0 : e.name) || ((y = e == null ? void 0 : e.file_info) == null ? void 0 : y.filename) || ""
- ).trim(), r = String((e == null ? void 0 : e.subfolder) || ((S = e == null ? void 0 : e.file_info) == null ? void 0 : S.subfolder) || "").trim();
- const a = ((C) => {
- const g = { type: "", subfolder: "", filename: "" }, A = pa(C);
- if (!A) return g;
- const p = A.toLowerCase().indexOf("/output/"), b = A.toLowerCase().indexOf("/input/");
+ (e == null ? void 0 : e.filename) || (e == null ? void 0 : e.name) || ((A = e == null ? void 0 : e.file_info) == null ? void 0 : A.filename) || ""
+ ).trim(), r = String((e == null ? void 0 : e.subfolder) || ((h = e == null ? void 0 : e.file_info) == null ? void 0 : h.subfolder) || "").trim();
+ const a = ((W) => {
+ const g = { type: "", subfolder: "", filename: "" }, y = pa(W);
+ if (!y) return g;
+ const p = y.toLowerCase().indexOf("/output/"), b = y.toLowerCase().indexOf("/input/");
let L = -1;
if (p >= 0 ? (g.type = "output", L = p + 8) : b >= 0 && (g.type = "input", L = b + 7), L >= 0) {
- const h = A.slice(L), G = h.lastIndexOf("/");
- G >= 0 ? (g.subfolder = h.slice(0, G), g.filename = h.slice(G + 1)) : g.filename = h;
+ const C = y.slice(L), G = C.lastIndexOf("/");
+ G >= 0 ? (g.subfolder = C.slice(0, G), g.filename = C.slice(G + 1)) : g.filename = C;
} else {
- const h = $p(A);
- g.filename = h.filename;
+ const C = $p(y);
+ g.filename = C.filename;
}
return g;
})(i);
if (!r && o.includes("/")) {
- const C = o.lastIndexOf("/");
- C > 0 && (r = o.slice(0, C), o = o.slice(C + 1));
+ const W = o.lastIndexOf("/");
+ W > 0 && (r = o.slice(0, W), o = o.slice(W + 1));
}
if (!o && a.filename && (o = a.filename), !r && a.subfolder && (r = a.subfolder), !o) return "";
- let c = String((e == null ? void 0 : e.type) || ((Z = e == null ? void 0 : e.file_info) == null ? void 0 : Z.type) || "").toLowerCase().trim();
+ let c = String((e == null ? void 0 : e.type) || ((S = e == null ? void 0 : e.file_info) == null ? void 0 : S.type) || "").toLowerCase().trim();
c !== "input" && c !== "output" && c !== "custom" && (c = ""), !c && a.type && (c = a.type), !c && i && (i.includes("/input/") ? c = "input" : i.includes("/output/") && (c = "output")), c || (c = "output");
const s = i.includes("/output/") || i.includes("/input/"), d = ey(r) || r.startsWith("/");
if (i && c !== "custom" && (d || !s))
return n(Ea(i, { inline: !0 }));
if (c === "custom") {
- const C = String(Mi(e) || "").trim();
- if (C) return n(mg(o, r, C));
+ const W = String(Mi(e) || "").trim();
+ if (W) return n(mg(o, r, W));
if (i)
return n(
- `${ct.CUSTOM_VIEW}?filepath=${encodeURIComponent(i)}&browser_mode=1`
+ `${st.CUSTOM_VIEW}?filepath=${encodeURIComponent(i)}&browser_mode=1`
);
const g = a.type || "output";
return n(ul(o, r, g));
@@ -347,11 +347,11 @@ function Ki(e) {
function Ea(e, t = {}) {
if (!e) return "";
const n = !!(t != null && t.inline);
- let i = `${ct.DOWNLOAD}?filepath=${encodeURIComponent(e)}`;
+ let i = `${st.DOWNLOAD}?filepath=${encodeURIComponent(e)}`;
return n && (i += "&preview=1"), i;
}
function cy(e) {
- return e ? `${ct.DOWNLOAD_CLEAN}?filepath=${encodeURIComponent(e)}` : "";
+ return e ? `${st.DOWNLOAD_CLEAN}?filepath=${encodeURIComponent(e)}` : "";
}
const sy = /* @__PURE__ */ new Set(["POST", "PUT", "DELETE", "PATCH"]), Jd = 2e4, dy = 3e5, uy = 3, my = 400, gy = "/mjr/am/settings/security/bootstrap-token", Iy = "/mjr/am/", Ll = /* @__PURE__ */ new Map();
function gg(e) {
@@ -374,7 +374,7 @@ function Ig(e) {
return "";
}
}
-function Jc(e) {
+function Tc(e) {
return Ig(e).startsWith(Iy);
}
function $l(e) {
@@ -391,7 +391,7 @@ function by(e) {
return !1;
}
}
-function Tc(e = {}) {
+function Kc(e = {}) {
try {
const t = Number(e == null ? void 0 : e.timeoutMs);
return Number.isFinite(t) ? Math.max(1e3, Math.min(dy, Math.floor(t))) : Jd;
@@ -405,11 +405,11 @@ function py(e = {}) {
if (typeof AbortController > "u")
return {
signal: t || void 0,
- timeoutMs: Tc(e),
+ timeoutMs: Kc(e),
cleanup: () => {
}
};
- const n = Tc(e), i = new AbortController();
+ const n = Kc(e), i = new AbortController();
let o = null;
const r = () => {
var c, s;
@@ -462,7 +462,7 @@ function py(e = {}) {
function yy(e, t, n = {}) {
const i = String(e).trim().toUpperCase(), o = String(t || "").trim();
if (!i || !o) return "";
- const r = Tc(n);
+ const r = Kc(n);
return `${i}:${o}:timeout=${r}`;
}
function fy(e, t) {
@@ -480,7 +480,7 @@ function fy(e, t) {
});
return Ll.set(n, i), i;
}
-function hy(e, t, n) {
+function Cy(e, t, n) {
var i, o;
if ($r(t))
try {
@@ -494,7 +494,7 @@ function hy(e, t, n) {
(o = console.debug) == null || o.call(console, r);
}
}
-function Cy(e, t) {
+function hy(e, t) {
var n;
if (t)
try {
@@ -507,7 +507,7 @@ async function Zy(e, t, n, i, { ensureWriteAuthToken: o, normalizeWriteAuthFailu
var I;
const s = e.headers.get("content-type") || "";
if (!s.includes("application/json"))
- return !i && $r(n) && Jc(t) && !$l(t) && Number(e.status || 0) === 401 && await o({ force: !0, allowCookieRefresh: !0 }) ? await l(t, { ...a, _authRetryDone: !0 }, c) : {
+ return !i && $r(n) && Tc(t) && !$l(t) && Number(e.status || 0) === 401 && await o({ force: !0, allowCookieRefresh: !0 }) ? await l(t, { ...a, _authRetryDone: !0 }, c) : {
ok: !1,
error: `Server returned non-JSON response (${e.status})`,
code: "INVALID_RESPONSE",
@@ -515,9 +515,9 @@ async function Zy(e, t, n, i, { ensureWriteAuthToken: o, normalizeWriteAuthFailu
content_type: s,
data: null
};
- let d = await e.json().catch((y) => {
- var S;
- return (S = console.debug) == null || S.call(console, "[MJR API] JSON parse error:", y), null;
+ let d = await e.json().catch((A) => {
+ var h;
+ return (h = console.debug) == null || h.call(console, "[MJR API] JSON parse error:", A), null;
});
if (typeof d != "object" || d === null)
return {
@@ -530,10 +530,10 @@ async function Zy(e, t, n, i, { ensureWriteAuthToken: o, normalizeWriteAuthFailu
if (!("status" in d))
try {
d.status = e.status;
- } catch (y) {
- (I = console.debug) == null || I.call(console, y);
+ } catch (A) {
+ (I = console.debug) == null || I.call(console, A);
}
- return !i && $r(n) && !$l(t) && !(d != null && d.ok) && (String((d == null ? void 0 : d.code) || "").toUpperCase() === "AUTH_REQUIRED" || Number((d == null ? void 0 : d.status) || 0) === 401) && await o({ force: !0, allowCookieRefresh: !0 }) ? await l(t, { ...a, _authRetryDone: !0 }, c) : ($r(n) && Jc(t) && !$l(t) && (d = r(d)), d);
+ return !i && $r(n) && !$l(t) && !(d != null && d.ok) && (String((d == null ? void 0 : d.code) || "").toUpperCase() === "AUTH_REQUIRED" || Number((d == null ? void 0 : d.status) || 0) === 401) && await o({ force: !0, allowCookieRefresh: !0 }) ? await l(t, { ...a, _authRetryDone: !0 }, c) : ($r(n) && Tc(t) && !$l(t) && (d = r(d)), d);
}
function Ay({
readObsEnabled: e = () => !1,
@@ -543,36 +543,36 @@ function Ay({
trackApiCall: o = null
} = {}) {
async function r(c, s = {}, d = 0) {
- var S, Z, C, g, A, p, b;
+ var h, S, W, g, y, p, b;
const u = typeof performance < "u" ? performance.now() : Date.now(), I = py(s);
- let y = null;
+ let A = null;
try {
- const L = (s.method || "GET").toUpperCase(), h = !!(s != null && s._authRetryDone), G = typeof Headers < "u" ? new Headers(s.headers || {}) : { ...s.headers };
- hy(G, L, !!e());
- let W = t();
- if (!W && $r(L) && Jc(c) && !$l(c)) {
+ const L = (s.method || "GET").toUpperCase(), C = !!(s != null && s._authRetryDone), G = typeof Headers < "u" ? new Headers(s.headers || {}) : { ...s.headers };
+ Cy(G, L, !!e());
+ let Z = t();
+ if (!Z && $r(L) && Tc(c) && !$l(c)) {
try {
await n();
} catch (x) {
- (S = console.debug) == null || S.call(console, x);
+ (h = console.debug) == null || h.call(console, x);
}
- W = t();
+ Z = t();
}
- Cy(G, W);
+ hy(G, Z);
const f = { ...s, headers: G, signal: I.signal };
try {
delete f._authRetryDone, delete f.timeoutMs;
} catch (x) {
- (Z = console.debug) == null || Z.call(console, x);
+ (S = console.debug) == null || S.call(console, x);
}
const X = await fetch(c, f);
- return y = await Zy(X, c, L, h, {
+ return A = await Zy(X, c, L, C, {
ensureWriteAuthToken: n,
normalizeWriteAuthFailure: i,
fetchAPI: r,
options: s,
retryCount: d
- }), y;
+ }), A;
} catch (L) {
try {
if (String((L == null ? void 0 : L.name) || "") === "AbortError")
@@ -583,14 +583,14 @@ function Ay({
data: null,
timeout_ms: I.timeoutMs
};
- } catch (h) {
- (C = console.debug) == null || C.call(console, h);
+ } catch (C) {
+ (W = console.debug) == null || W.call(console, C);
}
if (d < uy && by(L)) {
try {
await gg(my * (d + 1));
- } catch (h) {
- (g = console.debug) == null || g.call(console, h);
+ } catch (C) {
+ (g = console.debug) == null || g.call(console, C);
}
return await r(c, s, d + 1);
}
@@ -603,10 +603,10 @@ function Ay({
};
} finally {
try {
- const h = (typeof performance < "u" ? performance.now() : Date.now()) - u;
- typeof o == "function" ? o(h, !(y != null && y.ok)) : typeof window < "u" && window.MajoorMetrics && window.MajoorMetrics.trackApiCall(h, !(y != null && y.ok));
+ const C = (typeof performance < "u" ? performance.now() : Date.now()) - u;
+ typeof o == "function" ? o(C, !(A != null && A.ok)) : typeof window < "u" && window.MajoorMetrics && window.MajoorMetrics.trackApiCall(C, !(A != null && A.ok));
} catch (L) {
- (A = console.debug) == null || A.call(console, L);
+ (y = console.debug) == null || y.call(console, L);
}
try {
(p = I.cleanup) == null || p.call(I);
@@ -655,13 +655,13 @@ function Wr({ ttlMs: e = 0, maxSize: t = 100, now: n = () => Date.now() } = {})
return 1;
}
}
- function a(u, I, y) {
- return u ? y > 0 ? I - Number(u.at || 0) > y : !1 : !0;
+ function a(u, I, A) {
+ return u ? A > 0 ? I - Number(u.at || 0) > A : !1 : !0;
}
function c(u = o(), I = r()) {
if (I > 0)
- for (const [y, S] of i.entries())
- a(S, u, I) && i.delete(y);
+ for (const [A, h] of i.entries())
+ a(h, u, I) && i.delete(A);
}
function s() {
const u = l();
@@ -676,23 +676,23 @@ function Wr({ ttlMs: e = 0, maxSize: t = 100, now: n = () => Date.now() } = {})
}
return {
get(u) {
- const I = o(), y = r();
- c(I, y);
- const S = i.get(u);
- if (S) {
- if (a(S, I, y)) {
+ const I = o(), A = r();
+ c(I, A);
+ const h = i.get(u);
+ if (h) {
+ if (a(h, I, A)) {
i.delete(u);
return;
}
- return S.value;
+ return h.value;
}
},
has(u) {
return this.get(u) !== void 0;
},
- set(u, I, y = {}) {
- const S = Number(y == null ? void 0 : y.at), Z = Number.isFinite(S) ? S : o(), C = { value: I, at: Z };
- return i.has(u) ? d(u, C) : i.set(u, C), c(o(), r()), s(), I;
+ set(u, I, A = {}) {
+ const h = Number(A == null ? void 0 : A.at), S = Number.isFinite(h) ? h : o(), W = { value: I, at: S };
+ return i.has(u) ? d(u, W) : i.set(u, W), c(o(), r()), s(), I;
},
delete(u) {
return i.delete(u);
@@ -719,7 +719,7 @@ const bg = 50;
function Li(e) {
return !!e && typeof e == "object";
}
-function ha(e, t) {
+function Ca(e, t) {
try {
if (!e || typeof e != "object" && typeof e != "function") return null;
const n = Object.getOwnPropertyDescriptor(e, t);
@@ -740,19 +740,19 @@ function Td(e) {
function Wy(e) {
return sr(e) && (fa = e), fa;
}
-function Ca(e) {
+function ha(e) {
var i, o, r, l, a;
if (sr(fa)) return fa;
const t = Li(e) ? e : Qn(), n = (t == null ? void 0 : t.api) || ((i = t == null ? void 0 : t.ui) == null ? void 0 : i.api) || ((r = (o = t == null ? void 0 : t.ui) == null ? void 0 : o.app) == null ? void 0 : r.api) || null;
if (sr(n)) return n;
try {
- const c = typeof window < "u" ? ha(window, "api") : null;
+ const c = typeof window < "u" ? Ca(window, "api") : null;
if (sr(c)) return c;
} catch (c) {
(l = console.debug) == null || l.call(console, c);
}
try {
- const c = typeof globalThis < "u" ? ha(globalThis, "api") : null;
+ const c = typeof globalThis < "u" ? Ca(globalThis, "api") : null;
if (sr(c)) return c;
} catch (c) {
(a = console.debug) == null || a.call(console, c);
@@ -763,13 +763,13 @@ function Qn() {
var e, t;
if (ea(ya)) return ya;
try {
- const n = typeof globalThis < "u" ? ha(globalThis, "app") : null;
+ const n = typeof globalThis < "u" ? Ca(globalThis, "app") : null;
if (ea(n)) return n;
} catch (n) {
(e = console.debug) == null || e.call(console, n);
}
try {
- const n = typeof window < "u" ? ha(window, "app") : null;
+ const n = typeof window < "u" ? Ca(window, "app") : null;
if (ea(n)) return n;
} catch (n) {
(t = console.debug) == null || t.call(console, n);
@@ -790,7 +790,7 @@ function My(e, t) {
return null;
}
}
-function Ha(e) {
+function qa(e) {
var n;
const t = Li(e) ? e : Qn();
return (t == null ? void 0 : t.extensionManager) || ((n = t == null ? void 0 : t.ui) == null ? void 0 : n.extensionManager) || null;
@@ -798,17 +798,17 @@ function Ha(e) {
function pg(e) {
return Li(e) && ((e == null ? void 0 : e.sidebarTab) || (e == null ? void 0 : e.sidebarTabStore)) || null;
}
-function Sy(e) {
- const t = Ha(e), n = (t == null ? void 0 : t.toast) || null;
+function Gy(e) {
+ const t = qa(e), n = (t == null ? void 0 : t.toast) || null;
return n && typeof n.add == "function" ? n : null;
}
-function Gy(e) {
- const t = Ha(e), n = (t == null ? void 0 : t.dialog) || null;
+function Sy(e) {
+ const t = qa(e), n = (t == null ? void 0 : t.dialog) || null;
return n && (typeof n.confirm == "function" || typeof n.prompt == "function") ? n : null;
}
function xy(e, t) {
var a, c, s, d;
- const n = Li(e) ? e : Qn(), i = Ha(n), o = pg(i), r = String(t).trim();
+ const n = Li(e) ? e : Qn(), i = qa(n), o = pg(i), r = String(t).trim();
if (!i || !r) return !1;
const l = [
"activateSidebarTab",
@@ -823,8 +823,8 @@ function xy(e, t) {
try {
if (typeof (u == null ? void 0 : u[I]) == "function")
return u[I](r), !0;
- } catch (y) {
- (a = console.debug) == null || a.call(console, y);
+ } catch (A) {
+ (a = console.debug) == null || a.call(console, A);
}
try {
if (String(
@@ -839,7 +839,7 @@ function xy(e, t) {
}
function jy(e, t) {
var r;
- const n = Ha(e), i = t && typeof t == "object" ? { ...t } : null;
+ const n = qa(e), i = t && typeof t == "object" ? { ...t } : null;
if (!n || !i) return !1;
const o = ["registerCommand", "addCommand"];
for (const l of o)
@@ -892,7 +892,7 @@ async function Ly({
throw new Error(`waitForComfyApp timeout after ${r}ms`);
return null;
}
-async function hg({
+async function Cg({
app: e = null,
timeoutMs: t = 4e3,
intervalMs: n = bg,
@@ -901,11 +901,11 @@ async function hg({
} = {}) {
const r = Date.now(), l = Math.max(0, Number(t) || 0);
for (; Date.now() - r < l; ) {
- const c = e || Qn(), s = Ca(c);
+ const c = e || Qn(), s = ha(c);
if (s) return s;
await yg(n);
}
- const a = Ca(e || Qn());
+ const a = ha(e || Qn());
if (a) return a;
if (i && fg("waitForComfyApi", l), o)
throw new Error(`waitForComfyApi timeout after ${l}ms`);
@@ -913,7 +913,7 @@ async function hg({
}
const lr = /* @__PURE__ */ new Map();
let Za = !1, el = null;
-function ac() {
+function cc() {
try {
if (typeof window > "u") return null;
const e = window.localStorage;
@@ -933,7 +933,7 @@ function Bc(e, t, n) {
(o = console.debug) == null || o.call(console, l);
}
}
-function Vy() {
+function Yy() {
var e;
if (!Za)
try {
@@ -947,7 +947,7 @@ function Vy() {
}
const ni = {
get(e) {
- const t = ac();
+ const t = cc();
if (!t) return null;
try {
return t.getItem(String(e || ""));
@@ -958,7 +958,7 @@ const ni = {
set(e, t) {
const n = String(e || "");
if (!n) return !1;
- const i = ac();
+ const i = cc();
if (!i) return !1;
const o = ni.get(n);
try {
@@ -974,7 +974,7 @@ const ni = {
const n = String(e || "");
if (!n || typeof t != "function") return () => {
};
- Vy();
+ Yy();
let i = lr.get(n);
return i || (i = /* @__PURE__ */ new Set(), lr.set(n, i)), i.add(t), () => {
var o;
@@ -988,7 +988,7 @@ const ni = {
},
getAll() {
var n;
- const e = {}, t = ac();
+ const e = {}, t = cc();
if (!t) return e;
try {
const i = Number(t.length || 0) || 0;
@@ -1011,10 +1011,10 @@ const ni = {
Za = !1, el = null, lr.clear();
}
}, Ri = "en-US";
-let Ei = Ri;
-const Bd = /* @__PURE__ */ new Set(), Uc = ["mjr_lang", "majoor.lang"], Cg = "mjr_lang_follow_comfy", Ud = 500, Nr = /* @__PURE__ */ new Set();
+let Hi = Ri;
+const Kd = /* @__PURE__ */ new Set(), Uc = ["mjr_lang", "majoor.lang"], hg = "mjr_lang_follow_comfy", Bd = 500, kr = /* @__PURE__ */ new Set();
let Rr = null;
-const Yy = /* @__PURE__ */ new Set(["ar-SA", "fa-IR", "he-IL"]), Kd = {
+const Vy = /* @__PURE__ */ new Set(["ar-SA", "fa-IR", "he-IL"]), Ud = {
// French
fr: "fr-FR",
"fr-fr": "fr-FR",
@@ -1144,7 +1144,7 @@ const Yy = /* @__PURE__ */ new Set(["ar-SA", "fa-IR", "he-IL"]), Kd = {
"el-gr": "el-GR",
el_gr: "el-GR",
elgr: "el-GR"
-}, En = {
+}, Hn = {
"en-US": {
// --- Settings Categories ---
"cat.grid": "Grid",
@@ -2138,7 +2138,7 @@ Pour eviter les erreurs de base de donnees avec cette version, supprimez votre i
"msg.nightlyUpdateDetail": "Une build nightly plus recente est disponible : https://github.com/MajoorWaldi/ComfyUI-Majoor-AssetsManager/releases/tag/nightly",
"tooltip.starGithub": "Ouvrir GitHub et mettre une etoile"
}
-}, ky = Object.freeze({
+}, Xy = Object.freeze({
"en-US": "English",
"fr-FR": "Français",
"zh-CN": "Chinese (Simplified)",
@@ -2188,32 +2188,32 @@ Pour eviter les erreurs de base de donnees avec cette version, supprimez votre i
"ro-RO",
"el-GR"
].forEach((e) => {
- En[e] || (En[e] = {});
+ Hn[e] || (Hn[e] = {});
});
-let Aa = !1, cc = null;
-function Xy(e) {
+let Aa = !1, sc = null;
+function Ny(e) {
Aa || (Aa = !0, Object.entries(e || {}).forEach(([t, n]) => {
- En[t] = { ...En[t] || {}, ...n || {} };
- }), Rs());
+ Hn[t] = { ...Hn[t] || {}, ...n || {} };
+ }), Os());
}
-function Rs() {
- const e = En["en-US"] || {};
- Object.keys(En).forEach((t) => {
- t !== "en-US" && (En[t] = { ...e, ...En[t] || {} });
+function Os() {
+ const e = Hn["en-US"] || {};
+ Object.keys(Hn).forEach((t) => {
+ t !== "en-US" && (Hn[t] = { ...e, ...Hn[t] || {} });
});
}
-function Ny() {
- return Aa ? Promise.resolve() : (cc || (cc = import("./i18n.generated-CpvCqt87.js").then(({ GENERATED_TRANSLATIONS: e }) => {
- Xy(e);
+function ky() {
+ return Aa ? Promise.resolve() : (sc || (sc = import("./i18n.generated-CpvCqt87.js").then(({ GENERATED_TRANSLATIONS: e }) => {
+ Ny(e);
}).catch((e) => {
- console.warn("[Majoor i18n] Failed to load generated translations:", e), Rs();
- })), cc);
+ console.warn("[Majoor i18n] Failed to load generated translations:", e), Os();
+ })), sc);
}
-Rs();
+Os();
function ta(e) {
if (!e) return Ri;
const t = String(e || "").trim(), n = t.toLowerCase();
- return Kd[n] ? Kd[n] : En[t] ? t : Ri;
+ return Ud[n] ? Ud[n] : Hn[t] ? t : Ri;
}
function Ry() {
var e;
@@ -2227,7 +2227,7 @@ function Ry() {
}
return "";
}
-function Fy(e) {
+function Oy(e) {
var t;
try {
ni.set(Uc[0], e), ni.set(Uc[1], e);
@@ -2238,17 +2238,17 @@ function Fy(e) {
function Zg() {
var e;
try {
- const t = String(ni.get(Cg) || "").trim().toLowerCase();
+ const t = String(ni.get(hg) || "").trim().toLowerCase();
return t ? !["0", "false", "no", "off"].includes(t) : !0;
} catch (t) {
(e = console.debug) == null || e.call(console, t);
}
return !0;
}
-function Oy(e) {
+function Fy(e) {
var t;
try {
- ni.set(Cg, e ? "1" : "0");
+ ni.set(hg, e ? "1" : "0");
} catch (n) {
(t = console.debug) == null || t.call(console, n);
}
@@ -2297,7 +2297,7 @@ function Jy() {
var e;
try {
if (typeof document < "u" && document.documentElement) {
- const t = Yy.has(Ei);
+ const t = Vy.has(Hi);
document.documentElement.dir = t ? "rtl" : "ltr";
}
} catch (t) {
@@ -2310,22 +2310,22 @@ const Wg = (e) => {
const l = Ag(e);
for (const a of l) {
const c = ta(a);
- if (En[c])
+ if (Hn[c])
return _i(c), !0;
}
return !1;
};
if (t) {
if (o()) return;
- if (n && En[i]) {
+ if (n && Hn[i]) {
_i(i);
return;
}
- if (En[Ei]) return;
+ if (Hn[Hi]) return;
_i(Ri);
return;
}
- if (n && En[i]) {
+ if (n && Hn[i]) {
_i(i);
return;
}
@@ -2333,7 +2333,7 @@ const Wg = (e) => {
const r = zy();
for (const l of r) {
const a = ta(l);
- if (En[a]) {
+ if (Hn[a]) {
_i(a);
return;
}
@@ -2343,8 +2343,8 @@ const Wg = (e) => {
console.warn("[Majoor i18n] Failed to detect language:", t), _i(Ri);
}
}, _i = (e) => {
- En[e] || (console.warn(`[Majoor i18n] Unknown language: ${e}, falling back to ${Ri}`), e = Ri), Ei !== e && (Ei = e, Fy(e), Jy(), e !== Ri && !Aa && Ny().then(() => {
- Array.from(Bd).forEach((t) => {
+ Hn[e] || (console.warn(`[Majoor i18n] Unknown language: ${e}, falling back to ${Ri}`), e = Ri), Hi !== e && (Hi = e, Oy(e), Jy(), e !== Ri && !Aa && ky().then(() => {
+ Array.from(Kd).forEach((t) => {
var n;
try {
t(e);
@@ -2352,7 +2352,7 @@ const Wg = (e) => {
(n = console.debug) == null || n.call(console, i);
}
});
- }), Array.from(Bd).forEach((t) => {
+ }), Array.from(Kd).forEach((t) => {
var n;
try {
t(e);
@@ -2361,7 +2361,7 @@ const Wg = (e) => {
}
}));
}, Wa = (e) => {
- Oy(!!e);
+ Fy(!!e);
}, Ty = (e) => {
var t, n;
try {
@@ -2376,7 +2376,7 @@ const Wg = (e) => {
const o = Ag(e);
for (const r of o) {
const l = ta(r);
- if (En[l] && l !== Ei) {
+ if (Hn[l] && l !== Hi) {
_i(l);
return;
}
@@ -2390,27 +2390,27 @@ const Wg = (e) => {
} catch (i) {
(n = console.debug) == null || n.call(console, i);
}
-}, By = () => Ei, Uy = () => Object.keys(En).map((e) => ({
+}, Ky = () => Hi, By = () => Object.keys(Hn).map((e) => ({
code: e,
- name: ky[e] || e
+ name: Xy[e] || e
})), m = (e, t, n) => {
var a, c;
- const i = En[Ei] || En[Ri], o = En[Ri];
+ const i = Hn[Hi] || Hn[Ri], o = Hn[Ri];
let r = i[e] || o[e];
if (!r) {
- const s = `${Ei}:${String(e || "")}`;
- if (!Nr.has(s)) {
- if (Nr.size >= Ud) {
- const d = Math.floor(Ud * 0.2), u = Nr.values();
+ const s = `${Hi}:${String(e || "")}`;
+ if (!kr.has(s)) {
+ if (kr.size >= Bd) {
+ const d = Math.floor(Bd * 0.2), u = kr.values();
for (let I = 0; I < d; I++) {
- const y = u.next().value;
- y && Nr.delete(y);
+ const A = u.next().value;
+ A && kr.delete(A);
}
}
- Nr.add(s);
+ kr.add(s);
try {
console.warn(
- `[Majoor i18n] Missing translation key "${e}" for locale "${Ei}"`
+ `[Majoor i18n] Missing translation key "${e}" for locale "${Hi}"`
);
} catch (d) {
(a = console.debug) == null || a.call(console, d);
@@ -2418,7 +2418,7 @@ const Wg = (e) => {
try {
typeof window < "u" && typeof window.dispatchEvent == "function" && window.dispatchEvent(
new CustomEvent("mjr-i18n-missing-key", {
- detail: { key: String(e || ""), locale: Ei }
+ detail: { key: String(e || ""), locale: Hi }
})
);
} catch (d) {
@@ -2431,12 +2431,12 @@ const Wg = (e) => {
return l && typeof l == "object" && Object.entries(l).forEach(([s, d]) => {
r = r.replaceAll(`{${s}}`, String(d));
}), r;
-}, wg = "mjr_toast_history_v1", Mg = "mjr_toast_history_last_read_v1", Dd = 60, Sg = "mjr:toast-history-changed";
+}, wg = "mjr_toast_history_v1", Mg = "mjr_toast_history_last_read_v1", Dd = 60, Gg = "mjr:toast-history-changed";
let bi = null;
function ri(e) {
return String(e || "").trim();
}
-function Ky(e) {
+function Uy(e) {
const t = ri(e).toLowerCase();
return t === "warn" ? "warning" : t === "danger" ? "error" : t || "info";
}
@@ -2444,35 +2444,35 @@ function Dy(e) {
const t = Number(e);
return Number.isFinite(t) ? t : null;
}
-function Ey(e) {
+function Hy(e) {
if (!e || typeof e != "object") return null;
- const t = Number(e.percent), n = Number.isFinite(t) ? Math.max(0, Math.min(100, Math.round(t))) : null, i = Number(e.current), o = Number(e.total), r = Number.isFinite(i) ? Math.max(0, Math.floor(i)) : null, l = Number.isFinite(o) ? Math.max(0, Math.floor(o)) : null, a = Number(e.indexed), c = Number(e.skipped), s = Number(e.errors), d = Number.isFinite(a) ? Math.max(0, Math.floor(a)) : null, u = Number.isFinite(c) ? Math.max(0, Math.floor(c)) : null, I = Number.isFinite(s) ? Math.max(0, Math.floor(s)) : null, y = ri(e.label);
- return n === null && r === null && l === null && d === null && u === null && I === null && !y ? null : {
+ const t = Number(e.percent), n = Number.isFinite(t) ? Math.max(0, Math.min(100, Math.round(t))) : null, i = Number(e.current), o = Number(e.total), r = Number.isFinite(i) ? Math.max(0, Math.floor(i)) : null, l = Number.isFinite(o) ? Math.max(0, Math.floor(o)) : null, a = Number(e.indexed), c = Number(e.skipped), s = Number(e.errors), d = Number.isFinite(a) ? Math.max(0, Math.floor(a)) : null, u = Number.isFinite(c) ? Math.max(0, Math.floor(c)) : null, I = Number.isFinite(s) ? Math.max(0, Math.floor(s)) : null, A = ri(e.label);
+ return n === null && r === null && l === null && d === null && u === null && I === null && !A ? null : {
percent: n,
current: r,
total: l,
indexed: d,
skipped: u,
errors: I,
- label: y
+ label: A
};
}
-function Hy(e, t, n) {
+function Ey(e, t, n) {
return e && t ? `${e}: ${t}` : t || e || n || "";
}
function wa(e, t = "info", n = null) {
if (!e || typeof e != "object") return null;
const i = ri(e.title || e.summary), o = ri(e.detail), r = ri(
- e.message || Hy(i, o, ri(e.fallbackMessage))
+ e.message || Ey(i, o, ri(e.fallbackMessage))
);
if (!r) return null;
const l = Dy(e.durationMs ?? e.duration ?? n), a = Number(e.createdAt), c = Number.isFinite(a) && a > 0 ? a : Date.now(), s = typeof e.persistent == "boolean" ? e.persistent : !(Number.isFinite(l) && l > 0);
return {
- id: ri(e.id) || Xs(`th-${c}-`, 4),
+ id: ri(e.id) || ks(`th-${c}-`, 4),
message: r,
title: i,
detail: o,
- type: Ky(e.type || t),
+ type: Uy(e.type || t),
createdAt: c,
durationMs: l,
persistent: s,
@@ -2480,13 +2480,13 @@ function wa(e, t = "info", n = null) {
trackId: ri(e.trackId),
status: ri(e.status),
operation: ri(e.operation),
- progress: Ey(e.progress),
+ progress: Hy(e.progress),
forceStore: !!e.forceStore,
actionLabel: ri(e.actionLabel),
actionUrl: ri(e.actionUrl)
};
}
-function qa() {
+function Pa() {
if (bi === null)
try {
const e = localStorage.getItem(wg), t = e ? JSON.parse(e) : [];
@@ -2499,7 +2499,7 @@ function qa() {
bi = [];
}
}
-function Gg() {
+function Sg() {
try {
localStorage.setItem(wg, JSON.stringify(bi));
} catch {
@@ -2507,7 +2507,7 @@ function Gg() {
}
function Fs() {
try {
- window.dispatchEvent(new CustomEvent(Sg));
+ window.dispatchEvent(new CustomEvent(Gg));
} catch {
}
}
@@ -2525,7 +2525,7 @@ function xg(e) {
}
}
function jg(e, t, n) {
- qa();
+ Pa();
const i = wa(e && typeof e == "object" ? e : {
message: ri(e),
type: t,
@@ -2543,13 +2543,13 @@ function jg(e, t, n) {
bi.splice(r, 1), i.id = String(l.id || i.id || "").trim() || i.id;
}
}
- bi.unshift(i), bi.length > Dd && (bi = bi.slice(0, Dd)), Gg(), Fs();
+ bi.unshift(i), bi.length > Dd && (bi = bi.slice(0, Dd)), Sg(), Fs();
}
function Py() {
- return qa(), bi.map((e) => ({ ...e }));
+ return Pa(), bi.map((e) => ({ ...e }));
}
function Qy() {
- qa();
+ Pa();
const e = qy();
return bi.filter((t) => t.createdAt > e).length;
}
@@ -2557,13 +2557,13 @@ function _y() {
xg(Date.now()), Fs();
}
function $y() {
- qa(), bi = [], Gg(), xg(Date.now()), Fs();
+ Pa(), bi = [], Sg(), xg(Date.now()), Fs();
}
function ef(e) {
const t = String(e || "info").trim().toLowerCase();
return t === "warn" ? "warning" : t === "danger" ? "error" : t === "success" || t === "warning" || t === "error" ? t : "info";
}
-function Kc(e) {
+function Dc(e) {
if (typeof e == "string") return e;
if (e && typeof e == "object") {
const t = String(e.summary || "").trim(), n = String(e.detail || e.message || "").trim();
@@ -2591,7 +2591,7 @@ function vg(e, t, n, i) {
actionLabel: String((o == null ? void 0 : o.actionLabel) || "").trim(),
actionUrl: String((o == null ? void 0 : o.actionUrl) || "").trim()
};
- return e && typeof e == "object" ? (r.title = String((o == null ? void 0 : o.title) || e.summary || "").trim(), r.detail = String((o == null ? void 0 : o.detail) || e.detail || e.message || "").trim(), r.message = Kc(e), r) : (r.title = String((o == null ? void 0 : o.title) || "").trim(), r.detail = String((o == null ? void 0 : o.detail) || "").trim(), r.message = Kc(e), r);
+ return e && typeof e == "object" ? (r.title = String((o == null ? void 0 : o.title) || e.summary || "").trim(), r.detail = String((o == null ? void 0 : o.detail) || e.detail || e.message || "").trim(), r.message = Dc(e), r) : (r.title = String((o == null ? void 0 : o.title) || "").trim(), r.detail = String((o == null ? void 0 : o.detail) || "").trim(), r.message = Dc(e), r);
}
function tl(e, t = "info", n, i) {
try {
@@ -2846,7 +2846,7 @@ function nf(e) {
}
return t;
}
-function Ze(e, t = "info", n, i) {
+function Ae(e, t = "info", n, i) {
var l, a;
if (t = ef(t), e = nf(e), n == null && (n = tf(t)), !(i != null && i.noHistory))
try {
@@ -2855,7 +2855,7 @@ function Ze(e, t = "info", n, i) {
}
const o = !(Number.isFinite(Number(n)) && Number(n) > 0), r = Qn();
try {
- const c = Sy(r);
+ const c = Gy(r);
if (c && typeof c.add == "function") {
let s = t;
s === "warning" && (s = "warn");
@@ -2865,8 +2865,8 @@ function Ze(e, t = "info", n, i) {
else if (typeof e != "string")
try {
u = e.message || String(e);
- } catch (y) {
- (l = console.debug) == null || l.call(console, y);
+ } catch (A) {
+ (l = console.debug) == null || l.call(console, A);
}
const I = { severity: s, summary: d, detail: u };
o || (I.life = n), c.add(I);
@@ -2883,26 +2883,26 @@ function Ze(e, t = "info", n, i) {
}
console.warn("[Majoor Toast] Native toast API unavailable", {
type: t,
- message: Kc(e),
+ message: Dc(e),
duration: o ? 0 : n
});
}
-const of = 2e3, rf = 15e3, lf = 8e3, Dc = "__mjr_write_token", dr = "token";
-let Vl = null, ml = null, Ed = null;
-const Fo = Wr({ ttlMs: of, maxSize: 1 });
+const of = 2e3, rf = 15e3, lf = 8e3, Hc = "__mjr_write_token", dr = "token";
+let Yl = null, ml = null, Hd = null;
+const Oo = Wr({ ttlMs: of, maxSize: 1 });
function af() {
var e;
try {
- return String(((e = sessionStorage == null ? void 0 : sessionStorage.getItem) == null ? void 0 : e.call(sessionStorage, Dc)) || "").trim();
+ return String(((e = sessionStorage == null ? void 0 : sessionStorage.getItem) == null ? void 0 : e.call(sessionStorage, Hc)) || "").trim();
} catch {
return "";
}
}
-function Os(e) {
+function zs(e) {
var n, i;
const t = String(e || "").trim();
try {
- return t ? (n = sessionStorage == null ? void 0 : sessionStorage.setItem) == null || n.call(sessionStorage, Dc, t) : (i = sessionStorage == null ? void 0 : sessionStorage.removeItem) == null || i.call(sessionStorage, Dc), !0;
+ return t ? (n = sessionStorage == null ? void 0 : sessionStorage.setItem) == null || n.call(sessionStorage, Hc, t) : (i = sessionStorage == null ? void 0 : sessionStorage.removeItem) == null || i.call(sessionStorage, Hc), !0;
} catch {
return !1;
}
@@ -2910,36 +2910,36 @@ function Os(e) {
function Lg() {
var e, t, n;
try {
- const i = (e = localStorage == null ? void 0 : localStorage.getItem) == null ? void 0 : e.call(localStorage, Oi), o = i ? JSON.parse(i) : {}, r = o && typeof o == "object" ? o : {}, l = r != null && r.data && typeof r.data == "object" ? r.data : r;
- l != null && l.security && typeof l.security == "object" && String(l.security.apiToken || "").trim() && (l.security.apiToken = "", (t = localStorage == null ? void 0 : localStorage.setItem) == null || t.call(localStorage, Oi, JSON.stringify(r)));
+ const i = (e = localStorage == null ? void 0 : localStorage.getItem) == null ? void 0 : e.call(localStorage, Fi), o = i ? JSON.parse(i) : {}, r = o && typeof o == "object" ? o : {}, l = r != null && r.data && typeof r.data == "object" ? r.data : r;
+ l != null && l.security && typeof l.security == "object" && String(l.security.apiToken || "").trim() && (l.security.apiToken = "", (t = localStorage == null ? void 0 : localStorage.setItem) == null || t.call(localStorage, Fi, JSON.stringify(r)));
} catch (i) {
(n = console.debug) == null || n.call(console, i);
}
}
-function Hd() {
+function Ed() {
var e;
try {
- Fo.delete(dr);
+ Oo.delete(dr);
} catch (t) {
(e = console.debug) == null || e.call(console, t);
}
- Os(""), Lg();
+ zs(""), Lg();
}
function Ec() {
var i, o, r, l, a;
- const e = Fo.get(dr);
+ const e = Oo.get(dr);
if (e !== void 0)
return e;
const t = Date.now(), n = af();
if (n)
- return Fo.set(dr, n, { at: t }), n;
+ return Oo.set(dr, n, { at: t }), n;
try {
- const c = (i = localStorage == null ? void 0 : localStorage.getItem) == null ? void 0 : i.call(localStorage, Oi), s = c ? JSON.parse(c) : null, d = s != null && s.data && typeof s.data == "object" ? s.data : s, u = String(((o = d == null ? void 0 : d.security) == null ? void 0 : o.apiToken) || "").trim();
+ const c = (i = localStorage == null ? void 0 : localStorage.getItem) == null ? void 0 : i.call(localStorage, Fi), s = c ? JSON.parse(c) : null, d = s != null && s.data && typeof s.data == "object" ? s.data : s, u = String(((o = d == null ? void 0 : d.security) == null ? void 0 : o.apiToken) || "").trim();
if (u) {
- Os(u);
+ zs(u);
try {
- const I = s && typeof s == "object" ? s : {}, y = I != null && I.data && typeof I.data == "object" ? I.data : I;
- y != null && y.security && typeof y.security == "object" && (y.security.apiToken = "", (r = localStorage == null ? void 0 : localStorage.setItem) == null || r.call(localStorage, Oi, JSON.stringify(I)), (l = window == null ? void 0 : window.dispatchEvent) == null || l.call(
+ const I = s && typeof s == "object" ? s : {}, A = I != null && I.data && typeof I.data == "object" ? I.data : I;
+ A != null && A.security && typeof A.security == "object" && (A.security.apiToken = "", (r = localStorage == null ? void 0 : localStorage.setItem) == null || r.call(localStorage, Fi, JSON.stringify(I)), (l = window == null ? void 0 : window.dispatchEvent) == null || l.call(
window,
new CustomEvent("mjr-settings-changed", {
detail: { key: "security.apiToken" }
@@ -2949,17 +2949,17 @@ function Ec() {
(a = console.debug) == null || a.call(console, I);
}
}
- return Fo.set(dr, u, { at: t }), u;
+ return Oo.set(dr, u, { at: t }), u;
} catch {
- return Fo.set(dr, "", { at: t }), "";
+ return Oo.set(dr, "", { at: t }), "";
}
}
-function Vg(e) {
+function Yg(e) {
var n, i;
const t = String(e || "").trim();
if (!t) return !1;
try {
- Fo.set(dr, t), ml = null, Os(t), Lg();
+ Oo.set(dr, t), ml = null, zs(t), Lg();
try {
(n = window == null ? void 0 : window.dispatchEvent) == null || n.call(
window,
@@ -2977,9 +2977,9 @@ const cf = /^[A-Za-z0-9._\-~+/]+=*$/;
function qd(e) {
var n;
const t = String(e || "").trim();
- return t ? cf.test(t) ? Vg(t) : ((n = console.debug) == null || n.call(console, "[MJR auth] Rejected malformed security token (invalid characters)"), !1) : !1;
+ return t ? cf.test(t) ? Yg(t) : ((n = console.debug) == null || n.call(console, "[MJR auth] Rejected malformed security token (invalid characters)"), !1) : !1;
}
-function Yl(e = {}) {
+function Vl(e = {}) {
const t = String((e == null ? void 0 : e.code) || "").trim().toUpperCase(), n = String((e == null ? void 0 : e.error) || "").trim(), i = Number((e == null ? void 0 : e.status) || 0) || 0;
ml = {
code: t,
@@ -2988,14 +2988,14 @@ function Yl(e = {}) {
at: Date.now()
};
}
-function Yg() {
+function Vg() {
const e = ml;
if (!e) return null;
const t = Date.now() - (Number(e.at || 0) || 0);
return t < 0 || t > rf ? (ml = null, null) : e;
}
function sf(e) {
- const t = Yg(), n = String((e == null ? void 0 : e.code) || "").trim().toUpperCase(), i = String((e == null ? void 0 : e.error) || "").trim(), o = String((t == null ? void 0 : t.code) || "").trim().toUpperCase(), r = String((t == null ? void 0 : t.error) || "").trim().toLowerCase(), l = i.toLowerCase();
+ const t = Vg(), n = String((e == null ? void 0 : e.code) || "").trim().toUpperCase(), i = String((e == null ? void 0 : e.error) || "").trim(), o = String((t == null ? void 0 : t.code) || "").trim().toUpperCase(), r = String((t == null ? void 0 : t.error) || "").trim().toLowerCase(), l = i.toLowerCase();
return o === "FORBIDDEN" && (r.includes("already configured") || r.includes("rotate-token")) ? m(
"toast.writeAuthConfiguredTokenRequired",
"Write access requires the Majoor API token already configured on the server. Open Settings -> Security -> API Token and enter the matching token."
@@ -3011,11 +3011,11 @@ function df(e) {
var o;
const t = String(e || "").trim();
if (!t) return;
- const n = Date.now(), i = Ed;
+ const n = Date.now(), i = Hd;
if (!(i && i.message === t && n - (Number(i.at || 0) || 0) < lf)) {
- Ed = { message: t, at: n };
+ Hd = { message: t, at: n };
try {
- Ze(
+ Ae(
{
summary: m("toast.writeAuthTitle", "Majoor remote write access"),
detail: t
@@ -3048,7 +3048,7 @@ async function mf() {
body: "{}"
});
if (!(t.headers.get("content-type") || "").includes("application/json"))
- return Yl({
+ return Vl({
code: "INVALID_RESPONSE",
error: `Bootstrap token request returned non-JSON response (${t.status})`,
status: t.status
@@ -3058,21 +3058,21 @@ async function mf() {
return (l = console.debug) == null || l.call(console, "[MJR auth] JSON parse error:", r), null;
});
if (!i || typeof i != "object")
- return Yl({
+ return Vl({
code: "INVALID_RESPONSE",
error: "Bootstrap token response was invalid.",
status: t.status
}), { ok: !1, token: !1 };
if (!i.ok)
- return Yl({
+ return Vl({
code: i == null ? void 0 : i.code,
error: i == null ? void 0 : i.error,
status: t.status
}), { ok: !1, token: !1 };
const o = String(((e = i == null ? void 0 : i.data) == null ? void 0 : e.token) || "").trim();
- return o ? { ok: Vg(o), token: !0 } : (ml = null, { ok: !0, token: !1 });
+ return o ? { ok: Yg(o), token: !0 } : (ml = null, { ok: !0, token: !1 });
} catch (t) {
- return Yl({
+ return Vl({
code: "NETWORK_ERROR",
error: (t == null ? void 0 : t.message) || "Bootstrap token request failed.",
status: 0
@@ -3084,104 +3084,104 @@ async function gf({ force: e = !1, allowCookieRefresh: t = !1 } = {}) {
const n = Ec();
if (n && !e) return n;
let i = { ok: !1, token: !1 };
- Vl || (Vl = (async () => {
+ Yl || (Yl = (async () => {
try {
return await mf();
} finally {
- Vl = null;
+ Yl = null;
}
})());
try {
- i = await Vl || i;
+ i = await Yl || i;
} catch (l) {
(r = console.debug) == null || r.call(console, l);
}
if (e && (i != null && i.ok) && !(i != null && i.token) && n)
- Hd();
+ Ed();
else if (e && !(i != null && i.ok)) {
- const l = Yg(), a = String((l == null ? void 0 : l.code) || "").trim().toUpperCase();
- (!a || !["NETWORK_ERROR", "INVALID_RESPONSE"].includes(a)) && Hd();
+ const l = Vg(), a = String((l == null ? void 0 : l.code) || "").trim().toUpperCase();
+ (!a || !["NETWORK_ERROR", "INVALID_RESPONSE"].includes(a)) && Ed();
}
const o = Ec();
return !o && t && (i != null && i.ok) ? !0 : o;
}
function Pd() {
- Fo.clear();
+ Oo.clear();
}
async function If(e) {
- return !e || typeof e != "string" ? { ok: !1, error: "Missing mode", code: "INVALID_INPUT" } : Et("/mjr/am/settings/probe-backend", { mode: e });
+ return !e || typeof e != "string" ? { ok: !1, error: "Missing mode", code: "INVALID_INPUT" } : Dt("/mjr/am/settings/probe-backend", { mode: e });
}
async function bf() {
- return Ft(ct.SETTINGS_METADATA_FALLBACK);
+ return Ft(st.SETTINGS_METADATA_FALLBACK);
}
async function Qd({ image: e, media: t } = {}) {
- return Et(ct.SETTINGS_METADATA_FALLBACK, { image: e, media: t });
+ return Dt(st.SETTINGS_METADATA_FALLBACK, { image: e, media: t });
}
async function pf() {
- return Ft(ct.SETTINGS_VECTOR_SEARCH);
+ return Ft(st.SETTINGS_VECTOR_SEARCH);
}
async function yf(e = !0) {
- return Et(ct.SETTINGS_VECTOR_SEARCH, { enabled: !!e });
+ return Dt(st.SETTINGS_VECTOR_SEARCH, { enabled: !!e });
}
async function ff() {
- return Ft(ct.SETTINGS_EXECUTION_GROUPING);
+ return Ft(st.SETTINGS_EXECUTION_GROUPING);
}
-async function hf(e = !0) {
- return Et(ct.SETTINGS_EXECUTION_GROUPING, { enabled: !!e });
+async function Cf(e = !0) {
+ return Dt(st.SETTINGS_EXECUTION_GROUPING, { enabled: !!e });
}
-async function Cf() {
- return Ft(ct.SETTINGS_HUGGINGFACE);
+async function hf() {
+ return Ft(st.SETTINGS_HUGGINGFACE);
}
async function Zf(e = "") {
- return Et(ct.SETTINGS_HUGGINGFACE, { token: String(e ?? "").trim() });
+ return Dt(st.SETTINGS_HUGGINGFACE, { token: String(e ?? "").trim() });
}
async function Af() {
- return Ft(ct.SETTINGS_AI_LOGGING);
+ return Ft(st.SETTINGS_AI_LOGGING);
}
async function Wf(e = !1) {
- return Et(ct.SETTINGS_AI_LOGGING, { enabled: !!e });
+ return Dt(st.SETTINGS_AI_LOGGING, { enabled: !!e });
}
async function wf() {
- return Ft(ct.SETTINGS_ROUTE_LOGGING);
+ return Ft(st.SETTINGS_ROUTE_LOGGING);
}
async function Mf(e = !1) {
- return Et(ct.SETTINGS_ROUTE_LOGGING, { enabled: !!e });
+ return Dt(st.SETTINGS_ROUTE_LOGGING, { enabled: !!e });
}
-async function Sf() {
- return Ft(ct.SETTINGS_STARTUP_LOGGING);
+async function Gf() {
+ return Ft(st.SETTINGS_STARTUP_LOGGING);
}
-async function Gf(e = !1) {
- return Et(ct.SETTINGS_STARTUP_LOGGING, { enabled: !!e });
+async function Sf(e = !1) {
+ return Dt(st.SETTINGS_STARTUP_LOGGING, { enabled: !!e });
}
async function xf() {
- return Ft(ct.SETTINGS_LTXAV_RGB_FALLBACK);
+ return Ft(st.SETTINGS_LTXAV_RGB_FALLBACK);
}
async function jf(e = !1) {
- return Et(ct.SETTINGS_LTXAV_RGB_FALLBACK, { enabled: !!e });
+ return Dt(st.SETTINGS_LTXAV_RGB_FALLBACK, { enabled: !!e });
}
async function vf() {
- return Ft(ct.SETTINGS_OUTPUT_DIRECTORY);
+ return Ft(st.SETTINGS_OUTPUT_DIRECTORY);
}
async function Lf(e, t = {}) {
const n = String(e ?? "").trim();
- return Et(ct.SETTINGS_OUTPUT_DIRECTORY, { output_directory: n }, t);
+ return Dt(st.SETTINGS_OUTPUT_DIRECTORY, { output_directory: n }, t);
}
-async function Vf() {
- return Ft(ct.SETTINGS_INDEX_DIRECTORY);
+async function Yf() {
+ return Ft(st.SETTINGS_INDEX_DIRECTORY);
}
-async function Yf(e, t = {}) {
+async function Vf(e, t = {}) {
const n = String(e ?? "").trim();
- return Et(ct.SETTINGS_INDEX_DIRECTORY, { index_directory: n }, t);
+ return Dt(st.SETTINGS_INDEX_DIRECTORY, { index_directory: n }, t);
}
-async function kg() {
+async function Xg() {
return Ft("/mjr/am/settings/security");
}
-async function Xg(e) {
- return Et("/mjr/am/settings/security", e && typeof e == "object" ? e : {});
+async function Ng(e) {
+ return Dt("/mjr/am/settings/security", e && typeof e == "object" ? e : {});
}
-async function kf() {
+async function Xf() {
var t, n;
- const e = await Et("/mjr/am/settings/security/bootstrap-token", {});
+ const e = await Dt("/mjr/am/settings/security/bootstrap-token", {});
if (e != null && e.ok)
try {
const i = String(((t = e == null ? void 0 : e.data) == null ? void 0 : t.token) || "").trim();
@@ -3191,22 +3191,22 @@ async function kf() {
}
return e;
}
-async function zs(e) {
+async function Js(e) {
var t;
if (e && typeof e == "object") {
const n = String(
e.filepath || e.path || ((t = e == null ? void 0 : e.file_info) == null ? void 0 : t.filepath) || ""
).trim();
- return e.id != null ? Et("/mjr/am/open-in-folder", { asset_id: fi(e.id) }) : Et("/mjr/am/open-in-folder", { filepath: n });
+ return e.id != null ? Dt("/mjr/am/open-in-folder", { asset_id: fi(e.id) }) : Dt("/mjr/am/open-in-folder", { filepath: n });
}
- return Et("/mjr/am/open-in-folder", { asset_id: fi(e) });
+ return Dt("/mjr/am/open-in-folder", { asset_id: fi(e) });
}
-async function Hr({ op: e = "", path: t = "", name: n = "", destination: i = "", recursive: o = !0 } = {}, r = {}) {
+async function Er({ op: e = "", path: t = "", name: n = "", destination: i = "", recursive: o = !0 } = {}, r = {}) {
const l = {
op: String(e || "").trim().toLowerCase(),
path: String(t || "").trim()
};
- return n != null && String(n).trim() && (l.name = String(n).trim()), i != null && String(i).trim() && (l.destination = String(i).trim()), l.op === "delete" && (l.recursive = !!o), Et(ct.BROWSER_FOLDER_OP, l, r);
+ return n != null && String(n).trim() && (l.name = String(n).trim()), i != null && String(i).trim() && (l.destination = String(i).trim()), l.op === "delete" && (l.recursive = !!o), Dt(st.BROWSER_FOLDER_OP, l, r);
}
async function _d(e = {}) {
const t = (r, l) => r == null ? l : !!r, n = String(e.scope || "output").trim().toLowerCase() || "output", i = e.customRootId ?? e.custom_root_id ?? e.rootId ?? e.root_id ?? e.customRoot ?? null, o = {
@@ -3237,59 +3237,59 @@ async function _d(e = {}) {
background_metadata: t(e.backgroundMetadata ?? e.background_metadata, !0),
maintenance_force: t(e.maintenanceForce ?? e.maintenance_force, !1)
};
- return i && (o.custom_root_id = String(i)), Et(ct.INDEX_RESET, o);
+ return i && (o.custom_root_id = String(i)), Dt(st.INDEX_RESET, o);
}
-async function Xf({ scope: e = "output", customRootId: t = "" } = {}) {
+async function Nf({ scope: e = "output", customRootId: t = "" } = {}) {
const n = String(e || "output").trim().toLowerCase() || "output", i = String(t || "").trim(), o = { scope: n };
- return i && (o.custom_root_id = i), Et(ct.WATCHER_SCOPE, o);
+ return i && (o.custom_root_id = i), Dt(st.WATCHER_SCOPE, o);
}
-async function Ng(e = {}) {
- return Ft(ct.WATCHER_STATUS, e);
+async function kg(e = {}) {
+ return Ft(st.WATCHER_STATUS, e);
}
async function Ma(e = !0) {
- return Et(ct.WATCHER_TOGGLE, { enabled: !!e });
+ return Dt(st.WATCHER_TOGGLE, { enabled: !!e });
}
-async function Nf() {
- return Ft(ct.WATCHER_SETTINGS);
+async function kf() {
+ return Ft(st.WATCHER_SETTINGS);
}
async function $d(e = {}) {
- return Et(ct.WATCHER_SETTINGS, e);
+ return Dt(st.WATCHER_SETTINGS, e);
}
async function Rf(e = {}) {
- return Ft(ct.TOOLS_STATUS, e);
+ return Ft(st.TOOLS_STATUS, e);
}
-async function Ff(e = {}) {
- return Ft(ct.STATUS, e);
+async function Of(e = {}) {
+ return Ft(st.STATUS, e);
}
-async function Of() {
- return Et("/mjr/am/db/force-delete", {});
+async function Ff() {
+ return Dt("/mjr/am/db/force-delete", {});
}
async function zf(e = {}) {
- return Ft(ct.DB_BACKUPS, e);
+ return Ft(st.DB_BACKUPS, e);
}
async function Jf() {
- return Et(ct.DB_BACKUP_SAVE, {});
+ return Dt(st.DB_BACKUP_SAVE, {});
}
async function Tf({ name: e = "", useLatest: t = !1 } = {}) {
const n = {};
- return e && (n.name = String(e)), t && (n.use_latest = !0), Et(ct.DB_BACKUP_RESTORE, n);
+ return e && (n.name = String(e)), t && (n.use_latest = !0), Dt(st.DB_BACKUP_RESTORE, n);
}
-async function Bf(e = 250) {
- return Et("/mjr/am/duplicates/analyze", {
+async function Kf(e = 250) {
+ return Dt("/mjr/am/duplicates/analyze", {
limit: Math.max(10, Math.min(5e3, Number(e) || 250))
});
}
-async function Uf({ scope: e = "output", customRootId: t = "", maxGroups: n = 6, maxPairs: i = 10 } = {}, o = {}) {
+async function Bf({ scope: e = "output", customRootId: t = "", maxGroups: n = 6, maxPairs: i = 10 } = {}, o = {}) {
let r = `/mjr/am/duplicates/alerts?scope=${encodeURIComponent(String(e || "output"))}`;
return t && (r += `&custom_root_id=${encodeURIComponent(String(t))}`), r += `&max_groups=${encodeURIComponent(String(Math.max(1, Number(n) || 6)))}`, r += `&max_pairs=${encodeURIComponent(String(Math.max(1, Number(i) || 10)))}`, Ft(r, o);
}
-async function Kf(e, t = []) {
- return Et("/mjr/am/duplicates/merge-tags", {
+async function Uf(e, t = []) {
+ return Dt("/mjr/am/duplicates/merge-tags", {
keep_asset_id: Number(e) || 0,
merge_asset_ids: Array.isArray(t) ? t.map((n) => Number(n) || 0).filter((n) => n > 0) : []
});
}
-async function Sa(e) {
+async function Ga(e) {
var o;
let t, n;
if (e && typeof e == "object") {
@@ -3300,11 +3300,11 @@ async function Sa(e) {
n = t ? { asset_id: t } : { filepath: r };
} else
t = fi(e), n = { asset_id: t };
- const i = await Et("/mjr/am/asset/delete", n);
+ const i = await Dt("/mjr/am/asset/delete", n);
return i != null && i.ok && t && Rg([t]), i;
}
async function Df(e) {
- const t = Array.isArray(e) ? e.map((i) => fi(i)).filter(Boolean) : [], n = await Et("/mjr/am/assets/delete", { ids: t });
+ const t = Array.isArray(e) ? e.map((i) => fi(i)).filter(Boolean) : [], n = await Dt("/mjr/am/assets/delete", { ids: t });
return n != null && n.ok && Rg(t), n;
}
function Rg(e) {
@@ -3319,14 +3319,14 @@ function Rg(e) {
(t = console.debug) == null || t.call(console, n);
}
}
-async function Js(e, t) {
+async function Ts(e, t) {
var o, r, l;
let n;
if (e && typeof e == "object") {
n = fi(e.id);
const a = String(
e.filepath || e.path || ((o = e == null ? void 0 : e.file_info) == null ? void 0 : o.filepath) || ""
- ).trim(), c = n ? await Et("/mjr/am/asset/rename", { asset_id: n, new_name: t }) : await Et("/mjr/am/asset/rename", { filepath: a, new_name: t });
+ ).trim(), c = n ? await Dt("/mjr/am/asset/rename", { asset_id: n, new_name: t }) : await Dt("/mjr/am/asset/rename", { filepath: a, new_name: t });
if (c != null && c.ok && n)
try {
const s = await getAssetMetadata(n);
@@ -3337,7 +3337,7 @@ async function Js(e, t) {
return c;
}
n = fi(e);
- const i = await Et("/mjr/am/asset/rename", { asset_id: n, new_name: t });
+ const i = await Dt("/mjr/am/asset/rename", { asset_id: n, new_name: t });
if (i != null && i.ok && n)
try {
const a = await getAssetMetadata(n);
@@ -3347,7 +3347,7 @@ async function Js(e, t) {
}
return i;
}
-async function Fg() {
+async function Og() {
const e = typeof AbortController < "u" ? new AbortController() : null;
let t = null;
try {
@@ -3357,21 +3357,21 @@ async function Fg() {
}
}
async function na(e) {
- return Et("/mjr/am/collections", { name: String(e || "").trim() });
-}
-async function Ef(e) {
- const t = String(e || "").trim();
- return Et(`/mjr/am/collections/${encodeURIComponent(t)}/delete`, {});
-}
-async function Ga(e, t) {
- const n = String(e || "").trim(), i = Array.isArray(t) ? t : [];
- return Et(`/mjr/am/collections/${encodeURIComponent(n)}/add`, { assets: i });
-}
-async function Og(e, t) {
- const n = String(e || "").trim(), i = Array.isArray(t) ? t : [];
- return Et(`/mjr/am/collections/${encodeURIComponent(n)}/remove`, { filepaths: i });
+ return Dt("/mjr/am/collections", { name: String(e || "").trim() });
}
async function Hf(e) {
+ const t = String(e || "").trim();
+ return Dt(`/mjr/am/collections/${encodeURIComponent(t)}/delete`, {});
+}
+async function Sa(e, t) {
+ const n = String(e || "").trim(), i = Array.isArray(t) ? t : [];
+ return Dt(`/mjr/am/collections/${encodeURIComponent(n)}/add`, { assets: i });
+}
+async function Fg(e, t) {
+ const n = String(e || "").trim(), i = Array.isArray(t) ? t : [];
+ return Dt(`/mjr/am/collections/${encodeURIComponent(n)}/remove`, { filepaths: i });
+}
+async function Ef(e) {
const t = String(e || "").trim();
return Ft(`/mjr/am/collections/${encodeURIComponent(t)}/assets`);
}
@@ -3379,8 +3379,8 @@ async function zg(e, t = 20) {
const n = String(e || "").trim();
if (!n) return { ok: !1, error: "Empty query" };
const i = t && typeof t == "object" ? t : { topK: Number(t) }, o = Math.max(1, Math.min(200, Number((i == null ? void 0 : i.topK) ?? 20) || 20)), r = String((i == null ? void 0 : i.scope) || "").trim(), l = String((i == null ? void 0 : i.customRootId) || "").trim();
- let a = `${ct.VECTOR_SEARCH}?q=${encodeURIComponent(n)}&top_k=${o}`;
- return r && (a += `&scope=${encodeURIComponent(r)}`), l && (a += `&custom_root_id=${encodeURIComponent(l)}`), a = Da(a, {
+ let a = `${st.VECTOR_SEARCH}?q=${encodeURIComponent(n)}&top_k=${o}`;
+ return r && (a += `&scope=${encodeURIComponent(r)}`), l && (a += `&custom_root_id=${encodeURIComponent(l)}`), a = Ha(a, {
subfolder: (i == null ? void 0 : i.subfolder) ?? null,
kind: (i == null ? void 0 : i.kind) ?? null,
hasWorkflow: (i == null ? void 0 : i.hasWorkflow) ?? null,
@@ -3400,28 +3400,28 @@ async function qf(e, t = 20) {
const n = String(e || "").trim();
if (!n) return { ok: !1, error: "Missing asset ID" };
const i = t && typeof t == "object" ? t : { topK: Number(t) }, o = Math.max(1, Math.min(200, Number((i == null ? void 0 : i.topK) ?? 20) || 20)), r = String((i == null ? void 0 : i.scope) || "").trim(), l = String((i == null ? void 0 : i.customRootId) || "").trim();
- let a = `${ct.VECTOR_SIMILAR}/${encodeURIComponent(n)}?top_k=${o}`;
+ let a = `${st.VECTOR_SIMILAR}/${encodeURIComponent(n)}?top_k=${o}`;
return r && (a += `&scope=${encodeURIComponent(r)}`), l && (a += `&custom_root_id=${encodeURIComponent(l)}`), Ft(a, {
dedupeKey: `vec:${n}:${o}:${r}:${l}`
});
}
async function Pf(e) {
const t = String(e || "").trim();
- return t ? Ft(`${ct.VECTOR_ALIGNMENT}/${encodeURIComponent(t)}`) : { ok: !1, error: "Missing asset ID" };
+ return t ? Ft(`${st.VECTOR_ALIGNMENT}/${encodeURIComponent(t)}`) : { ok: !1, error: "Missing asset ID" };
}
async function Jg(e) {
const t = String(e || "").trim();
- return t ? Et(`${ct.VECTOR_INDEX}/${encodeURIComponent(t)}`, {}) : { ok: !1, error: "Missing asset ID" };
+ return t ? Dt(`${st.VECTOR_INDEX}/${encodeURIComponent(t)}`, {}) : { ok: !1, error: "Missing asset ID" };
}
async function xa() {
- return Ft(ct.VECTOR_STATS);
+ return Ft(st.VECTOR_STATS);
}
async function Tg(e = 64, t = {}) {
- var b, L, h;
+ var b, L, C;
const n = Math.max(1, Math.min(200, e)), i = typeof (t == null ? void 0 : t.onProgress) == "function" ? t.onProgress : null, o = String((t == null ? void 0 : t.scope) || "").trim().toLowerCase(), r = String((t == null ? void 0 : t.customRootId) ?? (t == null ? void 0 : t.custom_root_id) ?? "").trim();
- let l = `${ct.VECTOR_BACKFILL}?batch_size=${n}&async=1`;
+ let l = `${st.VECTOR_BACKFILL}?batch_size=${n}&async=1`;
o && (l += `&scope=${encodeURIComponent(o)}`), r && (l += `&custom_root_id=${encodeURIComponent(r)}`);
- const a = await Et(l, {}, { timeoutMs: 3e4 });
+ const a = await Dt(l, {}, { timeoutMs: 3e4 });
if (!(a != null && a.ok)) return a;
const c = (a == null ? void 0 : a.data) || {}, s = String((c == null ? void 0 : c.status) || "").toLowerCase(), d = String((c == null ? void 0 : c.backfill_id) || "").trim();
try {
@@ -3431,64 +3431,64 @@ async function Tg(e = 64, t = {}) {
}
if (!d || !["queued", "running", "pending"].includes(s))
return a;
- const u = Number(t == null ? void 0 : t.pollIntervalMs), I = Number(t == null ? void 0 : t.pollTimeoutMs), y = Number.isFinite(u) ? Math.max(500, Math.min(1e4, Math.floor(u))) : nh, S = Number.isFinite(I) ? Math.max(
+ const u = Number(t == null ? void 0 : t.pollIntervalMs), I = Number(t == null ? void 0 : t.pollTimeoutMs), A = Number.isFinite(u) ? Math.max(500, Math.min(1e4, Math.floor(u))) : nC, h = Number.isFinite(I) ? Math.max(
1e4,
- Math.min(oh, Math.floor(I))
- ) : ih, Z = Date.now();
- let C = null;
- for (; Date.now() - Z < S; ) {
- await gg(y);
+ Math.min(oC, Math.floor(I))
+ ) : iC, S = Date.now();
+ let W = null;
+ for (; Date.now() - S < h; ) {
+ await gg(A);
const G = await Ft(
- `${ct.VECTOR_BACKFILL_STATUS}?backfill_id=${encodeURIComponent(d)}`,
+ `${st.VECTOR_BACKFILL_STATUS}?backfill_id=${encodeURIComponent(d)}`,
{ timeoutMs: 3e4 }
);
if (!(G != null && G.ok)) {
- C = G;
+ W = G;
continue;
}
- const W = (G == null ? void 0 : G.data) || {}, f = String((W == null ? void 0 : W.status) || "").toLowerCase();
- C = G;
+ const Z = (G == null ? void 0 : G.data) || {}, f = String((Z == null ? void 0 : Z.status) || "").toLowerCase();
+ W = G;
try {
- i == null || i(W);
+ i == null || i(Z);
} catch (X) {
(L = console.debug) == null || L.call(console, X);
}
if (f === "succeeded")
return {
ok: !0,
- data: (W == null ? void 0 : W.result) || {},
+ data: (Z == null ? void 0 : Z.result) || {},
code: null,
status: 200
};
if (f === "failed")
return {
ok: !1,
- error: String((W == null ? void 0 : W.error) || "Vector backfill failed"),
- code: String((W == null ? void 0 : W.code) || "DB_ERROR"),
- data: W,
+ error: String((Z == null ? void 0 : Z.error) || "Vector backfill failed"),
+ code: String((Z == null ? void 0 : Z.code) || "DB_ERROR"),
+ data: Z,
status: 500
};
}
const g = await Ft(
- `${ct.VECTOR_BACKFILL_STATUS}?backfill_id=${encodeURIComponent(d)}`,
+ `${st.VECTOR_BACKFILL_STATUS}?backfill_id=${encodeURIComponent(d)}`,
{ timeoutMs: 3e4 }
- ), A = (g == null ? void 0 : g.data) || (C == null ? void 0 : C.data) || {}, p = String((A == null ? void 0 : A.status) || "").toLowerCase();
+ ), y = (g == null ? void 0 : g.data) || (W == null ? void 0 : W.data) || {}, p = String((y == null ? void 0 : y.status) || "").toLowerCase();
if (g != null && g.ok && ["queued", "running", "pending"].includes(p)) {
try {
- i == null || i(A);
+ i == null || i(y);
} catch (G) {
- (h = console.debug) == null || h.call(console, G);
+ (C = console.debug) == null || C.call(console, G);
}
return {
ok: !0,
code: "PENDING",
status: 202,
data: {
- ...A,
+ ...y,
pending: !0,
timed_out: !0,
- poll_timeout_ms: S,
- backfill_id: String((A == null ? void 0 : A.backfill_id) || d),
+ poll_timeout_ms: h,
+ backfill_id: String((y == null ? void 0 : y.backfill_id) || d),
status: p || "running"
},
meta: { pending: !0 }
@@ -3496,21 +3496,21 @@ async function Tg(e = 64, t = {}) {
}
return g != null && g.ok && p === "failed" ? {
ok: !1,
- error: String((A == null ? void 0 : A.error) || "Vector backfill failed"),
- code: String((A == null ? void 0 : A.code) || "DB_ERROR"),
- data: A,
+ error: String((y == null ? void 0 : y.error) || "Vector backfill failed"),
+ code: String((y == null ? void 0 : y.code) || "DB_ERROR"),
+ data: y,
status: 500
} : {
ok: !1,
- error: `Vector backfill polling timed out after ${S}ms`,
+ error: `Vector backfill polling timed out after ${h}ms`,
code: "TIMEOUT",
- data: A || null,
+ data: y || null,
status: 408
};
}
async function Qf(e) {
const t = String(e || "").trim();
- return t ? Et(`${ct.VECTOR_CAPTION}/${encodeURIComponent(t)}`, {}) : { ok: !1, error: "Missing asset ID" };
+ return t ? Dt(`${st.VECTOR_CAPTION}/${encodeURIComponent(t)}`, {}) : { ok: !1, error: "Missing asset ID" };
}
async function _f(e, {
topK: t = 50,
@@ -3525,15 +3525,15 @@ async function _f(e, {
minWidth: d = null,
minHeight: u = null,
maxWidth: I = null,
- maxHeight: y = null,
- workflowType: S = null,
- dateRange: Z = null,
- dateExact: C = null
+ maxHeight: A = null,
+ workflowType: h = null,
+ dateRange: S = null,
+ dateExact: W = null
} = {}) {
const g = String(e || "").trim();
if (!g) return { ok: !1, error: "Empty query" };
- let A = `${ct.HYBRID_SEARCH}?q=${encodeURIComponent(g)}&top_k=${Math.max(1, Math.min(200, t))}&scope=${encodeURIComponent(n)}`;
- return i && (A += `&custom_root_id=${encodeURIComponent(i)}`), A = Da(A, {
+ let y = `${st.HYBRID_SEARCH}?q=${encodeURIComponent(g)}&top_k=${Math.max(1, Math.min(200, t))}&scope=${encodeURIComponent(n)}`;
+ return i && (y += `&custom_root_id=${encodeURIComponent(i)}`), y = Ha(y, {
subfolder: o,
kind: r,
hasWorkflow: l,
@@ -3543,30 +3543,30 @@ async function _f(e, {
minWidth: d,
minHeight: u,
maxWidth: I,
- maxHeight: y,
- workflowType: S,
- dateRange: Z,
- dateExact: C
- }), Ft(A, { timeoutMs: 12e4 });
+ maxHeight: A,
+ workflowType: h,
+ dateRange: S,
+ dateExact: W
+ }), Ft(y, { timeoutMs: 12e4 });
}
async function $f(e = 8) {
- return Et(ct.VECTOR_SUGGEST_COLLECTIONS, { k: Math.max(2, Math.min(20, e)) });
+ return Dt(st.VECTOR_SUGGEST_COLLECTIONS, { k: Math.max(2, Math.min(20, e)) });
}
-const eh = 3e4, eu = eh, tu = "__MJR_API_CLIENT__", Bg = 2e3, th = 200, nh = 1e3, ih = 30 * 6e4, oh = 720 * 6e4, ho = "settings", nu = "available-tags", qr = Wr({ ttlMs: Bg, maxSize: 1 }), Pr = Wr({ ttlMs: Bg, maxSize: 1 }), Hc = Wr({ ttlMs: () => ch(), maxSize: 1 }), rh = /* @__PURE__ */ new Set(["1", "true", "yes", "on"]), lh = /* @__PURE__ */ new Set(["0", "false", "no", "off"]);
-function ah(e, t = !1) {
+const eC = 3e4, eu = eC, tu = "__MJR_API_CLIENT__", Kg = 2e3, tC = 200, nC = 1e3, iC = 30 * 6e4, oC = 720 * 6e4, Co = "settings", nu = "available-tags", qr = Wr({ ttlMs: Kg, maxSize: 1 }), Pr = Wr({ ttlMs: Kg, maxSize: 1 }), qc = Wr({ ttlMs: () => cC(), maxSize: 1 }), rC = /* @__PURE__ */ new Set(["1", "true", "yes", "on"]), lC = /* @__PURE__ */ new Set(["0", "false", "no", "off"]);
+function aC(e, t = !1) {
if (typeof e == "boolean") return e;
if (typeof e == "number") return e !== 0;
if (typeof e == "string") {
const n = e.trim().toLowerCase();
- if (rh.has(n)) return !0;
- if (lh.has(n)) return !1;
+ if (rC.has(n)) return !0;
+ if (lC.has(n)) return !1;
}
return !!t;
}
-function ch() {
+function cC() {
var e, t, n, i;
try {
- const o = ((e = localStorage == null ? void 0 : localStorage.getItem) == null ? void 0 : e.call(localStorage, Oi)) || "{}", r = JSON.parse(o), l = ((t = r == null ? void 0 : r.cache) == null ? void 0 : t.tagsTTLms) ?? ((n = r == null ? void 0 : r.cache) == null ? void 0 : n.tagsTTL) ?? ((i = r == null ? void 0 : r.cache) == null ? void 0 : i.tags_ttl_ms) ?? null, a = Number(l);
+ const o = ((e = localStorage == null ? void 0 : localStorage.getItem) == null ? void 0 : e.call(localStorage, Fi)) || "{}", r = JSON.parse(o), l = ((t = r == null ? void 0 : r.cache) == null ? void 0 : t.tagsTTLms) ?? ((n = r == null ? void 0 : r.cache) == null ? void 0 : n.tagsTTL) ?? ((i = r == null ? void 0 : r.cache) == null ? void 0 : i.tags_ttl_ms) ?? null, a = Number(l);
return Number.isFinite(a) ? Math.max(1e3, Math.min(10 * 6e4, Math.floor(a))) : eu;
} catch {
return eu;
@@ -3578,18 +3578,18 @@ function iu() {
function ou() {
Pr.clear();
}
-function qc() {
- Hc.clear();
+function Pc() {
+ qc.clear();
}
-function sh(e) {
+function sC(e) {
return String(e ?? "").trim().toLowerCase() || "";
}
-function dh(e) {
+function dC(e) {
const t = [], n = /* @__PURE__ */ new Set();
for (const i of Array.isArray(e) ? e : []) {
const o = String(i ?? "").trim();
if (!o) continue;
- const r = sh(o);
+ const r = sC(o);
!r || n.has(r) || (n.add(r), t.push(o));
}
return t;
@@ -3600,64 +3600,64 @@ try {
e && !e[tu] && (e[tu] = { initialized: !0 }, (tg = e.addEventListener) == null || tg.call(e, "storage", (t) => {
var n;
try {
- (t == null ? void 0 : t.key) === Oi && (iu(), ou(), qc(), Pd());
+ (t == null ? void 0 : t.key) === Fi && (iu(), ou(), Pc(), Pd());
} catch (i) {
(n = console.debug) == null || n.call(console, i);
}
}), (ng = e.addEventListener) == null || ng.call(e, "mjr-settings-changed", () => {
- iu(), ou(), qc(), Pd();
+ iu(), ou(), Pc(), Pd();
}));
} catch (e) {
(ig = console.debug) == null || ig.call(console, e);
}
-const uh = () => {
+const uC = () => {
var n, i;
- const e = qr.get(ho);
+ const e = qr.get(Co);
if (e !== void 0)
return e;
const t = Date.now();
try {
- const o = (n = localStorage == null ? void 0 : localStorage.getItem) == null ? void 0 : n.call(localStorage, Oi);
+ const o = (n = localStorage == null ? void 0 : localStorage.getItem) == null ? void 0 : n.call(localStorage, Fi);
if (!o)
- return qr.set(ho, !1, { at: t }), !1;
+ return qr.set(Co, !1, { at: t }), !1;
const r = JSON.parse(o), l = !!((i = r == null ? void 0 : r.observability) != null && i.enabled);
- return qr.set(ho, l, { at: t }), l;
+ return qr.set(Co, l, { at: t }), l;
} catch {
- return qr.set(ho, !1, { at: t }), !1;
+ return qr.set(Co, !1, { at: t }), !1;
}
-}, Ug = () => {
+}, Bg = () => {
var n, i;
- const e = Pr.get(ho);
+ const e = Pr.get(Co);
if (e !== void 0)
return e;
const t = Date.now();
try {
- const o = (n = localStorage == null ? void 0 : localStorage.getItem) == null ? void 0 : n.call(localStorage, Oi);
+ const o = (n = localStorage == null ? void 0 : localStorage.getItem) == null ? void 0 : n.call(localStorage, Fi);
if (!o)
- return Pr.set(ho, !0, { at: t }), !0;
- const r = JSON.parse(o), l = (i = r == null ? void 0 : r.ratingTagsSync) == null ? void 0 : i.enabled, a = l == null ? !0 : ah(l, !0);
- return Pr.set(ho, a, { at: t }), a;
+ return Pr.set(Co, !0, { at: t }), !0;
+ const r = JSON.parse(o), l = (i = r == null ? void 0 : r.ratingTagsSync) == null ? void 0 : i.enabled, a = l == null ? !0 : aC(l, !0);
+ return Pr.set(Co, a, { at: t }), a;
} catch {
- return Pr.set(ho, !0, { at: t }), !0;
+ return Pr.set(Co, !0, { at: t }), !0;
}
-}, Ts = Ay({
- readObsEnabled: uh,
+}, Ks = Ay({
+ readObsEnabled: uC,
readAuthToken: Ec,
ensureWriteAuthToken: gf,
normalizeWriteAuthFailure: uf
-}), Kg = Ts.fetchAPI;
+}), Ug = Ks.fetchAPI;
async function Ft(e, t = {}) {
- return Ts.get(e, t);
+ return Ks.get(e, t);
}
-async function Et(e, t, n = {}) {
- return Ts.post(e, t, n);
+async function Dt(e, t, n = {}) {
+ return Ks.post(e, t, n);
}
-async function Ho(e, t, n = {}) {
+async function Eo(e, t, n = {}) {
var c;
- const i = Ug(), o = e && typeof e == "object" ? e : null, r = o ? o.id : e, l = fi(r), a = {
+ const i = Bg(), o = e && typeof e == "object" ? e : null, r = o ? o.id : e, l = fi(r), a = {
rating: Math.max(0, Math.min(5, Number(t) || 0))
};
- return l ? a.asset_id = l : o && (a.filepath = o.filepath || o.path || ((c = o == null ? void 0 : o.file_info) == null ? void 0 : c.filepath) || "", a.type = o.type || "output", a.root_id = Mi(o)), Kg("/mjr/am/asset/rating", {
+ return l ? a.asset_id = l : o && (a.filepath = o.filepath || o.path || ((c = o == null ? void 0 : o.file_info) == null ? void 0 : c.filepath) || "", a.type = o.type || "output", a.root_id = Mi(o)), Ug("/mjr/am/asset/rating", {
...n,
method: "POST",
headers: {
@@ -3667,13 +3667,13 @@ async function Ho(e, t, n = {}) {
body: JSON.stringify(a)
});
}
-async function mh(e, t, n = {}) {
+async function mC(e, t, n = {}) {
var s;
- const i = Ug(), o = e && typeof e == "object" ? e : null, r = o ? o.id : e, l = fi(r), a = {
+ const i = Bg(), o = e && typeof e == "object" ? e : null, r = o ? o.id : e, l = fi(r), a = {
tags: Array.isArray(t) ? t : []
};
l ? a.asset_id = l : o && (a.filepath = o.filepath || o.path || ((s = o == null ? void 0 : o.file_info) == null ? void 0 : s.filepath) || "", a.type = o.type || "output", a.root_id = Mi(o));
- const c = await Kg("/mjr/am/asset/tags", {
+ const c = await Ug("/mjr/am/asset/tags", {
...n,
method: "POST",
headers: {
@@ -3682,16 +3682,16 @@ async function mh(e, t, n = {}) {
},
body: JSON.stringify(a)
});
- return c != null && c.ok && qc(), c;
+ return c != null && c.ok && Pc(), c;
}
-async function gh() {
- const e = Hc.get(nu);
+async function gC() {
+ const e = qc.get(nu);
if (Array.isArray(e))
return { ok: !0, data: e, error: null, code: "OK", meta: { cached: !0 } };
const t = await Ft("/mjr/am/tags");
if (t != null && t.ok && Array.isArray(t.data)) {
- const n = dh(t.data);
- return Hc.set(nu, n), { ...t, data: n };
+ const n = dC(t.data);
+ return qc.set(nu, n), { ...t, data: n };
}
return t;
}
@@ -3714,12 +3714,12 @@ async function Bs(e, t = {}) {
const n = Array.isArray(e) ? e : [], i = [];
for (const o of n) {
const r = Number(o);
- if (Number.isFinite(r) && (i.push(Math.trunc(r)), i.length >= th))
+ if (Number.isFinite(r) && (i.push(Math.trunc(r)), i.length >= tC))
break;
}
- return i.length ? Et("/mjr/am/assets/batch", { asset_ids: i }, t) : { ok: !0, data: [], error: null, code: "OK" };
+ return i.length ? Dt("/mjr/am/assets/batch", { asset_ids: i }, t) : { ok: !0, data: [], error: null, code: "OK" };
}
-async function Eg({
+async function Hg({
type: e = "output",
filename: t = "",
subfolder: n = "",
@@ -3732,7 +3732,7 @@ async function Eg({
let I = `/mjr/am/metadata?type=${encodeURIComponent(a)}&filename=${encodeURIComponent(c)}`;
return u && (I += `&filepath=${encodeURIComponent(u)}`), s && (I += `&subfolder=${encodeURIComponent(s)}`), d && (I += `&root_id=${encodeURIComponent(d)}`), Ft(I, l);
}
-async function Ih({ filepath: e = "", root_id: t = "", subfolder: n = "" } = {}, i = {}) {
+async function IC({ filepath: e = "", root_id: t = "", subfolder: n = "" } = {}, i = {}) {
var d, u;
try {
if (globalThis.__mjrFolderInfoSupported === !1)
@@ -3745,10 +3745,10 @@ async function Ih({ filepath: e = "", root_id: t = "", subfolder: n = "" } = {},
if (globalThis.__mjrFolderInfoSupported == null) {
const I = await Ft("/mjr/am/routes");
if (I != null && I.ok && Array.isArray(I.data)) {
- const y = I.data.some(
- (S) => String((S == null ? void 0 : S.path) || "").trim() === "/mjr/am/folder-info"
+ const A = I.data.some(
+ (h) => String((h == null ? void 0 : h.path) || "").trim() === "/mjr/am/folder-info"
);
- if (globalThis.__mjrFolderInfoSupported = !!y, !y)
+ if (globalThis.__mjrFolderInfoSupported = !!A, !A)
return {
ok: !1,
data: null,
@@ -3762,7 +3762,7 @@ async function Ih({ filepath: e = "", root_id: t = "", subfolder: n = "" } = {},
(d = console.debug) == null || d.call(console, I);
}
const o = String(e || "").trim(), r = String(t || "").trim(), l = String(n || "").trim();
- let a = ct.FOLDER_INFO;
+ let a = st.FOLDER_INFO;
const c = [];
o ? (c.push(`filepath=${encodeURIComponent(o)}`), c.push("browser_mode=1")) : (r && c.push(`root_id=${encodeURIComponent(r)}`), l && c.push(`subfolder=${encodeURIComponent(l)}`)), c.length && (a += `?${c.join("&")}`);
const s = await Ft(a, i);
@@ -3773,7 +3773,7 @@ async function Ih({ filepath: e = "", root_id: t = "", subfolder: n = "" } = {},
}
return s;
}
-const Ge = Object.freeze({
+const Se = Object.freeze({
// Debug / diagnostics (opt-in)
DEBUG_SAFE_CALL: !1,
DEBUG_SAFE_LISTENERS: !1,
@@ -3869,12 +3869,12 @@ const Ge = Object.freeze({
// UI safety knobs
DELETE_CONFIRMATION: !0,
DEBUG_VERBOSE_ERRORS: !1
-}), fe = {
- ...Ge
+}), he = {
+ ...Se
};
function io(e, ...t) {
try {
- fe.DEBUG_VERBOSE_ERRORS && console.debug(e, ...t);
+ he.DEBUG_VERBOSE_ERRORS && console.debug(e, ...t);
} catch {
}
}
@@ -3882,19 +3882,19 @@ function ai(e, t = "Majoor", { showToast: n = !1, toastType: i = "error" } = {})
var r, l;
const o = (e == null ? void 0 : e.message) || String(e || "Unknown error");
try {
- fe.DEBUG_VERBOSE_ERRORS ? console.error(`[Majoor][${t}]`, o, e) : console.debug(`[Majoor][${t}]`, o);
+ he.DEBUG_VERBOSE_ERRORS ? console.error(`[Majoor][${t}]`, o, e) : console.debug(`[Majoor][${t}]`, o);
} catch (a) {
(r = console.debug) == null || r.call(console, a);
}
- if (n && fe.DEBUG_VERBOSE_ERRORS)
+ if (n && he.DEBUG_VERBOSE_ERRORS)
try {
- Ze(`${t}: ${o}`, i, 4e3);
+ Ae(`${t}: ${o}`, i, 4e3);
} catch (a) {
(l = console.debug) == null || l.call(console, a);
}
}
-let ru = !1, co = null, lu = !1, sc = null;
-function bh() {
+let ru = !1, co = null, lu = !1, dc = null;
+function bC() {
var e;
try {
const t = window == null ? void 0 : window.__MJR_EXECUTION_RUNTIME__;
@@ -3904,7 +3904,7 @@ function bh() {
}
}
async function Il(e = {}) {
- if (!fe || typeof fe != "object" || !fe.AUTO_SCAN_ON_STARTUP || ru) return;
+ if (!he || typeof he != "object" || !he.AUTO_SCAN_ON_STARTUP || ru) return;
const t = Math.max(0, Number(e == null ? void 0 : e.delayMs) || 0), n = (e == null ? void 0 : e.idleOnly) !== !1;
if (t > 0) {
co && clearTimeout(co), co = setTimeout(() => {
@@ -3912,7 +3912,7 @@ async function Il(e = {}) {
}, t);
return;
}
- if (n && !bh()) {
+ if (n && !bC()) {
co && clearTimeout(co), co = setTimeout(() => {
co = null, Il({ ...e, delayMs: 0 });
}, 5e3);
@@ -3921,7 +3921,7 @@ async function Il(e = {}) {
ru = !0;
try {
io("[Majoor] Starting startup scan of output directory...");
- const i = await Et(ct.SCAN, {
+ const i = await Dt(st.SCAN, {
recursive: !0,
incremental: !0,
fast: !0,
@@ -3938,36 +3938,36 @@ async function Il(e = {}) {
console.error("📂 Majoor [❌]: Startup scan error:", i);
}
}
-async function ph() {
+async function pC() {
var e;
try {
await Promise.allSettled([
- Ft(ct.HEALTH),
- Ft(`${ct.HEALTH_COUNTERS}?scope=output`),
- Ft(ct.HEALTH_DB)
+ Ft(st.HEALTH),
+ Ft(`${st.HEALTH_COUNTERS}?scope=output`),
+ Ft(st.HEALTH_DB)
]);
} catch (t) {
(e = console.debug) == null || e.call(console, t);
}
}
-async function yh(e = {}) {
- return lu ? sc || Promise.resolve() : (lu = !0, sc = (async () => {
- await ph(), await Il(e);
- })(), sc);
+async function yC(e = {}) {
+ return lu ? dc || Promise.resolve() : (lu = !0, dc = (async () => {
+ await pC(), await Il(e);
+ })(), dc);
}
-async function fh() {
+async function fC() {
try {
io("[Majoor] Testing API connection...");
- const e = await Ft(ct.HEALTH);
+ const e = await Ft(st.HEALTH);
e != null && e.ok ? io("[Majoor] API connection successful, health:", e.data.overall) : console.error("📂 Majoor [❌]: API health check failed:", e == null ? void 0 : e.error);
} catch (e) {
console.error("📂 Majoor [❌]: Failed to connect to API:", e);
}
}
-const hh = async (e, t = "Majoor", n = {}) => {
+const CC = async (e, t = "Majoor", n = {}) => {
var r, l, a;
if ((n == null ? void 0 : n.native) !== !1) {
- const c = Hg();
+ const c = Eg();
if (c)
try {
c.show(qg(e, t));
@@ -3995,14 +3995,14 @@ const hh = async (e, t = "Majoor", n = {}) => {
const s = new o();
vr(s);
const d = () => {
- var y;
+ var A;
try {
s.close();
- } catch (S) {
- (y = console.debug) == null || y.call(console, S);
+ } catch (h) {
+ (A = console.debug) == null || A.call(console, h);
}
c();
- }, u = bn(
+ }, u = yn(
"div",
{
style: {
@@ -4013,7 +4013,7 @@ const hh = async (e, t = "Majoor", n = {}) => {
}
},
[
- bn(
+ yn(
"div",
{
style: {
@@ -4023,7 +4023,7 @@ const hh = async (e, t = "Majoor", n = {}) => {
}
},
[
- bn("div", {
+ yn("div", {
textContent: t,
style: {
fontWeight: "700",
@@ -4034,7 +4034,7 @@ const hh = async (e, t = "Majoor", n = {}) => {
})
]
),
- bn("div", {
+ yn("div", {
textContent: String(e || ""),
style: {
fontSize: "22px",
@@ -4043,13 +4043,13 @@ const hh = async (e, t = "Majoor", n = {}) => {
lineHeight: "1.45"
}
}),
- bn(
+ yn(
"div",
{
style: { display: "flex", justifyContent: "flex-end", gap: "10px" }
},
[
- bn("button", {
+ yn("button", {
textContent: m("dialog.confirm", "Confirm"),
onclick: d,
style: {
@@ -4071,8 +4071,8 @@ const hh = async (e, t = "Majoor", n = {}) => {
} catch {
try {
window.alert(e);
- } catch (y) {
- (I = console.debug) == null || I.call(console, y);
+ } catch (A) {
+ (I = console.debug) == null || I.call(console, A);
}
c();
}
@@ -4108,7 +4108,7 @@ const hh = async (e, t = "Majoor", n = {}) => {
(d = console.debug) == null || d.call(console, u);
}
r(!!s);
- }, c = bn(
+ }, c = yn(
"div",
{
style: {
@@ -4119,7 +4119,7 @@ const hh = async (e, t = "Majoor", n = {}) => {
}
},
[
- bn(
+ yn(
"div",
{
style: {
@@ -4129,7 +4129,7 @@ const hh = async (e, t = "Majoor", n = {}) => {
}
},
[
- bn("div", {
+ yn("div", {
textContent: t,
style: {
fontWeight: "700",
@@ -4140,7 +4140,7 @@ const hh = async (e, t = "Majoor", n = {}) => {
})
]
),
- bn("div", {
+ yn("div", {
textContent: String(e || ""),
style: {
fontSize: "22px",
@@ -4149,13 +4149,13 @@ const hh = async (e, t = "Majoor", n = {}) => {
lineHeight: "1.45"
}
}),
- bn(
+ yn(
"div",
{
style: { display: "flex", justifyContent: "flex-end", gap: "10px" }
},
[
- bn("button", {
+ yn("button", {
textContent: m("dialog.cancel", "Cancel"),
onclick: () => a(!1),
style: {
@@ -4168,7 +4168,7 @@ const hh = async (e, t = "Majoor", n = {}) => {
cursor: "pointer"
}
}),
- bn("button", {
+ yn("button", {
textContent: m("dialog.confirm", "Confirm"),
onclick: () => a(!0),
style: {
@@ -4195,7 +4195,7 @@ const hh = async (e, t = "Majoor", n = {}) => {
}
}
});
-}, Ch = async (e, t = "Majoor", n = {}) => {
+}, hC = async (e, t = "Majoor", n = {}) => {
const i = String((n == null ? void 0 : n.yes) || m("dialog.yes", "Yes")), o = String((n == null ? void 0 : n.no) || m("dialog.no", "No")), r = String((n == null ? void 0 : n.cancel) || m("dialog.cancel", "Cancel")), l = jr();
if (!l)
try {
@@ -4218,11 +4218,11 @@ ${i}=y, ${o}=n, ${r}=c`,
var I;
try {
c.close();
- } catch (y) {
- (I = console.debug) == null || I.call(console, y);
+ } catch (A) {
+ (I = console.debug) == null || I.call(console, A);
}
a(u || "cancel");
- }, d = bn(
+ }, d = yn(
"div",
{
style: {
@@ -4236,7 +4236,7 @@ ${i}=y, ${o}=n, ${r}=c`,
}
},
[
- bn(
+ yn(
"div",
{
style: {
@@ -4246,7 +4246,7 @@ ${i}=y, ${o}=n, ${r}=c`,
}
},
[
- bn("div", {
+ yn("div", {
textContent: t,
style: {
fontWeight: "700",
@@ -4257,7 +4257,7 @@ ${i}=y, ${o}=n, ${r}=c`,
})
]
),
- bn("div", {
+ yn("div", {
textContent: String(e || ""),
style: {
fontSize: "22px",
@@ -4266,7 +4266,7 @@ ${i}=y, ${o}=n, ${r}=c`,
lineHeight: "1.45"
}
}),
- bn(
+ yn(
"div",
{
style: {
@@ -4277,7 +4277,7 @@ ${i}=y, ${o}=n, ${r}=c`,
}
},
[
- bn("button", {
+ yn("button", {
textContent: i,
onclick: () => s("yes"),
style: {
@@ -4290,7 +4290,7 @@ ${i}=y, ${o}=n, ${r}=c`,
cursor: "pointer"
}
}),
- bn("button", {
+ yn("button", {
textContent: o,
onclick: () => s("no"),
style: {
@@ -4303,7 +4303,7 @@ ${i}=y, ${o}=n, ${r}=c`,
cursor: "pointer"
}
}),
- bn("button", {
+ yn("button", {
textContent: r,
onclick: () => s("cancel"),
style: {
@@ -4326,7 +4326,7 @@ ${i}=y, ${o}=n, ${r}=c`,
a("cancel");
}
});
-}, Zh = async (e, t = "Majoor", n = []) => {
+}, ZC = async (e, t = "Majoor", n = []) => {
const i = Array.isArray(n) ? n.filter((r) => r && typeof r == "object").map((r, l) => ({
id: String(r.id || `choice_${l}`),
label: String(r.label || r.id || `Choice ${l + 1}`),
@@ -4366,7 +4366,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`,
r(d ?? null);
}, c = (d) => {
const u = d.variant === "danger", I = d.variant === "primary";
- return bn("button", {
+ return yn("button", {
textContent: d.label,
onclick: () => a(d.id),
style: {
@@ -4379,7 +4379,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`,
cursor: "pointer"
}
});
- }, s = bn(
+ }, s = yn(
"div",
{
style: {
@@ -4393,7 +4393,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`,
}
},
[
- bn(
+ yn(
"div",
{
style: {
@@ -4403,7 +4403,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`,
}
},
[
- bn("div", {
+ yn("div", {
textContent: t,
style: {
fontWeight: "700",
@@ -4414,7 +4414,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`,
})
]
),
- bn("div", {
+ yn("div", {
textContent: String(e || ""),
style: {
fontSize: "22px",
@@ -4423,7 +4423,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`,
lineHeight: "1.45"
}
}),
- bn(
+ yn(
"div",
{
style: {
@@ -4443,7 +4443,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`,
r(null);
}
});
-}, Vi = async (e, t = "", n = "Majoor") => {
+}, Yi = async (e, t = "", n = "Majoor") => {
var r;
const i = Us();
if (i)
@@ -4471,11 +4471,11 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`,
var I;
try {
a.close();
- } catch (y) {
- (I = console.debug) == null || I.call(console, y);
+ } catch (A) {
+ (I = console.debug) == null || I.call(console, A);
}
l(u ?? null);
- }, s = bn("input", {
+ }, s = yn("input", {
type: "text",
value: String(t ?? ""),
style: {
@@ -4491,7 +4491,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`,
onkeydown: (u) => {
u.key === "Enter" && c(s.value), u.key === "Escape" && c(null), u.stopPropagation();
}
- }), d = bn(
+ }), d = yn(
"div",
{
style: {
@@ -4502,7 +4502,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`,
}
},
[
- bn("div", {
+ yn("div", {
textContent: n,
style: {
fontWeight: "600",
@@ -4510,7 +4510,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`,
color: "rgba(255,255,255,0.95)"
}
}),
- bn("div", {
+ yn("div", {
textContent: String(e || ""),
style: {
fontSize: "13px",
@@ -4520,13 +4520,13 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`,
}
}),
s,
- bn(
+ yn(
"div",
{
style: { display: "flex", justifyContent: "flex-end", gap: "10px" }
},
[
- bn("button", {
+ yn("button", {
textContent: m("dialog.cancel", "Cancel"),
onclick: () => c(null),
style: {
@@ -4538,7 +4538,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`,
cursor: "pointer"
}
}),
- bn("button", {
+ yn("button", {
textContent: m("dialog.ok", "OK"),
onclick: () => c(s.value),
style: {
@@ -4571,7 +4571,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`,
}
}
});
-}, Pa = () => {
+}, Qa = () => {
try {
const e = Qn();
return (e == null ? void 0 : e.ui) || null;
@@ -4581,7 +4581,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`,
}, Us = () => {
var e, t, n;
try {
- const i = Qn(), o = Gy(i);
+ const i = Qn(), o = Sy(i);
if (o && typeof o.confirm == "function" && typeof o.prompt == "function")
return o;
} catch (i) {
@@ -4595,10 +4595,10 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`,
(n = console.debug) == null || n.call(console, i);
}
return null;
-}, Hg = () => {
+}, Eg = () => {
var e;
try {
- const t = Pa();
+ const t = Qa();
if (t != null && t.dialog && typeof t.dialog.show == "function")
return t.dialog;
} catch (t) {
@@ -4608,7 +4608,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`,
}, qg = (e, t = "Majoor") => {
const n = String(e ?? ""), i = String(t ?? "").trim();
return !i || i.toLowerCase() === "majoor" ? n : `${i}
${n}`;
-}, Ah = /* @__PURE__ */ new Set([
+}, AC = /* @__PURE__ */ new Set([
"abort",
"blur",
"change",
@@ -4648,7 +4648,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`,
"transitionend",
"unload",
"wheel"
-]), Wh = /* @__PURE__ */ new Set([
+]), WC = /* @__PURE__ */ new Set([
"__proto__",
"constructor",
"prototype",
@@ -4659,7 +4659,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`,
"__defineSetter__",
"__lookupGetter__",
"__lookupSetter__"
-]), wh = /* @__PURE__ */ new Set([
+]), wC = /* @__PURE__ */ new Set([
"id",
"name",
"value",
@@ -4672,12 +4672,12 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`,
"htmlFor",
"role",
"tabIndex"
-]), Mh = (e, t = {}, n = []) => {
+]), MC = (e, t = {}, n = []) => {
const i = document.createElement(e);
return Object.entries(t || {}).forEach(([r, l]) => {
var c, s;
const a = String(r || "");
- if (!(!a || Wh.has(a))) {
+ if (!(!a || WC.has(a))) {
if (r === "style" && l && typeof l == "object") {
Object.assign(i.style, l);
return;
@@ -4689,11 +4689,11 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`,
if (a.startsWith("on")) {
if (typeof l == "function") {
const d = a.slice(2).toLowerCase();
- Ah.has(d) && i.addEventListener(d, l);
+ AC.has(d) && i.addEventListener(d, l);
}
return;
}
- if (wh.has(a))
+ if (wC.has(a))
try {
i[a] = l;
return;
@@ -4713,21 +4713,21 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`,
i.appendChild(document.createTextNode(String(r)));
}
}), i;
-}, bn = (e, t, n) => {
- const i = Pa();
+}, yn = (e, t, n) => {
+ const i = Qa();
if (i != null && i.$el)
try {
return i.$el(e, t, n);
} catch {
}
- return Mh(e, t, n);
+ return MC(e, t, n);
}, jr = () => {
- const e = Pa();
+ const e = Qa();
return (e == null ? void 0 : e.ComfyDialog) || null;
-}, Sh = 999999, Gh = 560, xh = 12, vr = (e) => {
+}, GC = 999999, SC = 560, xC = 12, vr = (e) => {
var t;
try {
- e.element.style.zIndex = String(Sh), e.element.style.width = `${Gh}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 = `${xh}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(GC), e.element.style.width = `${SC}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 = `${xC}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 (n) {
(t = console.debug) == null || t.call(console, n);
}
@@ -4749,27 +4749,27 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`,
} catch (o) {
(i = console.debug) == null || i.call(console, o);
}
-}, jh = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
+}, jC = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
__proto__: null,
- $el: bn,
- comfyAlert: hh,
- comfyChoice: Zh,
+ $el: yn,
+ comfyAlert: CC,
+ comfyChoice: ZC,
comfyConfirm: yi,
- comfyPrompt: Vi,
- comfyYesNoCancel: Ch,
+ comfyPrompt: Yi,
+ comfyYesNoCancel: hC,
getComfyDialogCtor: jr,
- getComfyUi: Pa,
+ getComfyUi: Qa,
getExtensionManagerDialog: Us,
- getNativeDialog: Hg,
+ getNativeDialog: Eg,
hideDialogNativeClose: Lr,
styleDialog: vr,
toNativeDialogMessage: qg
-}, Symbol.toStringTag, { value: "Module" })), Pc = "mjr:version-update-available", vh = "__MJR_VERSION_UPDATE_STATE__", Lh = "https://api.github.com/repos/MajoorWaldi/ComfyUI-Majoor-AssetsManager/releases/latest", Vh = "https://api.github.com/repos/MajoorWaldi/ComfyUI-Majoor-AssetsManager/releases/tags/nightly", dc = "majoor_last_update_check", au = "majoor_version_toast_notice_version", cu = "majoor_nightly_release_marker", Yh = 1440 * 60 * 1e3;
+}, Symbol.toStringTag, { value: "Module" })), Qc = "mjr:version-update-available", vC = "__MJR_VERSION_UPDATE_STATE__", LC = "https://api.github.com/repos/MajoorWaldi/ComfyUI-Majoor-AssetsManager/releases/latest", YC = "https://api.github.com/repos/MajoorWaldi/ComfyUI-Majoor-AssetsManager/releases/tags/nightly", uc = "majoor_last_update_check", au = "majoor_version_toast_notice_version", cu = "majoor_nightly_release_marker", VC = 1440 * 60 * 1e3;
let ia = { available: !1, timestamp: Date.now() };
function Pg(e) {
return e ? String(e).trim().replace(/^v/i, "") : "";
}
-function kh(e, t) {
+function XC(e, t) {
const n = String(e || "").trim().toLowerCase(), i = String(t || "").trim().toLowerCase(), r = ["nightly", "dev", "alpha", "experimental"].some((a) => n.includes(a) || i.includes(a)), l = n.includes("+") || n.length > 10 && /^[a-f0-9]+$/i.test(n);
return r || l;
}
@@ -4779,7 +4779,7 @@ function su(e) {
return Number.isFinite(n) ? Math.max(0, n) : 0;
});
}
-function Xh(e, t) {
+function NC(e, t) {
if (!e || !t) return !1;
const n = su(e), i = su(t), o = Math.max(n.length, i.length);
for (let r = 0; r < o; r += 1) {
@@ -4789,7 +4789,7 @@ function Xh(e, t) {
}
return !1;
}
-function Nh(e) {
+function kC(e) {
var n, i;
const t = Math.max(1, Number(e) || 1e4);
try {
@@ -4828,7 +4828,7 @@ function Nh(e) {
} };
}
async function Qg(e) {
- const { signal: t, cleanup: n } = Nh(1e4), i = await fetch(e, {
+ const { signal: t, cleanup: n } = kC(1e4), i = await fetch(e, {
cache: "no-cache",
signal: t,
headers: {
@@ -4842,12 +4842,12 @@ async function Qg(e) {
throw new Error("GitHub release returned invalid payload");
return o;
}
-async function Rh() {
- const e = await Qg(Lh);
+async function RC() {
+ const e = await Qg(LC);
return Pg(e.tag_name);
}
-async function Fh() {
- const e = await Qg(Vh);
+async function OC() {
+ const e = await Qg(YC);
return String(
e.published_at || e.created_at || e.updated_at || e.target_commitish || e.tag_name || ""
).trim();
@@ -4858,27 +4858,27 @@ function so(e) {
const t = typeof window < "u" ? window : null;
if (t) {
try {
- t[vh] = ia;
+ t[vC] = ia;
} catch (o) {
(n = console.debug) == null || n.call(console, o);
}
try {
- t.dispatchEvent(new CustomEvent(Pc, { detail: ia }));
+ t.dispatchEvent(new CustomEvent(Qc, { detail: ia }));
} catch (o) {
(i = console.debug) == null || i.call(console, o);
}
}
}
-function Oh() {
+function FC() {
return ia;
}
-async function zh({ force: e = !1 } = {}) {
+async function zC({ force: e = !1 } = {}) {
var r, l, a, c, s;
if (typeof window > "u")
return null;
let t, n;
try {
- const d = await Ft(ct.VERSION);
+ const d = await Ft(st.VERSION);
if (!(d != null && d.ok))
return so({ available: !1 }), null;
t = Pg((r = d.data) == null ? void 0 : r.version), n = String(((l = d.data) == null ? void 0 : l.branch) || "").trim().toLowerCase();
@@ -4888,17 +4888,17 @@ async function zh({ force: e = !1 } = {}) {
let i = !1;
try {
if (!e) {
- const d = Number(ni.get(dc) || 0);
- Number.isFinite(d) && Date.now() - d < Yh && (i = !0);
+ const d = Number(ni.get(uc) || 0);
+ Number.isFinite(d) && Date.now() - d < VC && (i = !0);
}
} catch {
}
- if (!t || kh(t, n)) {
+ if (!t || XC(t, n)) {
if (i)
return so({ available: !1 }), null;
let d;
try {
- d = await Fh();
+ d = await OC();
const u = String(
ni.get(cu) || ""
).trim(), I = !!(u && d && u !== d);
@@ -4907,7 +4907,7 @@ async function zh({ force: e = !1 } = {}) {
current: t || "nightly",
latest: "nightly",
channel: "nightly"
- }), I && Ze(
+ }), I && Ae(
{
summary: m("msg.nightlyUpdateTitle", "Majoor Assets Manager"),
detail: m(
@@ -4920,14 +4920,14 @@ async function zh({ force: e = !1 } = {}) {
), d)
try {
ni.set(cu, d);
- } catch (y) {
- (a = console.debug) == null || a.call(console, y);
+ } catch (A) {
+ (a = console.debug) == null || a.call(console, A);
}
} catch (u) {
console.warn("Unable to check Majoor nightly updates:", u), so({ available: !1 });
} finally {
try {
- ni.set(dc, String(Date.now()));
+ ni.set(uc, String(Date.now()));
} catch {
}
}
@@ -4937,16 +4937,16 @@ async function zh({ force: e = !1 } = {}) {
return null;
let o;
try {
- o = await Rh();
+ o = await RC();
} catch (d) {
return console.warn("Unable to check Majoor updates:", d), so({ available: !1 }), null;
} finally {
try {
- ni.set(dc, String(Date.now()));
+ ni.set(uc, String(Date.now()));
} catch {
}
}
- if (!o || !Xh(o, t))
+ if (!o || !NC(o, t))
return so({ available: !1 }), null;
so({
available: !0,
@@ -4957,7 +4957,7 @@ async function zh({ force: e = !1 } = {}) {
if (String(
ni.get(au) || ""
).trim() !== o) {
- Ze(
+ Ae(
{
summary: m("msg.newVersionTitle", "Majoor Assets Manager"),
detail: m(
@@ -4983,7 +4983,7 @@ async function zh({ force: e = !1 } = {}) {
}
return { current: t, latest: o };
}
-function Qc() {
+function _c() {
const e = "mjr-feed-selection-override";
if (typeof document > "u" || document.getElementById(e)) return;
const t = document.createElement("style");
@@ -4999,15 +4999,15 @@ function Qc() {
}
`, document.head.appendChild(t);
}
-function Jh({ enabled: e = !0 } = {}) {
+function JC({ enabled: e = !0 } = {}) {
if (!e) return;
const t = "mjr-theme-comfy-css";
if (document.getElementById(t)) {
- Qc();
+ _c();
return;
}
try {
- const n = new URL("data:text/css;base64,LyoqCiAqIE1ham9vciBBc3NldHMgTWFuYWdlciDigJQgQ29tZnktbGlrZSB0aGVtZSBsYXllcgogKgogKiBSVUxFUzoKICogLSBEbyBOT1QgaGFyZGNvZGUgYSBjdXN0b20gcGFsZXR0ZTsgdXNlIGV4aXN0aW5nIENvbWZ5VUkgQ1NTIHZhcmlhYmxlcyB2aWEgdmFyKC4uLikuCiAqIC0gS2VlcCBldmVyeXRoaW5nIHNjb3BlZCB1bmRlciBgLm1qci1hc3NldHMtbWFuYWdlcmAgdG8gYXZvaWQgbGVha2luZyBzdHlsZXMgdG8gQ29tZnlVSSAoZXhjZXB0IGAubWpyLXBvcG92ZXIqYCB3aGljaCBjYW4gYmUgcG9ydGFsZWQgdG8gYGRvY3VtZW50LmJvZHlgKS4KICovCgoubWpyLWFzc2V0cy1tYW5hZ2VyIHsKICAgIC8qIFR5cG9ncmFwaHkgKi8KICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1jb21meS1mb250LCB2YXIoLS1mb250LWludGVyLCB1aS1zYW5zLXNlcmlmLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sICJTZWdvZSBVSSIsIFJvYm90bywgQXJpYWwsIHNhbnMtc2VyaWYpKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yLCB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSkpOwoKICAgIC8qCiAgICAgKiBTdXJmYWNlcyDigJQgcHJpb3JpdHk6IENvbWZ5VUkgdjEuNDIgZGVzaWduLXN5c3RlbSB0b2tlbiDihpIgbGVnYWN5IHRva2VuIOKGkiBoYXJkIGZhbGxiYWNrCiAgICAgKiBOZXcgdG9rZW5zOiAtLWludGVyZmFjZS1wYW5lbC1zdXJmYWNlLCAtLWludGVyZmFjZS1tZW51LXN1cmZhY2UsIC0taW50ZXJmYWNlLXBhbmVsLWhvdmVyLXN1cmZhY2UsCiAgICAgKiAgICAgICAgICAgICAtLW1vZGFsLWNhcmQtYmFja2dyb3VuZCwgLS1idXR0b24tc3VyZmFjZSwgLS1idXR0b24taG92ZXItc3VyZmFjZSwKICAgICAqICAgICAgICAgICAgIC0taW50ZXJmYWNlLXBhbmVsLXNlbGVjdGVkLXN1cmZhY2UsIC0tcHJpbWFyeS1iYWNrZ3JvdW5kLCAtLW11dGVkLWZvcmVncm91bmQsCiAgICAgKiAgICAgICAgICAgICAtLWJvcmRlci1kZWZhdWx0LCAtLXN1Y2Nlc3MtYmFja2dyb3VuZCwgLS13YXJuaW5nLWJhY2tncm91bmQsIC0tZGVzdHJ1Y3RpdmUtYmFja2dyb3VuZAogICAgICovCiAgICAtLW1qci1zdXJmYWNlLTA6IHZhcigtLWludGVyZmFjZS1wYW5lbC1zdXJmYWNlLCB2YXIoLS1jb250ZW50LWJnLCAjMWUxZTFlKSk7CiAgICAtLW1qci1zdXJmYWNlLTE6IHZhcigtLWludGVyZmFjZS1tZW51LXN1cmZhY2UsIHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpKTsKICAgIC0tbWpyLXN1cmZhY2UtMjogdmFyKC0taW50ZXJmYWNlLXBhbmVsLWhvdmVyLXN1cmZhY2UsIHZhcigtLWNvbWZ5LW1lbnUtc2Vjb25kYXJ5LWJnLCAjMzMzKSk7CiAgICAtLW1qci1zdXJmYWNlLTM6IHZhcigtLW1vZGFsLWNhcmQtYmFja2dyb3VuZCwgdmFyKC0tY29tZnktbWVudS1iZywgIzIyMikpOwogICAgLS1tanItYm9yZGVyOiB2YXIoLS1ib3JkZXItZGVmYXVsdCwgdmFyKC0tYm9yZGVyLWNvbG9yLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKSk7CiAgICAtLW1qci1tdXRlZDogdmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCwgdmFyKC0tZGVzY3JpcC10ZXh0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKSk7CiAgICAtLW1qci1hY2NlbnQ6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSk7CiAgICAtLW1qci1hY2NlbnQtaG92ZXI6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1ob3ZlciwgdmFyKC0tY29tZnktYWNjZW50LCAjN2VjOGZmKSk7CiAgICAtLW1qci1idG4tc3VyZmFjZTogdmFyKC0tYnV0dG9uLXN1cmZhY2UsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKICAgIC0tbWpyLWJ0bi1ob3ZlcjogdmFyKC0tYnV0dG9uLWhvdmVyLXN1cmZhY2UsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKICAgIC0tbWpyLXNlbGVjdGVkLXN1cmZhY2U6IHZhcigtLWludGVyZmFjZS1wYW5lbC1zZWxlY3RlZC1zdXJmYWNlLCByZ2JhKDk1LCAxNzksIDI1NSwgMC4xNSkpOwoKICAgIC8qIFJhZGlpIOKAlCB1c2UgQ29tZnlVSSBkZXNpZ24tc3lzdGVtIHJhZGl1cyB0b2tlbnMgd2hlbiBhdmFpbGFibGUgKi8KICAgIC0tbWpyLXItc206IHZhcigtLXJhZGl1cy1zbSwgOHB4KTsKICAgIC0tbWpyLXItbWQ6IHZhcigtLXJhZGl1cy1tZCwgMTBweCk7CiAgICAtLW1qci1yLWxnOiB2YXIoLS1yYWRpdXMtbGcsIDEycHgpOwoKICAgIC8qIFNwYWNpbmcgKi8KICAgIC0tbWpyLXBhZC1zbTogOHB4OwogICAgLS1tanItcGFkLW1kOiAxMnB4OwogICAgLS1tanItcGFkLWxnOiAxNnB4OwoKICAgIC8qIFNlbWFudGljIFN0YXR1cyBDb2xvcnMg4oCUIHByZWZlciBDb21meVVJIHYxLjQyIHNlbWFudGljIHRva2VucyAqLwogICAgLS1tanItc3RhdHVzLXN1Y2Nlc3M6IHZhcigtLXN1Y2Nlc3MtYmFja2dyb3VuZCwgdmFyKC0tY29tZnktc3RhdHVzLXN1Y2Nlc3MsICM0Q0FGNTApKTsKICAgIC0tbWpyLXN0YXR1cy13YXJuaW5nOiB2YXIoLS13YXJuaW5nLWJhY2tncm91bmQsIHZhcigtLWNvbWZ5LXN0YXR1cy13YXJuaW5nLCAjRkZBNzI2KSk7CiAgICAtLW1qci1zdGF0dXMtZXJyb3I6IHZhcigtLWRlc3RydWN0aXZlLWJhY2tncm91bmQsIHZhcigtLWNvbWZ5LXN0YXR1cy1lcnJvciwgI2Y0NDMzNikpOwogICAgLS1tanItc3RhdHVzLWluZm86IHZhcigtLWNvbWZ5LXN0YXR1cy1pbmZvLCAjMjE5NkYzKTsKICAgIC0tbWpyLXN0YXR1cy1uZXV0cmFsOiB2YXIoLS1jb21meS1zdGF0dXMtbmV1dHJhbCwgIzllOWU5ZSk7CiAgICAtLW1qci1zdGFyLWFjdGl2ZTogI0ZGRDQ1QTsKCiAgICAvKiBCYWRnZSBjb2xvcnMgKG92ZXJyaWRkZW4gYnkgc2V0dGluZ3MpICovCiAgICAtLW1qci1iYWRnZS1pbWFnZTogIzIxOTZGMzsKICAgIC0tbWpyLWJhZGdlLXZpZGVvOiAjOUMyN0IwOwogICAgLS1tanItYmFkZ2UtYXVkaW86ICNGRjk4MDA7CiAgICAtLW1qci1iYWRnZS1tb2RlbDNkOiAjNENBRjUwOwogICAgLS1tanItY2FyZC1ob3Zlci1jb2xvcjogdmFyKC0taW50ZXJmYWNlLXBhbmVsLWhvdmVyLXN1cmZhY2UsICMzRDNEM0QpOwogICAgLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3I6IHZhcigtLWludGVyZmFjZS1wYW5lbC1zZWxlY3RlZC1zdXJmYWNlLCAjNEE5MEUyKTsKICAgIC0tbWpyLXJhdGluZy1jb2xvcjogI0ZGOTUwMDsKICAgIC0tbWpyLXRhZy1jb2xvcjogIzRBOTBFMjsKfQoKLyogTWFrZSB0aGUgdGhlbWUgdmlzaWJseSBhcHBseSBldmVuIHdpdGggaW5saW5lIHN0eWxlcyAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyICogewogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKLm1qci1hc3NldHMtbWFuYWdlci5tanItYW0tY29udGFpbmVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgaGVpZ2h0OiAxMDAlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWhlYWRlciB7CiAgICBwYWRkaW5nOiAxNHB4IDE2cHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xKTsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgei1pbmRleDogMjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWhlYWRlci1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBtaW4taGVpZ2h0OiAyOHB4OwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZmxleC13cmFwOiB3cmFwOwogICAgcm93LWdhcDogMTBweDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWhlYWRlci1sZWZ0IHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWhlYWRlci1hY3Rpb25zIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0taGVhZGVyLXRvb2xzIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgZ2FwOiA4cHg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGFicyB7CiAgICAvKiBRdWV1ZS1saWtlIHRhYnMgKGFjdGl2ZSBwaWxsLCBvdGhlcnMgYXMgdGV4dCkgKi8KICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyOiBub25lOwogICAgcGFkZGluZzogMDsKICAgIGdhcDogMTBweDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLXdpZHRoOiAwOwogICAgb3ZlcmZsb3cteDogYXV0bzsKICAgIG92ZXJmbG93LXk6IGhpZGRlbjsKICAgIHNjcm9sbGJhci13aWR0aDogbm9uZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRhYnM6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiAwOwogICAgaGVpZ2h0OiAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGFiIHsKICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSA2NSUsIHRyYW5zcGFyZW50KTsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxMjBtcyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDEyMG1zIGVhc2UsIGNvbG9yIDEyMG1zIGVhc2UsIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGFiOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDcwJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGFiLmlzLWFjdGl2ZSB7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2ZmZik7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4NSUsIHRyYW5zcGFyZW50KTsKICAgIGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLDAsMCwwLjE4KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWljb24tYnRuIHsKICAgIHdpZHRoOiAyOHB4OwogICAgaGVpZ2h0OiAyOHB4OwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcsIDAuNXJlbSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTIpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgcGFkZGluZzogMDsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxMjBtcyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDEyMG1zIGVhc2UsIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaWNvbi1idG46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNDUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB2YXIoLS1tanItYWNjZW50KSA4JSk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0bi5tanItY29udGV4dC1hY3RpdmUgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgODUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTUlLCB2YXIoLS1tanItYWNjZW50KSAxMiUpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzNSUsIHRyYW5zcGFyZW50KTsKfQoKLyogRmxvYXRpbmcgVmlld2VyIGJ1dHRvbiDigJQgdGVhbCBnbG93IHdoZW4gdmlld2VyIGlzIG9wZW4gKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWljb24tYnRuLm1qci1tZnYtYnRuLWFjdGl2ZSB7CiAgICBjb2xvcjogIzRkZDljMDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSg3NywgMjE3LCAxOTIsIDAuNTUpOwogICAgYmFja2dyb3VuZDogcmdiYSg3NywgMjE3LCAxOTIsIDAuMSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSg3NywgMjE3LCAxOTIsIDAuMjUpOwp9Ci5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0bi5tanItbWZ2LWJ0bi1hY3RpdmUgLnBpIHsKICAgIG9wYWNpdHk6IDE7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0bi5tanItbWVzc2FnZS1idG4gewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IHZpc2libGU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0bi5tanItbWVzc2FnZS1oYXMtdW5yZWFkIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDc1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDcyJSwgdmFyKC0tbWpyLWFjY2VudCkgMTElKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lc3NhZ2UtYmFkZ2UgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAtNXB4OwogICAgcmlnaHQ6IC02cHg7CiAgICBtaW4td2lkdGg6IDE2cHg7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICBwYWRkaW5nOiAwIDRweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDU1JSwgcmdiYSgyNTUsMjU1LDI1NSwwLjMpKTsKICAgIGJhY2tncm91bmQ6ICNlZjUzNTA7CiAgICBjb2xvcjogI2ZmZjsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjM1KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWljb24tYnRuIC5waSB7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIG9wYWNpdHk6IDAuOTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWljb24tYnRuOmRpc2FibGVkLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYWktY29udHJvbDpkaXNhYmxlZCB7CiAgICBvcGFjaXR5OiAwLjU7CiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgdHJhbnNmb3JtOiBub25lOwogICAgZmlsdGVyOiBncmF5c2NhbGUoMC40NSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4OCUsIHRyYW5zcGFyZW50KSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDkyJSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCByZ2JhKDI1NSwyNTUsMjU1LDAuNikpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1haS1kaXNhYmxlZCAubWpyLWFpLWNvbnRyb2w6aG92ZXIgewogICAgdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1haS1kaXNhYmxlZC1ibG9jayB7CiAgICBvcGFjaXR5OiAwLjU4OwogICAgZmlsdGVyOiBncmF5c2NhbGUoMC40NSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1haS1kaXNhYmxlZC1ibG9jayAubWpyLWFpLWNvbnRyb2wsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1haS1kaXNhYmxlZC1ibG9jayBidXR0b24gewogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi8qIFBvcG92ZXJzIGNhbiBiZSBtb3ZlZCB0byBgZG9jdW1lbnQuYm9keWAgKHBvcnRhbCkgdG8gYXZvaWQgYmVpbmcgY2xpcHBlZC4gKi8KLm1qci1wb3BvdmVyIHsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1jb21meS1mb250LCB2YXIoLS1mb250LWludGVyLCB1aS1zYW5zLXNlcmlmLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sICJTZWdvZSBVSSIsIFJvYm90bywgQXJpYWwsIHNhbnMtc2VyaWYpKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yLCB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSkpOwoKICAgIC8qIFByb3ZpZGUgZmFsbGJhY2tzIHdoZW4gb3V0c2lkZSBgLm1qci1hc3NldHMtbWFuYWdlcmAgc2NvcGUgKi8KCSAgICAtLW1qci1zdXJmYWNlLTE6IHZhcigtLWludGVyZmFjZS1tZW51LXN1cmZhY2UsIHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpKTsKCSAgICAtLW1qci1ib3JkZXI6IHZhcigtLWJvcmRlci1kZWZhdWx0LCB2YXIoLS1ib3JkZXItY29sb3IsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpKTsKCSAgICAtLW1qci1tdXRlZDogdmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCwgdmFyKC0tZGVzY3JpcC10ZXh0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKSk7CgkgICAgLS1tanItYWNjZW50OiB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpOwoJICAgIC0tbWpyLXBvcG92ZXItei1pbmRleDogMjE0NzQ4MzY0NzsKCiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICB0b3A6IDA7CiAgICBsZWZ0OiAwOwogICAgbWluLXdpZHRoOiAwOwogICAgd2lkdGg6IG1pbigyODBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIG1heC13aWR0aDogbWluKDM2MHB4LCBjYWxjKDEwMHZ3IC0gMjRweCkpOwogICAgcGFkZGluZzogMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZywgMC41cmVtKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEsIHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHZhcigtLWJvcmRlci1jb2xvciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSkpOwogICAgYm94LXNoYWRvdzogMCAxMnB4IDI4cHggcmdiYSgwLDAsMCwwLjM1KTsKCSAgICB6LWluZGV4OiB2YXIoLS1tanItcG9wb3Zlci16LWluZGV4KTsKICAgIG1pbi1oZWlnaHQ6IDA7CiAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgIHRvdWNoLWFjdGlvbjogcGFuLXk7CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgewogICAgbWluLXdpZHRoOiAzNDBweDsKICAgIHdpZHRoOiBtaW4oMzYwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSk7CiAgICBwYWRkaW5nOiAxMnB4Owp9CgoubWpyLXNvcnQtcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDIyMHB4OwogICAgd2lkdGg6IG1pbigyNjBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIHBhZGRpbmc6IDEwcHg7Cn0KCi5tanItY29sbGVjdGlvbnMtcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDI4MHB4OwogICAgd2lkdGg6IG1pbigzMjBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIHBhZGRpbmc6IDEwcHg7Cn0KCi5tanItbWVzc2FnZXMtcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDMyMHB4OwogICAgd2lkdGg6IG1pbig0NjBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIHBhZGRpbmc6IDEwcHg7Cn0KCi5tanItbWVzc2FnZXMtaGVhZCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogOHB4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgbWFyZ2luLWJvdHRvbTogOHB4Owp9CgoubWpyLW1lc3NhZ2VzLXRhYnMgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICBwYWRkaW5nOiAzcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4OCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA3NCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZXNzYWdlcy10YWIgewogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIGJvcmRlcjogMDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZjFmMWYxKSA3NiUsIHRyYW5zcGFyZW50KTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjE0cyBlYXNlLCBjb2xvciAwLjE0cyBlYXNlLCB0cmFuc2Zvcm0gMC4xNHMgZWFzZTsKfQoKLm1qci1tZXNzYWdlcy10YWI6aG92ZXIsCi5tanItbWVzc2FnZXMtdGFiOmZvY3VzLXZpc2libGUgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDE0JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNmMWYxZjEpOwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci1tZXNzYWdlcy10YWIuaXMtYWN0aXZlIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAyMiUsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZmZmKTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMzQlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWVzc2FnZXMtcGFuZWxzIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDhweDsKICAgIG1heC1oZWlnaHQ6IG1pbig1MnZoLCA0MjBweCk7Cn0KCi5tanItbWVzc2FnZXMtbGlzdCwKLm1qci1tZXNzYWdlcy1zaG9ydGN1dHMtcGFuZWwgewogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47Cn0KCi5tanItdGFiLWNvdW50LWJhZGdlIHsKICAgIG1pbi13aWR0aDogMTZweDsKICAgIGhlaWdodDogMTZweDsKICAgIHBhZGRpbmc6IDAgNXB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGZvbnQtc2l6ZTogOXB4OwogICAgZm9udC13ZWlnaHQ6IDgwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAyZW07CiAgICBsaW5lLWhlaWdodDogMTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAyOCUsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2ZmZikgOTIlLCB0cmFuc3BhcmVudCk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDQ4JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1lc3NhZ2VzLXRpdGxlIHsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLXdpZHRoOiAwOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAzZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSA4MiUsIHZhcigtLW1qci1tdXRlZCkpOwp9CgoubWpyLW1lc3NhZ2VzLWFjdGlvbnMgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgIGdhcDogNnB4OwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLW1lc3NhZ2VzLW1hcmstcmVhZC1idG4gewogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7Cn0KCi5tanItbWVzc2FnZXMtc3Rhci1saW5rIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2YxZjFmMSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjNjODRiIDQyJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsICNmM2M4NGIgMTIlLCB2YXIoLS1tanItc3VyZmFjZS0yKSk7Cn0KCi5tanItbWVzc2FnZXMtc3Rhci1saW5rOmhvdmVyLAoubWpyLW1lc3NhZ2VzLXN0YXItbGluazpmb2N1cy12aXNpYmxlIHsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQoKLm1qci1tZXNzYWdlcy1zdGFyLWljb24gewogICAgY29sb3I6ICNmM2M4NGI7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci1tZXNzYWdlcy1zdGFyLWxhYmVsIHsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItbWVzc2FnZXMtbGlzdCB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA4cHg7Cn0KCi5tanItbWVzc2FnZXMtZW1wdHkgewogICAgcGFkZGluZzogOHB4IDZweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIG9wYWNpdHk6IDAuNzI7Cn0KCi5tanItbWVzc2FnZS1pdGVtIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDVweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODYlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTglLCB0cmFuc3BhcmVudCk7CiAgICBwYWRkaW5nOiA4cHg7Cn0KCi5tanItbWVzc2FnZS1pdGVtLS11bnJlYWQgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTglLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDI2JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1lc3NhZ2UtaXRlbS0td2FybmluZyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjBiODVhIDYyJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLW1lc3NhZ2UtaXRlbS0tZXJyb3IgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgI2YzNmI2YiA2MiUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tLXN1Y2Nlc3MgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgIzU4YzA3ZCA2MiUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1tZXNzYWdlLWl0ZW0taGVhZCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogOHB4Owp9CgoubWpyLW1lc3NhZ2UtaXRlbS10aXRsZS13cmFwIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgbWluLXdpZHRoOiAwOwogICAgZmxleDogMSAxIGF1dG87Cn0KCi5tanItbWVzc2FnZS1pdGVtLWVtb2ppIHsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgZm9udC1zaXplOiAxNnB4OwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi5tanItbWVzc2FnZS1pdGVtLXRpdGxlIHsKICAgIG1pbi13aWR0aDogMDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2YxZjFmMSk7Cn0KCi5tanItbWVzc2FnZS1pdGVtLWNhdGVnb3J5IHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDFweCA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wM2VtOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDIwJSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZmZmKSA4NiUsIHRyYW5zcGFyZW50KTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItbWVzc2FnZS1pdGVtLW1ldGEgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgb3BhY2l0eTogMC43MjsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tYm9keSB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBvcGFjaXR5OiAwLjkyOwogICAgbGluZS1oZWlnaHQ6IDEuNDU7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwp9CgoubWpyLW1lc3NhZ2UtaXRlbS1hY3Rpb24gewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKTsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tYWN0aW9uOmhvdmVyIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgovKiBUb2FzdCBIaXN0b3J5IHRhYiDigJQgdW5yZWFkIGluZGljYXRvciBkb3QgKi8KLm1qci10YWItdW5yZWFkLWRvdCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB3aWR0aDogNnB4OwogICAgaGVpZ2h0OiA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKICAgIG1hcmdpbi1sZWZ0OiA1cHg7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgZmxleC1zaHJpbms6IDA7Cn0KCi8qIEhpc3RvcnkgcGFuZWwgKi8KLm1qci1tZXNzYWdlcy1oaXN0b3J5LXBhbmVsIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgbWluLWhlaWdodDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tanItaGlzdG9yeS1oZWFkIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgcGFkZGluZzogNHB4IDAgNnB4OwogICAgZmxleC1zaHJpbms6IDA7Cn0KCi5tanItaGlzdG9yeS1oZWFkLWxhYmVsIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBvcGFjaXR5OiAwLjYyOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07Cn0KCi5tanItaGlzdG9yeS1jbGVhci1idG4gewogICAgZm9udC1zaXplOiAxMXB4OwogICAgcGFkZGluZzogMnB4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSk7CiAgICBjb2xvcjogaW5oZXJpdDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIG9wYWNpdHk6IDAuNzI7Cn0KCi5tanItaGlzdG9yeS1jbGVhci1idG46aG92ZXIgewogICAgb3BhY2l0eTogMTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAxMiUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1oaXN0b3J5LWxpc3QgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogNHB4OwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47Cn0KCi5tanItaGlzdG9yeS1pdGVtIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogNnB4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LDI1NSwyNTUsMC4wOCkpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMiwgcmdiYSgyNTUsMjU1LDI1NSwwLjA0KSk7CiAgICBmb250LXNpemU6IDEycHg7Cn0KCi5tanItaGlzdG9yeS1pdGVtLS1lcnJvciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjM2YjZiIDUwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLWhpc3RvcnktaXRlbS0td2FybmluZyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjBiODVhIDUwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLWhpc3RvcnktaXRlbS0tc3VjY2VzcyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjNThjMDdkIDUwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLWhpc3RvcnktaXRlbS1pY29uIHsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgZm9udC1zaXplOiAxNHB4OwogICAgbGluZS1oZWlnaHQ6IDEuNDsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tY29udGVudCB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA0cHg7Cn0KCi5tanItaGlzdG9yeS1pdGVtLW1zZyB7CiAgICBvcGFjaXR5OiAwLjkyOwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7CiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwp9CgoubWpyLWhpc3RvcnktaXRlbS10aXRsZSB7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgIG9wYWNpdHk6IDAuOTY7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tZGV0YWlsIHsKICAgIG9wYWNpdHk6IDAuODQ7CiAgICBsaW5lLWhlaWdodDogMS40NTsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlOwogICAgd29yZC1icmVhazogYnJlYWstd29yZDsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tbWV0YSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLWhpc3RvcnktaXRlbS10aW1lIHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIG9wYWNpdHk6IDAuNTI7Cn0KCi5tanItaGlzdG9yeS1pdGVtLWNoaXAgewogICAgZm9udC1zaXplOiAxMHB4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBwYWRkaW5nOiAycHggNnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODIlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMywgdmFyKC0tbWpyLXN1cmZhY2UtMikpIDc4JSwgdHJhbnNwYXJlbnQpOwogICAgb3BhY2l0eTogMC43NjsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tYWN0aW9uIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tYWN0aW9uOmhvdmVyIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgoubWpyLWhpc3RvcnktaXRlbS1wcm9ncmVzcyB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA0cHg7Cn0KCi5tanItaGlzdG9yeS1pdGVtLXByb2dyZXNzLXN1bW1hcnkgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgb3BhY2l0eTogMC43NDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7Cn0KCi5tanItaGlzdG9yeS1pdGVtLXByb2dyZXNzLWJhciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogNnB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc1JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWhpc3RvcnktaXRlbS1wcm9ncmVzcy1maWxsIHsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpLCBjb2xvci1taXgoaW4gc3JnYiwgIzU4YzA3ZCA3MiUsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpKSk7Cn0KCi5tanItc2hvcnRjdXQtZ3VpZGUgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogOHB4Owp9CgoubWpyLXNob3J0Y3V0LWd1aWRlLWludHJvIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ1OwogICAgb3BhY2l0eTogMC44NDsKfQoKLm1qci1zaG9ydGN1dC1zZWN0aW9uIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDZweDsKICAgIHBhZGRpbmc6IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODQlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMywgdmFyKC0tbWpyLXN1cmZhY2UtMikpIDcyJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLXNob3J0Y3V0LXNlY3Rpb24tdGl0bGUgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZjFmMWYxKSA4OCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1zaG9ydGN1dC1saXN0IHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDZweDsKfQoKLm1qci1zaG9ydGN1dC1yb3cgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDEzMnB4LCAxNjBweCkgbWlubWF4KDAsIDFmcik7CiAgICBnYXA6IDhweDsKICAgIGFsaWduLWl0ZW1zOiBzdGFydDsKfQoKLm1qci1zaG9ydGN1dC1rZXkgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBtaW4taGVpZ2h0OiAyNHB4OwogICAgcGFkZGluZzogM3B4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDM4JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDEyJSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZmZmKSA5MCUsIHRyYW5zcGFyZW50KTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMS4yNTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7Cn0KCi5tanItc2hvcnRjdXQtZGVzYyB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsaW5lLWhlaWdodDogMS40OwogICAgb3BhY2l0eTogMC45MjsKfQoKQG1lZGlhIChtYXgtd2lkdGg6IDU2MHB4KSB7CiAgICAubWpyLXNob3J0Y3V0LXJvdyB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICB9CgogICAgLm1qci1zaG9ydGN1dC1rZXkgewogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIH0KfQoKLm1qci1maWx0ZXItZ3JvdXAgewogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDg1JSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDcwJSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbWQpOwogICAgcGFkZGluZzogMTBweDsKICAgIG1hcmdpbi1ib3R0b206IDEwcHg7Cn0KCi5tanItZmlsdGVyLWdyb3VwOmxhc3QtY2hpbGQgewogICAgbWFyZ2luLWJvdHRvbTogMDsKfQoKLm1qci1maWx0ZXItZ3JvdXAtdGl0bGUgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjM1cHg7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSA3OCUsIHZhcigtLW1qci1tdXRlZCkpOwogICAgbWFyZ2luLWJvdHRvbTogOHB4Owp9CgoubWpyLXBvcG92ZXItcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgIGZsZXgtd3JhcDogd3JhcDsKfQoKLm1qci1wb3BvdmVyLXJvdzpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1ib3R0b206IDA7Cn0KCi5tanItcG9wb3Zlci1sYWJlbCB7CiAgICB3aWR0aDogNTZweDsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHZhcigtLWRlc2NyaXAtdGV4dCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSkpOwogICAgZm9udC1zaXplOiAxMnB4Owp9CgoubWpyLXBvcG92ZXItdG9nZ2xlIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwp9CgoubWpyLXBvcG92ZXItdG9nZ2xlIGlucHV0W3R5cGU9ImNoZWNrYm94Il0gewogICAgYWNjZW50LWNvbG9yOiB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWhlYWRlci1pY29uIHsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvcGFjaXR5OiAwLjk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1oZWFkZXItdGl0bGUgewogICAgbWFyZ2luOiAwOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAxZW07Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1jb250ZW50IHsKICAgIGZsZXg6IDE7CiAgICBwYWRkaW5nOiAxNnB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgbWluLWhlaWdodDogMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWJyb3dzZSB7CiAgICBmbGV4OiAxOwogICAgbWluLWhlaWdodDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc1JSwgdHJhbnNwYXJlbnQpOwogICAgcGFkZGluZy10b3A6IDRweDsKfQoKLyogU2Nyb2xsYmFycyAobWF0Y2ggQ29tZnlVSSBmZWVsKSAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZ3JpZC1zY3JvbGwgewogICAgbWluLWhlaWdodDogMDsKICAgIGhlaWdodDogMTAwJTsKICAgIG92ZXJmbG93OiBhdXRvOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgIHRvdWNoLWFjdGlvbjogcGFuLXk7CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47CiAgICBzY3JvbGxiYXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4NSUsIHZhcigtLWNvbnRlbnQtZmcsICNkZGQpKSB0cmFuc3BhcmVudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWdyaWQtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICB3aWR0aDogMTBweDsKICAgIGhlaWdodDogMTBweDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWdyaWQtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWdyaWQtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTUlLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSk7CiAgICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWdyaWQtc2Nyb2xsOmhvdmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNzAlLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1ncmlkLXNjcm9sbDo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tY3VzdG9tLWNvbnRyb2xzIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMDsKICAgIGdhcDogOHB4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zZWFyY2ggewogICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zZWFyY2ggewogICAgcGFkZGluZy1ib3R0b206IDZweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIG1hcmdpbi1ib3R0b206IDZweDsKfQoKLyogQ2FyZCBNZXRhZGF0YSBDb2xvcnMgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1ldGEtZHVyYXRpb24gewogICAgY29sb3I6ICNmZmE3MjY7IC8qIE9yYW5nZSBmb3IgZHVyYXRpb24gKi8KICAgIGZvbnQtd2VpZ2h0OiA1MDA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZXRhLXJlcyB7CiAgICBjb2xvcjogIzRmYzNmNzsgLyogTGlnaHQgQmx1ZSBmb3IgcmVzb2x1dGlvbiAqLwogICAgZm9udC13ZWlnaHQ6IDUwMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1ldGEtZGF0ZSB7CiAgICBjb2xvcjogI2I5ZjZjYTsgLyogUGFsZSBHcmVlbiBmb3IgZGF0ZSAqLwogICAgZm9udC1zaXplOiAwLjllbTsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZXRhLXRpbWUgewogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7CiAgICBmb250LXNpemU6IDAuOWVtOwp9CgoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXN1bW1hcnkgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBnYXA6IDEwcHg7CiAgICBtYXJnaW46IDAgMCA2cHggMDsKICAgIHBhZGRpbmc6IDAgMCA0cHggMDsKICAgIG1pbi1oZWlnaHQ6IDE2cHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKTsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNjUlLCB0cmFuc3BhcmVudCk7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoKLyogVG9hc3RzIChnbG9iYWw6IGNhbiBiZSBtb3VudGVkIHVuZGVyIGRvY3VtZW50LmJvZHkpICovCi5tanItdG9hc3QtY29udGFpbmVyIHsKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIHRvcDogMTZweDsKICAgIGxlZnQ6IDUwJTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIHotaW5kZXg6IDEwMDAwMDE7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm1qci10b2FzdCB7CiAgICAtLW1qci10b2FzdC1zdHJpcDogdmFyKC0tbWpyLXN0YXR1cy1pbmZvLCB2YXIoLS1jb21meS1zdGF0dXMtaW5mbywgIzIxOTZmMykpOwogICAgLS1tanItdG9hc3QtaWNvbi1jb2xvcjogdmFyKC0tbWpyLXN0YXR1cy1pbmZvLCB2YXIoLS1jb21meS1zdGF0dXMtaW5mbywgIzIxOTZmMykpOwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IsICMzYTNhM2EpOwogICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB2YXIoLS1tanItdG9hc3Qtc3RyaXApOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yLCAjZWZlZmVmKTsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1jb21meS1mb250LCB1aS1zYW5zLXNlcmlmLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sICJTZWdvZSBVSSIsIFJvYm90bywgQXJpYWwsIHNhbnMtc2VyaWYpOwogICAgZm9udC1zaXplOiAxNHB4OwogICAgYm94LXNoYWRvdzogMCA0cHggMTZweCByZ2JhKDAsMCwwLDAuNSk7CiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xNXB4KTsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLW91dCwgdHJhbnNmb3JtIDAuMnMgZWFzZS1vdXQ7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMnB4OwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgd2lkdGg6IG1heC1jb250ZW50OwogICAgbWluLXdpZHRoOiBtaW4oMjUwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSk7CiAgICBtYXgtd2lkdGg6IG1pbig0MDBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig0cHgpOwogICAgY3Vyc29yOiBkZWZhdWx0OwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItdG9hc3QuaXMtdmlzaWJsZSB7CiAgICBvcGFjaXR5OiAxOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwp9CgoubWpyLXRvYXN0LXRleHQgewogICAgZmxleDogMTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7Cn0KCi8qIFRvYXN0IGljb24gc3R5bGluZyAqLwoubWpyLXRvYXN0LXRleHQ6OmJlZm9yZSB7CiAgICBjb250ZW50OiBhdHRyKGRhdGEtaWNvbik7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGNvbG9yOiB2YXIoLS1tanItdG9hc3QtaWNvbi1jb2xvcik7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIG1pbi13aWR0aDogMTZweDsKfQoKLm1qci10b2FzdC1zdWNjZXNzIHsKICAgIC0tbWpyLXRvYXN0LXN0cmlwOiB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNvbWZ5LXN0YXR1cy1zdWNjZXNzLCAjNGNhZjUwKSk7CiAgICAtLW1qci10b2FzdC1pY29uLWNvbG9yOiB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNvbWZ5LXN0YXR1cy1zdWNjZXNzLCAjNGNhZjUwKSk7Cn0KCi5tanItdG9hc3QtZXJyb3IgewogICAgLS1tanItdG9hc3Qtc3RyaXA6IHZhcigtLW1qci1zdGF0dXMtZXJyb3IsIHZhcigtLWNvbWZ5LXN0YXR1cy1lcnJvciwgI2Y0NDMzNikpOwogICAgLS1tanItdG9hc3QtaWNvbi1jb2xvcjogdmFyKC0tbWpyLXN0YXR1cy1lcnJvciwgdmFyKC0tY29tZnktc3RhdHVzLWVycm9yLCAjZjQ0MzM2KSk7Cn0KCi5tanItdG9hc3Qtd2FybmluZyB7CiAgICAtLW1qci10b2FzdC1zdHJpcDogdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCB2YXIoLS1jb21meS1zdGF0dXMtd2FybmluZywgI2ZmYTcyNikpOwogICAgLS1tanItdG9hc3QtaWNvbi1jb2xvcjogdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCB2YXIoLS1jb21meS1zdGF0dXMtd2FybmluZywgI2ZmYTcyNikpOwp9CgoubWpyLXRvYXN0LWluZm8gewogICAgLS1tanItdG9hc3Qtc3RyaXA6IHZhcigtLW1qci1zdGF0dXMtaW5mbywgdmFyKC0tY29tZnktc3RhdHVzLWluZm8sICMyMTk2ZjMpKTsKICAgIC0tbWpyLXRvYXN0LWljb24tY29sb3I6IHZhcigtLW1qci1zdGF0dXMtaW5mbywgdmFyKC0tY29tZnktc3RhdHVzLWluZm8sICMyMTk2ZjMpKTsKfQoKCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zdW1tYXJ5LXRleHQgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXN1bW1hcnktcmlnaHQgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmbGV4LXdyYXA6IHdyYXA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1jb250ZXh0LXBpbGxzIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNXB4OwogICAgcm93LWdhcDogNHB4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNvbnRleHQtcGlsbCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIHBhZGRpbmc6IDNweCA3cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1NSUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHZhcigtLW1qci1hY2NlbnQpIDEwJSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDE4JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgZm9udC1zaXplOiAxMC41cHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIG1pbi1oZWlnaHQ6IDIycHg7CiAgICBtYXgtd2lkdGg6IDIyMHB4Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY29udGV4dC1waWxsOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDc1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDUwJSwgdmFyKC0tbWpyLWFjY2VudCkgMTQlKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNvbnRleHQtcGlsbC10ZXh0IHsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvcGFjaXR5OiAwLjkyOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY29udGV4dC1waWxsLXggewogICAgd2lkdGg6IDIwcHg7CiAgICBoZWlnaHQ6IDIwcHg7CiAgICBwYWRkaW5nOiAwOwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc1JSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NSkpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLCBib3JkZXItY29sb3IgMTIwbXMgZWFzZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNvbnRleHQtcGlsbC14OmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDcwJSwgdmFyKC0tbWpyLWFjY2VudCkgMTAlKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZmZmKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXNlYXJjaC1waWxsIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgaGVpZ2h0OiAxLjc1cmVtOwogICAgcGFkZGluZzogMCAxMHB4OwogICAgd2lkdGg6IDEwMCU7CiAgICBtYXgtd2lkdGg6IG5vbmU7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcsIDAuNXJlbSk7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1pbnB1dC1iZywgcmdiYSgwLCAwLCAwLCAwLjI1KSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc2VhcmNoLXRvb2xzIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgZmxleDogMCAwIGF1dG87Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1wb3BvdmVyLWFuY2hvciB7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgfQoKLm1qci1hZ2VuZGEtaW5wdXQgewogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1pbnB1dC1iZywgcmdiYSgwLCAwLCAwLCAwLjI1KSk7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMnMgZWFzZSwgY29sb3IgMC4ycyBlYXNlLCBib3JkZXItY29sb3IgMC4ycyBlYXNlOwp9Ci5tanItYWdlbmRhLWlucHV0Lm1qci1hZ2VuZGEtZmlsbGVkIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKSA0MCUsIHZhcigtLW1qci1zdXJmYWNlLTIpIDYwJSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKSA4MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZmZmKTsKfQoubWpyLWFnZW5kYS1pbnB1dC5tanItYWdlbmRhLWVtcHR5IHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4NSUsIHRyYW5zcGFyZW50IDE1JSk7CiAgICBib3JkZXItY29sb3I6IHZhcigtLW1qci1ib3JkZXIpOwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7Cn0KCi5tanItYWdlbmRhLWNvbnRhaW5lciB7CiAgICB3aWR0aDogMTAwJTsKfQoKLm1qci1hZ2VuZGEtY2FsZW5kYXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDhweDsKICAgIHdpZHRoOiAxMDAlOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWFnZW5kYS1oZWFkZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKfQoKLm1qci1hZ2VuZGEtbW9udGggewogICAgZmxleDogMTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLm1qci1hZ2VuZGEtbmF2IHsKICAgIHdpZHRoOiAzMnB4OwogICAgaGVpZ2h0OiAyOHB4OwogICAgcGFkZGluZzogMDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7Cn0KCi5tanItYWdlbmRhLWdyaWQgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDcsIG1pbm1heCgwLCAxZnIpKTsKICAgIGdhcDogNnB4OwogICAgd2lkdGg6IDEwMCU7Cn0KCi5tanItYWdlbmRhLXdlZWtkYXkgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLm1qci1hZ2VuZGEtZGF5IHsKICAgIGhlaWdodDogMzBweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgcGFkZGluZzogMDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLCBib3JkZXItY29sb3IgMTIwbXMgZWFzZSwgdHJhbnNmb3JtIDgwbXMgZWFzZTsKfQoKLm1qci1hZ2VuZGEtZGF5LWJhZGdlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogLTVweDsKICAgIHJpZ2h0OiAtNXB4OwogICAgbWluLXdpZHRoOiAxNnB4OwogICAgaGVpZ2h0OiAxNnB4OwogICAgcGFkZGluZzogMCA0cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6ICNlNTM5MzU7CiAgICBjb2xvcjogI2ZmZjsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCAjZTUzOTM1IDY1JSwgI2ZmZmZmZiAzNSUpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxNHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9CgoubWpyLWFnZW5kYS1kYXk6aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNTUlLCB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKSA0NSUpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDQ1JSwgdmFyKC0tbWpyLWFjY2VudCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSkgMTAlKTsKfQoKLm1qci1hZ2VuZGEtZGF5OmFjdGl2ZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTsKfQoKLm1qci1hZ2VuZGEtZGF5LS1ibGFuayB7CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm1qci1hZ2VuZGEtZGF5LS1oYXMtYXNzZXRzIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpIDgwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpIDE4JSwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODIlKTsKfQoKLm1qci1hZ2VuZGEtZGF5LS1zZWxlY3RlZCB7CiAgICBib3JkZXItY29sb3I6IHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKSA1NSUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1hZ2VuZGEtZm9vdGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBnYXA6IDhweDsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKfQoKLm1qci1hZ2VuZGEtY2xlYXIsCi5tanItYWdlbmRhLXJlZnJlc2ggewogICAgZmxleDogMTsKfQoKLm1qci1tZW51LAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWVudSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogNHB4Owp9CgoubWpyLW1lbnUtaXRlbSwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lbnUtaXRlbSB7CiAgICBhcHBlYXJhbmNlOiBub25lOwogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBnYXA6IDEwcHg7CiAgICB3aWR0aDogMTAwJTsKICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDEyMG1zIGVhc2UsIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLCB0cmFuc2Zvcm0gODBtcyBlYXNlOwp9CgoubWpyLW1lbnUtaXRlbTpob3ZlciwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lbnUtaXRlbTpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4MCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZW51LWl0ZW06YWN0aXZlLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWVudS1pdGVtOmFjdGl2ZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTsKfQoKLm1qci1tZW51LWl0ZW0tbGFiZWwsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZW51LWl0ZW0tbGFiZWwgewogICAgZmxleDogMSAxIGF1dG87CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLW1lbnUtaXRlbS1jaGVjaywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lbnUtaXRlbS1jaGVjayB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICB3aWR0aDogMTZweDsKICAgIGZsZXg6IDAgMCAxNnB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgb3BhY2l0eTogMDsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNzIlLCB2YXIoLS1jb250ZW50LWZnKSk7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDEyMG1zIGVhc2UsIGNvbG9yIDEyMG1zIGVhc2U7Cn0KCi5tanItbWVudS1pdGVtIC5waSwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lbnUtaXRlbSAucGkgewogICAgZm9udC1zaXplOiAxM3B4OwogICAgb3BhY2l0eTogMC45Owp9CgoubWpyLWNvbGxlY3Rpb25zLW1lbnUgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogNnB4Owp9CgoubWpyLW1lbnUtaXRlbS1sYWJlbC0taWNvbiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLW1lbnUtaXRlbS1sYWJlbC0taWNvbiAucGkgewogICAgd2lkdGg6IDE2cHg7CiAgICBmbGV4OiAwIDAgMTZweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLm1qci1tZW51LWl0ZW0tcmlnaHQgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgZmxleDogMCAwIGF1dG87CiAgICBtaW4td2lkdGg6IDE2cHg7CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7Cn0KCi5tanItbWVudS1pdGVtLWhpbnQgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnKSA2MiUsIHZhcigtLW1qci1tdXRlZCkpOwogICAgb3BhY2l0eTogMC43MjsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItbWVudS1pdGVtLWNoZWNrLS12aXNpYmxlLAoubWpyLW1lbnUtaXRlbS5pcy1hY3RpdmUgLm1qci1tZW51LWl0ZW0tY2hlY2sgewogICAgb3BhY2l0eTogMTsKfQoKLm1qci1tZW51LWRpdmlkZXIgewogICAgaGVpZ2h0OiAxcHg7CiAgICBtYXJnaW46IDRweCAwOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDgwJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW11dGVkIHsKICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgIG9wYWNpdHk6IDAuNzU7Cn0KCi5tanItc3RhdGUtYmxvY2sgewogICAgZm9udC1zaXplOiAxMHB4OwogICAgbGluZS1oZWlnaHQ6IDEuMzU7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkKTsKICAgIGJvcmRlcjogMXB4IGRhc2hlZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODUlLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1zbSk7CiAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgIG1hcmdpbjogNHB4IDA7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNzAlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItc3RhdGUtYmxvY2suaXMtZXJyb3IsCi5tanItY29udGV4dC1tZW51LW5vdGUuaXMtZXJyb3IgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLWVycm9yKSA4MiUsIHZhcigtLWNvbnRlbnQtZmcpKTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtZXJyb3IpIDQ1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLWNvbGxlY3Rpb24tcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDsKICAgIHdpZHRoOiAxMDAlOwp9CgoubWpyLWRlbGV0ZS1idG4gewogICAgd2lkdGg6IDQycHg7CiAgICBmbGV4OiAwIDAgNDJweDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcGFkZGluZzogMDsKICAgIG1hcmdpbi1sZWZ0OiA2cHg7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA2NSUsIHZhcigtLW1qci1zdGF0dXMtZXJyb3IpIDQ1JSk7Cn0KCi5tanItZGVsZXRlLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA0MCUsIHZhcigtLW1qci1zdGF0dXMtZXJyb3IpIDY1JSk7Cn0KCi5tanItZGVsZXRlLWJ0biAucGkgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLWVycm9yKSA3OCUsIHZhcigtLWNvbnRlbnQtZmcpKTsKfQoKLm1qci1zZWN0aW9uLXRpdGxlIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBwYWRkaW5nOiA2cHggMTBweCAycHg7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuNnB4OwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIG9wYWNpdHk6IDAuODg7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcpIDcyJSwgdmFyKC0tbWpyLW11dGVkKSk7Cn0KCi5tanItc2VjdGlvbi10aXRsZS0tY3lhbiB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsICM2ZmQ0ZmYgNzglLCB2YXIoLS1jb250ZW50LWZnKSk7Cn0KCi5tanItc2VjdGlvbi10aXRsZS0tdmlvbGV0IHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgI2M0OGRmZiA3OCUsIHZhcigtLWNvbnRlbnQtZmcpKTsKfQoKLm1qci1zZWN0aW9uLWhpbnQgewogICAgcGFkZGluZzogMCAxMHB4IDRweDsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcpIDU1JSwgdmFyKC0tbWpyLW11dGVkKSk7Cn0KCi5tanItbWVudS1pdGVtLS1zbWFydCwKLm1qci1tZW51LWl0ZW0tLWNsdXN0ZXIgewogICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9CgoubWpyLW1lbnUtaXRlbS0tY2x1c3RlciB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnKTsKfQoKLm1qci1tZW51LWl0ZW0tLXNtYXJ0IC5waSB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsICM2ZmQ0ZmYgNzQlLCB2YXIoLS1jb250ZW50LWZnKSk7Cn0KCi5tanItbWVudS1pdGVtLS1jbHVzdGVyIC5waSB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsICNjNDhkZmYgNzQlLCB2YXIoLS1jb250ZW50LWZnKSk7Cn0KCi5tanItbWVudS1pdGVtLS1zbWFydDpob3Zlcjpub3QoOmRpc2FibGVkKSwKLm1qci1tZW51LWl0ZW0tLWNsdXN0ZXI6aG92ZXI6bm90KDpkaXNhYmxlZCkgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODAlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTUlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItY2x1c3Rlci1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgIHBhZGRpbmc6IDZweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1zbSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA3MCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1jbHVzdGVyLXRodW1icyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiAzcHg7CiAgICBmbGV4LXNocmluazogMDsKfQoKLm1qci1jbHVzdGVyLXRodW1iIHsKICAgIHdpZHRoOiAyOHB4OwogICAgaGVpZ2h0OiAyOHB4OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICBvcGFjaXR5OiAwLjg1OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDYwJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWNsdXN0ZXItaW5mbyB7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWNsdXN0ZXItbmFtZSB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnKTsKfQoKLm1qci1jbHVzdGVyLWNvdW50IHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZykgNTglLCB2YXIoLS1tanItbXV0ZWQpKTsKfQoKLm1qci1jbHVzdGVyLWNyZWF0ZS1idG4gewogICAgZmxleC1zaHJpbms6IDA7CiAgICBwYWRkaW5nOiAzcHggOHB4OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTUlLCB0cmFuc3BhcmVudCk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZyk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDEyMG1zIGVhc2UsIGJhY2tncm91bmQgMTIwbXMgZWFzZSwgb3BhY2l0eSAxMjBtcyBlYXNlOwp9CgoubWpyLWNsdXN0ZXItY3JlYXRlLWJ0bjpkaXNhYmxlZCB7CiAgICBvcGFjaXR5OiAwLjYyOwogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgoubWpyLWNsdXN0ZXItY3JlYXRlLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4MCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA2MiUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXNlYXJjaC1pY29uIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zZWFyY2gtaWNvbiAucGkgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zZWFyY2gtcGlsbCAubWpyLWlucHV0IHsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKICAgIGZvbnQtc2l6ZTogMTJweCAhaW1wb3J0YW50OwogICAgbGluZS1oZWlnaHQ6IDEuMiAhaW1wb3J0YW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc2VhcmNoLXBpbGw6Zm9jdXMtd2l0aGluIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDY1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAxOCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWJyb3dzZSB7CiAgICBtYXJnaW4tdG9wOiAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZ3JpZC1zY3JvbGwgewogICAgcGFkZGluZy1yaWdodDogNHB4OwogICAgc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlOwp9CgoKLyogR3JpZCBsYXlvdXQgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgewogICAgZGlzcGxheTogZ3JpZDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIC8qIEF2b2lkIG92ZXJmbG93IHdoZW4gdGhlIHBhbmVsIGJlY29tZXMgbmFycm93ZXIgdGhhbiB0aGUgbWluIGNhcmQgc2l6ZSAqLwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgobWluKDEwMCUsIHZhcigtLW1qci1ncmlkLW1pbi1zaXplLCAxODBweCkpLCAxZnIpKTsKICAgIGdhcDogdmFyKC0tbWpyLWdyaWQtZ2FwLCAxMHB4KTsKICAgIG1hcmdpbi10b3A6IDZweDsKICAgIG1pbi1oZWlnaHQ6IDA7Cn0KCi8qIENhcmQgc2VsZWN0aW9uICsgZm9jdXMgKGtlZXBzIGEgdmlzaWJsZSBpbmRpY2F0b3Igd2hlbiBzaWRlYmFyIGlzIG9wZW4pICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIHsKICAgIG91dGxpbmU6IG5vbmU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkLmlzLXNlbGVjdGVkIHsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgMCAwIDAgM3B4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3IpIDgwJSwgdmFyKC0tY29udGVudC1mZykpLAogICAgICAgIDAgMCAwIDZweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSAzMCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDAgMjBweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSA0MCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDEwcHggMjhweCByZ2JhKDAsMCwwLDAuMjgpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbGcpOwogICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkyKSAhaW1wb3J0YW50OwogICAgei1pbmRleDogMTA7CiAgICBvdXRsaW5lOiAycHggc29saWQgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQ6Zm9jdXMtdmlzaWJsZSB7CiAgICBib3gtc2hhZG93OgogICAgICAgIDAgMCAwIDNweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgODAlLCB2YXIoLS1jb250ZW50LWZnKSksCiAgICAgICAgMCAwIDAgNnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzMCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDAgMjBweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNDAlLCB0cmFuc3BhcmVudCksCiAgICAgICAgMCAxMHB4IDI4cHggcmdiYSgwLDAsMCwwLjI4KTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnKTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC45MikgIWltcG9ydGFudDsKICAgIHotaW5kZXg6IDEwOwp9CgpAa2V5ZnJhbWVzIG1qci1saXZlLXBsYWNlaG9sZGVyLXNoZWVuIHsKICAgIDAlIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTU4JSk7CiAgICAgICAgb3BhY2l0eTogMC4xODsKICAgIH0KICAgIDUwJSB7CiAgICAgICAgb3BhY2l0eTogMC4zNDsKICAgIH0KICAgIDEwMCUgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg1OCUpOwogICAgICAgIG9wYWNpdHk6IDAuMTg7CiAgICB9Cn0KCkBrZXlmcmFtZXMgbWpyLWxpdmUtcGxhY2Vob2xkZXItcHVsc2UgewogICAgMCUsCiAgICAxMDAlIHsKICAgICAgICBib3gtc2hhZG93OgogICAgICAgICAgICAwIDAgMCAxcHggcmdiYSgxMTgsIDIxNCwgMjU1LCAwLjM0KSwKICAgICAgICAgICAgMCAxMHB4IDI0cHggcmdiYSgwLCAwLCAwLCAwLjI0KTsKICAgIH0KICAgIDUwJSB7CiAgICAgICAgYm94LXNoYWRvdzoKICAgICAgICAgICAgMCAwIDAgMXB4IHJnYmEoMTE4LCAyMTQsIDI1NSwgMC41MiksCiAgICAgICAgICAgIDAgMCAwIDRweCByZ2JhKDExOCwgMjE0LCAyNTUsIDAuMTIpLAogICAgICAgICAgICAwIDEycHggMzBweCByZ2JhKDAsIDAsIDAsIDAuMjgpOwogICAgfQp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1saXZlLXBsYWNlaG9sZGVyPSJ0cnVlIl0gewogICAgYW5pbWF0aW9uOiBtanItbGl2ZS1wbGFjZWhvbGRlci1wdWxzZSAxLjlzIGVhc2UtaW4tb3V0IGluZmluaXRlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1saXZlLXBsYWNlaG9sZGVyPSJ0cnVlIl0gLm1qci10aHVtYiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbGl2ZS1wbGFjZWhvbGRlci13YXNoIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAtOCU7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDE7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTE1ZGVnLAogICAgICAgICAgICByZ2JhKDk4LCAxOTksIDI1NSwgMCkgMCUsCiAgICAgICAgICAgIHJnYmEoOTgsIDE5OSwgMjU1LCAwLjA4KSAzMCUsCiAgICAgICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNCkgNTAlLAogICAgICAgICAgICByZ2JhKDk4LCAxOTksIDI1NSwgMC4xMikgNzAlLAogICAgICAgICAgICByZ2JhKDk4LCAxOTksIDI1NSwgMCkgMTAwJQogICAgICAgICk7CiAgICBhbmltYXRpb246IG1qci1saXZlLXBsYWNlaG9sZGVyLXNoZWVuIDIuMnMgbGluZWFyIGluZmluaXRlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbGl2ZS1waWxsIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNnB4OwogICAgcmlnaHQ6IDZweDsKICAgIHotaW5kZXg6IDEyOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtaW4taGVpZ2h0OiAyNHB4OwogICAgcGFkZGluZzogMCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTAsIDE0LCAyMCwgMC43OCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDExOCwgMjE0LCAyNTUsIDAuMzQpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45Nik7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDFlbTsKICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMjQpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWxpdmUtcGlsbC1kb3QgewogICAgd2lkdGg6IDdweDsKICAgIGhlaWdodDogN3B4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiAjNzZkNmZmOwogICAgYm94LXNoYWRvdzogMCAwIDAgNHB4IHJnYmEoMTE4LCAyMTQsIDI1NSwgMC4xNik7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItbGl2ZS1wbGFjZWhvbGRlcj0idHJ1ZSJdIC5tanItYXNzZXQtc3RhdHVzLWRvdCB7CiAgICBhbmltYXRpb246IG1qci1saXZlLXBsYWNlaG9sZGVyLXB1bHNlIDEuOXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7Cn0KCi8qIEdyaWQgbG9hZGluZyBvdmVybGF5ICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkLWxvYWRpbmctb3ZlcmxheSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgIzAwMCAzNSUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZmZmKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjNweDsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnKTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDJweCk7Cn0KCkBrZXlmcmFtZXMgbWpyLXNrZWxldG9uLXNoaW1tZXIgewogICAgMCUgewogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDEyMCUgMDsKICAgIH0KICAgIDEwMCUgewogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjAlIDA7CiAgICB9Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkLXNrZWxldG9uLXNoaW1tZXIgewogICAgd2lsbC1jaGFuZ2U6IGJhY2tncm91bmQtcG9zaXRpb247Cn0KCi8qIEdlbmVyaWMgaGVhZGluZ3MgaW5zaWRlIHBhbmVsICovCi5tanItYXNzZXRzLW1hbmFnZXIgaDMsCi5tanItYXNzZXRzLW1hbmFnZXIgaDQgewogICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMWVtOwp9CgovKiBQYW5lbHMgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXBhbmVsIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1sZyk7CiAgICBib3gtc2hhZG93OiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtYm94LXNoYWRvdywgMCA4cHggMjRweCByZ2JhKDAsIDAsIDAsIDAuMjUpKTsKfQoKLyogVG9vbGJhciAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdG9vbGJhciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIHBhZGRpbmc6IHZhcigtLW1qci1wYWQtbWQpOwp9CgovKiBCdXR0b25zICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG4gewogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMik7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1tZCk7CiAgICBwYWRkaW5nOiA3cHggMTBweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDEyMG1zIGVhc2UsIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLCB0cmFuc2Zvcm0gODBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDcwJSwgdmFyKC0tbWpyLWFjY2VudCkgMTAlKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWJ0bjphY3RpdmUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG46ZGlzYWJsZWQgewogICAgb3BhY2l0eTogMC41NTsKICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG4ubWpyLXByaW1hcnkgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNjAlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMTQlLCB2YXIoLS1tanItc3VyZmFjZS0yKSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG4gewogICAgLyogT3ZlcnJpZGUgaW5saW5lIHN0eWxlcyBpZiBwcmVzZW50ICovCiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTIpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbWQpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDcwJSwgdmFyKC0tbWpyLWFjY2VudCkgMTAlKTsKfQoKLyogSW5wdXRzIC8gc2VsZWN0cyAodXNlZCBpbnNpZGUgcG9ydGFsZWQgcG9wb3ZlcnMgdG9vKSAqLwoubWpyLWlucHV0LAoubWpyLXNlbGVjdCwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWlucHV0LAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItc2VsZWN0IHsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LWlucHV0LWJnLCByZ2JhKDAsIDAsIDAsIDAuMjUpKTsKICAgIGNvbG9yOiB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLW1kKTsKICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgZm9udC1zaXplOiAxM3B4OwogICAgb3V0bGluZTogbm9uZTsKICAgIHdpZHRoOiAxMDAlOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaW5wdXQ6OnBsYWNlaG9sZGVyIHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLW11dGVkKSA4MCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1pbnB1dDpmb2N1cywKLm1qci1zZWxlY3Q6Zm9jdXMsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pbnB1dDpmb2N1cywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXNlbGVjdDpmb2N1cyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2NSUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMjAlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItaW5wdXQsCi5tanItc2VsZWN0LAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaW5wdXQsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1zZWxlY3QgewogICAgLyogT3ZlcnJpZGUgaW5saW5lIHN0eWxlcyBpZiBwcmVzZW50ICovCiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LWlucHV0LWJnLCByZ2JhKDAsIDAsIDAsIDAuMjUpKTsKICAgIGNvbG9yOiB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLW1kKTsKICAgIHBhZGRpbmc6IDhweCAxMHB4Owp9CgovKiBUYWJzOiBvdmVycmlkZGVuIGFib3ZlIHdpdGggcXVldWUtbGlrZSBzdHlsZSAqLwoKLyogUmVtb3ZlZCByZWR1bmRhbnQgdGFiIGRlY2xhcmF0aW9ucyB0aGF0IHdlcmUgdXNpbmcgIWltcG9ydGFudCAqLwoKLyogTXV0ZWQgdGV4dCBoZWxwZXIgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW11dGVkIHsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQpOwp9CgovKiBHcmlkICsgY2FyZHMgKG92ZXJyaWRlIGlubGluZSBzdHlsZXMgZnJvbSBDYXJkLmpzKSAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyICNtanItYXNzZXRzLWdyaWQgewogICAgZ2FwOiAxMHB4ICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xKSAhaW1wb3J0YW50OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcikgIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnKSAhaW1wb3J0YW50OwogICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50OwogICAgbWluLXdpZHRoOiAwOwogICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDEyMG1zIGVhc2UsIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLCBib3gtc2hhZG93IDEyMG1zIGVhc2UgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQ6aG92ZXIsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSA1NSUsIHZhcigtLW1qci1ib3JkZXIpKSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWpyLWNhcmQtaG92ZXItY29sb3IpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiAwIDhweCAyMnB4IHJnYmEoMCwgMCwgMCwgMC4yNSkgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgaW1nLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCB2aWRlbywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRodW1iLW1lZGlhIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50OwogICAgb2JqZWN0LWZpdDogY292ZXIgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRodW1iIHsKICAgIHdpZHRoOiAxMDAlOwogICAgYXNwZWN0LXJhdGlvOiAxIC8gMTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA4MCUsIHRyYW5zcGFyZW50KTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi8qIEtlZXAgZ2VuZXJhdGlvbi10aW1lIGJhZGdlIHBpbm5lZCB0byB0aGUgdGh1bWJuYWlsIGNvcm5lciBhY3Jvc3MgZ3JpZC9mZWVkIHZhcmlhbnRzLgogICBUaGUgIWltcG9ydGFudCBvdmVycmlkZXMgYXJlIGludGVudGlvbmFsOiBHZW5UaW1lQmFkZ2UudnVlIHVzZXMgPHN0eWxlIHNjb3BlZD4gd2hvc2UKICAgaGFzaGVkIGNsYXNzIGhhcyB0aGUgc2FtZSBzcGVjaWZpY2l0eSBhcyBnbG9iYWwgc2VsZWN0b3JzLiBXaXRob3V0ICFpbXBvcnRhbnQsIGEKICAgY29uZmxpY3RpbmcgcnVsZSAoZS5nLiBmcm9tIGEgdGhlbWUgZXh0ZW5zaW9uIG9yIGFuIG9sZGVyIG5vbi1zY29wZWQgY29udGV4dCkgdGhhdCBzZXRzCiAgIGxlZnQ6MC90b3A6MCB3b3VsZCB3aW4uIGxlZnQ6YXV0byArIHRvcDphdXRvIGV4cGxpY2l0bHkgY2FuY2VsIGFueSBzdWNoIGFjY2lkZW50YWwgcmVzZXQuICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci10aHVtYiA+IC5tanItZ2VudGltZS1iYWRnZSwKLm1qci1ib3R0b20tZmVlZCAubWpyLXRodW1iID4gLm1qci1nZW50aW1lLWJhZGdlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OwogICAgcmlnaHQ6IDZweCAhaW1wb3J0YW50OwogICAgYm90dG9tOiA2cHggIWltcG9ydGFudDsKICAgIGxlZnQ6IGF1dG8gIWltcG9ydGFudDsKICAgIHRvcDogYXV0byAhaW1wb3J0YW50OwogICAgei1pbmRleDogMTAgIWltcG9ydGFudDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDJweCA2cHggIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IDRweCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjUpICFpbXBvcnRhbnQ7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpICFpbXBvcnRhbnQ7CiAgICBmb250LXdlaWdodDogODAwICFpbXBvcnRhbnQ7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMTVlbTsKICAgIHRleHQtc2hhZG93OgogICAgICAgIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuOSksCiAgICAgICAgMCAwIDEwcHggY29sb3ItbWl4KGluIHNyZ2IsIGN1cnJlbnRDb2xvciAzNSUsIHRyYW5zcGFyZW50KTsKfQoKLyogS2VlcCByYXRpbmcvdGFncyBiYWRnZXMgYW5jaG9yZWQgZXZlbiB3aGVuIHNjb3BlZCBWdWUgc3R5bGVzIGFyZSBub3QgYXBwbGllZCBhZnRlciByZWxvYWQuCiAgIERvIG5vdCBmb3JjZSBkaXNwbGF5IGhlcmUgc28gZ3JpZCB2aXNpYmlsaXR5IHRvZ2dsZXMgKC5tanItc2hvdy1iYWRnZXMtKikgc3RpbGwgY29udHJvbCBzaG93L2hpZGUuICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci10aHVtYiA+IC5tanItcmF0aW5nLWJhZGdlLAoubWpyLWJvdHRvbS1mZWVkIC5tanItdGh1bWIgPiAubWpyLXJhdGluZy1iYWRnZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKICAgIHRvcDogNnB4ICFpbXBvcnRhbnQ7CiAgICByaWdodDogNnB4ICFpbXBvcnRhbnQ7CiAgICBsZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICBib3R0b206IGF1dG8gIWltcG9ydGFudDsKICAgIHotaW5kZXg6IDEwICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNTUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjI1KTsKICAgIHRleHQtc2hhZG93OiAwIDJweCA2cHggcmdiYSgwLCAwLCAwLCAwLjYpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGh1bWIgPiAubWpyLXRhZ3MtYmFkZ2UsCi5tanItYm90dG9tLWZlZWQgLm1qci10aHVtYiA+IC5tanItdGFncy1iYWRnZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKICAgIGxlZnQ6IDZweCAhaW1wb3J0YW50OwogICAgYm90dG9tOiA2cHggIWltcG9ydGFudDsKICAgIHJpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICB0b3A6IGF1dG8gIWltcG9ydGFudDsKICAgIHotaW5kZXg6IDEwICFpbXBvcnRhbnQ7CiAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDU2cHgpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpOwogICAgYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRodW1iLXBsYXkgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBkaXNwbGF5OiBncmlkOwogICAgcGxhY2UtaXRlbXM6IGNlbnRlcjsKICAgIGZvbnQtc2l6ZTogMjhweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuOSk7CiAgICB0ZXh0LXNoYWRvdzogMCAwIDEwcHggcmdiYSgwLDAsMCwwLjcpOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDEyMG1zIGVhc2U7Cn0KCi8qIOKUgOKUgOKUgCBIb3ZlciBpbmZvIG92ZXJsYXkgKHBvc2l0aXZlIHByb21wdCArIGdlbiB0aW1lKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgU2xpZGVzIHVwIGZyb20gdGhlIGJvdHRvbSBvZiAubWpyLXRodW1iIG9uIGNhcmQgaG92ZXIuCiAgIHBvaW50ZXItZXZlbnRzOiBub25lICDihpIgbmV2ZXIgYmxvY2tzIHZpZGVvIG1vdXNlZW50ZXIgLyBwbGF5LW9uLWhvdmVyLgogICB6LWluZGV4OiAyICAgICAgICAgICDihpIgc2l0cyBhYm92ZSB0aGUgdGh1bWJuYWlsIGltYWdlLCBiZWxvdyB0aGUgcGxheSBpY29uLgogICBDb250cm9sbGVkIGJ5IHRoZSAubWpyLXNob3ctaG92ZXItaW5mbyBjbGFzcyBvbiB0aGUgZ3JpZCBjb250YWluZXIsIHdoaWNoCiAgIGlzIHRvZ2dsZWQgdmlhIHRoZSAiU2hvdyBwcm9tcHQgb24gaG92ZXIiIHNldHRpbmcuCiAgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZC1ob3Zlci1pbmZvIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGJvdHRvbTogMDsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIHBhZGRpbmc6IDIycHggOHB4IDdweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHRyYW5zcGFyZW50IDAlLCByZ2JhKDAsIDAsIDAsIDAuNzgpIDEwMCUpOwogICAgY29sb3I6ICNmZmY7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBsaW5lLWhlaWdodDogMS40OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDVweCk7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDE1MG1zIGVhc2UsIHRyYW5zZm9ybSAxNTBtcyBlYXNlOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDNweDsKICAgIHotaW5kZXg6IDI7Cn0KLyogT25seSByZXZlYWwgb24gaG92ZXIgd2hlbiB0aGUgc2V0dGluZyBpcyBlbmFibGVkIChjbGFzcyBvbiBncmlkIGNvbnRhaW5lcikgKi8KLm1qci1ncmlkLm1qci1zaG93LWhvdmVyLWluZm8gLm1qci1jYXJkOmhvdmVyIC5tanItY2FyZC1ob3Zlci1pbmZvIHsKICAgIG9wYWNpdHk6IDE7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7Cn0KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQtaG92ZXItaW5mbyAubWpyLWhvdmVyLXByb21wdCB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgZGlzcGxheTogLXdlYmtpdC1ib3g7CiAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7CiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsOwogICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgIG9wYWNpdHk6IDAuOTsKICAgIGZvbnQtc2l6ZTogOS41cHg7Cn0KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQtaG92ZXItaW5mbyAubWpyLWhvdmVyLWdlbnRpbWUgewogICAgY29sb3I6IHJnYmEoMjU1LCAyMTAsIDEyMCwgMC45NSk7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgZm9udC1zaXplOiA5cHg7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMmVtOwp9CkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7CiAgICAubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZC1ob3Zlci1pbmZvIHsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDBtczsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICB9Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLW1ldGEgewogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBmb250LXNpemU6IDExcHg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLWZpbGVuYW1lIHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIG1pbi13aWR0aDogMDsKICAgIG1hcmdpbi1ib3R0b206IDJweDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQtZGV0YWlscyB7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICBvcGFjaXR5OiAwLjg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLWZpbGVuYW1lLXRleHQgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG1pbi13aWR0aDogMDsKfQoKLyogUmF0aW5nICYgVGFncyBFZGl0b3JzICovCkBrZXlmcmFtZXMgZmFkZUluIHsKICAgIGZyb20gewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00cHgpOwogICAgfQogICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgfQp9Ci8qKgogKiBBcmNoaXZlZCBDU1MgU3R5bGVzIC0gUmF0aW5nIGFuZCBUYWdzCiAqIFRoZXNlIHN0eWxlcyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGVtZS1jb21meS5jc3MKICovCgovKiBBbmltYXRpb25zICovCkBrZXlmcmFtZXMgc2xpZGVJblJpZ2h0IHsKICAgIGZyb20gewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgfQogICAgdG8gewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgfQp9CgovKiBQb3BvdmVycyAqLwoubWpyLXJhdGluZy1wb3BvdmVyLAoubWpyLXRhZ3MtcG9wb3ZlciB7CiAgICBhbmltYXRpb246IGZhZGVJbiAwLjJzIGVhc2U7Cn0KCi5tanItcmF0aW5nLXBvcG92ZXIsCi5tanItdGFncy1wb3BvdmVyIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZywgMC41cmVtKTsKICAgIGJveC1zaGFkb3c6IDAgMTJweCAyOHB4IHJnYmEoMCwwLDAsMC4zNSk7CiAgICBwYWRkaW5nOiA4cHg7Cn0KCi8qIFJhdGluZyBFZGl0b3IgKi8KLm1qci1yYXRpbmctZWRpdG9yIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNHB4OwogICAgcGFkZGluZzogMnB4Owp9CgoubWpyLXJhdGluZy1zdGFyIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBmb250LXNpemU6IDIwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBwYWRkaW5nOiA0cHggNnB4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMTIwbXMgZWFzZSwgYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLCBib3JkZXItY29sb3IgMTIwbXMgZWFzZSwgY29sb3IgMTIwbXMgZWFzZTsKfQoKLm1qci1yYXRpbmctc3Rhcjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpIDM1JSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbWZ5LW1lbnUtc2Vjb25kYXJ5LWJnLCAjMzMzKSA2NSUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1yYXRpbmctZWRpdG9yIC5tanItcmF0aW5nLXN0YXI6aG92ZXIgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpICFpbXBvcnRhbnQ7Cn0KCi5tanItcmF0aW5nLWVkaXRvciAubWpyLXJhdGluZy1zdGFyOmFjdGl2ZSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTUpICFpbXBvcnRhbnQ7Cn0KCi8qIFRhZ3MgRWRpdG9yICovCi5tanItdGFncy1lZGl0b3IgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDhweDsKICAgIHBhZGRpbmc6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgOTIlLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLXNtKTsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjM1KTsKICAgIG1pbi13aWR0aDogMjUwcHg7CiAgICBtYXgtd2lkdGg6IG1pbigzNTBweCwgY2FsYygxMDB2dyAtIDIwcHgpKTsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0Owp9CgoubWpyLXRhZ3MtZWRpdG9yLmlzLWRpc2FibGVkIHsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgb3BhY2l0eTogMC43Owp9CgoubWpyLXRhZ3MtZGlzcGxheSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgZ2FwOiA2cHg7CiAgICBtaW4taGVpZ2h0OiAzMnB4Owp9CgoubWpyLXRhZ3MtZW1wdHkgewogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCk7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KCi5tanItdGFnLWNoaXAgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDI0JSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDQwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiB2YXIoLS1tanItdGFnLWNvbG9yKTsKICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7Cn0KCi5tanItdGFnLWNoaXAtcmVtb3ZlIHsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgYm9yZGVyOiAwOwogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICBjb2xvcjogaW5oZXJpdDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIG9wYWNpdHk6IDAuNzsKfQoKLm1qci10YWctY2hpcC1yZW1vdmU6ZGlzYWJsZWQgewogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgoubWpyLXRhZ3MtaW5wdXQtd3JhcCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5tanItdGFnLWlucHV0IHsKICAgIHdpZHRoOiAxMDAlOwogICAgcGFkZGluZzogNnB4IDhweDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA3NSUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcpOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci10YWctaW5wdXQ6Zm9jdXMgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDg4JSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHZhcigtLW1qci1hY2NlbnQpICFpbXBvcnRhbnQ7Cn0KCi5tanItdGFnLWNoaXA6aG92ZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDM0JSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItdGFnLWNvbG9yKSA2MCUsIHZhcigtLW1qci1ib3JkZXIpKSAhaW1wb3J0YW50Owp9CgoubWpyLXRhZ3MtZHJvcGRvd24gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAxMDAlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgbWFyZ2luLXRvcDogNHB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDkyJSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBtYXgtaGVpZ2h0OiAxNTBweDsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICB6LWluZGV4OiAxMDAwOwp9CgoubWpyLXRhZy1zdWdnZXN0aW9uIHsKICAgIHBhZGRpbmc6IDZweCA4cHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGNvbG9yOiB2YXIoLS1tanItdGFnLWNvbG9yKTsKICAgIGZvbnQtc2l6ZTogMTJweDsKfQoKLm1qci10YWctc3VnZ2VzdGlvbi5pcy1hY3RpdmUsCi5tanItdGFnLXN1Z2dlc3Rpb246aG92ZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDI4JSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7Cn0KCi8qIEJhZGdlcyBJbnRlcmFjdGl2ZSAqLwoubWpyLXJhdGluZy1iYWRnZSwKLm1qci10YWdzLWJhZGdlIHsKICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7Cn0KCi5tanItcmF0aW5nLWJhZGdlIHsKICAgIGNvbG9yOiB2YXIoLS1tanItcmF0aW5nLWNvbG9yKSAhaW1wb3J0YW50Owp9CgoubWpyLXRhZ3MtYmFkZ2UgewogICAgY29sb3I6IHZhcigtLW1qci10YWctY29sb3IpICFpbXBvcnRhbnQ7Cn0KCi5tanItcmF0aW5nLWJhZGdlOmhvdmVyLAoubWpyLXRhZ3MtYmFkZ2U6aG92ZXIgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTsKICAgIGJveC1zaGFkb3c6IDAgNHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuNSk7Cn0KCi8qIFNjcm9sbGJhciBmb3IgdGFncyBkcm9wZG93biAqLwoubWpyLXRhZ3MtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiA2cHg7Cn0KCi5tanItdGFncy1kcm9wZG93bjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDY1JSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyLXJhZGl1czogM3B4Owp9CgoubWpyLXRhZ3MtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItdGFnLWNvbG9yKSA0OCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKfQoKLm1qci10YWdzLWRyb3Bkb3duOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXRhZy1jb2xvcikgNjUlLCB2YXIoLS1tanItYm9yZGVyKSk7Cn0KCi8qIFNpZGViYXIgKGNhbiBiZSBsZWZ0IG9yIHJpZ2h0KSAqLwoubWpyLXNpZGViYXIgewogICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKfQoKLm1qci1zaWRlYmFyLmlzLW9wZW4gewogICAgLyogQm9yZGVyIGlzIHNldCBkeW5hbWljYWxseSBiYXNlZCBvbiBwb3NpdGlvbiAqLwp9CgoubWpyLXNpZGViYXIgLm1qci1zaWRlYmFyLWhlYWRlciB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0yLCAjMzMzKTsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpKTsKfQoKLm1qci1zaWRlYmFyIC5tanItc2lkZWJhci1jb250ZW50IHsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEsICMyYTJhMmEpOwp9CgoubWpyLXNpZGViYXIgLm1qci1zaWRlYmFyLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiA4cHg7Cn0KCi5tanItc2lkZWJhciAubWpyLXNpZGViYXItY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMpOwp9CgoubWpyLXNpZGViYXIgLm1qci1zaWRlYmFyLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKfQoKLm1qci1zaWRlYmFyIC5tanItc2lkZWJhci1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7Cn0KCi8qIEN1c3RvbSBSb290cyBQb3BvdmVyIFN0eWxpbmcgKi8KLm1qci1jdXN0b20tcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDMwMHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSwgdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSkpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgdmFyKC0tYm9yZGVyLWNvbG9yLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKSk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcsIDAuNXJlbSk7CiAgICBib3gtc2hhZG93OiAwIDEycHggMjhweCByZ2JhKDAsMCwwLDAuMzUpOwogICAgei1pbmRleDogdmFyKC0tbWpyLXBvcG92ZXItei1pbmRleCk7CiAgICBwYWRkaW5nOiAxMnB4Owp9CgoubWpyLWN1c3RvbS1wb3BvdmVyIC5tanItcG9wb3Zlci1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLWN1c3RvbS1wb3BvdmVyIC5tanItcG9wb3Zlci1yb3c6bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tYm90dG9tOiAwOwp9CgoubWpyLWN1c3RvbS1wb3BvdmVyIC5tanItcG9wb3Zlci1sYWJlbCB7CiAgICB3aWR0aDogNjBweDsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHZhcigtLWRlc2NyaXAtdGV4dCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSkpOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDUwMDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLXNlbGVjdCB7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWN1c3RvbS1wb3BvdmVyIC5tanItYnRuIHsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IDVweDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLWJ0bjpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1yaWdodDogMDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLWJ0bi5tanItcHJpbWFyeSB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMTglLCB2YXIoLS1tanItc3VyZmFjZS0yKSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLWJ0bi5tanItcHJpbWFyeTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMjUlLCB2YXIoLS1tanItc3VyZmFjZS0yKSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA4MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1zaWRlYmFyIC5tanItc2lkZWJhci1zZWN0aW9uIHsKICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7Cn0KCi5tanItc2lkZWJhciAubWpyLXNpZGViYXItc2VjdGlvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMykgIWltcG9ydGFudDsKfQoKLyogSW5saW5lIFNpZGViYXIgKHdpZHRoLWJhc2VkIHRyYW5zaXRpb25zIGxpa2UgYXJjaGl2ZWQgdmVyc2lvbikgKi8KLm1qci1pbmxpbmUtc2lkZWJhciB7CiAgICB3aWR0aDogMDsKICAgIG1pbi13aWR0aDogMDsKICAgIG1heC13aWR0aDogNDgwcHg7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzJhMmEyYSk7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIHRyYW5zaXRpb246IHdpZHRoIDAuM3MgZWFzZSwgbWluLXdpZHRoIDAuM3MgZWFzZTsKfQoKLm1qci1pbmxpbmUtc2lkZWJhci5pcy1vcGVuIHsKICAgIHdpZHRoOiA0MDBweDsKICAgIG1pbi13aWR0aDogMjYwcHg7Cn0KCi8qIFNwYWNlIGJldHdlZW4gc2lkZWJhciBhbmQgZ3JpZCAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tYnJvd3NlIHsKICAgIGdhcDogMDsKfQoKLyogQm9yZGVyIGJhc2VkIG9uIHBvc2l0aW9uICovCi5tanItaW5saW5lLXNpZGViYXJbZGF0YS1wb3NpdGlvbj0ibGVmdCJdIHsKICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikpOwp9CgoubWpyLWlubGluZS1zaWRlYmFyW2RhdGEtcG9zaXRpb249InJpZ2h0Il0gewogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpKTsKfQoKLyogU2lkZWJhciBwbGFjZWhvbGRlciAqLwoubWpyLXNpZGViYXItcGxhY2Vob2xkZXIgewogICAgcGFkZGluZzogMjBweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMjU1LDI1NSwyNTUsMC42NSkpOwogICAgZm9udC1zaXplOiAxNHB4OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLyogPT09PT09PT09PSBWaWV3ZXIgQ29tcG9uZW50ID09PT09PT09PT0gKi8KLm1qci12aWV3ZXItb3ZlcmxheSB7CiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICB0b3A6IDA7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICBib3R0b206IDA7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOTUpOwogICAgLyogU2l0IGFib3ZlIE1GViAoMTAwMDApIHNvIHRoZSBmdWxsIHZpZXdlciBhbHdheXMgY292ZXJzIHRoZSBmbG9hdGluZyBwYW5lbCAqLwogICAgei1pbmRleDogMTAwMDE7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwp9Ci8qIEZhZGUtaW46IGFuaW1hdGlvbiByZS10cmlnZ2VycyBlYWNoIHRpbWUgSlMgc3dpdGNoZXMgZGlzcGxheSBiYWNrIHRvIGZsZXggKi8KLm1qci12aWV3ZXItb3ZlcmxheVtzdHlsZSo9ImZsZXgiXSB7CiAgICBhbmltYXRpb246IG1qci1mYWRlLWluIDAuMThzIGVhc2Utb3V0Owp9CgpAa2V5ZnJhbWVzIG1qci1mYWRlLWluIHsKICAgIGZyb20geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHNjYWxlKDAuOTk1KTsgfQogICAgdG8gICB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogc2NhbGUoMSk7IH0KfQoKLm1qci12aWV3ZXItaGVhZGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgcGFkZGluZzogMTJweCAyMHB4OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE3MGRlZywgcmdiYSgyNCwgMjcsIDMzLCAwLjk2KSwgcmdiYSgxNywgMTksIDI1LCAwLjk3KSk7CiAgICBib3JkZXItYm90dG9tOiAwLjhweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMik7CiAgICBjb2xvcjogd2hpdGU7Cn0KCi5tanItdmlld2VyLWZpbGVuYW1lIHsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICBtYXgtd2lkdGg6IDQwMHB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci12aWV3ZXItbW9kZS1idXR0b25zIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBnYXA6IDZweDsKfQoKLm1qci12aWV3ZXItbW9kZS1idXR0b25zIGJ1dHRvbiB7CiAgICBwYWRkaW5nOiA0cHggMTJweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjA2LCAyMTEsIDIxOCwgMC4xKSwgcmdiYSgyMDYsIDIxMSwgMjE4LCAwLjAzKSk7CiAgICBib3JkZXI6IDAuOHB4IHNvbGlkIHJnYmEoMTk2LCAyMDIsIDIxMCwgMC4zKTsKICAgIGNvbG9yOiByZ2JhKDIzMCwgMjMzLCAyMzgsIDAuOTUpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgdHJhbnNpdGlvbjogYWxsIDAuMTZzOwp9CgoubWpyLXZpZXdlci1tb2RlLWJ1dHRvbnMgYnV0dG9uOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjEwLCAyMTQsIDIyMCwgMC4xNCksIHJnYmEoMjEwLCAyMTQsIDIyMCwgMC4wNikpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIxNCwgMjE4LCAyMjQsIDAuNDIpOwp9CgovKiBWaWV3ZXIgY2xvc2UgYnV0dG9uIHBpbm5lZCB0byBvdmVybGF5IGNvcm5lciAqLwoubWpyLXZpZXdlci1jbG9zZSwKLm1qci12aWV3ZXItZnMgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMjYpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItd2lkdGg6IDAuOHB4ICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIwNiwgMjExLCAyMTgsIDAuMDgpLCByZ2JhKDIwNiwgMjExLCAyMTgsIDAuMDIpKSwKICAgICAgICByZ2JhKDIwLCAyMywgMjksIDAuOTQpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItY2xvc2UgewogICAgY29sb3I6ICNmZmY0ZjQgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMDUsIDgyLCA4MiwgMC41KSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyMDUsIDgyLCA4MiwgMC4zKSwgcmdiYSgyMDUsIDgyLCA4MiwgMC4xMikpLAogICAgICAgIHJnYmEoNTgsIDE4LCAxOCwgMC45NCkgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDIxOSwgMjE5LCAwLjE2KSwgMCAwIDAgMXB4IHJnYmEoMjA1LCA4MiwgODIsIDAuMDgpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLWNsb3NlOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjM1LCAxMTAsIDExMCwgMC4zOCksIHJnYmEoMjM1LCAxMTAsIDExMCwgMC4xNikpLAogICAgICAgIHJnYmEoNzAsIDE4LCAxOCwgMC45NykgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMzUsIDEzOCwgMTM4LCAwLjY0KSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci1mczpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMTQpLCByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMDYpKSwKICAgICAgICByZ2JhKDIzLCAyNiwgMzIsIDAuOTUpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjE0LCAyMTgsIDIyNCwgMC4zOCkgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItY2xvc2UgLnBpIHsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLXZpZXdlci1jb250ZW50IHsKICAgIGZsZXg6IDE7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKfQoKLm1qci12aWV3ZXItc2luZ2xlLAoubWpyLXZpZXdlci1hYiwKLm1qci12aWV3ZXItc2lkZWJ5c2lkZSB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKfQoKLm1qci12aWV3ZXItc2luZ2xlIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Cn0KCi5tanItdmlld2VyLXNpbmdsZSBpbWcsCi5tanItdmlld2VyLXNpbmdsZSB2aWRlbyB7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBtYXgtaGVpZ2h0OiAxMDAlOwogICAgb2JqZWN0LWZpdDogY29udGFpbjsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzOwp9CgoubWpyLXZpZXdlci1hYiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBub25lOwp9CgoubWpyLXZpZXdlci1zaWRlYnlzaWRlIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgZ2FwOiAycHg7Cn0KCi5tanItdmlld2VyLXNpZGVieXNpZGUgPiBkaXYgewogICAgZmxleDogMTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDUpOwp9CgoubWpyLXZpZXdlci1zaWRlYnlzaWRlIGltZywKLm1qci12aWV3ZXItc2lkZWJ5c2lkZSB2aWRlbyB7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBtYXgtaGVpZ2h0OiAxMDAlOwogICAgb2JqZWN0LWZpdDogY29udGFpbjsKfQoKLm1qci12aWV3ZXItZm9vdGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBwYWRkaW5nOiAxMnB4IDIwcHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOCk7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgY29sb3I6IHdoaXRlOwogICAgZ2FwOiAyMHB4Owp9CgoubWpyLXZpZXdlci1mb290ZXIgYnV0dG9uIHsKICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7CiAgICBjb2xvcjogd2hpdGU7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKfQoKLm1qci12aWV3ZXItZm9vdGVyIGJ1dHRvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7Cn0KCi5tanItdmlld2VyLW5hdiB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTRweDsKfQoKLm1qci12aWV3ZXItbmF2LWJ0biB7CiAgICB3aWR0aDogNDBweCAhaW1wb3J0YW50OwogICAgaGVpZ2h0OiA0MHB4ICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4ICFpbXBvcnRhbnQ7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuNDIpICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMTk0LCAyMDAsIDIwOCwgMC4xOCksIHJnYmEoMTk0LCAyMDAsIDIwOCwgMC4wNykpLAogICAgICAgIHJnYmEoMzQsIDM4LCA0NCwgMC45MikgIWltcG9ydGFudDsKICAgIGNvbG9yOiByZ2JhKDIzNCwgMjM2LCAyNDAsIDAuOTYpICFpbXBvcnRhbnQ7CiAgICBmb250LXNpemU6IDIwcHggIWltcG9ydGFudDsKICAgIGZvbnQtd2VpZ2h0OiA3MDAgIWltcG9ydGFudDsKICAgIGxpbmUtaGVpZ2h0OiAxICFpbXBvcnRhbnQ7CiAgICB0ZXh0LXNoYWRvdzogbm9uZTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjE0cyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDAuMTRzIGVhc2UsIGJvcmRlci1jb2xvciAwLjE0cyBlYXNlICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLW5hdi1idG46aG92ZXI6bm90KDpkaXNhYmxlZCkgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIxNCwgMjE4LCAyMjQsIDAuNTYpICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjA3LCAyMTIsIDIxOSwgMC4yKSwgcmdiYSgyMDcsIDIxMiwgMjE5LCAwLjEpKSwKICAgICAgICByZ2JhKDM5LCA0MywgNDksIDAuOTQpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKfQoKLm1qci12aWV3ZXItbmF2LWJ0bjphY3RpdmU6bm90KDpkaXNhYmxlZCkgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApIHNjYWxlKDAuOTgpOwogICAgZmlsdGVyOiBub25lOwp9CgoubWpyLXZpZXdlci1uYXYtYnRuOmRpc2FibGVkIHsKICAgIG9wYWNpdHk6IDAuMzQgIWltcG9ydGFudDsKICAgIGZpbHRlcjogZ3JheXNjYWxlKDAuMjUpOwogICAgYm94LXNoYWRvdzogbm9uZTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci1pbmRleCB7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBtaW4td2lkdGg6IDc0cHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDRlbTsKICAgIGNvbG9yOiByZ2JhKDIyNiwgMjI4LCAyMzMsIDAuOTQpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgxOTcsIDIwMywgMjExLCAwLjE1KSwgcmdiYSgxOTcsIDIwMywgMjExLCAwLjA2KSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE5NywgMjAzLCAyMTEsIDAuMzQpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBwYWRkaW5nOiA1cHggMTFweDsKICAgIHRleHQtc2hhZG93OiBub25lOwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpOwp9CgoubWpyLXZpZXdlci1wbGF5ZXJiYXIgewogICAgYm9yZGVyLXJhZGl1czogMThweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTk0LCAyMDAsIDIwOCwgMC4xNik7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgdG9wIGxlZnQsIHJnYmEoOTAsIDE1MCwgMjU1LCAwLjA4KSwgdHJhbnNwYXJlbnQgMzYlKSwKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTYwZGVnLCByZ2JhKDIwLCAyNCwgMzAsIDAuOTQpLCByZ2JhKDEyLCAxNSwgMjEsIDAuOTgpKTsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpLAogICAgICAgIDAgMTZweCAzNnB4IHJnYmEoMCwgMCwgMCwgMC4yMik7CiAgICAvKiBvdmVyZmxvdyBtdXN0IHN0YXkgdmlzaWJsZSBzbyB0aGUgc2VlayBydWxlciB0aWNrcy9sYWJlbHMgKHRvcDotMTZweCAvIHRvcDotMzRweCkKICAgICAgIHRoYXQgYXJlIGFic29sdXRlbHkgcG9zaXRpb25lZCBhYm92ZSB0aGUgc2VlayBiYXIgYXJlIG5vdCBjbGlwcGVkLiAqLwogICAgb3ZlcmZsb3c6IHZpc2libGU7Cn0KCi5tanItdmlld2VyLXRvb2xzIHsKICAgIGFsaWduLWl0ZW1zOiBzdGFydDsKICAgIGp1c3RpZnktY29udGVudDogc3RyZXRjaDsKICAgIGdhcDogOHB4Owp9CgoubWpyLXZpZXdlci1oZWFkZXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgoubWpyLXZpZXdlci1oZWFkZXI6OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMThweDsKICAgIHJpZ2h0OiAxOHB4OwogICAgdG9wOiA0NHB4OwogICAgaGVpZ2h0OiAxcHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHRyYW5zcGFyZW50LCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpLCB0cmFuc3BhcmVudCk7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIG9wYWNpdHk6IDAuNzsKfQoKLm1qci12aWV3ZXItaGVhZGVyLW1ldGEgewogICAgbWluLWhlaWdodDogMzBweDsKICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjAzNSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDYpOwp9CgoubWpyLXZpZXdlci1oZWFkZXItdG9wIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBwYWRkaW5nLXJpZ2h0OiA4NHB4OwogICAgcGFkZGluZy1sZWZ0OiAxMnB4Owp9CgoubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tbGVmdCB7CiAgICBkaXNwbGF5OiBub25lOwogICAgZmxleDogMSAxIDA7CiAgICBtaW4td2lkdGg6IDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tY2VudGVyIHsKICAgIG1pbi13aWR0aDogMDsKICAgIGZsZXg6IDEgMSBhdXRvOwp9CgoubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tcmlnaHQgewogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgIGZsZXg6IDEgMSAwOwogICAgbWluLXdpZHRoOiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci12aWV3ZXItdGl0bGUtd3JhcCB7CiAgICB3aWR0aDogYXV0bzsKICAgIG1pbi13aWR0aDogMDsKICAgIG1heC13aWR0aDogbWluKDEwMCUsIGNhbGMoMTAwdncgLSAyMjBweCkpOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogMTJweDsKfQoKLm1qci12aWV3ZXItdGl0bGUtbGluZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tanItdmlld2VyLWZpbGVuYW1lIHsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMWVtOwogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW46IDAgYXV0bzsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLm1qci12aWV3ZXItYmFkZ2VzIHsKICAgIGdhcDogNHB4Owp9CgoubWpyLXZpZXdlci10aXRsZS1saW5lIC5tanItdmlld2VyLWJhZGdlcyB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGZsZXgtd3JhcDogbm93cmFwOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXZpZXdlci1oZWFkZXItbWV0YS0tbGVmdCB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICB3aWR0aDogZml0LWNvbnRlbnQ7CiAgICBtYXgtd2lkdGg6IDEwMCU7Cn0KCi5tanItdmlld2VyLWhlYWRlci1tZXRhLS1sZWZ0OmVtcHR5IHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5tanItdmlld2VyLWhlYWRlci1tZXRhLS1yaWdodCB7CiAgICBqdXN0aWZ5LXNlbGY6IGVuZDsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKICAgIG1heC13aWR0aDogMTAwJTsKfQoKLm1qci12aWV3ZXItbW9kZS1idXR0b25zIHsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgcGFkZGluZzogM3B4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDQpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjA0KTsKfQoKLm1qci12aWV3ZXItdG9vbHMtZGVjayB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC13cmFwOiBub3dyYXA7CiAgICBnYXA6IDhweDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBtaW4td2lkdGg6IDA7CiAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluOwp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtaW4td2lkdGg6IGF1dG87CiAgICBtaW4taGVpZ2h0OiAwOwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4wOCk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LDI1NSwyNTUsMC4wNSksIHJnYmEoMjU1LDI1NSwyNTUsMC4wMikpLAogICAgICAgIHJnYmEoMTAsIDEyLCAxNiwgMC4yNCk7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjA0KSwKICAgICAgICAwIDZweCAxNnB4IHJnYmEoMCwwLDAsMC4xMik7CiAgICBwYWRkaW5nOiA1cHggNnB4OwogICAgZmxleDogMCAwIGF1dG87Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsOjpiZWZvcmUgewogICAgY29udGVudDogIiI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMCAwIGF1dG8gMDsKICAgIGhlaWdodDogMXB4OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB0cmFuc3BhcmVudCwgcmdiYSgyNTUsMjU1LDI1NSwwLjE2KSwgdHJhbnNwYXJlbnQpOwogICAgb3BhY2l0eTogMC43OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsLWhlYWQgewogICAgZGlzcGxheTogbm9uZTsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtaGVhZGluZyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMXB4OwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbC1leWVicm93IHsKICAgIGZvbnQtc2l6ZTogOXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjE0ZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC40Nik7Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsLXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMWVtOwogICAgY29sb3I6IHJnYmEoMjQ4LDI1MCwyNTIsMC45Nik7Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsLWJvZHkgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIGdhcDogNnB4OwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbFtkYXRhLXBhbmVsPSJncmFkZSJdIC5tanItdmlld2VyLXRvb2xzLXBhbmVsLWJvZHkgewogICAgZGlzcGxheTogZmxleDsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWxbZGF0YS1wYW5lbD0ib3ZlcmxheSJdIC5tanItdmlld2VyLXRvb2xzLXBhbmVsLWJvZHkgewogICAgZGlzcGxheTogZmxleDsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWxbZGF0YS1wYW5lbD0iaW5zcGVjdCJdIC5tanItdmlld2VyLXRvb2xzLXBhbmVsLWJvZHksCi5tanItdmlld2VyLXRvb2xzLXBhbmVsW2RhdGEtcGFuZWw9ImFjdGlvbnMiXSAubWpyLXZpZXdlci10b29scy1wYW5lbC1ib2R5LAoubWpyLXZpZXdlci10b29scy1wYW5lbFtkYXRhLXBhbmVsPSJpbmZvIl0gLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtYm9keSB7CiAgICBkaXNwbGF5OiBmbGV4Owp9CgoubWpyLXZpZXdlci10b29scy1ncm91cCB7CiAgICB3aWR0aDogYXV0bzsKICAgIG1pbi1oZWlnaHQ6IDMwcHg7CiAgICBwYWRkaW5nOiA1cHggN3B4OwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgZ2FwOiA2cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMTIpOwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsMjU1LDI1NSwwLjAzNSksIHJnYmEoMjU1LDI1NSwyNTUsMC4wMikpLAogICAgICAgIHJnYmEoMTAsIDEyLCAxNiwgMC4xOCk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4wMyk7CiAgICBtaW4td2lkdGg6IGZpdC1jb250ZW50Owp9CgoubWpyLXZpZXdlci10b29scy1ncm91cC1sYWJlbCB7CiAgICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjc1KTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjE1cHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDEwcHg7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW3N0eWxlKj0iLS1tanItZ3JvdXAtYWNjZW50Il0gLm1qci12aWV3ZXItdG9vbHMtZ3JvdXAtbGFiZWwgewogICAgY29sb3I6IHJnYmEodmFyKC0tbWpyLWdyb3VwLWFjY2VudCksIDAuOTApOwp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtzdHlsZSo9Ii0tbWpyLWdyb3VwLWFjY2VudCJdIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1tanItZ3JvdXAtYWNjZW50KSwgMC4zNSk7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9ImNoYW5uZWwiXSAubWpyLXZpZXdlci10b29scy1ncm91cC1sYWJlbCwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iYW5hbHlzaXMiXSAubWpyLXZpZXdlci10b29scy1ncm91cC1sYWJlbCwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1ndWlkZXMiXSAubWpyLXZpZXdlci10b29scy1ncm91cC1sYWJlbCwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1pbnNwZWN0Il0gLm1qci12aWV3ZXItdG9vbHMtZ3JvdXAtbGFiZWwgewogICAgbWluLXdpZHRoOiA0MnB4Owp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbFtkYXRhLXBhbmVsPSJvdmVybGF5Il0gLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1ndWlkZXMiXSB7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1ndWlkZXMiXSwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1pbnNwZWN0Il0gewogICAgZmxleC13cmFwOiB3cmFwOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iY2hhbm5lbCJdLAoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJleHBvc3VyZSJdLAoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJnYW1tYSJdLAoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJhbmFseXNpcyJdLAoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJjb21wYXJlIl0sCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9ImF1ZGlvLXZpeiJdIHsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKfQoKLm1qci12aWV3ZXItdG9vbHMtYWN0aW9ucywKLm1qci12aWV3ZXItdG9vbHMtbWV0YSB7CiAgICB3aWR0aDogYXV0bzsKICAgIG1pbi1oZWlnaHQ6IDMwcHg7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgcGFkZGluZzogNXB4IDdweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDYpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjAzKTsKfQoKLm1qci12aWV3ZXItdG9vbHMtYWN0aW9ucyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIGdhcDogNnB4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXZpZXdlci10b29scy1tZXRhIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiA2cHg7CiAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItdmlld2VyLXRvb2xzLWFjdGlvbi0tcHJpbWFyeSB7CiAgICBtYXJnaW4tbGVmdDogMDsKfQoKLm1qci12aWV3ZXItdG9vbHMtYWN0aW9uICsgLm1qci12aWV3ZXItdG9vbHMtYWN0aW9uIHsKICAgIG1hcmdpbi1sZWZ0OiA0cHg7Cn0KCi5tanItdmlld2VyLXRvb2xzLXNlbGVjdCB7CiAgICBtaW4taGVpZ2h0OiAyNHB4Owp9CgoubWpyLXZpZXdlci10b29scy1yYW5nZS1pbnB1dCB7CiAgICB3aWR0aDogOTJweCAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29scy1yYW5nZSBzcGFuIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKfQoKQG1lZGlhIChtYXgtd2lkdGg6IDE0ODBweCkgewogICAgLm1qci12aWV3ZXItdG9vbHMtZGVjayB7CiAgICAgICAgZ2FwOiA2cHg7CiAgICB9Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiAxMjIwcHgpIHsKICAgIC5tanItdmlld2VyLWhlYWRlci10b3AgewogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiA4NHB4OwogICAgICAgIHBhZGRpbmctbGVmdDogMDsKICAgIH0KCiAgICAubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tY2VudGVyLAogICAgLm1qci12aWV3ZXItaGVhZGVyLWFyZWEtLXJpZ2h0IHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIH0KCiAgICAubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tY2VudGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4OiAxIDEgMTAwJTsKICAgIH0KCiAgICAubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tcmlnaHQgewogICAgICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgICAgICAgdHJhbnNmb3JtOiBub25lOwogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4OiAxIDEgMTAwJTsKICAgIH0KCiAgICAubWpyLXZpZXdlci1oZWFkZXItbWV0YS0tcmlnaHQgewogICAgICAgIGp1c3RpZnktc2VsZjogY2VudGVyOwogICAgfQoKICAgIC5tanItdmlld2VyLXRvb2xzLWRlY2sgewogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBvdmVyZmxvdy14OiB2aXNpYmxlOwogICAgfQoKICAgIC5tanItdmlld2VyLXRvb2xzLXBhbmVsLAogICAgLm1qci12aWV3ZXItdG9vbHMtYWN0aW9ucywKICAgIC5tanItdmlld2VyLXRvb2xzLW1ldGEsCiAgICAubWpyLXZpZXdlci10b29scy1wYW5lbC1ib2R5IHsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB9CgogICAgLm1qci12aWV3ZXItdG9vbHMtbWV0YSB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgfQp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJjb21wYXJlIl1bZGF0YS1hY3RpdmU9IjEiXSB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLW1qci1ncm91cC1hY2NlbnQpLCAwLjEwKTsKICAgIGJvcmRlci1sZWZ0LWNvbG9yOiByZ2JhKHZhcigtLW1qci1ncm91cC1hY2NlbnQpLCAwLjYwKTsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCByZ2JhKHZhcigtLW1qci1ncm91cC1hY2NlbnQpLCAwLjIyKTsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iY29tcGFyZSJdW2RhdGEtYWN0aXZlPSIxIl0gLm1qci12aWV3ZXItdG9vbHMtc2VsZWN0IHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1tanItZ3JvdXAtYWNjZW50KSwgMC42MCk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAycHggcmdiYSh2YXIoLS1tanItZ3JvdXAtYWNjZW50KSwgMC4xOCk7Cn0KCi5tanItdmlld2VyLXRvb2xzLXNlbGVjdDpmb2N1cyB7CiAgICBvdXRsaW5lOiBub25lOwogICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHJnYmEoNjQsMTYwLDI1NSwwLjIyKTsKfQoKLyogTmF0aXZlIGRyb3Bkb3duczogaGludCBkYXJrIFVJIGFuZCBzdHlsZSBvcHRpb25zIHdoZW4gdGhlIGJyb3dzZXIgYWxsb3dzIGl0LiAqLwoubWpyLXZpZXdlci1oZWFkZXIgewogICAgY29sb3Itc2NoZW1lOiBkYXJrOwp9CgoubWpyLXZpZXdlci10b29scy1zZWxlY3QgewogICAgbWluLWhlaWdodDogMjRweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC40NikgIWltcG9ydGFudDsKICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuOTIpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4xNCkgIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IDhweCAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29scy1zZWxlY3Qgb3B0aW9uIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsIHZhcigtLWlucHV0LXRleHQsICNkZGQpKTsKfQoKLm1qci12aWV3ZXItdG9vbHMtcmFuZ2UtaW5wdXQ6Zm9jdXMgewogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci12aWV3ZXItdG9vbC1idG4tLXJlc2V0IHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjIyKSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29sLWJ0biB7CiAgICBtaW4taGVpZ2h0OiAyNHB4ICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiA4cHggIWltcG9ydGFudDsKICAgIGJvcmRlci13aWR0aDogMXB4ICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIxMCwyMTQsMjIwLDAuMDc1KSwgcmdiYSgyMTAsMjE0LDIyMCwwLjAyNSkpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMTk2LDIwMiwyMTAsMC4xNikgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjA1KTsKICAgIGZvbnQtc2l6ZTogMTFweCAhaW1wb3J0YW50OwogICAgcGFkZGluZzogMCA4cHggIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbC1idG46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIyMCwyMjQsMjMwLDAuMjQpICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIyMCwyMjQsMjMwLDAuMSksIHJnYmEoMjIwLDIyNCwyMzAsMC4wMzUpKSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJhbmFseXNpcyJdIC5tanItdmlld2VyLXRvb2wtYnRuW2RhdGEtYWN0aXZlPSIxIl0gewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDE2NiwgOTIsIDAuMjIpLCByZ2JhKDI1NSwgMTE2LCA2NCwgMC4wOCkpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAxNjAsIDkyLCAwLjM0KSAhaW1wb3J0YW50OwogICAgY29sb3I6IHJnYmEoMjU1LCAyMzYsIDIyNCwgMC45NikgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iYW5hbHlzaXMiXSAubWpyLXZpZXdlci10b29sLWJ0bltkYXRhLWFjdGl2ZT0iMSJdOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAxODAsIDEwOCwgMC4yOCksIHJnYmEoMjU1LCAxMjgsIDcyLCAwLjE0KSkgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDE4NCwgMTE2LCAwLjQ2KSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJvdmVybGF5LWd1aWRlcyJdIC5tanItdmlld2VyLXRvb2wtYnRuW2RhdGEtYWN0aXZlPSIxIl0gewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSg5MiwgMjE5LCAxODYsIDAuMjIpLCByZ2JhKDQ0LCAxNzAsIDE0NCwgMC4wOCkpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoOTIsIDIxOSwgMTg2LCAwLjM0KSAhaW1wb3J0YW50OwogICAgY29sb3I6IHJnYmEoMjI0LCAyNTUsIDI0OCwgMC45NikgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1ndWlkZXMiXSAubWpyLXZpZXdlci10b29sLWJ0bltkYXRhLWFjdGl2ZT0iMSJdOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMTAyLCAyMzAsIDE5NiwgMC4yOCksIHJnYmEoNTIsIDE4MiwgMTU2LCAwLjE0KSkgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgxMTAsIDIzNiwgMjAyLCAwLjQ2KSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJvdmVybGF5LWluc3BlY3QiXSAubWpyLXZpZXdlci10b29sLWJ0bltkYXRhLWFjdGl2ZT0iMSJdIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMTI0LCAxNjYsIDI1NSwgMC4yMiksIHJnYmEoMTA5LCA4OCwgMjIyLCAwLjA4KSkgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgxMzIsIDE3MCwgMjU1LCAwLjM2KSAhaW1wb3J0YW50OwogICAgY29sb3I6IHJnYmEoMjM2LCAyNDIsIDI1NSwgMC45NykgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1pbnNwZWN0Il0gLm1qci12aWV3ZXItdG9vbC1idG5bZGF0YS1hY3RpdmU9IjEiXTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDEzOCwgMTgwLCAyNTUsIDAuMzApLCByZ2JhKDEyNCwgMTAwLCAyMzIsIDAuMTQpKSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE0OCwgMTg4LCAyNTUsIDAuNDgpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLXRvb2wtYnRuW2RhdGEtYWN0aXZlPSIxIl0gewogICAgZmlsdGVyOiBzYXR1cmF0ZSgxLjEyKSBicmlnaHRuZXNzKDEuMDQpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xMCksCiAgICAgICAgMCAwIDAgMXB4IHJnYmEoMjU1LDI1NSwyNTUsMC4wNiksCiAgICAgICAgMCA4cHggMThweCByZ2JhKDAsMCwwLDAuMTYpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLWhlbHAgewogICAgYm9yZGVyLXJhZGl1czogMTRweCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgxMywxNywyMiwwLjk2KSwgcmdiYSg4LDExLDE2LDAuOTgpKSAhaW1wb3J0YW50OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogMCAxOHB4IDM0cHggcmdiYSgwLDAsMCwwLjM0KSAhaW1wb3J0YW50Owp9CgpAbWVkaWEgKG1heC13aWR0aDogMTIyMHB4KSB7CiAgICAubWpyLXZpZXdlci10b29scyB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICB9CgogICAgLm1qci12aWV3ZXItdG9vbHMtYWN0aW9ucyB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgfQoKICAgIC5tanItdmlld2VyLWhlYWRlci10b3AgewogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgICAgIGp1c3RpZnktaXRlbXM6IGNlbnRlcjsKICAgIH0KCiAgICAubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tbGVmdCwKICAgIC5tanItdmlld2VyLWhlYWRlci1hcmVhLS1jZW50ZXIsCiAgICAubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tcmlnaHQgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgfQoKICAgIC5tanItdmlld2VyLWhlYWRlci1tZXRhLS1sZWZ0LAogICAgLm1qci12aWV3ZXItaGVhZGVyLW1ldGEtLXJpZ2h0IHsKICAgICAgICBqdXN0aWZ5LXNlbGY6IGNlbnRlcjsKICAgIH0KCiAgICAubWpyLXZpZXdlci10b29scy1ib2R5IHsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDIyMHB4LCAxZnIpKTsKICAgIH0KfQoKLyogPT09PT09PT09PSBDdXN0b20gVmlkZW8gQ29udHJvbHMgKG5vIG5hdGl2ZSBiYXIpID09PT09PT09PT0gKi8KLm1qci12aWRlby1ob3N0IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLm1qci12aWRlby1jb250cm9scyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAxMnB4OwogICAgcmlnaHQ6IDEycHg7CiAgICBib3R0b206IDEycHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNik7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpOwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTsKICAgIG9wYWNpdHk6IDA7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgZWFzZTsKICAgIHotaW5kZXg6IDU7Cn0KCi5tanItdmlkZW8tcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXZpZGVvLXJvdy0tdG9wIHsKICAgIGdhcDogMTJweDsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIDFmciBhdXRvIGF1dG8gYXV0bzsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tcm93LS10b3AgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIGF1dG8gMWZyIGF1dG8gYXV0bzsKfQoKLm1qci12aWRlby1jb250cm9scy0tcHJldmlldyAubWpyLXZpZGVvLXJvdy0tdG9wIHsKICAgIGRpc3BsYXk6IGZsZXg7Cn0KCi5tanItdmlkZW8tcm93LS1ib3R0b20gewogICAgZ2FwOiA4cHg7Cn0KCi5tanItdmlkZW8tZ3JvdXAgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtaW4td2lkdGg6IDA7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg1KTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIHVzZXItc2VsZWN0OiBub25lOwp9CgoubWpyLXZpZGVvLW51bSB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgcGFkZGluZzogNXB4IDhweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci12aWRlby1udW06Zm9jdXMgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOwp9CgoubWpyLXZpZGVvLW51bS0tc3BlZWQgewogICAgY29sb3Itc2NoZW1lOiBkYXJrOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjYyKTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpOwp9CgoubWpyLXZpZGVvLW51bS0tc3BlZWQgb3B0aW9uIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwp9CgoubWpyLXZpZGVvLWZyYW1lIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgICBtaW4td2lkdGg6IDUycHg7CiAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgIHVzZXItc2VsZWN0OiBub25lOwp9CgoubWpyLXZpZGVvLWZyYW1lLmlzLXN0ZXAgewogICAgY29sb3I6ICNmZmQyNGQ7Cn0KCi5tanItdmlkZW8tYm90dG9tIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmbGV4OiAxOwp9CgoubWpyLXZpZGVvLWJvdHRvbS0tbGVmdCB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7Cn0KCi5tanItdmlkZW8tYm90dG9tLS1yaWdodCB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwp9CgoubWpyLXZpZGVvLXRyYW5zcG9ydCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgZmxleDogMCAwIGF1dG87Cn0KCi8qIFNob3cgY29udHJvbHMgb24gaG92ZXIvZm9jdXMgKHZpZXdlcikuICovCi5tanItdmlkZW8taG9zdDpob3ZlciAubWpyLXZpZGVvLWNvbnRyb2xzLAoubWpyLXZpZGVvLWNvbnRyb2xzOmZvY3VzLXdpdGhpbiB7CiAgICBvcGFjaXR5OiAxOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87Cn0KCi8qIFByZXZpZXc6IGtlZXAgY29udHJvbHMgdmlzaWJsZSBiZWNhdXNlIHRoZSBhcmVhIGlzIHNtYWxsLiAqLwoubWpyLXZpZGVvLWNvbnRyb2xzLS1wcmV2aWV3IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IGF1dG87CiAgICByaWdodDogMTBweDsKICAgIHRvcDogYXV0bzsKICAgIGJvdHRvbTogMTBweDsKICAgIG9wYWNpdHk6IDE7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyOiBub25lOwogICAgcGFkZGluZzogMDsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgd2lkdGg6IGF1dG87CiAgICBoZWlnaHQ6IGF1dG87CiAgICBiYWNrZHJvcC1maWx0ZXI6IG5vbmU7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogbm9uZTsKfQoKLm1qci12aWRlby1wcmV2aWV3LWJ0biB7CiAgICB3aWR0aDogMzhweDsKICAgIGhlaWdodDogMzhweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjIyKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC40Mik7CiAgICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjkyKTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwp9CgoubWpyLXZpZGVvLXByZXZpZXctYnRuOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC41MCk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4yOCk7Cn0KCi5tanItdmlkZW8tcHJldmlldy1idG4gLnBpIHsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLXZpZGVvLWJ0biB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KTsKICAgIGNvbG9yOiAjZmZmOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci12aWRlby1idG46aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKfQoKLm1qci12aWRlby1idG4uaXMtb24gewogICAgYmFja2dyb3VuZDogcmdiYSg2NCwgMTYwLCAyNTUsIDAuMjUpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDY0LCAxNjAsIDI1NSwgMC41NSk7Cn0KCi5tanItdmlkZW8tYnRuLS1pbiB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoNzAsIDI1NSwgMTIwLCAwLjU1KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzAsIDI1NSwgMTIwLCAwLjEyKTsKfQoKLm1qci12aWRlby1idG4tLWluOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzAsIDI1NSwgMTIwLCAwLjE4KTsKfQoKLm1qci12aWRlby1idG4tLW91dCB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCA3MCwgNzAsIDAuNTUpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDcwLCA3MCwgMC4xMCk7Cn0KCi5tanItdmlkZW8tYnRuLS1vdXQ6aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDcwLCA3MCwgMC4xNik7Cn0KCi5tanItdmlkZW8tdGltZSB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgbWluLXdpZHRoOiA5MnB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItdmlkZW8tdGltZWdyb3VwIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICBnYXA6IDEwcHg7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItdmlkZW8tcmFuZ2UtY291bnQgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IHJnYmEoNjQsIDE5MCwgMjU1LCAwLjkyKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoNjQsIDE5MCwgMjU1LCAwLjEwKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNjQsIDE5MCwgMjU1LCAwLjI1KTsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgcGFkZGluZzogMXB4IDhweDsKICAgIGxpbmUtaGVpZ2h0OiAxNnB4OwogICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKICAgIHVzZXItc2VsZWN0OiBub25lOwp9CgoubWpyLXZpZGVvLXJhbmdlIHsKICAgIGFjY2VudC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwp9CgoubWpyLXZpZGVvLXJhbmdlLS1zZWVrIHsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDgwcHg7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAxOwogICAgLyogV2UgZHJhdyBvdXIgb3duIHBsYXloZWFkL21hcmtlcnM7IGhpZGUgdGhlIG5hdGl2ZSB0aHVtYiAiZG90Ii4gKi8KICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgIGFwcGVhcmFuY2U6IG5vbmU7Cn0KCi5tanItdmlkZW8tcmFuZ2UtLXNlZWs6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHsKICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICB3aWR0aDogMDsKICAgIGhlaWdodDogMDsKICAgIGJvcmRlcjogMDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm94LXNoYWRvdzogbm9uZTsKfQoKLm1qci12aWRlby1yYW5nZS0tc2Vlazo6LW1vei1yYW5nZS10aHVtYiB7CiAgICB3aWR0aDogMDsKICAgIGhlaWdodDogMDsKICAgIGJvcmRlcjogMDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm94LXNoYWRvdzogbm9uZTsKfQoKLm1qci12aWRlby1zZWVrLXdyYXAgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWluLXdpZHRoOiA4MHB4OwogICAgZmxleDogMTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwp9CgoubWpyLXZpZGVvLXNlZWstem9uZXMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiA1MCU7CiAgICBoZWlnaHQ6IDEwcHg7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDI7Cn0KCi5tanItdmlkZW8tc2Vlay16b25lIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMDsKICAgIGJvdHRvbTogMDsKfQoKLyogMC4uSW46IHRyaW1tZWQtb3V0IHJhbmdlLiAqLwoubWpyLXZpZGVvLXNlZWstem9uZS0tbGVmdFRyaW0gewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDcwLCA3MCwgMC4xOCk7Cn0KCi8qIEluLi5PdXQ6IHNlbGVjdGVkIHBsYXliYWNrIHJhbmdlIGhpZ2hsaWdodC4gKi8KLm1qci12aWRlby1zZWVrLXpvbmUtLXNlbGVjdGVkIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoNjQsIDE5MCwgMjU1LCAwLjU1KTsKfQoKLm1qci12aWRlby1zZWVrLXpvbmVzLmlzLWZ1bGxyYW5nZSAubWpyLXZpZGVvLXNlZWstem9uZS0tc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKfQoKLyogT3V0Li5FbmQ6IHNob3cgb3V0LW9mLXJhbmdlIGZyYW1lcyBhcyBhIGRpZmZlcmVudCBjb2xvci4gKi8KLm1qci12aWRlby1zZWVrLXpvbmUtLXJpZ2h0VHJpbSB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgNzAsIDcwLCAwLjIwKTsKfQoKLm1qci12aWRlby1zZWVrLW92ZXJsYXkgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiA1MCU7CiAgICBoZWlnaHQ6IDA7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDM7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiA1MCU7CiAgICB3aWR0aDogMTZweDsKICAgIGhlaWdodDogMzJweDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgY3Vyc29yOiBldy1yZXNpemU7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIHRvdWNoLWFjdGlvbjogbm9uZTsKICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgei1pbmRleDogNDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpOwogICAgYm94LXNoYWRvdzogMCA0cHggMTBweCByZ2JhKDAsMCwwLDAuMzUpOwp9CgoubWpyLXZpZGVvLXNlZWstaGFuZGxlOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMCk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNCk7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjphZnRlciwKLm1qci12aWRlby1zZWVrLWhhbmRsZS0tb3V0OjphZnRlciB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDUwJTsKICAgIHRvcDogNTAlOwogICAgd2lkdGg6IDJweDsKICAgIGhlaWdodDogMThweDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDcwLCA3MCwgMC45NSk7CiAgICBib3JkZXItcmFkaXVzOiAycHg7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjphZnRlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDcwLCAyNTUsIDEyMCwgMC45NSk7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjpiZWZvcmUsCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLW91dDo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogNTAlOwogICAgd2lkdGg6IDA7CiAgICBoZWlnaHQ6IDA7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjpiZWZvcmUgewogICAgdG9wOiA0cHg7CiAgICBib3JkZXItbGVmdDogNXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYm9yZGVyLXJpZ2h0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItYm90dG9tOiA2cHggc29saWQgcmdiYSg3MCwgMjU1LCAxMjAsIDAuOTUpOwp9CgoubWpyLXZpZGVvLXNlZWstaGFuZGxlLS1vdXQ6OmJlZm9yZSB7CiAgICBib3R0b206IDRweDsKICAgIGJvcmRlci1sZWZ0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmlnaHQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJvcmRlci10b3A6IDZweCBzb2xpZCByZ2JhKDI1NSwgNzAsIDcwLCAwLjk1KTsKfQoKLm1qci12aWRlby1zZWVrLXRpY2tzIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIHRvcDogLTE2cHg7CiAgICBoZWlnaHQ6IDEycHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEwKTsKICAgIG9wYWNpdHk6IDAuOTsKfQoKLm1qci12aWRlby1zZWVrLWxhYmVscyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICB0b3A6IC0zNHB4OwogICAgaGVpZ2h0OiAxNHB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBsaW5lLWhlaWdodDogMTRweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuNzIpOwogICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKICAgIHRleHQtc2hhZG93OiAwIDFweCAwIHJnYmEoMCwwLDAsMC41NSk7Cn0KCi5tanItdmlkZW8tc2Vlay1sYWJlbCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoubWpyLXZpZGVvLXNlZWstcGxheWhlYWQtbGFiZWwgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAxMnB4OwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgcGFkZGluZzogMXB4IDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjU1KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xNCk7CiAgICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjkyKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGxpbmUtaGVpZ2h0OiAxNHB4OwogICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoubWpyLXZpZGVvLXNlZWstbWFyayB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IC0xMHB4OwogICAgd2lkdGg6IDE0cHg7CiAgICBoZWlnaHQ6IDIwcHg7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgIGN1cnNvcjogZXctcmVzaXplOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICB0b3VjaC1hY3Rpb246IG5vbmU7CiAgICB6LWluZGV4OiA0OwogICAgLS1tanItbWFyay1jb2xvcjogcmdiYSgyNTUsIDcwLCA3MCwgMC45NSk7Cn0KCi5tanItdmlkZW8tc2Vlay1tYXJrLS1pbiB7CiAgICAtLW1qci1tYXJrLWNvbG9yOiByZ2JhKDcwLCAyNTUsIDEyMCwgMC45NSk7Cn0KCi5tanItdmlkZW8tc2Vlay1tYXJrOjpiZWZvcmUgewogICAgY29udGVudDogIiI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiA1MCU7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7CiAgICB3aWR0aDogMnB4OwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLW1hcmstY29sb3IpOwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHJnYmEoMCwwLDAsMC4zNSk7Cn0KCi5tanItdmlkZW8tc2Vlay1tYXJrOjphZnRlciB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogLTVweDsKICAgIGxlZnQ6IDUwJTsKICAgIHdpZHRoOiAwOwogICAgaGVpZ2h0OiAwOwogICAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJvcmRlci1yaWdodDogNXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYm9yZGVyLWJvdHRvbTogNnB4IHNvbGlkIHZhcigtLW1qci1tYXJrLWNvbG9yKTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKfQoKLm1qci12aWRlby1zZWVrLW1hcmstLWluOjphZnRlciB7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiB2YXIoLS1tanItbWFyay1jb2xvcik7Cn0KCi5tanItdmlkZW8tc2Vlay1tYXJrLS1vdXQ6OmFmdGVyIHsKICAgIHRvcDogYXV0bzsKICAgIGJvdHRvbTogLTVweDsKICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICBib3JkZXItdG9wOiA2cHggc29saWQgdmFyKC0tbWpyLW1hcmstY29sb3IpOwp9CgoubWpyLXZpZGVvLXNlZWstcGxheWhlYWQgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAtMTJweDsKICAgIHdpZHRoOiAycHg7CiAgICBoZWlnaHQ6IDI0cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjAwLCA3MCwgMC45NSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgwLDAsMCwwLjM1KTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMXB4KTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIHsKICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgICBsZWZ0OiBhdXRvOwogICAgcmlnaHQ6IGF1dG87CiAgICBib3R0b206IGF1dG87CiAgICBvcGFjaXR5OiAxOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICB3aWR0aDogMTAwJTsKICAgIG1heC13aWR0aDogbm9uZTsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDE0cHg7CiAgICBib3JkZXItcmFkaXVzOiAxOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxOTYsIDIwMiwgMjEwLCAwLjEyKTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCB0b3AgbGVmdCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzKSwgdHJhbnNwYXJlbnQgMzQlKSwKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDE5OCwgMjAzLCAyMTAsIDAuMDI1KSwgcmdiYSgxOTgsIDIwMywgMjEwLCAwLjAwOCkpLAogICAgICAgIGxpbmVhci1ncmFkaWVudCgxNjVkZWcsIHJnYmEoMTgsIDIyLCAyOCwgMC44MiksIHJnYmEoMTIsIDE1LCAyMSwgMC45KSk7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSwKICAgICAgICAwIDEwcHggMzBweCByZ2JhKDAsIDAsIDAsIDAuMTQpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBub25lOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IG5vbmU7CiAgICBnYXA6IDEycHg7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJ0biB7CiAgICBtaW4taGVpZ2h0OiAzOHB4OwogICAgcGFkZGluZzogOHB4IDEycHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyMTAsIDIxNCwgMjIwLCAwLjA3KSwgcmdiYSgyMTAsIDIxNCwgMjIwLCAwLjAyKSk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMTk0LCAyMDEsIDIwOCwgMC4xOCk7CiAgICBib3JkZXItd2lkdGg6IDFweDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjEycyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDAuMTJzIGVhc2UsIGJvcmRlci1jb2xvciAwLjEycyBlYXNlLCBib3gtc2hhZG93IDAuMTJzIGVhc2U7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJ0bjpob3ZlciB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjIwLCAyMjQsIDIzMCwgMC4yNik7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSwKICAgICAgICAwIDhweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xNCk7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJ0bi5pcy1vbiB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDEwMCwgMTcwLCAyNTUsIDAuMiksIHJnYmEoMTAwLCAxNzAsIDI1NSwgMC4wOCkpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDEyMCwgMTg2LCAyNTUsIDAuNDIpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHJnYmEoMTIwLCAxODYsIDI1NSwgMC4xMikgaW5zZXQ7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJ0biAucGkgewogICAgZm9udC1zaXplOiAxNHB4OwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1oZWFkLAoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItYWN0aW9ucyB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKSBhdXRvIG1pbm1heCgwLCAxZnIpOwogICAgZ2FwOiAxMnB4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXN0YXR1cywKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXNpZGUgewogICAgbWluLXdpZHRoOiAwOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBmbGV4LXdyYXA6IHdyYXA7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1jZW50ZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLWhlYWQgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXNpZGUtLXJpZ2h0IHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci10aW1lbGluZSB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIG1pbm1heCgwLCAxZnIpIGF1dG87CiAgICBnYXA6IDEycHg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1tZWRpYS1iYWRnZSB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICBwYWRkaW5nOiAwIDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzgsIDIyNCwgMTk2LCAwLjEyKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNzgsIDIyNCwgMTk2LCAwLjIyKTsKICAgIGNvbG9yOiByZ2JhKDIyMCwgMjQ3LCAyNDEsIDAuOTYpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby10aW1lZ3JvdXAgewogICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiA1cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0NSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby10aW1lLAoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1mcmFtZSB7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgY29sb3I6IHJnYmEoMjI4LCAyMzAsIDIzNCwgMC45Mik7CiAgICB0ZXh0LXNoYWRvdzogbm9uZTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tZnJhbWUgewogICAgbWluLXdpZHRoOiA5NHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgcGFkZGluZzogNXB4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNDUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tdGltZSB7CiAgICBtaW4td2lkdGg6IGF1dG87CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1yYW5nZS0tc2VlayB7CiAgICBoZWlnaHQ6IDIycHg7CiAgICBhY2NlbnQtY29sb3I6IHJnYmEoMjE0LCAyMTgsIDIyNCwgMC45Mik7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXJhbmdlLWNvdW50IHsKICAgIGNvbG9yOiByZ2JhKDIyMiwgMjI1LCAyMzAsIDAuOTUpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE5NCwgMjAxLCAyMDksIDAuMjYpOwogICAgYm9yZGVyLXdpZHRoOiAwLjhweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTk0LCAyMDEsIDIwOSwgMC4wOCk7CiAgICB0ZXh0LXNoYWRvdzogbm9uZTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tZ3JvdXAgewogICAgbWluLWhlaWdodDogMzZweDsKICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzNSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1ncm91cC0tYWRqdXN0LWxlZnQsCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWdyb3VwLS1hZGp1c3QtcmlnaHQsCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWdyb3VwLS1zcGVlZCB7CiAgICBnYXA6IDhweDsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tbnVtIHsKICAgIG1pbi1oZWlnaHQ6IDM0cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYmFja2dyb3VuZDogcmdiYSg5LCAxMiwgMTYsIDAuNTUpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXRyYW5zcG9ydCB7CiAgICBnYXA6IDEwcHg7CiAgICBwYWRkaW5nOiA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNDUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYnRuLS1wbGF5IHsKICAgIG1pbi13aWR0aDogODhweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXNlZWstd3JhcCB7CiAgICBtaW4taGVpZ2h0OiA0NHB4Owp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1zZWVrLXpvbmVzIHsKICAgIGhlaWdodDogMTJweDsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tc2Vlay1oYW5kbGUgewogICAgd2lkdGg6IDE4cHg7CiAgICBoZWlnaHQ6IDM0cHg7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXZvbHVtZS13cmFwIHsKICAgIHBhZGRpbmc6IDAgNHB4Owp9CgoubWpyLXZpZGVvLXJhbmdlLS12b2x1bWUgewogICAgd2lkdGg6IDkwcHg7Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiA5ODBweCkgewogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLWhlYWQsCiAgICAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItYWN0aW9ucywKICAgIC5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci10aW1lbGluZSB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICB9CgogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLWNlbnRlciwKICAgIC5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1zaWRlLS1yaWdodCB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICB9CgogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lIHsKICAgICAgICBnYXA6IDEwcHg7CiAgICB9CgogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tdHJhbnNwb3J0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgIH0KfQoKLyogPT09PT09PT09PSBDb250ZXh0IE1lbnUgQ29tcG9uZW50ID09PT09PT09PT0gKi8KLm1qci1jb250ZXh0LW1lbnUgewogICAgcG9zaXRpb246IGZpeGVkOwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktbWVudS1iZyk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpOwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICBtaW4td2lkdGg6IDIwMHB4OwogICAgLyogQWJvdmUgdmlld2VyIG92ZXJsYXkgKDEwMDAxKSBhbmQgTUZWIGRpYWxvZyAoMTAwMDApICovCiAgICB6LWluZGV4OiAxMDAwMjsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBwYWRkaW5nOiA0cHggMDsKICAgIGFuaW1hdGlvbjogbWpyLWNvbnRleHQtbWVudS1pbiAwLjE1cyBlYXNlLW91dDsKfQoKLm1qci1jb250ZXh0LW1lbnUsCi5tanItY29udGV4dC1tZW51ICogewogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKQGtleWZyYW1lcyBtanItY29udGV4dC1tZW51LWluIHsKICAgIGZyb20gewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01cHgpOwogICAgfQogICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgfQp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtIHsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICBwYWRkaW5nOiA4cHggMTRweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgd2lkdGg6IDEwMCU7CiAgICBib3JkZXI6IDA7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3gtc2hhZG93OiBub25lOwogICAgbWFyZ2luOiAwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgIGxldHRlci1zcGFjaW5nOiBub3JtYWw7CiAgICBsaW5lLWhlaWdodDogMS4zNTsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXM7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbTo6LW1vei1mb2N1cy1pbm5lciB7CiAgICBib3JkZXI6IDA7CiAgICBwYWRkaW5nOiAwOwp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtOmhvdmVyLAoubWpyLWNvbnRleHQtbWVudS1pdGVtOmZvY3VzLXZpc2libGUgewogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktaW5wdXQtYmcpOwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy1kaXNhYmxlZCB7CiAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICBvcGFjaXR5OiAwLjQ1Owp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLWRpc2FibGVkOmhvdmVyLAoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLWRpc2FibGVkOmZvY3VzLXZpc2libGUgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCi5tanItY29udGV4dC1tZW51LXNlcGFyYXRvciB7CiAgICBoZWlnaHQ6IDFweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJvcmRlci1jb2xvcik7CiAgICBtYXJnaW46IDRweCAwOwp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLWxlZnQsCi5tanItY29udGV4dC1tZW51LWl0ZW0tcmlnaHQgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4Owp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLWxlZnQgewogICAgZmxleDogMSAxIGF1dG87CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItY29udGV4dC1tZW51LWl0ZW0tcmlnaHQgewogICAgZmxleDogMCAwIGF1dG87CiAgICBtYXJnaW4tbGVmdDogMTZweDsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS1sZWZ0IGkgewogICAgd2lkdGg6IDE2cHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBvcGFjaXR5OiAwLjgyOwp9CgoubWpyLWNvbnRleHQtbWVudS1oaW50IHsKICAgIG9wYWNpdHk6IDAuNTg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoubWpyLWNvbnRleHQtbWVudS1zdWJtZW51LWFycm93IHsKICAgIG9wYWNpdHk6IDAuNzI7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci1hZGQtdG8tY29sbGVjdGlvbi1tZW51IHsKICAgIG1pbi13aWR0aDogMjYwcHg7CiAgICBtYXgtd2lkdGg6IG1pbigzNjBweCwgY2FsYygxMDB2dyAtIDE2cHgpKTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMnB4KTsKfQoKLm1qci1jb250ZXh0LW1lbnUtdGl0bGUgewogICAgcGFkZGluZzogOHB4IDE0cHggMTBweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBjb2xvcjogdmFyKC0tZmctY29sb3IpOwogICAgb3BhY2l0eTogMC45MjsKfQoKLm1qci1jb250ZXh0LW1lbnUtbm90ZSB7CiAgICBwYWRkaW5nOiAxMHB4IDE0cHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcpIDcyJSwgdmFyKC0tbWpyLW11dGVkKSk7CiAgICBsaW5lLWhlaWdodDogMS40NTsKfQoKLm1qci1ncmlkLXBvcG92ZXIsCi5tanItdmlld2VyLXBvcG92ZXIgewogICAgbWluLXdpZHRoOiAyNTBweDsKICAgIG1heC13aWR0aDogbWluKDM2MHB4LCBjYWxjKDEwMHZ3IC0gMTZweCkpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLXNtKTsKICAgIGJveC1zaGFkb3c6IDAgMTJweCAyOHB4IHJnYmEoMCwgMCwgMCwgMC4zNSk7Cn0KCkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7CiAgICAubWpyLXZpZXdlci1vdmVybGF5ICosCiAgICAubWpyLXZpZGVvLWNvbnRyb2xzLAogICAgLm1qci1jb250ZXh0LW1lbnUgewogICAgICAgIGFuaW1hdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDsKICAgICAgICBzY3JvbGwtYmVoYXZpb3I6IGF1dG8gIWltcG9ydGFudDsKICAgIH0KfQoKLyogSGlkZSBoZWFkZXIgKHRvb2xiYXIpIHdoZW4gdmlld2VyIG92ZXJsYXkgaXMgaW4gZnVsbHNjcmVlbiAqLwoubWpyLXZpZXdlci1vdmVybGF5OmZ1bGxzY3JlZW4gLm1qci12aWV3ZXItaGVhZGVyIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAogICBNYWpvb3IgRmxvYXRpbmcgVmlld2VyIChNRlYpIOKAlCBwb3J0YWxlZCB0byBkb2N1bWVudC5ib2R5CiAgIFJlZGVjbGFyZXMgQ1NTIHZhcmlhYmxlcyBzbyB0aGUgcGFuZWwgd29ya3Mgb3V0c2lkZSAubWpyLWFzc2V0cy1tYW5hZ2VyCiAgIChzYW1lIHBhdHRlcm4gYXMgLm1qci1wb3BvdmVyKQogICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi8KCi5tanItbWZ2IHsKICAgIC0tbWpyLXN1cmZhY2UtMDogdmFyKC0tY29udGVudC1iZywgIzFlMWUxZSk7CiAgICAtLW1qci1zdXJmYWNlLTE6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpOwogICAgLS1tanItc3VyZmFjZS0yOiB2YXIoLS1jb21meS1tZW51LXNlY29uZGFyeS1iZywgIzMzMyk7CiAgICAtLW1qci1ib3JkZXI6IHZhcigtLWJvcmRlci1jb2xvciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICAtLW1qci1tdXRlZDogdmFyKC0tZGVzY3JpcC10ZXh0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKTsKICAgIC0tbWpyLWFjY2VudDogdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKTsKICAgIC0tbWpyLXN0YXR1cy1zdWNjZXNzOiB2YXIoLS1jb21meS1zdGF0dXMtc3VjY2VzcywgIzRDQUY1MCk7CgogICAgZm9udC1mYW1pbHk6IHZhcigtLWNvbWZ5LWZvbnQsIHVpLXNhbnMtc2VyaWYsIHN5c3RlbS11aSwgLWFwcGxlLXN5c3RlbSwgIlNlZ29lIFVJIiwgUm9ib3RvLCBBcmlhbCwgc2Fucy1zZXJpZik7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBsaW5lLWhlaWdodDogMS4zNTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSk7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwoKICAgIC8qIFZpc3VhbCBjaHJvbWUgKi8KICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBib3gtc2hhZG93OiAwIDhweCAzMnB4IHJnYmEoMCwgMCwgMCwgMC41NSksIDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMyk7Cn0KCi5tanItbWZ2ICogewogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKaHRtbC5tanItbWZ2LXBvcG91dC1kb2N1bWVudCB7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIHJhZGlhbC1ncmFkaWVudCgKICAgICAgICAgICAgMTIwMHB4IDQyMHB4IGF0IDUwJSAwJSwKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLXByaW1hcnktYmFja2dyb3VuZCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSkgMTAlLCB0cmFuc3BhcmVudCksCiAgICAgICAgICAgIHRyYW5zcGFyZW50IDYyJQogICAgICAgICksCiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtc3VyZmFjZSwgdmFyKC0tY29udGVudC1iZywgIzE2MTkxZikpIDgyJSwgIzAwMCAxOCUpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0taW50ZXJmYWNlLW1lbnUtc3VyZmFjZSwgdmFyKC0tY29tZnktbWVudS1iZywgIzFmMjIyNykpIDg0JSwgIzAwMCAxNiUpCiAgICAgICAgKTsKfQoKYm9keS5tanItbWZ2LXBvcG91dC1ib2R5IHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9CgojbWpyLW1mdi1wb3BvdXQtcm9vdCwKLm1qci1tZnYtcG9wb3V0LXJvb3QgewogICAgaXNvbGF0aW9uOiBpc29sYXRlOwp9CgovKiDilIDilIAgSGVhZGVyIChkcmFnIGhhbmRsZSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5tanItbWZ2LWhlYWRlciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSk7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBjdXJzb3I6IG1vdmU7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgZ2FwOiA2cHg7CiAgICBtaW4taGVpZ2h0OiAzNHB4Owp9CgoubWpyLW1mdi1oZWFkZXItdGl0bGUgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIG9wYWNpdHk6IDAuNzg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICBmbGV4OiAxOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMjhweDsKfQoKLyog4pSA4pSAIFRvb2xiYXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5tanItbWZ2LXRvb2xiYXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDRweDsKICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgNTAlLCB2YXIoLS1tanItc3VyZmFjZS0xKSA1MCUpOwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgZmxleC1zaHJpbms6IDA7CiAgICBtaW4taGVpZ2h0OiAzNnB4Owp9CgoubWpyLW1mdi10b29sYmFyLXNlcCB7CiAgICB3aWR0aDogMXB4OwogICAgaGVpZ2h0OiAxOHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLWJvcmRlcik7CiAgICBtYXJnaW46IDAgM3B4OwogICAgZmxleC1zaHJpbms6IDA7Cn0KCi5tanItbWZ2LXByb2dyZXNzIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBoZWlnaHQ6IDIycHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgNzIlLCAjMDAwIDI4JSk7CiAgICBmbGV4LXNocmluazogMDsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLm1qci1tZnYtcHJvZ3Jlc3MuaXMtY2xpY2thYmxlIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKfQoKLm1qci1tZnYtcHJvZ3Jlc3MuaXMtY2xpY2thYmxlOmhvdmVyIHsKICAgIGZpbHRlcjogYnJpZ2h0bmVzcygxLjAzKTsKfQoKLm1qci1tZnYtcHJvZ3Jlc3MtYmFyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDA7CiAgICB3aWR0aDogMCU7CiAgICB0cmFuc2l0aW9uOiB3aWR0aCA3MG1zIGVhc2UtaW4tb3V0Owp9CgoubWpyLW1mdi1wcm9ncmVzcy1iYXItLW5vZGVzIHsKICAgIHRvcDogMDsKICAgIGhlaWdodDogNTAlOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgNjglLCAjMGIzNTEzIDMyJSk7Cn0KCi5tanItbWZ2LXByb2dyZXNzLWJhci0tc3RlcHMgewogICAgdG9wOiA1MCU7CiAgICBoZWlnaHQ6IDUwJTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2NCUsICMwYjIzNDAgMzYlKTsKfQoKLm1qci1tZnYtcHJvZ3Jlc3MuaXMtZXJyb3IgLm1qci1tZnYtcHJvZ3Jlc3MtYmFyLS1ub2RlcywKLm1qci1tZnYtcHJvZ3Jlc3MuaXMtZXJyb3IgLm1qci1tZnYtcHJvZ3Jlc3MtYmFyLS1zdGVwcyB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgI2Q5NTM0ZiA3OCUsICM0YTE0MTQgMjIlKTsKfQoKLm1qci1tZnYtcHJvZ3Jlc3Mtb3ZlcmxheSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCksIHJnYmEoMCwgMCwgMCwgMC4xOCkpOwogICAgbWl4LWJsZW5kLW1vZGU6IHNjcmVlbjsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoubWpyLW1mdi1wcm9ncmVzcy10ZXh0IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDI7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGhlaWdodDogMTAwJTsKICAgIHBhZGRpbmc6IDAgOHB4OwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIHRleHQtc2hhZG93OiAwIDAgMnB4IHJnYmEoMCwgMCwgMCwgMC45KTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cn0KCi5tanItbWZ2LXBpbi1ncm91cCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiAycHg7CiAgICBmbGV4LXNocmluazogMDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7Cn0KLm1qci1tZnYtcGluLWJ0biB7CiAgICB3aWR0aDogMjZweDsKICAgIGhlaWdodDogMjZweDsKICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMik7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgcGFkZGluZzogMDsKICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLCBib3JkZXItY29sb3IgMTIwbXMgZWFzZSwgY29sb3IgMTIwbXMgZWFzZSwgYm94LXNoYWRvdyAxMjBtcyBlYXNlOwp9Ci5tanItbWZ2LXBpbi1idG46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNDUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB2YXIoLS1tanItYWNjZW50KSA4JSk7Cn0KLm1qci1tZnYtcGluLWJ0bi5pcy1waW5uZWQgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTglLCAjZmZmZmZmIDEyJSk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNDIlLCB2YXIoLS1tanItYWNjZW50KSA1OCUpOwogICAgY29sb3I6ICNlZWY3ZmY7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDI0JSwgdHJhbnNwYXJlbnQpOwp9CgovKiDilIDilIAgSWNvbiBidXR0b25zIGluc2lkZSBNRlYgKG91dHNpZGUgLm1qci1hc3NldHMtbWFuYWdlciBzY29wZSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5tanItbWZ2IC5tanItaWNvbi1idG4gewogICAgd2lkdGg6IDMwcHg7CiAgICBoZWlnaHQ6IDMwcHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGJvcmRlci1yYWRpdXM6IDdweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMik7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBwYWRkaW5nOiAwOwogICAgZmxleC1zaHJpbms6IDA7CiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMTIwbXMgZWFzZSwgYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLCBib3JkZXItY29sb3IgMTIwbXMgZWFzZSwgY29sb3IgMTIwbXMgZWFzZSwgYm94LXNoYWRvdyAxMjBtcyBlYXNlOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDQ1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDgwJSwgdmFyKC0tbWpyLWFjY2VudCkgOCUpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuOmZvY3VzLXZpc2libGUgewogICAgb3V0bGluZTogbm9uZTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU4JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAyNCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZnYgLm1qci1pY29uLWJ0biAucGkgewogICAgZm9udC1zaXplOiAxM3B4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBvcGFjaXR5OiAwLjk7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4ubWpyLWxpdmUtYWN0aXZlIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgNjAlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBjb2xvcjogdmFyKC0tbWpyLXN0YXR1cy1zdWNjZXNzKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4MCUsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgMTIlKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1zdWNjZXNzKSAyNSUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZnYgLm1qci1pY29uLWJ0bi5tanItbGl2ZS1hY3RpdmUgLnBpIHsKICAgIG9wYWNpdHk6IDE7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4ubWpyLXByZXZpZXctYWN0aXZlIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDYwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgY29sb3I6IHZhcigtLW1qci1hY2NlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDgwJSwgdmFyKC0tbWpyLWFjY2VudCkgMTIlKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMjUlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4ubWpyLXByZXZpZXctYWN0aXZlIC5waSB7CiAgICBvcGFjaXR5OiAxOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1ub2Rlc3RyZWFtLWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApIDYwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgY29sb3I6IHZhcigtLW1qci1zdGF0dXMtd2FybmluZywgI2ZmOTgwMCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApIDEyJSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtd2FybmluZywgI2ZmOTgwMCkgMjUlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4ubWpyLW5vZGVzdHJlYW0tYWN0aXZlIC5waSB7CiAgICBvcGFjaXR5OiAxOwp9CgovKiBQb3AtaW4gbW9kZSAodmlld2VyIHBvcHBlZCBvdXQpOiByYWlzZSBidXR0b24gY29udHJhc3QvYnJpZ2h0bmVzcyAqLwoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgewogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDE4MGRlZywKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDkyJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSksCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA5MiUsIHJnYmEoMCwgMCwgMCwgMC4xOCkpCiAgICAgICAgKTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc0JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KSk7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSwKICAgICAgICAwIDI0cHggNTZweCByZ2JhKDAsIDAsIDAsIDAuNDIpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtaGVhZGVyIHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4OCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgOTAlLCByZ2JhKDAsIDAsIDAsIDAuMjQpKQogICAgICAgICk7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzglLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpKTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LWhlYWRlci10aXRsZSB7CiAgICBvcGFjaXR5OiAwLjk4OwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZWVmNGZmKSA5NCUsICNmZmZmZmYgNiUpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtdG9vbGJhciB7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTgwZGVnLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgODglLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpKSwKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDkwJSwgcmdiYSgwLCAwLCAwLCAwLjI0KSkKICAgICAgICApOwogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi10b29sYmFyLXNlcCB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzglLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LXByb2dyZXNzIHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA4MiUsICMwYTExMTggMTglKSwKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDkyJSwgIzAwMCA4JSkKICAgICAgICApOwogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1wcm9ncmVzcy10ZXh0IHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2VlZjRmZikgOTQlLCAjZmZmZmZmIDYlKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LWNvbnRlbnQgewogICAgYmFja2dyb3VuZDoKICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IHRvcCwgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDEwJSwgdHJhbnNwYXJlbnQpIDAlLCB0cmFuc3BhcmVudCA0MiUpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA4MiUsICMwMDAgMTglKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItaWNvbi1idG4gewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzYlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpKTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4NiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgOTIlLCByZ2JhKDAsIDAsIDAsIDAuMTgpKQogICAgICAgICk7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcsICNkZGQpIDkyJSwgI2ZmZmZmZiA4JSkgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpLAogICAgICAgIDAgOHB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjE4KTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItaWNvbi1idG46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTIlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTgwZGVnLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTglLCB2YXIoLS1tanItYWNjZW50KSA0MiUpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNjIlLCB2YXIoLS1tanItYWNjZW50KSAzOCUpCiAgICAgICAgKTsKICAgIGNvbG9yOiAjZjRmOGZmICFpbXBvcnRhbnQ7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLWljb24tYnRuIC5waSB7CiAgICBvcGFjaXR5OiAxOwogICAgY29sb3I6IGluaGVyaXQgIWltcG9ydGFudDsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItaWNvbi1idG4ubWpyLWxpdmUtYWN0aXZlIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgNjAlLCAjZmZmZmZmIDQwJSk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTgwZGVnLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1zdWNjZXNzKSA2MiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1zdWNjZXNzKSAzNiUsIHZhcigtLW1qci1zdXJmYWNlLTEpIDY0JSkKICAgICAgICApOwogICAgY29sb3I6ICNmZmZmZmYgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpLAogICAgICAgIDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1zdWNjZXNzKSAyNCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDAgMThweCByZ2JhKDc2LCAxNzUsIDgwLCAwLjE4KTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItaWNvbi1idG4ubWpyLXByZXZpZXctYWN0aXZlIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU4JSwgI2ZmZmZmZiA0MiUpOwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDE4MGRlZywKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDYyJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSksCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzNiUsIHZhcigtLW1qci1zdXJmYWNlLTEpIDY0JSkKICAgICAgICApOwogICAgY29sb3I6ICNmZmZmZmYgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpLAogICAgICAgIDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMjQlLCB0cmFuc3BhcmVudCksCiAgICAgICAgMCAwIDE4cHggcmdiYSg5NSwgMTc5LCAyNTUsIDAuMTgpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1pY29uLWJ0bi5tanItbm9kZXN0cmVhbS1hY3RpdmUgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCAjZmY5ODAwKSA1OCUsICNmZmZmZmYgNDIlKTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApIDYyJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSksCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApIDM2JSwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNjQlKQogICAgICAgICk7CiAgICBjb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiksCiAgICAgICAgMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApIDI0JSwgdHJhbnNwYXJlbnQpLAogICAgICAgIDAgMCAxOHB4IHJnYmEoMjU1LCAxNTIsIDAsIDAuMTgpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtcGluLWJ0biB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3NiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNikpOwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDE4MGRlZywKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDg0JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSksCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA5MiUsIHJnYmEoMCwgMCwgMCwgMC4xOCkpCiAgICAgICAgKTsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2RkZCkgOTIlLCAjZmZmZmZmIDglKTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LXBpbi1idG46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTIlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTgwZGVnLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTYlLCB2YXIoLS1tanItYWNjZW50KSA0NCUpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNjQlLCB2YXIoLS1tanItYWNjZW50KSAzNiUpCiAgICAgICAgKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LXBpbi1idG4uaXMtcGlubmVkIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU4JSwgI2ZmZmZmZiA0MiUpOwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDE4MGRlZywKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDYyJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSksCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzNiUsIHZhcigtLW1qci1zdXJmYWNlLTEpIDY0JSkKICAgICAgICApOwogICAgY29sb3I6ICNmZmZmZmY7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLXNpZGViYXIgewogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDE4MGRlZywKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDk0JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSksCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA5NCUsIHJnYmEoMCwgMCwgMCwgMC4xOCkpCiAgICAgICAgKTsKICAgIGJvcmRlci1sZWZ0LWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzglLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpKTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDFweCAwIDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJsZWZ0Il0gLm1qci13cy1zaWRlYmFyIHsKICAgIGJvcmRlci1yaWdodC1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLXNpZGViYXItaGVhZGVyIHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4NCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSkpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgOTIlLCByZ2JhKDAsIDAsIDAsIDAuMTgpKQogICAgICAgICk7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzYlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3Mtc2lkZWJhci10aXRsZSB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcsICNlZWY0ZmYpIDgyJSwgdmFyKC0tbWpyLW11dGVkKSAxOCUpOwogICAgb3BhY2l0eTogMC44ODsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3Mtbm9kZSB7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzIlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3Mtbm9kZS1oZWFkZXIgewogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDApKSwKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDE4MGRlZywKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDg2JSwgdmFyKC0tbWpyLWFjY2VudCkgMTQlKSwKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDg2JSwgcmdiYSgwLCAwLCAwLCAwLjE0KSkKICAgICAgICApOwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1ub2RlLXRpdGxlIHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2VlZjRmZikgOTQlLCAjZmZmZmZmIDYlKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3Mtd2lkZ2V0LWxhYmVsLAoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1zaWRlYmFyLWVtcHR5LAoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1ub2RlLWVtcHR5IHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLW11dGVkKSA4NCUsICNmZmZmZmYgMTYlKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3MtaW5wdXQgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDc0JSwgIzA1MDcwYSAyNiUpOwogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzQlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpKTsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3MtaW5wdXQ6Zm9jdXMgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTglLCAjZmZmZmZmIDEwJSk7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSwKICAgICAgICAwIDAgMCAycHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDE4JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1wb3Bpbi1hY3RpdmUgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTglLCAjZmZmZmZmIDQyJSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNDUlLCB2YXIoLS1tanItYWNjZW50KSA1NSUpOwogICAgY29sb3I6ICNlZWY3ZmY7Cn0KCi8qIOKUgOKUgCBDb250ZW50IHdyYXBwZXIgKGhvcml6b250YWwgZmxleDogY29udGVudCArIHNpZGViYXIpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLW1mdi1jb250ZW50LXdyYXBwZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXg6IDE7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLyog4pSA4pSAIFNpZGViYXIgcG9zaXRpb24gdmFyaWFudHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJsZWZ0Il0gewogICAgZmxleC1kaXJlY3Rpb246IHJvdzsKfQoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0ibGVmdCJdIC5tanItd3Mtc2lkZWJhciB7CiAgICBib3JkZXItbGVmdDogbm9uZTsKICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwp9Ci5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSB7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwp9Ci5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLXdzLXNpZGViYXIgewogICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMDsKICAgIHRyYW5zaXRpb246IGhlaWdodCAwLjJzIGVhc2UsIHdpZHRoIDBzOwp9Ci5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLXdzLXNpZGViYXIub3BlbiB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMjIwcHg7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgcmVzaXplOiB2ZXJ0aWNhbDsKICAgIG1pbi1oZWlnaHQ6IDEyMHB4OwogICAgbWF4LWhlaWdodDogNjUlOwp9CgovKiDilIDilIAgQ29udGVudCBhcmVhIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLW1mdi1jb250ZW50IHsKICAgIGZsZXg6IDE7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgYmFja2dyb3VuZDogIzBkMGQwZDsKICAgIG1pbi1oZWlnaHQ6IDA7Cn0KCi5tanItbWZ2LW1lZGlhLXByb2dyZXNzIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMTBweDsKICAgIGxlZnQ6IDEwcHg7CiAgICB6LWluZGV4OiA2OwogICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgIHBhZGRpbmc6IDVweCA5cHg7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KSkgODglLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgcmdiYSg1LCA4LCAxNCwgMC44NikgODYlLCB2YXIoLS1tanItc3VyZmFjZS0wLCAjMTExKSAxNCUpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNmNWY3ZmEpOwogICAgYm94LXNoYWRvdzogMCAycHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMjgpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00cHgpOwogICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE2cyBlYXNlLCB0cmFuc2Zvcm0gMC4xNnMgZWFzZTsKfQoKLm1qci1tZnYtbWVkaWEtcHJvZ3Jlc3MuaXMtdmlzaWJsZSB7CiAgICBvcGFjaXR5OiAxOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwp9CgoubWpyLW1mdi1tZWRpYS1wcm9ncmVzcy5pcy1lcnJvciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLWVycm9yLCAjZmY1YzdhKSA3MiUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCByZ2JhKDYwLCAxMCwgMTgsIDAuOSkgODIlLCB2YXIoLS1tanItc3VyZmFjZS0wLCAjMTExKSAxOCUpOwp9CgoubWpyLW1mdi1tZWRpYS1wcm9ncmVzcy10ZXh0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBsaW5lLWhlaWdodDogMS4yOwp9CgovKiDilIDilIAgV29ya2Zsb3cgU2lkZWJhciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLm1qci13cy1zaWRlYmFyIHsKICAgIHdpZHRoOiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEsICMyYTJhMmEpOwogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIHRyYW5zaXRpb246IHdpZHRoIDAuMnMgZWFzZTsKICAgIGZsZXgtc2hyaW5rOiAwOwp9CgoubWpyLXdzLXNpZGViYXIub3BlbiB7CiAgICB3aWR0aDogMjYwcHg7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgcmVzaXplOiBob3Jpem9udGFsOwogICAgbWluLXdpZHRoOiAxODBweDsKICAgIG1heC13aWR0aDogNjUlOwogICAgdHJhbnNpdGlvbjogbm9uZTsKfQoKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImJvdHRvbSJdIC5tanItd3Mtc2lkZWJhciB7CiAgICByZXNpemU6IG5vbmU7Cn0KCi5tanItd3Mtc2lkZWJhci1oZWFkZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgbWluLWhlaWdodDogMzRweDsKfQoubWpyLXdzLXNpZGViYXItdGl0bGUgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7CiAgICBvcGFjaXR5OiAwLjY1Owp9Ci5tanItd3Mtc2lkZWJhci1ib2R5IHsKICAgIHBhZGRpbmc6IDA7Cn0KLm1qci13cy1zaWRlYmFyLWVtcHR5IHsKICAgIHBhZGRpbmc6IDI0cHggMTZweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgbGluZS1oZWlnaHQ6IDEuNTsKfQoKLyog4pSA4pSAIE5vZGUgc2VjdGlvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5tanItd3Mtbm9kZSB7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7Cn0KLm1qci13cy1ub2RlLWhlYWRlciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTAsICMxZTFlMWUpIDQwJSwgdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzJhMmEyYSkgNjAlKTsKfQoubWpyLXdzLW5vZGUtdGl0bGUgewogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICBmbGV4OiAxOwogICAgbWFyZ2luLXJpZ2h0OiA2cHg7Cn0KLm1qci13cy1ub2RlLWJvZHkgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDRweDsKICAgIHBhZGRpbmc6IDZweCAxMHB4Owp9Ci5tanItd3Mtbm9kZS1lbXB0eSB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpOwogICAgcGFkZGluZzogNHB4IDA7Cn0KCi8qIOKUgOKUgCBXaWRnZXQgcm93cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLm1qci13cy13aWRnZXQtcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgIGdhcDogOHB4Owp9Ci5tanItd3Mtd2lkZ2V0LXJvdy0tYmxvY2sgewogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMnB4Owp9Ci5tanItd3Mtd2lkZ2V0LXJvdy0tYmxvY2sgLm1qci13cy13aWRnZXQtbGFiZWwgewogICAgZmxleDogbm9uZTsKICAgIHBhZGRpbmctdG9wOiAwOwp9Ci5tanItd3Mtd2lkZ2V0LXJvdy0tYmxvY2sgLm1qci13cy13aWRnZXQtaW5wdXQgewogICAgd2lkdGg6IDEwMCU7Cn0KLm1qci13cy13aWRnZXQtbGFiZWwgewogICAgZmxleDogMCAwIDgwcHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjb2xvcjogdmFyKC0tZGVzY3JpcC10ZXh0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTUpKTsKICAgIHBhZGRpbmctdG9wOiA1cHg7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwp9Ci5tanItd3Mtd2lkZ2V0LWlucHV0IHsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDA7Cn0KLm1qci13cy1pbnB1dCB7CiAgICB3aWR0aDogMTAwJTsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LWlucHV0LWJnLCAjMjIyKTsKICAgIGNvbG9yOiB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgcGFkZGluZzogNHB4IDZweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgb3V0bGluZTogbm9uZTsKICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAxMjBtcyBlYXNlOwp9Ci5tanItd3MtaW5wdXQ6Zm9jdXMgewogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKfQoubWpyLXdzLXRleHRhcmVhIHsKICAgIHJlc2l6ZTogdmVydGljYWw7CiAgICBtaW4taGVpZ2h0OiAyOHB4OwogICAgbWF4LWhlaWdodDogODBweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgdHJhbnNpdGlvbjogbWF4LWhlaWdodCAxNTBtcyBlYXNlOwp9Ci5tanItd3MtdGV4dC13cmFwcGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAycHg7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwp9Ci5tanItd3MtdGV4dC13cmFwcGVyIC5tanItd3MtdGV4dGFyZWEgewogICAgd2lkdGg6IDEwMCU7Cn0KLm1qci13cy1leHBhbmQtYnRuIHsKICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgYmFja2dyb3VuZDogbm9uZTsKICAgIGJvcmRlcjogbm9uZTsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHBhZGRpbmc6IDAgNHB4OwogICAgb3BhY2l0eTogMC44Owp9Ci5tanItd3MtZXhwYW5kLWJ0bjpob3ZlciB7CiAgICBvcGFjaXR5OiAxOwogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KLm1qci13cy1yZWFkb25seSB7CiAgICBvcGFjaXR5OiAwLjU7CiAgICBjdXJzb3I6IGRlZmF1bHQ7Cn0KLm1qci13cy1jaGVja2JveCB7CiAgICBhY2NlbnQtY29sb3I6IHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpOwogICAgd2lkdGg6IDE2cHg7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICBtYXJnaW4tdG9wOiA0cHg7Cn0KLm1qci13cy10b2dnbGUtbGFiZWwgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7Cn0KCi8qIOKUgOKUgCBMb2NhdGUgYnV0dG9uIGluc2lkZSBub2RlIGhlYWRlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLm1qci13cy1sb2NhdGUgewogICAgd2lkdGg6IDI0cHggIWltcG9ydGFudDsKICAgIGhlaWdodDogMjRweCAhaW1wb3J0YW50OwogICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgb3BhY2l0eTogMC41Owp9Ci5tanItd3MtbG9jYXRlOmhvdmVyIHsKICAgIG9wYWNpdHk6IDE7Cn0KCi8qIOKUgOKUgCBSdW4gYnV0dG9uIHN0YXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLW1mdi1ydW4tY29udHJvbHMgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA0cHg7Cn0KLm1qci1tZnYtcnVuLWJ0biAucGkgeyBjb2xvcjogdmFyKC0tbWpyLXN0YXR1cy1zdWNjZXNzLCAjNENBRjUwKTsgfQoubWpyLW1mdi1ydW4tYnRuLnJ1bm5pbmcgLnBpIHsgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7IH0KLm1qci1tZnYtcnVuLWJ0bi5zdG9wcGluZyAucGkgeyBjb2xvcjogdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCAjRkZBNzI2KTsgfQoubWpyLW1mdi1ydW4tYnRuLmVycm9yIC5waSB7IGNvbG9yOiAjZjQ0MzM2OyB9CgoubWpyLW1mdi1zdG9wLWJ0biAucGkgeyBjb2xvcjogI2VmNTM1MDsgfQoubWpyLW1mdi1zdG9wLWJ0bi5hY3RpdmUgLnBpIHsgY29sb3I6ICNmZjhhNjU7IH0KLm1qci1tZnYtc3RvcC1idG4uc3RvcHBpbmcgLnBpIHsgY29sb3I6IHZhcigtLW1qci1zdGF0dXMtd2FybmluZywgI0ZGQTcyNik7IH0KCi8qIOKUgOKUgCBGbG9hdGluZyBWaWV3ZXIgc2ltcGxlIHZpZGVvIHBsYXllciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLm1qci1tZnYtc2ltcGxlLXBsYXllciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLmlzLWF1ZGlvIHsKICAgIGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMjAlIDIwJSwgcmdiYSg5NSwgMTc5LCAyNTUsIDAuMiksIHJnYmEoMTgsIDIwLCAyOCwgMC45NSkpOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLWF1ZGlvLWJhY2tkcm9wIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMnB4OwogICAgdGV4dC1zaGFkb3c6IDAgMnB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjQ1KTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgcGFkZGluZzogMThweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1jb250cm9scyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAxMnB4OwogICAgcmlnaHQ6IDEycHg7CiAgICBib3R0b206IDEycHg7CiAgICB6LWluZGV4OiAzMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiA5cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDE0cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgcmdiYSgxMCwgMTAsIDE0LCAwLjc2KSwgcmdiYSgxNiwgMTYsIDI0LCAwLjU1KSk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTsKICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLXJvdyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1zZWVrIHsKICAgIC0tbWpyLXNlZWstcGN0OiAwJTsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogNnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBvdXRsaW5lOiBub25lOwogICAgYm9yZGVyOiBub25lOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIHRvIHJpZ2h0LAogICAgICAgICNmZjJmNTIgMCUsCiAgICAgICAgI2ZmMmY1MiB2YXIoLS1tanItc2Vlay1wY3QpLAogICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNCkgdmFyKC0tbWpyLXNlZWstcGN0KSwKICAgICAgICByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjQpIDEwMCUKICAgICk7CiAgICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItc2Vlazo6LXdlYmtpdC1zbGlkZXItdGh1bWIgewogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgd2lkdGg6IDEycHg7CiAgICBoZWlnaHQ6IDEycHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zNSk7CiAgICBiYWNrZ3JvdW5kOiAjZmYyZjUyOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLXNlZWs6Oi1tb3otcmFuZ2UtdGh1bWIgewogICAgd2lkdGg6IDEycHg7CiAgICBoZWlnaHQ6IDEycHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zNSk7CiAgICBiYWNrZ3JvdW5kOiAjZmYyZjUyOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLWJ0biB7CiAgICB3aWR0aDogMzBweDsKICAgIGhlaWdodDogMzBweDsKICAgIG1pbi13aWR0aDogMzBweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIyKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItYnRuIC5waSB7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk1KTsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1idG4uaXMtZGlzYWJsZWQsCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItc2Vlay5pcy1kaXNhYmxlZCB7CiAgICBvcGFjaXR5OiAwLjQ1OwogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLXRpbWUgewogICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkyKTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItZnJhbWUgewogICAgbWFyZ2luLXJpZ2h0OiAycHg7CiAgICBwYWRkaW5nOiAzcHggOHB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwp9CgovKiDilIDilIAgU2V0dGluZ3MgYnV0dG9uIGFjdGl2ZSBzdGF0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLm1qci1tZnYtc2V0dGluZ3MtYnRuLmFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSA1NSUsIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpKTsKICAgIGJhY2tncm91bmQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yLCAjMzMzKSA3MCUsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpIDE4JSk7Cn0KLm1qci1tZnYtc2V0dGluZ3MtYnRuLmFjdGl2ZSAucGkgewogICAgY29sb3I6IHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpOwp9CgovKiDilIDilIAgQ2xvc2UgYnV0dG9uIChyZWQpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLW1mdiAubWpyLW1mdi1jbG9zZS1idG4gewogICAgY29sb3I6ICNlODUwNTA7Cn0KLm1qci1tZnYgLm1qci1tZnYtY2xvc2UtYnRuOmhvdmVyIHsKICAgIGNvbG9yOiAjZmY2YjZiOwogICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyMzIsIDgwLCA4MCwgMC4xNSk7Cn0KCi8qIOKUgOKUgCBFbXB0eSBzdGF0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLm1qci1tZnYtZW1wdHkgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHBhZGRpbmc6IDEycHg7Cn0KCi8qIOKUgOKUgCBDb21wYXJlIGxhYmVscyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLm1qci1tZnYtbGFiZWwgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiA4cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNTgpOwogICAgY29sb3I6ICNmZmY7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgcGFkZGluZzogMnB4IDdweDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgei1pbmRleDogMjA7CiAgICBsZXR0ZXItc3BhY2luZzogMC40cHg7Cn0KCi5tanItbWZ2LWxhYmVsLmxhYmVsLWxlZnQgIHsgbGVmdDogOHB4OyB9Ci5tanItbWZ2LWxhYmVsLmxhYmVsLXJpZ2h0IHsgcmlnaHQ6IDhweDsgfQoKLyog4pSA4pSAIEFCIGRpdmlkZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5tanItbWZ2LWFiLWRpdmlkZXIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAwOwogICAgYm90dG9tOiAwOwogICAgd2lkdGg6IDAuNXB4OwogICAgY3Vyc29yOiBjb2wtcmVzaXplOwogICAgei1pbmRleDogMTA7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODgpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMC41cHggcmdiYSgwLCAwLCAwLCAwLjQpLCAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAxMDBtcyBlYXNlOwp9CgoubWpyLW1mdi1hYi1kaXZpZGVyOjpiZWZvcmUgewogICAgY29udGVudDogIiI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7CiAgICBsZWZ0OiA1MCU7CiAgICB3aWR0aDogMTJweDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKfQoKLm1qci1tZnYtYWItZGl2aWRlcjpob3ZlciwKLm1qci1tZnYtYWItZGl2aWRlcjphY3RpdmUgewogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7Cn0KCi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAogICBNRlYgR2VvbWV0cnkgJiBMYXlvdXQgQ2xhc3NlcyAocmVwbGFjZXMgaW5saW5lIHN0eWxlcyBpbiBGbG9hdGluZ1ZpZXdlci5qcykKICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovCgovKiBNYWluIE1GViBjb250YWluZXIgZ2VvbWV0cnkgKi8KLm1qci1tZnYgewogICAgcG9zaXRpb246IGZpeGVkOwogICAgdG9wOiB2YXIoLS1tanItbWZ2LXRvcC1vZmZzZXQsIDYwcHgpOwogICAgcmlnaHQ6IDIwcHg7CiAgICB3aWR0aDogNDgwcHg7CiAgICBoZWlnaHQ6IDM4MHB4OwogICAgbWluLXdpZHRoOiAyMjBweDsKICAgIG1pbi1oZWlnaHQ6IDE2MHB4OwogICAgLyogQWx3YXlzIGZsZXg7IHZpc2liaWxpdHkgKyBvcGFjaXR5IGNvbnRyb2wgc2hvdy9oaWRlIHNvIENTUyB0cmFuc2l0aW9ucyB3b3JrLgogICAgICAgcG9pbnRlci1ldmVudHM6bm9uZSB3aGlsZSBoaWRkZW4gcHJldmVudHMgYWNjaWRlbnRhbCBpbnRlcmFjdGlvbi4gKi8KICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgcmVzaXplOiBib3RoOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHotaW5kZXg6IDEwMDAwOwogICAgLyogSGlkZGVuIHN0YXRlICovCiAgICBvcGFjaXR5OiAwOwogICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTZweCkgc2NhbGUoMC45OCk7CiAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgcmlnaHQ7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMThzIGVhc2Utb3V0LAogICAgICAgICAgICAgICAgdHJhbnNmb3JtIDAuMThzIGVhc2Utb3V0LAogICAgICAgICAgICAgICAgdmlzaWJpbGl0eSAwcyBsaW5lYXIgMC4xOHM7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXJlc2l6aW5nIHsKICAgIHVzZXItc2VsZWN0OiBub25lOwp9CgoubWpyLW1mdi5pcy12aXNpYmxlIHsKICAgIG9wYWNpdHk6IDE7CiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGUoMSk7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMThzIGVhc2Utb3V0LAogICAgICAgICAgICAgICAgdHJhbnNmb3JtIDAuMThzIGVhc2Utb3V0LAogICAgICAgICAgICAgICAgdmlzaWJpbGl0eSAwcyBsaW5lYXIgMHM7Cn0KCgovKiBNZWRpYSBlbGVtZW50cyAoaW1nL3ZpZGVvKSBzaXppbmcgdmFyaWFudHMgKi8KLm1qci1tZnYtbWVkaWEgewogICAgZGlzcGxheTogYmxvY2s7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIG1heC1oZWlnaHQ6IDEwMCU7CiAgICBvYmplY3QtZml0OiBjb250YWluOwogICAgb2JqZWN0LXBvc2l0aW9uOiBjZW50ZXI7Cn0KCi5tanItbWZ2LW1lZGlhLS1maXQtaGVpZ2h0IHsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgbWF4LXdpZHRoOiAxMDAlOwogICAgbWF4LWhlaWdodDogMTAwJTsKICAgIG9iamVjdC1maXQ6IGNvbnRhaW47CiAgICBvYmplY3QtcG9zaXRpb246IGNlbnRlcjsKfQoKLm1qci1tZnYtbWVkaWEtLWZpbGwgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBtYXgtaGVpZ2h0OiAxMDAlOwogICAgb2JqZWN0LWZpdDogY29udGFpbjsKICAgIG9iamVjdC1wb3NpdGlvbjogY2VudGVyOwogICAgZGlzcGxheTogYmxvY2s7Cn0KCi8qIEF1ZGlvIGNhcmQgaW5zaWRlIE1GViAqLwoubWpyLW1mdi1hdWRpby1jYXJkIHsKICAgIHdpZHRoOiBtaW4oOTIlLCA1NjBweCk7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMTBweDsKICAgIHBhZGRpbmc6IDEycHg7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxNjBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNiksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMikpOwogICAgYm94LXNoYWRvdzogMCA2cHggMTZweCByZ2JhKDAsIDAsIDAsIDAuMzUpOwp9CgoubWpyLW1mdi1hdWRpby1oZWFkIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItbWZ2LWF1ZGlvLWljb24gewogICAgY29sb3I6IHZhcigtLW1qci1iYWRnZS1hdWRpbywgI0ZGOTgwMCk7CiAgICBvcGFjaXR5OiAwLjk1Owp9CgoubWpyLW1mdi1hdWRpby10aXRsZSB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKfQoKLm1qci1tZnYtYXVkaW8tcGxheWVyIHsKICAgIHdpZHRoOiAxMDAlOwp9CgoubWpyLW1mdi1zaWRlLXBhbmVsIC5tanItbWZ2LWF1ZGlvLWNhcmQsCi5tanItbWZ2LWFiLWxheWVyIC5tanItbWZ2LWF1ZGlvLWNhcmQsCi5tanItbWZ2LWdyaWQtY2VsbCAubWpyLW1mdi1hdWRpby1jYXJkIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTsKfQoKLyogVmlkZW8gZWxlbWVudCBzcGVjaWZpYyBzdHlsZXMgKi8KLm1qci1tZnYtbWVkaWEtdmlkZW8gewogICAgLyogSW5oZXJpdHMgZnJvbSAubWpyLW1mdi1tZWRpYSBvciAubWpyLW1mdi1tZWRpYS0tZmlsbCAqLwp9CgovKiBHZW4gaW5mbyBvdmVybGF5IOKAlCBhbGwgbW9kZXMgc2hhcmUgYmFzZSBsYXlvdXQgKi8KLm1qci1tZnYtZ2VuaW5mbywKLm1qci1tZnYtZ2VuaW5mby1hLAoubWpyLW1mdi1nZW5pbmZvLWIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogOHB4OwogICAgcmlnaHQ6IDhweDsKICAgIGJvdHRvbTogOHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjY1KTsKICAgIGNvbG9yOiAjZmZmOwogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBtYXgtaGVpZ2h0OiA0MCU7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvci15OiBjb250YWluOwogICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgdG91Y2gtYWN0aW9uOiBwYW4teTsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwogICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC40KTsKfQoKLyogS2VlcCBHZW4gSW5mbyBhYm92ZSBjdXN0b20gc2ltcGxlLXBsYXllciBjb250cm9scyB3aGVuIHByZXNlbnQuICovCi5tanItbWZ2LWdlbmluZm8ubWpyLW1mdi1nZW5pbmZvLS1hYm92ZS1wbGF5ZXIsCi5tanItbWZ2LWdlbmluZm8tYS5tanItbWZ2LWdlbmluZm8tLWFib3ZlLXBsYXllciwKLm1qci1tZnYtZ2VuaW5mby1iLm1qci1tZnYtZ2VuaW5mby0tYWJvdmUtcGxheWVyIHsKICAgIHRvcDogOHB4OwogICAgYm90dG9tOiBhdXRvOwogICAgbWF4LWhlaWdodDogbWluKDQ1JSwgY2FsYygxMDAlIC0gMTI0cHgpKTsKfQoKLyogRmFsbGJhY2s6IHdoZW4gc2ltcGxlLXBsYXllciBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIGdlbmluZm8gb3ZlcmxheSwKICAgbW92ZSBpdCB1cCBldmVuIGlmIHRoZSBtb2RpZmllciBjbGFzcyB3YXMgbm90IGF0dGFjaGVkLiAqLwoubWpyLW1mdi1zaW1wbGUtcGxheWVyICsgLm1qci1tZnYtZ2VuaW5mbywKLm1qci1tZnYtc2ltcGxlLXBsYXllciArIC5tanItbWZ2LWdlbmluZm8tYSwKLm1qci1tZnYtc2ltcGxlLXBsYXllciArIC5tanItbWZ2LWdlbmluZm8tYiB7CiAgICB0b3A6IDhweDsKICAgIGJvdHRvbTogYXV0bzsKICAgIG1heC1oZWlnaHQ6IG1pbig0NSUsIGNhbGMoMTAwJSAtIDEyNHB4KSk7Cn0KCi8qIEFCIG1vZGUgb3ZlcmxheXMgYXJlIGF0dGFjaGVkIGF0IGNvbnRhaW5lciBsZXZlbDsgc2hpZnQgdGhlbSB3aGVuIEFCIGxheWVycyB1c2Ugc2ltcGxlLXBsYXllci4gKi8KLm1qci1tZnYtYWItY29udGFpbmVyOmhhcygubWpyLW1mdi1hYi1sYXllciAubWpyLW1mdi1zaW1wbGUtcGxheWVyKSAubWpyLW1mdi1nZW5pbmZvLWEsCi5tanItbWZ2LWFiLWNvbnRhaW5lcjpoYXMoLm1qci1tZnYtYWItbGF5ZXIgLm1qci1tZnYtc2ltcGxlLXBsYXllcikgLm1qci1tZnYtZ2VuaW5mby1iIHsKICAgIHRvcDogOHB4OwogICAgYm90dG9tOiBhdXRvOwogICAgbWF4LWhlaWdodDogbWluKDQ1JSwgY2FsYygxMDAlIC0gMTI0cHgpKTsKfQoKLyogU2hhcmVkIHN0eWxlIGZvciBhbGwgZ2VuIGluZm8gb3ZlcmxheSB2YXJpYW50cyAqLwoubWpyLW1mdi1nZW5pbmZvIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1iIHN0cm9uZyB7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbWFyZ2luLXJpZ2h0OiA0cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk1KTsgLyogZGVmYXVsdCDigJQgb3ZlcnJpZGRlbiBwZXIgZmllbGQgYmVsb3cgKi8KfQoKLyogUGVyLWZpZWxkIGxhYmVsIGNvbG9ycyAqLwoubWpyLW1mdi1nZW5pbmZvIFtkYXRhLWZpZWxkPSJwcm9tcHQiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYSBbZGF0YS1maWVsZD0icHJvbXB0Il0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9InByb21wdCJdIHN0cm9uZyB7IGNvbG9yOiAjN2VjOGZmOyB9IC8qIGJsdWUgICDigJQgUHJvbXB0ICovCgoubWpyLW1mdi1nZW5pbmZvIFtkYXRhLWZpZWxkPSJzZWVkIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWEgW2RhdGEtZmllbGQ9InNlZWQiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBbZGF0YS1maWVsZD0ic2VlZCJdIHN0cm9uZyAgIHsgY29sb3I6ICNmZmQ0N2E7IH0gLyogYW1iZXIgIOKAlCBTZWVkICAgKi8KCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9Im1vZGVsIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWEgW2RhdGEtZmllbGQ9Im1vZGVsIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9Im1vZGVsIl0gc3Ryb25nICB7IGNvbG9yOiAjN2RkYThhOyB9IC8qIGdyZWVuICDigJQgTW9kZWwgICovCgoubWpyLW1mdi1nZW5pbmZvIFtkYXRhLWZpZWxkPSJsb3JhIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWEgW2RhdGEtZmllbGQ9ImxvcmEiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBbZGF0YS1maWVsZD0ibG9yYSJdIHN0cm9uZyAgIHsgY29sb3I6ICNkNDhjZmY7IH0gLyogdmlvbGV0IOKAlCBMb1JBICAgKi8KCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9InNhbXBsZXIiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYSBbZGF0YS1maWVsZD0ic2FtcGxlciJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1iIFtkYXRhLWZpZWxkPSJzYW1wbGVyIl0gc3Ryb25nIHsgY29sb3I6ICNmZjlmN2E7IH0gLyogb3JhbmdlIOKAlCBTYW1wbGVyICovCgoubWpyLW1mdi1nZW5pbmZvIFtkYXRhLWZpZWxkPSJzY2hlZHVsZXIiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYSBbZGF0YS1maWVsZD0ic2NoZWR1bGVyIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9InNjaGVkdWxlciJdIHN0cm9uZyB7IGNvbG9yOiAjZmY3YTlmOyB9IC8qIHBpbmsgICDigJQgU2NoZWR1bGVyICovCgoubWpyLW1mdi1nZW5pbmZvIFtkYXRhLWZpZWxkPSJjZmciXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYSBbZGF0YS1maWVsZD0iY2ZnIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9ImNmZyJdIHN0cm9uZyAgICB7IGNvbG9yOiAjN2E5ZmZmOyB9IC8qIGluZGlnbyDigJQgQ0ZHICovCgoubWpyLW1mdi1nZW5pbmZvIFtkYXRhLWZpZWxkPSJzdGVwIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWEgW2RhdGEtZmllbGQ9InN0ZXAiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBbZGF0YS1maWVsZD0ic3RlcCJdIHN0cm9uZyAgIHsgY29sb3I6ICM3YWZmZDQ7IH0gLyogdGVhbCAgIOKAlCBTdGVwICovCgoubWpyLW1mdi1nZW5pbmZvIFtkYXRhLWZpZWxkPSJnZW5UaW1lIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWEgW2RhdGEtZmllbGQ9ImdlblRpbWUiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBbZGF0YS1maWVsZD0iZ2VuVGltZSJdIHN0cm9uZyB7IGNvbG9yOiAjZTBmZjdhOyB9IC8qIGxpbWUgICDigJQgR2VuIFRpbWUgKi8KCi5tanItbWZ2LWdlbmluZm8gZGl2LAoubWpyLW1mdi1nZW5pbmZvLWEgZGl2LAoubWpyLW1mdi1nZW5pbmZvLWIgZGl2IHsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgbWFyZ2luLWJvdHRvbTogM3B4Owp9CgoubWpyLW1mdi1nZW5pbmZvIGRpdjpsYXN0LWNoaWxkLAoubWpyLW1mdi1nZW5pbmZvLWEgZGl2Omxhc3QtY2hpbGQsCi5tanItbWZ2LWdlbmluZm8tYiBkaXY6bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tYm90dG9tOiAwOwp9CgoKLyogU2ltcGxlIG1vZGUgY29udGFpbmVyICovCi5tanItbWZ2LXNpbXBsZS1jb250YWluZXIgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLyogQUIgbW9kZSBjb250YWluZXIgKi8KLm1qci1tZnYtYWItY29udGFpbmVyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJhY2tncm91bmQ6ICMwMDA7Cn0KCi8qIEFCIG1vZGUgbGF5ZXJzICovCi5tanItbWZ2LWFiLWxheWVyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKfQoKLm1qci1tZnYtYWItbGF5ZXItLWIgewogICAgLyogY2xpcC1wYXRoIGFwcGxpZWQgaW5saW5lIGZvciBkeW5hbWljIGRpdmlkZXIgcG9zaXRpb24gKi8KfQoKLyogU2lkZS1ieS1zaWRlIG1vZGUgY29udGFpbmVyICovCi5tanItbWZ2LXNpZGUtY29udGFpbmVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGdhcDogMnB4OwogICAgYmFja2dyb3VuZDogIzExMTsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi8qIFNpZGUtYnktc2lkZSBoYWxmIHBhbmVscyAqLwoubWpyLW1mdi1zaWRlLXBhbmVsIHsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGJhY2tncm91bmQ6ICMwZDBkMGQ7Cn0KCi8qIEdyaWQgY29tcGFyZSAoMsOXMikgY29udGFpbmVyICovCi5tanItbWZ2LWdyaWQtY29udGFpbmVyIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7CiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDFmciAxZnI7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGdhcDogMnB4OwogICAgYmFja2dyb3VuZDogIzExMTsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi8qIEdyaWQgY2VsbHMgKi8KLm1qci1tZnYtZ3JpZC1jZWxsIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYmFja2dyb3VuZDogIzBkMGQwZDsKICAgIG1pbi13aWR0aDogMDsKICAgIG1pbi1oZWlnaHQ6IDA7Cn0KCi8qIEdlbiBpbmZvIG92ZXJsYXlzIGZvciBncmlkIGNlbGxzIEMgYW5kIEQgKi8KLm1qci1tZnYtZ2VuaW5mby1jLAoubWpyLW1mdi1nZW5pbmZvLWQgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogOHB4OwogICAgcmlnaHQ6IDhweDsKICAgIGJvdHRvbTogOHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjY1KTsKICAgIGNvbG9yOiAjZmZmOwogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBtYXgtaGVpZ2h0OiA0MCU7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvci15OiBjb250YWluOwogICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgdG91Y2gtYWN0aW9uOiBwYW4teTsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwogICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC40KTsKfQoKLm1qci1tZnYtZ2VuaW5mby1jIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1kIHN0cm9uZyB7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbWFyZ2luLXJpZ2h0OiA0cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk1KTsKfQoKLyogUGVyLWZpZWxkIGxhYmVsIGNvbG9ycyBmb3IgQy9EIGdlbiBpbmZvIG92ZXJsYXlzICovCi5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0icHJvbXB0Il0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgW2RhdGEtZmllbGQ9InByb21wdCJdIHN0cm9uZyB7IGNvbG9yOiAjN2VjOGZmOyB9Ci5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0ic2VlZCJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1kIFtkYXRhLWZpZWxkPSJzZWVkIl0gc3Ryb25nICAgeyBjb2xvcjogI2ZmZDQ3YTsgfQoubWpyLW1mdi1nZW5pbmZvLWMgW2RhdGEtZmllbGQ9Im1vZGVsIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgW2RhdGEtZmllbGQ9Im1vZGVsIl0gc3Ryb25nICB7IGNvbG9yOiAjN2RkYThhOyB9Ci5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0ibG9yYSJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1kIFtkYXRhLWZpZWxkPSJsb3JhIl0gc3Ryb25nICAgeyBjb2xvcjogI2Q0OGNmZjsgfQoubWpyLW1mdi1nZW5pbmZvLWMgW2RhdGEtZmllbGQ9InNhbXBsZXIiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tZCBbZGF0YS1maWVsZD0ic2FtcGxlciJdIHN0cm9uZyB7IGNvbG9yOiAjZmY5ZjdhOyB9Ci5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0ic2NoZWR1bGVyIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgW2RhdGEtZmllbGQ9InNjaGVkdWxlciJdIHN0cm9uZyB7IGNvbG9yOiAjZmY3YTlmOyB9Ci5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0iY2ZnIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgW2RhdGEtZmllbGQ9ImNmZyJdIHN0cm9uZyAgICAgeyBjb2xvcjogIzdhOWZmZjsgfQoubWpyLW1mdi1nZW5pbmZvLWMgW2RhdGEtZmllbGQ9InN0ZXAiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tZCBbZGF0YS1maWVsZD0ic3RlcCJdIHN0cm9uZyAgICB7IGNvbG9yOiAjN2FmZmQ0OyB9CgovKiBHZW4gaW5mbyBhY3RpdmUgc3RhdGUg4oCUIGJ1dHRvbiBnbG93cyB3aGVuIGF0IGxlYXN0IG9uZSBmaWVsZCBpcyBzZWxlY3RlZCAqLwoubWpyLW1mdiAubWpyLWljb24tYnRuLmlzLW9uIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1tanItZ3JvdXAtYWNjZW50LCA5NSwgMTc5LCAyNTUpLCAwLjU1KTsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yLCAjMzMzKSA4MCUsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpIDE1JSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpIDI1JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLmlzLW9wZW4gewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgNjIlLCAjZmZmZmZmIDEyJSk7CiAgICBjb2xvcjogI2VlZjdmZjsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoOTUsIDE3OSwgMjU1LCAwLjI4KSwgcmdiYSg5NSwgMTc5LCAyNTUsIDAuMTQpKTsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAwIDAgMXB4IHJnYmEoMjU1LDI1NSwyNTUsMC4wOCksCiAgICAgICAgMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSAyNiUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItaWNvbi1idG4uaXMtb3BlbiB7CiAgICBjb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50Owp9CgovKiBHZW4gaW5mbyBkcm9wZG93biBwYW5lbCAqLwoubWpyLW1mdi1nZW4tZHJvcGRvd24gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgei1pbmRleDogMTAwMDE7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzJhMmEyYSkgOTYlLCB0cmFuc3BhcmVudCk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICBwYWRkaW5nOiA2cHggNHB4OwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxOTYsIDIwMiwgMjEwLCAwLjE4KTsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDI0cHggcmdiYSgwLCAwLCAwLCAwLjU1KSwgMCAycHggNnB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpOwp9CgoubWpyLW1mdi1nZW4tZHJvcGRvd246OmJlZm9yZSB7CiAgICBjb250ZW50OiAiR0VOIElORk8iOwogICAgZGlzcGxheTogYmxvY2s7CiAgICBmb250LXNpemU6IDlweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC44cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjM1KTsKICAgIHBhZGRpbmc6IDJweCAxMHB4IDZweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMSk7CiAgICBtYXJnaW4tYm90dG9tOiA0cHg7Cn0KCi5tanItbWZ2LWdlbi1kcm9wZG93bi5pcy12aXNpYmxlIHsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgoubWpyLW1mdi1nZW4tZHJvcGRvd24tcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBwYWRkaW5nOiA1cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMTAwbXMgZWFzZTsKICAgIHVzZXItc2VsZWN0OiBub25lOwp9CgoubWpyLW1mdi1nZW4tZHJvcGRvd24tcm93OmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNyk7Cn0KCi5tanItbWZ2LWdlbi1kcm9wZG93bi1yb3cgaW5wdXRbdHlwZT0iY2hlY2tib3giXSB7CiAgICB3aWR0aDogMTNweDsKICAgIGhlaWdodDogMTNweDsKICAgIGFjY2VudC1jb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmbGV4LXNocmluazogMDsKfQoKLyogVHJhbnNmb3JtIGZvciBwYW4vem9vbSAtIGFwcGxpZWQgaW5saW5lIGZvciBkeW5hbWljIHZhbHVlcyAqLwoubWpyLW1mdi1tZWRpYS0tdHJhbnNmb3JtIHsKICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjsKfQoKLyogQ3Vyc29yIGZlZWRiYWNrIGZvciBwYW4vem9vbSBpbnRlcmFjdGlvbnMgKi8KLm1qci1tZnYtY29udGVudC0tZ3JhYiB7CiAgICBjdXJzb3I6IGdyYWI7Cn0KCi5tanItbWZ2LWNvbnRlbnQtLWdyYWJiaW5nIHsKICAgIGN1cnNvcjogZ3JhYmJpbmc7Cn0KCi8qIFNpZGViYXIgdGFiIGJ1dHRvbjogYWxsb3cgMi1saW5lIGxhYmVsIHZpYSBcbiBpbiBsYWJlbCBzdHJpbmcgKi8KLm1ham9vci1hc3NldHMtdGFiLWJ1dHRvbiAuc2lkZS1iYXItYnV0dG9uLWxhYmVsIHsKICAgIHdoaXRlLXNwYWNlOiBwcmUtbGluZTsKfQoKLyogQm90dG9tLXBhbmVsIGdlbmVyYXRlZCBmZWVkOiBjb21wYWN0IGNhcmRzIHdpdGggb25seSB0aGUgZ2VuZXJhdGlvbi10aW1lIHBpbGwgKi8KLm1qci1ib3R0b20tZmVlZCB7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWFtLWdyaWQtc2Nyb2xsIHsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLWhlaWdodDogMDsKICAgIGhlaWdodDogMTAwJTsKICAgIG92ZXJmbG93OiBhdXRvOwogICAgc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvci15OiBjb250YWluOwogICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgdG91Y2gtYWN0aW9uOiBwYW4teTsKICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoOwogICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluOwogICAgc2Nyb2xsYmFyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMiwgIzJmMzU0MCkgNzAlLCAjN2Y4ZWEzIDMwJSkgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTAsICMxNjE5MWYpIDg4JSwgIzAwMCAxMiUpOwp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItYW0tZ3JpZC1zY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyLAoubWpyLWZlZWQtZ3JvdXAtcG9wb3Zlci1ncmlkOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICB3aWR0aDogMTBweDsKICAgIGhlaWdodDogMTBweDsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWFtLWdyaWQtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiwKLm1qci1mZWVkLWdyb3VwLXBvcG92ZXItZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIsICMyZjM1NDApIDcwJSwgIzdmOGVhMyAzMCUpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci1hbS1ncmlkLXNjcm9sbDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2ssCi5tanItZmVlZC1ncm91cC1wb3BvdmVyLWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wLCAjMTYxOTFmKSA4OCUsICMwMDAgMTIlKTsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4Owp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZCB7CiAgICBnYXA6IDZweCAhaW1wb3J0YW50OwogICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgobWluKDEwMCUsIDEzMnB4KSwgMWZyKSkgIWltcG9ydGFudDsKICAgIG1pbi1oZWlnaHQ6IDA7CiAgICBoZWlnaHQ6IGF1dG87CiAgICBhbGlnbi1jb250ZW50OiBzdGFydDsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkIHsKICAgIGJvcmRlci1yYWRpdXM6IDEycHggIWltcG9ydGFudDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgOTIlLCAjMDAwIDglKSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogMCA2cHggMThweCByZ2JhKDAsIDAsIDAsIDAuMjIpICFpbXBvcnRhbnQ7CiAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQ6aG92ZXIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogMCAxMHB4IDI0cHggcmdiYSgwLCAwLCAwLCAwLjI4KSAhaW1wb3J0YW50OwoKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmQuaXMtc2VsZWN0ZWQgewogICAgYm94LXNoYWRvdzoKICAgICAgICAwIDAgMCAzcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1jYXJkLXNlbGVjdGlvbi1jb2xvcikgODAlLCB2YXIoLS1jb250ZW50LWZnKSksCiAgICAgICAgMCAwIDAgNnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3IpIDMwJSwgdHJhbnNwYXJlbnQpLAogICAgICAgIDAgMCAyMHB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3IpIDQwJSwgdHJhbnNwYXJlbnQpLAogICAgICAgIDAgMTBweCAyOHB4IHJnYmEoMCwwLDAsMC4yOCkgIWltcG9ydGFudDsKICAgIG91dGxpbmU6IDJweCBzb2xpZCB2YXIoLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3IpICFpbXBvcnRhbnQ7CiAgICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50Owp9Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIHsKICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci10aHVtYiB7CiAgICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50OwogICAgaXNvbGF0aW9uOiBpc29sYXRlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci10aHVtYjo6YmVmb3JlLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci10aHVtYjo6YWZ0ZXIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iOjpiZWZvcmUsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iOjphZnRlciB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgei1pbmRleDogLTE7CiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMTQwbXMgZWFzZSwgb3BhY2l0eSAxNDBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci10aHVtYjo6YmVmb3JlLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci10aHVtYjo6YmVmb3JlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDVweCwgNXB4KSBzY2FsZSgwLjk4NSk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMCksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMykpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xLCAjMjAyNDJiKSA4NCUsICMwMDAgMTYlKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7CiAgICBib3gtc2hhZG93OiAwIDhweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xNik7CiAgICBvcGFjaXR5OiAwLjk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iOjphZnRlciwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItdGh1bWI6OmFmdGVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwcHgsIDEwcHgpIHNjYWxlKDAuOTcpOwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDIpKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCwgIzE2MTkxZikgODIlLCAjMDAwIDE4JSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwogICAgYm94LXNoYWRvdzogMCAxMnB4IDIycHggcmdiYSgwLCAwLCAwLCAwLjE0KTsKICAgIG9wYWNpdHk6IDAuNzU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTpob3ZlciAubWpyLXRodW1iOjpiZWZvcmUsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTpob3ZlciAubWpyLXRodW1iOjpiZWZvcmUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNnB4LCA2cHgpIHNjYWxlKDAuOTg1KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOmhvdmVyIC5tanItdGh1bWI6OmFmdGVyLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl06aG92ZXIgLm1qci10aHVtYjo6YWZ0ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTJweCwgMTJweCkgc2NhbGUoMC45Nyk7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci10aHVtYiB7CiAgICBhc3BlY3QtcmF0aW86IDAuOTUgLyAxICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgNzIlLCAjMDAwIDI4JSkgIWltcG9ydGFudDsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLXRodW1iLXBsYXkgewogICAgYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCBjZW50ZXIsIHJnYmEoMCwgMCwgMCwgMC4xOCksIHJnYmEoMCwgMCwgMCwgMC4wNCkgMzglLCB0cmFuc3BhcmVudCA3MCUpOwp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItYmFkZ2UtZXh0LAoubWpyLWJvdHRvbS1mZWVkIC5tanItYmFkZ2UtcmF0aW5nLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYmFkZ2UtdGFncyB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTIpOwogICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIGxlZnQ7Cn0KCi8qIOKUgOKUgCBGZWVkIGNhcmQgaW5mbzogZGVmYXVsdCBoaWRkZW4sIHRvZ2dsZWQgdmlhIG1qci1mZWVkLXNob3ctKiBjbGFzc2VzIG9uIC5tanItZ3JpZCDilIDilIAgKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQtaW5mbyB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiA0cHggNnB4ICFpbXBvcnRhbnQ7CiAgICBtaW4td2lkdGg6IDA7Cn0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1pbmZvIC5tanItY2FyZC1pbmZvIHsKICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7Cn0KCi8qIEZlZWQgZmlsZW5hbWUgKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQtZmlsZW5hbWUgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1maWxlbmFtZSAubWpyLWNhcmQtZmlsZW5hbWUgeyBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9CgovKiBGZWVkIGRpbWVuc2lvbnMgLyBkdXJhdGlvbiAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItbWV0YS1yZXMsCi5tanItYm90dG9tLWZlZWQgLm1qci1tZXRhLWR1cmF0aW9uIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9Ci5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctZGltZW5zaW9ucyAubWpyLW1ldGEtcmVzLAoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWRpbWVuc2lvbnMgLm1qci1tZXRhLWR1cmF0aW9uIHsgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7IH0KCi8qIEZlZWQgZGF0ZS90aW1lICovCi5tanItYm90dG9tLWZlZWQgLm1qci1tZXRhLWRhdGUsCi5tanItYm90dG9tLWZlZWQgLm1qci1tZXRhLXRpbWUtdmFsIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9Ci5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctZGF0ZSAubWpyLW1ldGEtZGF0ZSwKLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1kYXRlIC5tanItbWV0YS10aW1lLXZhbCB7IGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50OyB9CgovKiBGZWVkIGdlbmVyYXRpb24gdGltZSBiYWRnZSAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItbWV0YS1nZW50aW1lIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9Ci5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctZ2VudGltZSAubWpyLW1ldGEtZ2VudGltZSB7IGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7IH0KCi8qIEZlZWQgd29ya2Zsb3cgZG90ICovCi5tanItYm90dG9tLWZlZWQgLm1qci1jYXJkLWRvdC13cmFwcGVyIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9Ci5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctZG90IC5tanItY2FyZC1kb3Qtd3JhcHBlciB7IGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7IH0KCi8qIEZlZWQgYmFkZ2VzICovCi5tanItYm90dG9tLWZlZWQgLm1qci1iYWRnZS1leHQgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1iYWRnZXMtZXh0IC5tanItYmFkZ2UtZXh0IHsgZGlzcGxheTogZmxleCAhaW1wb3J0YW50OyB9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItYmFkZ2UtcmF0aW5nIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9Ci5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctYmFkZ2VzLXJhdGluZyAubWpyLWJhZGdlLXJhdGluZyB7IGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsgfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWJhZGdlLXRhZ3MgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1iYWRnZXMtdGFncyAubWpyLWJhZGdlLXRhZ3MgeyBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7IH0KCi8qIEZlZWQgbWV0YSByb3cgc3R5bGluZyDigJQgZmxleCBsYXlvdXQgc28gdmlzaWJsZSBpdGVtcyBzdGF5IHNlcGFyYXRlZCAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZC1tZXRhLXJvdyB7CiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7CiAgICBmbGV4LXdyYXA6IG5vd3JhcCAhaW1wb3J0YW50OwogICAgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50OwogICAgZ2FwOiA1cHggIWltcG9ydGFudDsKICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDsKICAgIG1pbi13aWR0aDogMCAhaW1wb3J0YW50OwogICAgcGFkZGluZy1yaWdodDogMCAhaW1wb3J0YW50OwogICAgbGluZS1oZWlnaHQ6IDEuMyAhaW1wb3J0YW50OwogICAgb3BhY2l0eTogMC43OCAhaW1wb3J0YW50OwogICAgZm9udC1zaXplOiAwLjhlbSAhaW1wb3J0YW50OwogICAgLyogdGV4dC1vdmVyZmxvdyBlbGxpcHNpcyBkb2Vzbid0IGFwcGx5IG9uIGEgZmxleCBjb250YWluZXIgaXRzZWxmICovCn0KLyogRWFjaCBtZXRhIHNwYW4gdHJ1bmNhdGVzIGluZGl2aWR1YWxseSBpZiB0b28gbG9uZyAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZC1tZXRhLXJvdyA+IHNwYW4gewogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIG1pbi13aWR0aDogMDsKICAgIGZsZXgtc2hyaW5rOiAxOwp9Ci8qIEdlbnRpbWUgYmFkZ2UgYW5kIHRpbWUgdmFsdWUgc2hvdWxkIHN0YXkgdmlzaWJsZSAoZG9uJ3Qgc2hyaW5rIGF3YXkpICovCi5tanItYm90dG9tLWZlZWQgLm1qci1jYXJkLW1ldGEtcm93ID4gLm1qci1tZXRhLWdlbnRpbWUsCi5tanItYm90dG9tLWZlZWQgLm1qci1jYXJkLW1ldGEtcm93ID4gLm1qci1tZXRhLXRpbWUtdmFsIHsKICAgIGZsZXgtc2hyaW5rOiAwOwp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWdlbnRpbWUgLm1qci1tZXRhLWdlbnRpbWUgewogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogM3B4OwogICAgcGFkZGluZzogM3B4IDdweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgxMCwgMTQsIDIwLCAwLjc0KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjIyKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA4MDAgIWltcG9ydGFudDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAxNWVtOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45OCk7CiAgICB0ZXh0LXNoYWRvdzoKICAgICAgICAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjkpLAogICAgICAgIDAgMCAxMHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNik7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7Cn0KCi8qIOKUgOKUgCBBdWRpbyAvIDNEIHBsYWNlaG9sZGVyIHRodW1ibmFpbHMgaW4gdGhlIGZlZWQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCgovKiBBdWRpbyBjYXJkcyBzaG93IHRoZSB3YXZlZm9ybSBzcHJpdGU7IGdpdmUgaXQgYSBkaXN0aW5jdCBiYWNrZ3JvdW5kIHNvIGl0CiAgIGRvZXNuJ3QgbG9vayBsaWtlIGEgYnJva2VuIGltYWdlIHBsYWNlaG9sZGVyIGluIHRoZSBmZWVkLiAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1raW5kPSJhdWRpbyJdIC5tanItdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWV4dD0ibXAzIl0gLm1qci10aHVtYiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZXh0PSJ3YXYiXSAubWpyLXRodW1iLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1leHQ9Im9nZyJdIC5tanItdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWV4dD0iZmxhYyJdIC5tanItdGh1bWIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDYwJSwgIzFhMWYyYiA0MCUpICFpbXBvcnRhbnQ7Cn0KCi8qIDNEIG1vZGVsIGNhcmRzIHVzZSBhbiBpY29uIHBsYWNlaG9sZGVyIOKAlCBhZGQgYSBzdWJ0bGUgZ3JhZGllbnQgc28gdGhleSByZWFkCiAgIGFzIGludGVudGlvbmFsIHJhdGhlciB0aGFuIG1pc3NpbmcuICovCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWtpbmQ9Im1vZGVsM2QiXSAubWpyLXRodW1iLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1leHQ9ImdsYiJdIC5tanItdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWV4dD0iZ2x0ZiJdIC5tanItdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWV4dD0ib2JqIl0gLm1qci10aHVtYiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZXh0PSJmYngiXSAubWpyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA1MCUsICMwZDExMTcgNTAlKSAhaW1wb3J0YW50Owp9CgovKiDilIDilIAgRmVlZCBncm91cCBidXR0b24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCgoubWpyLWJvdHRvbS1mZWVkIC5tanItZmVlZC1ncm91cC1idXR0b24gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAzNHB4OwogICAgcmlnaHQ6IDZweDsKICAgIHotaW5kZXg6IDExOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDRweDsKICAgIG1pbi13aWR0aDogMjhweDsKICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgxMCwgMTQsIDIwLCAwLjc0KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTYpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4yNCk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMTIwbXMgZWFzZSwgdHJhbnNmb3JtIDgwbXMgZWFzZTsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWZlZWQtZ3JvdXAtYnV0dG9uOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTgsIDI0LCAzNCwgMC45KTsKfQoKLm1qci1mZWVkLWdyb3VwLWJ1dHRvbi1pY29uIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIG9wYWNpdHk6IDAuOTsKfQoKLm1qci1mZWVkLWdyb3VwLWJ1dHRvbi1jb3VudCB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi8qIOKUgOKUgCBGZWVkIGdyb3VwIHBvcG92ZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCgoubWpyLWZlZWQtZ3JvdXAtcG9wb3ZlciB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1tZW51LWJnLCAjMjIyKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvciwgIzNhM2EzYSk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1sZywgOHB4KTsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDI4cHggcmdiYSgwLCAwLCAwLCAwLjQ1KTsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tanItZmVlZC1ncm91cC1wb3BvdmVyLXRpdGxlIHsKICAgIHBhZGRpbmc6IDhweCAxMHB4IDRweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwogICAgbWFyZ2luLWJvdHRvbTogOHB4Owp9CgoubWpyLWZlZWQtZ3JvdXAtcG9wb3Zlci1ncmlkIHsKICAgIHBhZGRpbmc6IDRweCA4cHggMTBweDsKICAgIG1heC1oZWlnaHQ6IDM2MHB4OwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICBzY3JvbGxiYXItZ3V0dGVyOiBzdGFibGU7CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47CiAgICBzY3JvbGxiYXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yLCAjMmYzNTQwKSA3MCUsICM3ZjhlYTMgMzAlKSBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCwgIzE2MTkxZikgODglLCAjMDAwIDEyJSk7Cn0KCi5tanItZmVlZC1ncm91cC1idXR0b24taWNvbiwKLm1qci1mZWVkLWdyb3VwLWJ1dHRvbi1jb3VudCB7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm1qci1mZWVkLWdyb3VwLW1lbWJlci1jYXJkIHsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1mZWVkLWdyb3VwLW1lbWJlci1jYXJkIC5tanItdGh1bWIgewogICAgYXNwZWN0LXJhdGlvOiAxIC8gMSAhaW1wb3J0YW50Owp9CgoubWpyLWZlZWQtZ3JvdXAtbWVtYmVyLWNhcmQgLm1qci1jYXJkLWluZm8gewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItc3RhY2stZ3JvdXAtYnV0dG9uIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMzRweDsKICAgIHJpZ2h0OiA2cHg7CiAgICB6LWluZGV4OiAxMTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBtaW4td2lkdGg6IDI4cHg7CiAgICBtaW4taGVpZ2h0OiAyOHB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTAsIDE0LCAyMCwgMC43NCk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk2KTsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4yNCk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMTIwbXMgZWFzZSwgdHJhbnNmb3JtIDgwbXMgZWFzZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXN0YWNrLWdyb3VwLWJ1dHRvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDE4LCAyNCwgMzQsIDAuOSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1zdGFjay1ncm91cC1idXR0b24gPiAqIHsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoubWpyLWZpbG1zdHJpcDo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgd2lkdGg6IDRweDsKICAgIGhlaWdodDogNHB4Owp9CgoubWpyLWZpbG1zdHJpcDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCi5tanItZmlsbXN0cmlwOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCk7Cn0KCi5tanItZmlsbXN0cmlwOmhvdmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjIpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItc3RhY2stZ3JvdXAtYnV0dG9uLWNvdW50IHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLyog4pSA4pSAIER1cGxpY2F0ZSBzdGFjayBidXR0b24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi8qIFNob3dzIG9uIHRoZSBwcmltYXJ5IGNhcmQgd2hlbiBzYW1lLWZpbGVuYW1lIGR1cGxpY2F0ZXMgZXhpc3QuICAgICAgICAgICAgICovCi8qIFBvc2l0aW9uZWQgYXQgYm90dG9tLXJpZ2h0IHRvIG5vdCBvdmVybGFwIHRoZSBzdGFjay1ncm91cCBidXR0b24gKHRvcC1yaWdodCkuICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1kdXAtc3RhY2stYnV0dG9uIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGJvdHRvbTogMzBweDsKICAgIHJpZ2h0OiA2cHg7CiAgICB6LWluZGV4OiAxMTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBtaW4td2lkdGg6IDI4cHg7CiAgICBtaW4taGVpZ2h0OiAyOHB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAxODAsIDAsIDAuMzgpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDMwLCAxOCwgMCwgMC44Mik7CiAgICBjb2xvcjogcmdiYSgyNTUsIDIwMCwgNjAsIDAuOTYpOwogICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4zMik7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cywgdHJhbnNmb3JtIDgwbXMgZWFzZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWR1cC1zdGFjay1idXR0b246aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSg1MCwgMzAsIDAsIDAuOTQpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMTgwLCAwLCAwLjYpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZHVwLXN0YWNrLWJ1dHRvbiA+ICogewogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1kdXAtc3RhY2stY291bnQgewogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1kdXAtc3RhY2tlZD0idHJ1ZSJdIC5tanItZHVwLXN0YWNrLWJ1dHRvbiB7CiAgICBib3gtc2hhZG93OgogICAgICAgIDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMzIpLAogICAgICAgIDAgMCAwIDFweCByZ2JhKDI1NSwgMTgwLCAwLCAwLjIpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci1zdGFjay1ncm91cC1idXR0b24sCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLWZlZWQtZ3JvdXAtYnV0dG9uIHsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4yNCksCiAgICAgICAgMCAwIDAgMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTpob3ZlciwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZHVwLXN0YWNrZWQ9InRydWUiXTpob3ZlciB7CiAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsKfQoKLyog4pSA4pSAIFZpc3VhbCBzdGFja2luZyBlZmZlY3Qg4oCUIGxheWVyZWQgY2FyZHMgYmVoaW5kIHRoZSBtYWluIGNhcmQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi8qIENyZWF0ZXMgcHNldWRvLWVsZW1lbnQgImNhcmRzIiBvZmZzZXQgYmVoaW5kIHRoZSBwcmltYXJ5IGNhcmQgdG8gdmlzdWFsbHkgICAgKi8KLyogY29tbXVuaWNhdGUgdGhhdCB0aGlzIGNhcmQgcmVwcmVzZW50cyBhIGdyb3VwIG9mIG11bHRpcGxlIGltYWdlcy4gICAgICAgICAgICAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgei1pbmRleDogMTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOjpiZWZvcmUsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTo6YWZ0ZXIgewogICAgY29udGVudDogIiI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1tZW51LWJnLCAjMWExYTJlKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IC0xOwogICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDE4MG1zIGVhc2UsIG9wYWNpdHkgMTgwbXMgZWFzZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOjpiZWZvcmUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoM3B4LCAzcHgpIHJvdGF0ZSgxZGVnKTsKICAgIG9wYWNpdHk6IDAuNDU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTo6YWZ0ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNnB4LCA2cHgpIHJvdGF0ZSgyLjJkZWcpOwogICAgb3BhY2l0eTogMC4yNTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOmhvdmVyOjpiZWZvcmUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNHB4LCA0cHgpIHJvdGF0ZSgxLjVkZWcpOwogICAgb3BhY2l0eTogMC41NTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOmhvdmVyOjphZnRlciB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg4cHgsIDhweCkgcm90YXRlKDNkZWcpOwogICAgb3BhY2l0eTogMC4zNTsKfQoKLm1qci1zdGFjay1ncm91cC1wb3BvdmVyIHsKICAgIHdpZHRoOiBtaW4oNDQwcHgsIDkydncpOwp9CgoubWpyLXN0YWNrLWdyb3VwLW1lbWJlci1jYXJkIHsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1zdGFjay1ncm91cC1tZW1iZXItY2FyZCAubWpyLXRodW1iIHsKICAgIGFzcGVjdC1yYXRpbzogMSAvIDEgIWltcG9ydGFudDsKfQoKLm1qci1zdGFjay1ncm91cC1tZW1iZXItY2FyZCAubWpyLWNhcmQtaW5mbyB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBMaWdodCBtb2RlIG92ZXJyaWRlcyAoQ29tZnlVSSB2MS40MisgaW1wcm92ZWQgbGlnaHQgdGhlbWUpCiAqIFVzZXMgQ29tZnlVSSBkYXRhLXRoZW1lIGF0dHJpYnV0ZSB3aGVuIHNldCwgd2l0aAogKiBwcmVmZXJzLWNvbG9yLXNjaGVtZSBhcyBhIGZhbGxiYWNrIGZvciBvbGRlciB2ZXJzaW9ucy4KICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgovKiBDb21meVVJIHNldHMgZGF0YS10aGVtZT0ibGlnaHQiIG9uIDxodG1sPiBvciA8Ym9keT4gKi8KOmlzKFtkYXRhLXRoZW1lPSJsaWdodCJdLCBbZGF0YS1jb2xvci1zY2hlbWU9ImxpZ2h0Il0pIC5tanItYXNzZXRzLW1hbmFnZXIsCjppcyhbZGF0YS10aGVtZT0ibGlnaHQiXSwgW2RhdGEtY29sb3Itc2NoZW1lPSJsaWdodCJdKSAubWpyLXBvcG92ZXIgewogICAgLS1tanItc3VyZmFjZS0wOiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtc3VyZmFjZSwgI2YwZjBmMCk7CiAgICAtLW1qci1zdXJmYWNlLTE6IHZhcigtLWludGVyZmFjZS1tZW51LXN1cmZhY2UsICNmYWZhZmEpOwogICAgLS1tanItc3VyZmFjZS0yOiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtaG92ZXItc3VyZmFjZSwgI2U4ZThlOCk7CiAgICAtLW1qci1zdXJmYWNlLTM6IHZhcigtLW1vZGFsLWNhcmQtYmFja2dyb3VuZCwgI2ZmZmZmZik7CiAgICAtLW1qci1ib3JkZXI6IHZhcigtLWJvcmRlci1kZWZhdWx0LCByZ2JhKDAsIDAsIDAsIDAuMTQpKTsKICAgIC0tbWpyLW11dGVkOiB2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuNTUpKTsKICAgIC0tbWpyLWNhcmQtaG92ZXItY29sb3I6IHZhcigtLWludGVyZmFjZS1wYW5lbC1ob3Zlci1zdXJmYWNlLCAjZTBlMGUwKTsKfQoKQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIHsKICAgIC8qIEZhbGxiYWNrOiBvbmx5IGFwcGx5IGlmIENvbWZ5VUkgaGFzbid0IHNldCBhbiBleHBsaWNpdCBkYXRhLXRoZW1lICovCiAgICAubWpyLWFzc2V0cy1tYW5hZ2VyOm5vdChbZGF0YS10aGVtZS1hcHBsaWVkXSksCiAgICAubWpyLXBvcG92ZXI6bm90KFtkYXRhLXRoZW1lLWFwcGxpZWRdKSB7CiAgICAgICAgLS1tanItc3VyZmFjZS0wOiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtc3VyZmFjZSwgI2YwZjBmMCk7CiAgICAgICAgLS1tanItc3VyZmFjZS0xOiB2YXIoLS1pbnRlcmZhY2UtbWVudS1zdXJmYWNlLCAjZmFmYWZhKTsKICAgICAgICAtLW1qci1zdXJmYWNlLTI6IHZhcigtLWludGVyZmFjZS1wYW5lbC1ob3Zlci1zdXJmYWNlLCAjZThlOGU4KTsKICAgICAgICAtLW1qci1zdXJmYWNlLTM6IHZhcigtLW1vZGFsLWNhcmQtYmFja2dyb3VuZCwgI2ZmZmZmZik7CiAgICAgICAgLS1tanItYm9yZGVyOiB2YXIoLS1ib3JkZXItZGVmYXVsdCwgcmdiYSgwLCAwLCAwLCAwLjE0KSk7CiAgICAgICAgLS1tanItbXV0ZWQ6IHZhcigtLW11dGVkLWZvcmVncm91bmQsIHJnYmEoMCwgMCwgMCwgMC41NSkpOwogICAgICAgIC0tbWpyLWNhcmQtaG92ZXItY29sb3I6IHZhcigtLWludGVyZmFjZS1wYW5lbC1ob3Zlci1zdXJmYWNlLCAjZTBlMGUwKTsKICAgIH0KfQoKLyog4pSA4pSA4pSAIFNrZWxldG9uIGxvYWRlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCgoubWpyLWNhcmQtc2tlbGV0b24gewogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzJhMmEyYSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCAjM2EzYTNhKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnLCA4cHgpOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIC8qIE1hdGNoIC5tanItdGh1bWIgYXNwZWN0IHJhdGlvIHNvIHNrZWxldG9ucyBoYXZlIHRoZSBzYW1lIGZvb3RwcmludCBhcyByZWFsIGNhcmRzLiAqLwogICAgYXNwZWN0LXJhdGlvOiAxIC8gMTsKfQoKLyogU2hpbW1lciBzd2VlcCAqLwoubWpyLWNhcmQtc2tlbGV0b246OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICcnOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgOTBkZWcsCiAgICAgICAgdHJhbnNwYXJlbnQgMCUsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIsICMzYTNhM2EpIDgwJSwgdHJhbnNwYXJlbnQpIDUwJSwKICAgICAgICB0cmFuc3BhcmVudCAxMDAlCiAgICApOwogICAgYW5pbWF0aW9uOiBtanItc2hpbW1lciAxLjRzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTsKfQoKQGtleWZyYW1lcyBtanItc2hpbW1lciB7CiAgICBmcm9tIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTsgfQogICAgdG8gICB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTsgfQp9CgpAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgewogICAgLm1qci1jYXJkLXNrZWxldG9uOjphZnRlciB7IGFuaW1hdGlvbjogbm9uZTsgfQp9CgovKiDilIDilIDilIAgUmVzcG9uc2l2ZSBzdW1tYXJ5IGJhciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCi8qCiAqIEVuYWJsZSBjb250YWluZXIgcXVlcmllcyBvbiB0aGUgc3VtbWFyeSBiYXIgc28gY2hpbGRyZW4gY2FuIHJlc3BvbmQgdG8gaXRzCiAqIGFjdHVhbCByZW5kZXJlZCB3aWR0aCAoZS5nLiB3aGVuIHRoZSBwYW5lbCBpcyBkb2NrZWQgaW4gYSBuYXJyb3cgc2lkZWJhcikuCiAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc3VtbWFyeSB7CiAgICBjb250YWluZXItdHlwZTogaW5saW5lLXNpemU7CiAgICBjb250YWluZXItbmFtZTogbWpyLXN1bW1hcnktYmFyOwp9CgovKiBCZWxvdyB+MzgwIHB4OiBoaWRlIHRoZSBwaWxscy9yaWdodCBzZWN0aW9uIHRvIHByZXZlbnQgb3ZlcmZsb3cuICovCkBjb250YWluZXIgbWpyLXN1bW1hcnktYmFyIChtYXgtd2lkdGg6IDM4MHB4KSB7CiAgICAubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc3VtbWFyeS1yaWdodCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KICAgIC5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zdW1tYXJ5LXRleHQgewogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgIH0KfQo=", import.meta.url).toString(), i = document.createElement("link");
+ const n = new URL("data:text/css;base64,LyoqCiAqIE1ham9vciBBc3NldHMgTWFuYWdlciDigJQgQ29tZnktbGlrZSB0aGVtZSBsYXllcgogKgogKiBSVUxFUzoKICogLSBEbyBOT1QgaGFyZGNvZGUgYSBjdXN0b20gcGFsZXR0ZTsgdXNlIGV4aXN0aW5nIENvbWZ5VUkgQ1NTIHZhcmlhYmxlcyB2aWEgdmFyKC4uLikuCiAqIC0gS2VlcCBldmVyeXRoaW5nIHNjb3BlZCB1bmRlciBgLm1qci1hc3NldHMtbWFuYWdlcmAgdG8gYXZvaWQgbGVha2luZyBzdHlsZXMgdG8gQ29tZnlVSSAoZXhjZXB0IGAubWpyLXBvcG92ZXIqYCB3aGljaCBjYW4gYmUgcG9ydGFsZWQgdG8gYGRvY3VtZW50LmJvZHlgKS4KICovCgoubWpyLWFzc2V0cy1tYW5hZ2VyIHsKICAgIC8qIFR5cG9ncmFwaHkgKi8KICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1jb21meS1mb250LCB2YXIoLS1mb250LWludGVyLCB1aS1zYW5zLXNlcmlmLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sICJTZWdvZSBVSSIsIFJvYm90bywgQXJpYWwsIHNhbnMtc2VyaWYpKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yLCB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSkpOwoKICAgIC8qCiAgICAgKiBTdXJmYWNlcyDigJQgcHJpb3JpdHk6IENvbWZ5VUkgdjEuNDIgZGVzaWduLXN5c3RlbSB0b2tlbiDihpIgbGVnYWN5IHRva2VuIOKGkiBoYXJkIGZhbGxiYWNrCiAgICAgKiBOZXcgdG9rZW5zOiAtLWludGVyZmFjZS1wYW5lbC1zdXJmYWNlLCAtLWludGVyZmFjZS1tZW51LXN1cmZhY2UsIC0taW50ZXJmYWNlLXBhbmVsLWhvdmVyLXN1cmZhY2UsCiAgICAgKiAgICAgICAgICAgICAtLW1vZGFsLWNhcmQtYmFja2dyb3VuZCwgLS1idXR0b24tc3VyZmFjZSwgLS1idXR0b24taG92ZXItc3VyZmFjZSwKICAgICAqICAgICAgICAgICAgIC0taW50ZXJmYWNlLXBhbmVsLXNlbGVjdGVkLXN1cmZhY2UsIC0tcHJpbWFyeS1iYWNrZ3JvdW5kLCAtLW11dGVkLWZvcmVncm91bmQsCiAgICAgKiAgICAgICAgICAgICAtLWJvcmRlci1kZWZhdWx0LCAtLXN1Y2Nlc3MtYmFja2dyb3VuZCwgLS13YXJuaW5nLWJhY2tncm91bmQsIC0tZGVzdHJ1Y3RpdmUtYmFja2dyb3VuZAogICAgICovCiAgICAtLW1qci1zdXJmYWNlLTA6IHZhcigtLWludGVyZmFjZS1wYW5lbC1zdXJmYWNlLCB2YXIoLS1jb250ZW50LWJnLCAjMWUxZTFlKSk7CiAgICAtLW1qci1zdXJmYWNlLTE6IHZhcigtLWludGVyZmFjZS1tZW51LXN1cmZhY2UsIHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpKTsKICAgIC0tbWpyLXN1cmZhY2UtMjogdmFyKC0taW50ZXJmYWNlLXBhbmVsLWhvdmVyLXN1cmZhY2UsIHZhcigtLWNvbWZ5LW1lbnUtc2Vjb25kYXJ5LWJnLCAjMzMzKSk7CiAgICAtLW1qci1zdXJmYWNlLTM6IHZhcigtLW1vZGFsLWNhcmQtYmFja2dyb3VuZCwgdmFyKC0tY29tZnktbWVudS1iZywgIzIyMikpOwogICAgLS1tanItYm9yZGVyOiB2YXIoLS1ib3JkZXItZGVmYXVsdCwgdmFyKC0tYm9yZGVyLWNvbG9yLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKSk7CiAgICAtLW1qci1tdXRlZDogdmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCwgdmFyKC0tZGVzY3JpcC10ZXh0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKSk7CiAgICAtLW1qci1hY2NlbnQ6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSk7CiAgICAtLW1qci1hY2NlbnQtaG92ZXI6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1ob3ZlciwgdmFyKC0tY29tZnktYWNjZW50LCAjN2VjOGZmKSk7CiAgICAtLW1qci1idG4tc3VyZmFjZTogdmFyKC0tYnV0dG9uLXN1cmZhY2UsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKICAgIC0tbWpyLWJ0bi1ob3ZlcjogdmFyKC0tYnV0dG9uLWhvdmVyLXN1cmZhY2UsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKICAgIC0tbWpyLXNlbGVjdGVkLXN1cmZhY2U6IHZhcigtLWludGVyZmFjZS1wYW5lbC1zZWxlY3RlZC1zdXJmYWNlLCByZ2JhKDk1LCAxNzksIDI1NSwgMC4xNSkpOwoKICAgIC8qIFJhZGlpIOKAlCB1c2UgQ29tZnlVSSBkZXNpZ24tc3lzdGVtIHJhZGl1cyB0b2tlbnMgd2hlbiBhdmFpbGFibGUgKi8KICAgIC0tbWpyLXItc206IHZhcigtLXJhZGl1cy1zbSwgOHB4KTsKICAgIC0tbWpyLXItbWQ6IHZhcigtLXJhZGl1cy1tZCwgMTBweCk7CiAgICAtLW1qci1yLWxnOiB2YXIoLS1yYWRpdXMtbGcsIDEycHgpOwoKICAgIC8qIFNwYWNpbmcgKi8KICAgIC0tbWpyLXBhZC1zbTogOHB4OwogICAgLS1tanItcGFkLW1kOiAxMnB4OwogICAgLS1tanItcGFkLWxnOiAxNnB4OwoKICAgIC8qIFNlbWFudGljIFN0YXR1cyBDb2xvcnMg4oCUIHByZWZlciBDb21meVVJIHYxLjQyIHNlbWFudGljIHRva2VucyAqLwogICAgLS1tanItc3RhdHVzLXN1Y2Nlc3M6IHZhcigtLXN1Y2Nlc3MtYmFja2dyb3VuZCwgdmFyKC0tY29tZnktc3RhdHVzLXN1Y2Nlc3MsICM0Q0FGNTApKTsKICAgIC0tbWpyLXN0YXR1cy13YXJuaW5nOiB2YXIoLS13YXJuaW5nLWJhY2tncm91bmQsIHZhcigtLWNvbWZ5LXN0YXR1cy13YXJuaW5nLCAjRkZBNzI2KSk7CiAgICAtLW1qci1zdGF0dXMtZXJyb3I6IHZhcigtLWRlc3RydWN0aXZlLWJhY2tncm91bmQsIHZhcigtLWNvbWZ5LXN0YXR1cy1lcnJvciwgI2Y0NDMzNikpOwogICAgLS1tanItc3RhdHVzLWluZm86IHZhcigtLWNvbWZ5LXN0YXR1cy1pbmZvLCAjMjE5NkYzKTsKICAgIC0tbWpyLXN0YXR1cy1uZXV0cmFsOiB2YXIoLS1jb21meS1zdGF0dXMtbmV1dHJhbCwgIzllOWU5ZSk7CiAgICAtLW1qci1zdGFyLWFjdGl2ZTogI0ZGRDQ1QTsKCiAgICAvKiBCYWRnZSBjb2xvcnMgKG92ZXJyaWRkZW4gYnkgc2V0dGluZ3MpICovCiAgICAtLW1qci1iYWRnZS1pbWFnZTogIzIxOTZGMzsKICAgIC0tbWpyLWJhZGdlLXZpZGVvOiAjOUMyN0IwOwogICAgLS1tanItYmFkZ2UtYXVkaW86ICNGRjk4MDA7CiAgICAtLW1qci1iYWRnZS1tb2RlbDNkOiAjNENBRjUwOwogICAgLS1tanItY2FyZC1ob3Zlci1jb2xvcjogdmFyKC0taW50ZXJmYWNlLXBhbmVsLWhvdmVyLXN1cmZhY2UsICMzRDNEM0QpOwogICAgLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3I6IHZhcigtLWludGVyZmFjZS1wYW5lbC1zZWxlY3RlZC1zdXJmYWNlLCAjNEE5MEUyKTsKICAgIC0tbWpyLXJhdGluZy1jb2xvcjogI0ZGOTUwMDsKICAgIC0tbWpyLXRhZy1jb2xvcjogIzRBOTBFMjsKfQoKLyogTWFrZSB0aGUgdGhlbWUgdmlzaWJseSBhcHBseSBldmVuIHdpdGggaW5saW5lIHN0eWxlcyAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyICogewogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKLm1qci1hc3NldHMtbWFuYWdlci5tanItYW0tY29udGFpbmVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgaGVpZ2h0OiAxMDAlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWhlYWRlciB7CiAgICBwYWRkaW5nOiAxNHB4IDE2cHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xKTsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgei1pbmRleDogMjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWhlYWRlci1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBtaW4taGVpZ2h0OiAyOHB4OwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZmxleC13cmFwOiB3cmFwOwogICAgcm93LWdhcDogMTBweDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWhlYWRlci1sZWZ0IHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWhlYWRlci1hY3Rpb25zIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0taGVhZGVyLXRvb2xzIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgZ2FwOiA4cHg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGFicyB7CiAgICAvKiBRdWV1ZS1saWtlIHRhYnMgKGFjdGl2ZSBwaWxsLCBvdGhlcnMgYXMgdGV4dCkgKi8KICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyOiBub25lOwogICAgcGFkZGluZzogMDsKICAgIGdhcDogMTBweDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLXdpZHRoOiAwOwogICAgb3ZlcmZsb3cteDogYXV0bzsKICAgIG92ZXJmbG93LXk6IGhpZGRlbjsKICAgIHNjcm9sbGJhci13aWR0aDogbm9uZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRhYnM6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiAwOwogICAgaGVpZ2h0OiAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGFiIHsKICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSA2NSUsIHRyYW5zcGFyZW50KTsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxMjBtcyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDEyMG1zIGVhc2UsIGNvbG9yIDEyMG1zIGVhc2UsIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGFiOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDcwJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGFiLmlzLWFjdGl2ZSB7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2ZmZik7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4NSUsIHRyYW5zcGFyZW50KTsKICAgIGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLDAsMCwwLjE4KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWljb24tYnRuIHsKICAgIHdpZHRoOiAyOHB4OwogICAgaGVpZ2h0OiAyOHB4OwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcsIDAuNXJlbSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTIpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgcGFkZGluZzogMDsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxMjBtcyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDEyMG1zIGVhc2UsIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaWNvbi1idG46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNDUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB2YXIoLS1tanItYWNjZW50KSA4JSk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0bi5tanItY29udGV4dC1hY3RpdmUgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgODUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTUlLCB2YXIoLS1tanItYWNjZW50KSAxMiUpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzNSUsIHRyYW5zcGFyZW50KTsKfQoKLyogRmxvYXRpbmcgVmlld2VyIGJ1dHRvbiDigJQgdGVhbCBnbG93IHdoZW4gdmlld2VyIGlzIG9wZW4gKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWljb24tYnRuLm1qci1tZnYtYnRuLWFjdGl2ZSB7CiAgICBjb2xvcjogIzRkZDljMDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSg3NywgMjE3LCAxOTIsIDAuNTUpOwogICAgYmFja2dyb3VuZDogcmdiYSg3NywgMjE3LCAxOTIsIDAuMSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSg3NywgMjE3LCAxOTIsIDAuMjUpOwp9Ci5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0bi5tanItbWZ2LWJ0bi1hY3RpdmUgLnBpIHsKICAgIG9wYWNpdHk6IDE7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0bi5tanItbWVzc2FnZS1idG4gewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IHZpc2libGU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0bi5tanItbWVzc2FnZS1oYXMtdW5yZWFkIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDc1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDcyJSwgdmFyKC0tbWpyLWFjY2VudCkgMTElKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lc3NhZ2UtYmFkZ2UgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAtNXB4OwogICAgcmlnaHQ6IC02cHg7CiAgICBtaW4td2lkdGg6IDE2cHg7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICBwYWRkaW5nOiAwIDRweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDU1JSwgcmdiYSgyNTUsMjU1LDI1NSwwLjMpKTsKICAgIGJhY2tncm91bmQ6ICNlZjUzNTA7CiAgICBjb2xvcjogI2ZmZjsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjM1KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWljb24tYnRuIC5waSB7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIG9wYWNpdHk6IDAuOTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWljb24tYnRuOmRpc2FibGVkLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYWktY29udHJvbDpkaXNhYmxlZCB7CiAgICBvcGFjaXR5OiAwLjU7CiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgdHJhbnNmb3JtOiBub25lOwogICAgZmlsdGVyOiBncmF5c2NhbGUoMC40NSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4OCUsIHRyYW5zcGFyZW50KSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDkyJSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCByZ2JhKDI1NSwyNTUsMjU1LDAuNikpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1haS1kaXNhYmxlZCAubWpyLWFpLWNvbnRyb2w6aG92ZXIgewogICAgdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1haS1kaXNhYmxlZC1ibG9jayB7CiAgICBvcGFjaXR5OiAwLjU4OwogICAgZmlsdGVyOiBncmF5c2NhbGUoMC40NSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1haS1kaXNhYmxlZC1ibG9jayAubWpyLWFpLWNvbnRyb2wsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1haS1kaXNhYmxlZC1ibG9jayBidXR0b24gewogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi8qIFBvcG92ZXJzIGNhbiBiZSBtb3ZlZCB0byBgZG9jdW1lbnQuYm9keWAgKHBvcnRhbCkgdG8gYXZvaWQgYmVpbmcgY2xpcHBlZC4gKi8KLm1qci1wb3BvdmVyIHsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1jb21meS1mb250LCB2YXIoLS1mb250LWludGVyLCB1aS1zYW5zLXNlcmlmLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sICJTZWdvZSBVSSIsIFJvYm90bywgQXJpYWwsIHNhbnMtc2VyaWYpKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yLCB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSkpOwoKICAgIC8qIFByb3ZpZGUgZmFsbGJhY2tzIHdoZW4gb3V0c2lkZSBgLm1qci1hc3NldHMtbWFuYWdlcmAgc2NvcGUgKi8KCSAgICAtLW1qci1zdXJmYWNlLTE6IHZhcigtLWludGVyZmFjZS1tZW51LXN1cmZhY2UsIHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpKTsKCSAgICAtLW1qci1ib3JkZXI6IHZhcigtLWJvcmRlci1kZWZhdWx0LCB2YXIoLS1ib3JkZXItY29sb3IsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpKTsKCSAgICAtLW1qci1tdXRlZDogdmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCwgdmFyKC0tZGVzY3JpcC10ZXh0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKSk7CgkgICAgLS1tanItYWNjZW50OiB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpOwoJICAgIC0tbWpyLXBvcG92ZXItei1pbmRleDogMjE0NzQ4MzY0NzsKCiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICB0b3A6IDA7CiAgICBsZWZ0OiAwOwogICAgbWluLXdpZHRoOiAwOwogICAgd2lkdGg6IG1pbigyODBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIG1heC13aWR0aDogbWluKDM2MHB4LCBjYWxjKDEwMHZ3IC0gMjRweCkpOwogICAgcGFkZGluZzogMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZywgMC41cmVtKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEsIHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHZhcigtLWJvcmRlci1jb2xvciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSkpOwogICAgYm94LXNoYWRvdzogMCAxMnB4IDI4cHggcmdiYSgwLDAsMCwwLjM1KTsKCSAgICB6LWluZGV4OiB2YXIoLS1tanItcG9wb3Zlci16LWluZGV4KTsKICAgIG1pbi1oZWlnaHQ6IDA7CiAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgIHRvdWNoLWFjdGlvbjogcGFuLXk7CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgewogICAgbWluLXdpZHRoOiAzNDBweDsKICAgIHdpZHRoOiBtaW4oMzYwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSk7CiAgICBwYWRkaW5nOiAxMnB4Owp9CgoubWpyLXNvcnQtcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDIyMHB4OwogICAgd2lkdGg6IG1pbigyNjBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIHBhZGRpbmc6IDEwcHg7Cn0KCi5tanItY29sbGVjdGlvbnMtcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDI4MHB4OwogICAgd2lkdGg6IG1pbigzMjBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIHBhZGRpbmc6IDEwcHg7Cn0KCi5tanItbWVzc2FnZXMtcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDMyMHB4OwogICAgd2lkdGg6IG1pbig0NjBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIHBhZGRpbmc6IDEwcHg7Cn0KCi5tanItbWVzc2FnZXMtaGVhZCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogOHB4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgbWFyZ2luLWJvdHRvbTogOHB4Owp9CgoubWpyLW1lc3NhZ2VzLXRhYnMgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICBwYWRkaW5nOiAzcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4OCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA3NCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZXNzYWdlcy10YWIgewogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIGJvcmRlcjogMDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZjFmMWYxKSA3NiUsIHRyYW5zcGFyZW50KTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjE0cyBlYXNlLCBjb2xvciAwLjE0cyBlYXNlLCB0cmFuc2Zvcm0gMC4xNHMgZWFzZTsKfQoKLm1qci1tZXNzYWdlcy10YWI6aG92ZXIsCi5tanItbWVzc2FnZXMtdGFiOmZvY3VzLXZpc2libGUgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDE0JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNmMWYxZjEpOwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci1tZXNzYWdlcy10YWIuaXMtYWN0aXZlIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAyMiUsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZmZmKTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMzQlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWVzc2FnZXMtcGFuZWxzIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDhweDsKICAgIG1heC1oZWlnaHQ6IG1pbig1MnZoLCA0MjBweCk7Cn0KCi5tanItbWVzc2FnZXMtbGlzdCwKLm1qci1tZXNzYWdlcy1zaG9ydGN1dHMtcGFuZWwgewogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47Cn0KCi5tanItdGFiLWNvdW50LWJhZGdlIHsKICAgIG1pbi13aWR0aDogMTZweDsKICAgIGhlaWdodDogMTZweDsKICAgIHBhZGRpbmc6IDAgNXB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGZvbnQtc2l6ZTogOXB4OwogICAgZm9udC13ZWlnaHQ6IDgwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAyZW07CiAgICBsaW5lLWhlaWdodDogMTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAyOCUsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2ZmZikgOTIlLCB0cmFuc3BhcmVudCk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDQ4JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1lc3NhZ2VzLXRpdGxlIHsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLXdpZHRoOiAwOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAzZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSA4MiUsIHZhcigtLW1qci1tdXRlZCkpOwp9CgoubWpyLW1lc3NhZ2VzLWFjdGlvbnMgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgIGdhcDogNnB4OwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLW1lc3NhZ2VzLW1hcmstcmVhZC1idG4gewogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7Cn0KCi5tanItbWVzc2FnZXMtc3Rhci1saW5rIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2YxZjFmMSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjNjODRiIDQyJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsICNmM2M4NGIgMTIlLCB2YXIoLS1tanItc3VyZmFjZS0yKSk7Cn0KCi5tanItbWVzc2FnZXMtc3Rhci1saW5rOmhvdmVyLAoubWpyLW1lc3NhZ2VzLXN0YXItbGluazpmb2N1cy12aXNpYmxlIHsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQoKLm1qci1tZXNzYWdlcy1zdGFyLWljb24gewogICAgY29sb3I6ICNmM2M4NGI7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci1tZXNzYWdlcy1zdGFyLWxhYmVsIHsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItbWVzc2FnZXMtbGlzdCB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA4cHg7Cn0KCi5tanItbWVzc2FnZXMtZW1wdHkgewogICAgcGFkZGluZzogOHB4IDZweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIG9wYWNpdHk6IDAuNzI7Cn0KCi5tanItbWVzc2FnZS1pdGVtIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDVweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODYlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTglLCB0cmFuc3BhcmVudCk7CiAgICBwYWRkaW5nOiA4cHg7Cn0KCi5tanItbWVzc2FnZS1pdGVtLS11bnJlYWQgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTglLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDI2JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1lc3NhZ2UtaXRlbS0td2FybmluZyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjBiODVhIDYyJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLW1lc3NhZ2UtaXRlbS0tZXJyb3IgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgI2YzNmI2YiA2MiUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tLXN1Y2Nlc3MgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgIzU4YzA3ZCA2MiUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1tZXNzYWdlLWl0ZW0taGVhZCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogOHB4Owp9CgoubWpyLW1lc3NhZ2UtaXRlbS10aXRsZS13cmFwIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgbWluLXdpZHRoOiAwOwogICAgZmxleDogMSAxIGF1dG87Cn0KCi5tanItbWVzc2FnZS1pdGVtLWVtb2ppIHsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgZm9udC1zaXplOiAxNnB4OwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi5tanItbWVzc2FnZS1pdGVtLXRpdGxlIHsKICAgIG1pbi13aWR0aDogMDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2YxZjFmMSk7Cn0KCi5tanItbWVzc2FnZS1pdGVtLWNhdGVnb3J5IHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDFweCA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wM2VtOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDIwJSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZmZmKSA4NiUsIHRyYW5zcGFyZW50KTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItbWVzc2FnZS1pdGVtLW1ldGEgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgb3BhY2l0eTogMC43MjsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tYm9keSB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBvcGFjaXR5OiAwLjkyOwogICAgbGluZS1oZWlnaHQ6IDEuNDU7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwp9CgoubWpyLW1lc3NhZ2UtaXRlbS1hY3Rpb24gewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKTsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tYWN0aW9uOmhvdmVyIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgovKiBUb2FzdCBIaXN0b3J5IHRhYiDigJQgdW5yZWFkIGluZGljYXRvciBkb3QgKi8KLm1qci10YWItdW5yZWFkLWRvdCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB3aWR0aDogNnB4OwogICAgaGVpZ2h0OiA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKICAgIG1hcmdpbi1sZWZ0OiA1cHg7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgZmxleC1zaHJpbms6IDA7Cn0KCi8qIEhpc3RvcnkgcGFuZWwgKi8KLm1qci1tZXNzYWdlcy1oaXN0b3J5LXBhbmVsIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgbWluLWhlaWdodDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tanItaGlzdG9yeS1oZWFkIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgcGFkZGluZzogNHB4IDAgNnB4OwogICAgZmxleC1zaHJpbms6IDA7Cn0KCi5tanItaGlzdG9yeS1oZWFkLWxhYmVsIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBvcGFjaXR5OiAwLjYyOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07Cn0KCi5tanItaGlzdG9yeS1jbGVhci1idG4gewogICAgZm9udC1zaXplOiAxMXB4OwogICAgcGFkZGluZzogMnB4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSk7CiAgICBjb2xvcjogaW5oZXJpdDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIG9wYWNpdHk6IDAuNzI7Cn0KCi5tanItaGlzdG9yeS1jbGVhci1idG46aG92ZXIgewogICAgb3BhY2l0eTogMTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAxMiUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1oaXN0b3J5LWxpc3QgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogNHB4OwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47Cn0KCi5tanItaGlzdG9yeS1pdGVtIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogNnB4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LDI1NSwyNTUsMC4wOCkpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMiwgcmdiYSgyNTUsMjU1LDI1NSwwLjA0KSk7CiAgICBmb250LXNpemU6IDEycHg7Cn0KCi5tanItaGlzdG9yeS1pdGVtLS1lcnJvciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjM2YjZiIDUwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLWhpc3RvcnktaXRlbS0td2FybmluZyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjBiODVhIDUwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLWhpc3RvcnktaXRlbS0tc3VjY2VzcyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjNThjMDdkIDUwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLWhpc3RvcnktaXRlbS1pY29uIHsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgZm9udC1zaXplOiAxNHB4OwogICAgbGluZS1oZWlnaHQ6IDEuNDsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tY29udGVudCB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA0cHg7Cn0KCi5tanItaGlzdG9yeS1pdGVtLW1zZyB7CiAgICBvcGFjaXR5OiAwLjkyOwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7CiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwp9CgoubWpyLWhpc3RvcnktaXRlbS10aXRsZSB7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgIG9wYWNpdHk6IDAuOTY7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tZGV0YWlsIHsKICAgIG9wYWNpdHk6IDAuODQ7CiAgICBsaW5lLWhlaWdodDogMS40NTsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlOwogICAgd29yZC1icmVhazogYnJlYWstd29yZDsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tbWV0YSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLWhpc3RvcnktaXRlbS10aW1lIHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIG9wYWNpdHk6IDAuNTI7Cn0KCi5tanItaGlzdG9yeS1pdGVtLWNoaXAgewogICAgZm9udC1zaXplOiAxMHB4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBwYWRkaW5nOiAycHggNnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODIlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMywgdmFyKC0tbWpyLXN1cmZhY2UtMikpIDc4JSwgdHJhbnNwYXJlbnQpOwogICAgb3BhY2l0eTogMC43NjsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tYWN0aW9uIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tYWN0aW9uOmhvdmVyIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgoubWpyLWhpc3RvcnktaXRlbS1wcm9ncmVzcyB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA0cHg7Cn0KCi5tanItaGlzdG9yeS1pdGVtLXByb2dyZXNzLXN1bW1hcnkgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgb3BhY2l0eTogMC43NDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7Cn0KCi5tanItaGlzdG9yeS1pdGVtLXByb2dyZXNzLWJhciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogNnB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc1JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWhpc3RvcnktaXRlbS1wcm9ncmVzcy1maWxsIHsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpLCBjb2xvci1taXgoaW4gc3JnYiwgIzU4YzA3ZCA3MiUsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpKSk7Cn0KCi5tanItc2hvcnRjdXQtZ3VpZGUgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogOHB4Owp9CgoubWpyLXNob3J0Y3V0LWd1aWRlLWludHJvIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ1OwogICAgb3BhY2l0eTogMC44NDsKfQoKLm1qci1zaG9ydGN1dC1zZWN0aW9uIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDZweDsKICAgIHBhZGRpbmc6IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODQlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMywgdmFyKC0tbWpyLXN1cmZhY2UtMikpIDcyJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLXNob3J0Y3V0LXNlY3Rpb24tdGl0bGUgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZjFmMWYxKSA4OCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1zaG9ydGN1dC1saXN0IHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDZweDsKfQoKLm1qci1zaG9ydGN1dC1yb3cgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDEzMnB4LCAxNjBweCkgbWlubWF4KDAsIDFmcik7CiAgICBnYXA6IDhweDsKICAgIGFsaWduLWl0ZW1zOiBzdGFydDsKfQoKLm1qci1zaG9ydGN1dC1rZXkgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBtaW4taGVpZ2h0OiAyNHB4OwogICAgcGFkZGluZzogM3B4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDM4JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDEyJSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZmZmKSA5MCUsIHRyYW5zcGFyZW50KTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMS4yNTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7Cn0KCi5tanItc2hvcnRjdXQtZGVzYyB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsaW5lLWhlaWdodDogMS40OwogICAgb3BhY2l0eTogMC45MjsKfQoKQG1lZGlhIChtYXgtd2lkdGg6IDU2MHB4KSB7CiAgICAubWpyLXNob3J0Y3V0LXJvdyB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICB9CgogICAgLm1qci1zaG9ydGN1dC1rZXkgewogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIH0KfQoKLm1qci1maWx0ZXItZ3JvdXAgewogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDg1JSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDcwJSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbWQpOwogICAgcGFkZGluZzogMTBweDsKICAgIG1hcmdpbi1ib3R0b206IDEwcHg7Cn0KCi5tanItZmlsdGVyLWdyb3VwOmxhc3QtY2hpbGQgewogICAgbWFyZ2luLWJvdHRvbTogMDsKfQoKLm1qci1maWx0ZXItZ3JvdXAtdGl0bGUgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjM1cHg7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSA3OCUsIHZhcigtLW1qci1tdXRlZCkpOwogICAgbWFyZ2luLWJvdHRvbTogOHB4Owp9CgoubWpyLXBvcG92ZXItcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgIGZsZXgtd3JhcDogd3JhcDsKfQoKLm1qci1wb3BvdmVyLXJvdzpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1ib3R0b206IDA7Cn0KCi5tanItcG9wb3Zlci1sYWJlbCB7CiAgICB3aWR0aDogNTZweDsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHZhcigtLWRlc2NyaXAtdGV4dCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSkpOwogICAgZm9udC1zaXplOiAxMnB4Owp9CgoubWpyLXBvcG92ZXItdG9nZ2xlIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwp9CgoubWpyLXBvcG92ZXItdG9nZ2xlIGlucHV0W3R5cGU9ImNoZWNrYm94Il0gewogICAgYWNjZW50LWNvbG9yOiB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWhlYWRlci1pY29uIHsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvcGFjaXR5OiAwLjk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1oZWFkZXItdGl0bGUgewogICAgbWFyZ2luOiAwOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAxZW07Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1jb250ZW50IHsKICAgIGZsZXg6IDE7CiAgICBwYWRkaW5nOiAxNnB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgbWluLWhlaWdodDogMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWJyb3dzZSB7CiAgICBmbGV4OiAxOwogICAgbWluLWhlaWdodDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc1JSwgdHJhbnNwYXJlbnQpOwogICAgcGFkZGluZy10b3A6IDRweDsKfQoKLyogU2Nyb2xsYmFycyAobWF0Y2ggQ29tZnlVSSBmZWVsKSAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZ3JpZC1zY3JvbGwgewogICAgbWluLWhlaWdodDogMDsKICAgIGhlaWdodDogMTAwJTsKICAgIG92ZXJmbG93OiBhdXRvOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgIHRvdWNoLWFjdGlvbjogcGFuLXk7CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47CiAgICBzY3JvbGxiYXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4NSUsIHZhcigtLWNvbnRlbnQtZmcsICNkZGQpKSB0cmFuc3BhcmVudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWdyaWQtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICB3aWR0aDogMTBweDsKICAgIGhlaWdodDogMTBweDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWdyaWQtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWdyaWQtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTUlLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSk7CiAgICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWdyaWQtc2Nyb2xsOmhvdmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNzAlLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1ncmlkLXNjcm9sbDo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tY3VzdG9tLWNvbnRyb2xzIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMDsKICAgIGdhcDogOHB4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zZWFyY2ggewogICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zZWFyY2ggewogICAgcGFkZGluZy1ib3R0b206IDZweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIG1hcmdpbi1ib3R0b206IDZweDsKfQoKLyogQ2FyZCBNZXRhZGF0YSBDb2xvcnMgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1ldGEtZHVyYXRpb24gewogICAgY29sb3I6ICNmZmE3MjY7IC8qIE9yYW5nZSBmb3IgZHVyYXRpb24gKi8KICAgIGZvbnQtd2VpZ2h0OiA1MDA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZXRhLXJlcyB7CiAgICBjb2xvcjogIzRmYzNmNzsgLyogTGlnaHQgQmx1ZSBmb3IgcmVzb2x1dGlvbiAqLwogICAgZm9udC13ZWlnaHQ6IDUwMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1ldGEtZGF0ZSB7CiAgICBjb2xvcjogI2I5ZjZjYTsgLyogUGFsZSBHcmVlbiBmb3IgZGF0ZSAqLwogICAgZm9udC1zaXplOiAwLjllbTsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZXRhLXRpbWUgewogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7CiAgICBmb250LXNpemU6IDAuOWVtOwp9CgoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXN1bW1hcnkgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBnYXA6IDEwcHg7CiAgICBtYXJnaW46IDAgMCA2cHggMDsKICAgIHBhZGRpbmc6IDAgMCA0cHggMDsKICAgIG1pbi1oZWlnaHQ6IDE2cHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKTsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNjUlLCB0cmFuc3BhcmVudCk7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoKLyogVG9hc3RzIChnbG9iYWw6IGNhbiBiZSBtb3VudGVkIHVuZGVyIGRvY3VtZW50LmJvZHkpICovCi5tanItdG9hc3QtY29udGFpbmVyIHsKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIHRvcDogMTZweDsKICAgIGxlZnQ6IDUwJTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIHotaW5kZXg6IDEwMDAwMDE7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm1qci10b2FzdCB7CiAgICAtLW1qci10b2FzdC1zdHJpcDogdmFyKC0tbWpyLXN0YXR1cy1pbmZvLCB2YXIoLS1jb21meS1zdGF0dXMtaW5mbywgIzIxOTZmMykpOwogICAgLS1tanItdG9hc3QtaWNvbi1jb2xvcjogdmFyKC0tbWpyLXN0YXR1cy1pbmZvLCB2YXIoLS1jb21meS1zdGF0dXMtaW5mbywgIzIxOTZmMykpOwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IsICMzYTNhM2EpOwogICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB2YXIoLS1tanItdG9hc3Qtc3RyaXApOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yLCAjZWZlZmVmKTsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1jb21meS1mb250LCB1aS1zYW5zLXNlcmlmLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sICJTZWdvZSBVSSIsIFJvYm90bywgQXJpYWwsIHNhbnMtc2VyaWYpOwogICAgZm9udC1zaXplOiAxNHB4OwogICAgYm94LXNoYWRvdzogMCA0cHggMTZweCByZ2JhKDAsMCwwLDAuNSk7CiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xNXB4KTsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLW91dCwgdHJhbnNmb3JtIDAuMnMgZWFzZS1vdXQ7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMnB4OwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgd2lkdGg6IG1heC1jb250ZW50OwogICAgbWluLXdpZHRoOiBtaW4oMjUwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSk7CiAgICBtYXgtd2lkdGg6IG1pbig0MDBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig0cHgpOwogICAgY3Vyc29yOiBkZWZhdWx0OwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItdG9hc3QuaXMtdmlzaWJsZSB7CiAgICBvcGFjaXR5OiAxOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwp9CgoubWpyLXRvYXN0LXRleHQgewogICAgZmxleDogMTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7Cn0KCi8qIFRvYXN0IGljb24gc3R5bGluZyAqLwoubWpyLXRvYXN0LXRleHQ6OmJlZm9yZSB7CiAgICBjb250ZW50OiBhdHRyKGRhdGEtaWNvbik7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGNvbG9yOiB2YXIoLS1tanItdG9hc3QtaWNvbi1jb2xvcik7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIG1pbi13aWR0aDogMTZweDsKfQoKLm1qci10b2FzdC1zdWNjZXNzIHsKICAgIC0tbWpyLXRvYXN0LXN0cmlwOiB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNvbWZ5LXN0YXR1cy1zdWNjZXNzLCAjNGNhZjUwKSk7CiAgICAtLW1qci10b2FzdC1pY29uLWNvbG9yOiB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNvbWZ5LXN0YXR1cy1zdWNjZXNzLCAjNGNhZjUwKSk7Cn0KCi5tanItdG9hc3QtZXJyb3IgewogICAgLS1tanItdG9hc3Qtc3RyaXA6IHZhcigtLW1qci1zdGF0dXMtZXJyb3IsIHZhcigtLWNvbWZ5LXN0YXR1cy1lcnJvciwgI2Y0NDMzNikpOwogICAgLS1tanItdG9hc3QtaWNvbi1jb2xvcjogdmFyKC0tbWpyLXN0YXR1cy1lcnJvciwgdmFyKC0tY29tZnktc3RhdHVzLWVycm9yLCAjZjQ0MzM2KSk7Cn0KCi5tanItdG9hc3Qtd2FybmluZyB7CiAgICAtLW1qci10b2FzdC1zdHJpcDogdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCB2YXIoLS1jb21meS1zdGF0dXMtd2FybmluZywgI2ZmYTcyNikpOwogICAgLS1tanItdG9hc3QtaWNvbi1jb2xvcjogdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCB2YXIoLS1jb21meS1zdGF0dXMtd2FybmluZywgI2ZmYTcyNikpOwp9CgoubWpyLXRvYXN0LWluZm8gewogICAgLS1tanItdG9hc3Qtc3RyaXA6IHZhcigtLW1qci1zdGF0dXMtaW5mbywgdmFyKC0tY29tZnktc3RhdHVzLWluZm8sICMyMTk2ZjMpKTsKICAgIC0tbWpyLXRvYXN0LWljb24tY29sb3I6IHZhcigtLW1qci1zdGF0dXMtaW5mbywgdmFyKC0tY29tZnktc3RhdHVzLWluZm8sICMyMTk2ZjMpKTsKfQoKCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zdW1tYXJ5LXRleHQgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXN1bW1hcnktcmlnaHQgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmbGV4LXdyYXA6IHdyYXA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1jb250ZXh0LXBpbGxzIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNXB4OwogICAgcm93LWdhcDogNHB4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNvbnRleHQtcGlsbCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIHBhZGRpbmc6IDNweCA3cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1NSUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHZhcigtLW1qci1hY2NlbnQpIDEwJSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDE4JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgZm9udC1zaXplOiAxMC41cHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIG1pbi1oZWlnaHQ6IDIycHg7CiAgICBtYXgtd2lkdGg6IDIyMHB4Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY29udGV4dC1waWxsOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDc1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDUwJSwgdmFyKC0tbWpyLWFjY2VudCkgMTQlKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNvbnRleHQtcGlsbC10ZXh0IHsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvcGFjaXR5OiAwLjkyOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY29udGV4dC1waWxsLXggewogICAgd2lkdGg6IDIwcHg7CiAgICBoZWlnaHQ6IDIwcHg7CiAgICBwYWRkaW5nOiAwOwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc1JSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NSkpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLCBib3JkZXItY29sb3IgMTIwbXMgZWFzZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNvbnRleHQtcGlsbC14OmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDcwJSwgdmFyKC0tbWpyLWFjY2VudCkgMTAlKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZmZmKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXNlYXJjaC1waWxsIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgaGVpZ2h0OiAxLjc1cmVtOwogICAgcGFkZGluZzogMCAxMHB4OwogICAgd2lkdGg6IDEwMCU7CiAgICBtYXgtd2lkdGg6IG5vbmU7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcsIDAuNXJlbSk7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1pbnB1dC1iZywgcmdiYSgwLCAwLCAwLCAwLjI1KSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc2VhcmNoLXRvb2xzIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgZmxleDogMCAwIGF1dG87Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1wb3BvdmVyLWFuY2hvciB7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgfQoKLm1qci1hZ2VuZGEtaW5wdXQgewogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1pbnB1dC1iZywgcmdiYSgwLCAwLCAwLCAwLjI1KSk7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMnMgZWFzZSwgY29sb3IgMC4ycyBlYXNlLCBib3JkZXItY29sb3IgMC4ycyBlYXNlOwp9Ci5tanItYWdlbmRhLWlucHV0Lm1qci1hZ2VuZGEtZmlsbGVkIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKSA0MCUsIHZhcigtLW1qci1zdXJmYWNlLTIpIDYwJSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKSA4MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZmZmKTsKfQoubWpyLWFnZW5kYS1pbnB1dC5tanItYWdlbmRhLWVtcHR5IHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4NSUsIHRyYW5zcGFyZW50IDE1JSk7CiAgICBib3JkZXItY29sb3I6IHZhcigtLW1qci1ib3JkZXIpOwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7Cn0KCi5tanItYWdlbmRhLWNvbnRhaW5lciB7CiAgICB3aWR0aDogMTAwJTsKfQoKLm1qci1hZ2VuZGEtY2FsZW5kYXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDhweDsKICAgIHdpZHRoOiAxMDAlOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWFnZW5kYS1oZWFkZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKfQoKLm1qci1hZ2VuZGEtbW9udGggewogICAgZmxleDogMTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLm1qci1hZ2VuZGEtbmF2IHsKICAgIHdpZHRoOiAzMnB4OwogICAgaGVpZ2h0OiAyOHB4OwogICAgcGFkZGluZzogMDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7Cn0KCi5tanItYWdlbmRhLWdyaWQgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDcsIG1pbm1heCgwLCAxZnIpKTsKICAgIGdhcDogNnB4OwogICAgd2lkdGg6IDEwMCU7Cn0KCi5tanItYWdlbmRhLXdlZWtkYXkgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLm1qci1hZ2VuZGEtZGF5IHsKICAgIGhlaWdodDogMzBweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgcGFkZGluZzogMDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLCBib3JkZXItY29sb3IgMTIwbXMgZWFzZSwgdHJhbnNmb3JtIDgwbXMgZWFzZTsKfQoKLm1qci1hZ2VuZGEtZGF5LWJhZGdlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogLTVweDsKICAgIHJpZ2h0OiAtNXB4OwogICAgbWluLXdpZHRoOiAxNnB4OwogICAgaGVpZ2h0OiAxNnB4OwogICAgcGFkZGluZzogMCA0cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6ICNlNTM5MzU7CiAgICBjb2xvcjogI2ZmZjsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCAjZTUzOTM1IDY1JSwgI2ZmZmZmZiAzNSUpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxNHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9CgoubWpyLWFnZW5kYS1kYXk6aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNTUlLCB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKSA0NSUpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDQ1JSwgdmFyKC0tbWpyLWFjY2VudCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSkgMTAlKTsKfQoKLm1qci1hZ2VuZGEtZGF5OmFjdGl2ZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTsKfQoKLm1qci1hZ2VuZGEtZGF5LS1ibGFuayB7CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm1qci1hZ2VuZGEtZGF5LS1oYXMtYXNzZXRzIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpIDgwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpIDE4JSwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODIlKTsKfQoKLm1qci1hZ2VuZGEtZGF5LS1zZWxlY3RlZCB7CiAgICBib3JkZXItY29sb3I6IHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKSA1NSUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1hZ2VuZGEtZm9vdGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBnYXA6IDhweDsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKfQoKLm1qci1hZ2VuZGEtY2xlYXIsCi5tanItYWdlbmRhLXJlZnJlc2ggewogICAgZmxleDogMTsKfQoKLm1qci1tZW51LAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWVudSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogNHB4Owp9CgoubWpyLW1lbnUtaXRlbSwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lbnUtaXRlbSB7CiAgICBhcHBlYXJhbmNlOiBub25lOwogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBnYXA6IDEwcHg7CiAgICB3aWR0aDogMTAwJTsKICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDEyMG1zIGVhc2UsIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLCB0cmFuc2Zvcm0gODBtcyBlYXNlOwp9CgoubWpyLW1lbnUtaXRlbTpob3ZlciwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lbnUtaXRlbTpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4MCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZW51LWl0ZW06YWN0aXZlLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWVudS1pdGVtOmFjdGl2ZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTsKfQoKLm1qci1tZW51LWl0ZW0tbGFiZWwsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZW51LWl0ZW0tbGFiZWwgewogICAgZmxleDogMSAxIGF1dG87CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLW1lbnUtaXRlbS1jaGVjaywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lbnUtaXRlbS1jaGVjayB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICB3aWR0aDogMTZweDsKICAgIGZsZXg6IDAgMCAxNnB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgb3BhY2l0eTogMDsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNzIlLCB2YXIoLS1jb250ZW50LWZnKSk7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDEyMG1zIGVhc2UsIGNvbG9yIDEyMG1zIGVhc2U7Cn0KCi5tanItbWVudS1pdGVtIC5waSwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lbnUtaXRlbSAucGkgewogICAgZm9udC1zaXplOiAxM3B4OwogICAgb3BhY2l0eTogMC45Owp9CgoubWpyLWNvbGxlY3Rpb25zLW1lbnUgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogNnB4Owp9CgoubWpyLW1lbnUtaXRlbS1sYWJlbC0taWNvbiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLW1lbnUtaXRlbS1sYWJlbC0taWNvbiAucGkgewogICAgd2lkdGg6IDE2cHg7CiAgICBmbGV4OiAwIDAgMTZweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLm1qci1tZW51LWl0ZW0tcmlnaHQgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgZmxleDogMCAwIGF1dG87CiAgICBtaW4td2lkdGg6IDE2cHg7CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7Cn0KCi5tanItbWVudS1pdGVtLWhpbnQgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnKSA2MiUsIHZhcigtLW1qci1tdXRlZCkpOwogICAgb3BhY2l0eTogMC43MjsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItbWVudS1pdGVtLWNoZWNrLS12aXNpYmxlLAoubWpyLW1lbnUtaXRlbS5pcy1hY3RpdmUgLm1qci1tZW51LWl0ZW0tY2hlY2sgewogICAgb3BhY2l0eTogMTsKfQoKLm1qci1tZW51LWRpdmlkZXIgewogICAgaGVpZ2h0OiAxcHg7CiAgICBtYXJnaW46IDRweCAwOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDgwJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW11dGVkIHsKICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgIG9wYWNpdHk6IDAuNzU7Cn0KCi5tanItc3RhdGUtYmxvY2sgewogICAgZm9udC1zaXplOiAxMHB4OwogICAgbGluZS1oZWlnaHQ6IDEuMzU7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkKTsKICAgIGJvcmRlcjogMXB4IGRhc2hlZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODUlLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1zbSk7CiAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgIG1hcmdpbjogNHB4IDA7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNzAlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItc3RhdGUtYmxvY2suaXMtZXJyb3IsCi5tanItY29udGV4dC1tZW51LW5vdGUuaXMtZXJyb3IgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLWVycm9yKSA4MiUsIHZhcigtLWNvbnRlbnQtZmcpKTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtZXJyb3IpIDQ1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLWNvbGxlY3Rpb24tcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDsKICAgIHdpZHRoOiAxMDAlOwp9CgoubWpyLWRlbGV0ZS1idG4gewogICAgd2lkdGg6IDQycHg7CiAgICBmbGV4OiAwIDAgNDJweDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcGFkZGluZzogMDsKICAgIG1hcmdpbi1sZWZ0OiA2cHg7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA2NSUsIHZhcigtLW1qci1zdGF0dXMtZXJyb3IpIDQ1JSk7Cn0KCi5tanItZGVsZXRlLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA0MCUsIHZhcigtLW1qci1zdGF0dXMtZXJyb3IpIDY1JSk7Cn0KCi5tanItZGVsZXRlLWJ0biAucGkgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLWVycm9yKSA3OCUsIHZhcigtLWNvbnRlbnQtZmcpKTsKfQoKLm1qci1zZWN0aW9uLXRpdGxlIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBwYWRkaW5nOiA2cHggMTBweCAycHg7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuNnB4OwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIG9wYWNpdHk6IDAuODg7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcpIDcyJSwgdmFyKC0tbWpyLW11dGVkKSk7Cn0KCi5tanItc2VjdGlvbi10aXRsZS0tY3lhbiB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsICM2ZmQ0ZmYgNzglLCB2YXIoLS1jb250ZW50LWZnKSk7Cn0KCi5tanItc2VjdGlvbi10aXRsZS0tdmlvbGV0IHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgI2M0OGRmZiA3OCUsIHZhcigtLWNvbnRlbnQtZmcpKTsKfQoKLm1qci1zZWN0aW9uLWhpbnQgewogICAgcGFkZGluZzogMCAxMHB4IDRweDsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcpIDU1JSwgdmFyKC0tbWpyLW11dGVkKSk7Cn0KCi5tanItbWVudS1pdGVtLS1zbWFydCwKLm1qci1tZW51LWl0ZW0tLWNsdXN0ZXIgewogICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9CgoubWpyLW1lbnUtaXRlbS0tY2x1c3RlciB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnKTsKfQoKLm1qci1tZW51LWl0ZW0tLXNtYXJ0IC5waSB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsICM2ZmQ0ZmYgNzQlLCB2YXIoLS1jb250ZW50LWZnKSk7Cn0KCi5tanItbWVudS1pdGVtLS1jbHVzdGVyIC5waSB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsICNjNDhkZmYgNzQlLCB2YXIoLS1jb250ZW50LWZnKSk7Cn0KCi5tanItbWVudS1pdGVtLS1zbWFydDpob3Zlcjpub3QoOmRpc2FibGVkKSwKLm1qci1tZW51LWl0ZW0tLWNsdXN0ZXI6aG92ZXI6bm90KDpkaXNhYmxlZCkgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODAlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTUlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItY2x1c3Rlci1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgIHBhZGRpbmc6IDZweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1zbSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA3MCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1jbHVzdGVyLXRodW1icyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiAzcHg7CiAgICBmbGV4LXNocmluazogMDsKfQoKLm1qci1jbHVzdGVyLXRodW1iIHsKICAgIHdpZHRoOiAyOHB4OwogICAgaGVpZ2h0OiAyOHB4OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICBvcGFjaXR5OiAwLjg1OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDYwJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWNsdXN0ZXItaW5mbyB7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWNsdXN0ZXItbmFtZSB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnKTsKfQoKLm1qci1jbHVzdGVyLWNvdW50IHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZykgNTglLCB2YXIoLS1tanItbXV0ZWQpKTsKfQoKLm1qci1jbHVzdGVyLWNyZWF0ZS1idG4gewogICAgZmxleC1zaHJpbms6IDA7CiAgICBwYWRkaW5nOiAzcHggOHB4OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTUlLCB0cmFuc3BhcmVudCk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZyk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDEyMG1zIGVhc2UsIGJhY2tncm91bmQgMTIwbXMgZWFzZSwgb3BhY2l0eSAxMjBtcyBlYXNlOwp9CgoubWpyLWNsdXN0ZXItY3JlYXRlLWJ0bjpkaXNhYmxlZCB7CiAgICBvcGFjaXR5OiAwLjYyOwogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgoubWpyLWNsdXN0ZXItY3JlYXRlLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4MCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA2MiUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXNlYXJjaC1pY29uIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zZWFyY2gtaWNvbiAucGkgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zZWFyY2gtcGlsbCAubWpyLWlucHV0IHsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKICAgIGZvbnQtc2l6ZTogMTJweCAhaW1wb3J0YW50OwogICAgbGluZS1oZWlnaHQ6IDEuMiAhaW1wb3J0YW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc2VhcmNoLXBpbGw6Zm9jdXMtd2l0aGluIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDY1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAxOCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWJyb3dzZSB7CiAgICBtYXJnaW4tdG9wOiAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZ3JpZC1zY3JvbGwgewogICAgcGFkZGluZy1yaWdodDogNHB4OwogICAgc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlOwp9CgoKLyogR3JpZCBsYXlvdXQgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgewogICAgZGlzcGxheTogZ3JpZDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIC8qIEF2b2lkIG92ZXJmbG93IHdoZW4gdGhlIHBhbmVsIGJlY29tZXMgbmFycm93ZXIgdGhhbiB0aGUgbWluIGNhcmQgc2l6ZSAqLwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgobWluKDEwMCUsIHZhcigtLW1qci1ncmlkLW1pbi1zaXplLCAxODBweCkpLCAxZnIpKTsKICAgIGdhcDogdmFyKC0tbWpyLWdyaWQtZ2FwLCAxMHB4KTsKICAgIG1hcmdpbi10b3A6IDZweDsKICAgIG1pbi1oZWlnaHQ6IDA7Cn0KCi8qIENhcmQgc2VsZWN0aW9uICsgZm9jdXMgKGtlZXBzIGEgdmlzaWJsZSBpbmRpY2F0b3Igd2hlbiBzaWRlYmFyIGlzIG9wZW4pICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIHsKICAgIG91dGxpbmU6IG5vbmU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkLmlzLXNlbGVjdGVkIHsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgMCAwIDAgM3B4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3IpIDgwJSwgdmFyKC0tY29udGVudC1mZykpLAogICAgICAgIDAgMCAwIDZweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSAzMCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDAgMjBweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSA0MCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDEwcHggMjhweCByZ2JhKDAsMCwwLDAuMjgpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbGcpOwogICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkyKSAhaW1wb3J0YW50OwogICAgei1pbmRleDogMTA7CiAgICBvdXRsaW5lOiAycHggc29saWQgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQ6Zm9jdXMtdmlzaWJsZSB7CiAgICBib3gtc2hhZG93OgogICAgICAgIDAgMCAwIDNweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgODAlLCB2YXIoLS1jb250ZW50LWZnKSksCiAgICAgICAgMCAwIDAgNnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzMCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDAgMjBweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNDAlLCB0cmFuc3BhcmVudCksCiAgICAgICAgMCAxMHB4IDI4cHggcmdiYSgwLDAsMCwwLjI4KTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnKTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC45MikgIWltcG9ydGFudDsKICAgIHotaW5kZXg6IDEwOwp9CgpAa2V5ZnJhbWVzIG1qci1saXZlLXBsYWNlaG9sZGVyLXNoZWVuIHsKICAgIDAlIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTU4JSk7CiAgICAgICAgb3BhY2l0eTogMC4xODsKICAgIH0KICAgIDUwJSB7CiAgICAgICAgb3BhY2l0eTogMC4zNDsKICAgIH0KICAgIDEwMCUgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg1OCUpOwogICAgICAgIG9wYWNpdHk6IDAuMTg7CiAgICB9Cn0KCkBrZXlmcmFtZXMgbWpyLWxpdmUtcGxhY2Vob2xkZXItcHVsc2UgewogICAgMCUsCiAgICAxMDAlIHsKICAgICAgICBib3gtc2hhZG93OgogICAgICAgICAgICAwIDAgMCAxcHggcmdiYSgxMTgsIDIxNCwgMjU1LCAwLjM0KSwKICAgICAgICAgICAgMCAxMHB4IDI0cHggcmdiYSgwLCAwLCAwLCAwLjI0KTsKICAgIH0KICAgIDUwJSB7CiAgICAgICAgYm94LXNoYWRvdzoKICAgICAgICAgICAgMCAwIDAgMXB4IHJnYmEoMTE4LCAyMTQsIDI1NSwgMC41MiksCiAgICAgICAgICAgIDAgMCAwIDRweCByZ2JhKDExOCwgMjE0LCAyNTUsIDAuMTIpLAogICAgICAgICAgICAwIDEycHggMzBweCByZ2JhKDAsIDAsIDAsIDAuMjgpOwogICAgfQp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1saXZlLXBsYWNlaG9sZGVyPSJ0cnVlIl0gewogICAgYW5pbWF0aW9uOiBtanItbGl2ZS1wbGFjZWhvbGRlci1wdWxzZSAxLjlzIGVhc2UtaW4tb3V0IGluZmluaXRlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1saXZlLXBsYWNlaG9sZGVyPSJ0cnVlIl0gLm1qci10aHVtYiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbGl2ZS1wbGFjZWhvbGRlci13YXNoIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAtOCU7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDE7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTE1ZGVnLAogICAgICAgICAgICByZ2JhKDk4LCAxOTksIDI1NSwgMCkgMCUsCiAgICAgICAgICAgIHJnYmEoOTgsIDE5OSwgMjU1LCAwLjA4KSAzMCUsCiAgICAgICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNCkgNTAlLAogICAgICAgICAgICByZ2JhKDk4LCAxOTksIDI1NSwgMC4xMikgNzAlLAogICAgICAgICAgICByZ2JhKDk4LCAxOTksIDI1NSwgMCkgMTAwJQogICAgICAgICk7CiAgICBhbmltYXRpb246IG1qci1saXZlLXBsYWNlaG9sZGVyLXNoZWVuIDIuMnMgbGluZWFyIGluZmluaXRlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbGl2ZS1waWxsIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNnB4OwogICAgcmlnaHQ6IDZweDsKICAgIHotaW5kZXg6IDEyOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtaW4taGVpZ2h0OiAyNHB4OwogICAgcGFkZGluZzogMCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTAsIDE0LCAyMCwgMC43OCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDExOCwgMjE0LCAyNTUsIDAuMzQpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45Nik7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDFlbTsKICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMjQpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWxpdmUtcGlsbC1kb3QgewogICAgd2lkdGg6IDdweDsKICAgIGhlaWdodDogN3B4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiAjNzZkNmZmOwogICAgYm94LXNoYWRvdzogMCAwIDAgNHB4IHJnYmEoMTE4LCAyMTQsIDI1NSwgMC4xNik7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItbGl2ZS1wbGFjZWhvbGRlcj0idHJ1ZSJdIC5tanItYXNzZXQtc3RhdHVzLWRvdCB7CiAgICBhbmltYXRpb246IG1qci1saXZlLXBsYWNlaG9sZGVyLXB1bHNlIDEuOXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7Cn0KCi8qIEdyaWQgbG9hZGluZyBvdmVybGF5ICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkLWxvYWRpbmctb3ZlcmxheSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgIzAwMCAzNSUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZmZmKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjNweDsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnKTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDJweCk7Cn0KCkBrZXlmcmFtZXMgbWpyLXNrZWxldG9uLXNoaW1tZXIgewogICAgMCUgewogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDEyMCUgMDsKICAgIH0KICAgIDEwMCUgewogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjAlIDA7CiAgICB9Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkLXNrZWxldG9uLXNoaW1tZXIgewogICAgd2lsbC1jaGFuZ2U6IGJhY2tncm91bmQtcG9zaXRpb247Cn0KCi8qIEdlbmVyaWMgaGVhZGluZ3MgaW5zaWRlIHBhbmVsICovCi5tanItYXNzZXRzLW1hbmFnZXIgaDMsCi5tanItYXNzZXRzLW1hbmFnZXIgaDQgewogICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMWVtOwp9CgovKiBQYW5lbHMgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXBhbmVsIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1sZyk7CiAgICBib3gtc2hhZG93OiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtYm94LXNoYWRvdywgMCA4cHggMjRweCByZ2JhKDAsIDAsIDAsIDAuMjUpKTsKfQoKLyogVG9vbGJhciAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdG9vbGJhciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIHBhZGRpbmc6IHZhcigtLW1qci1wYWQtbWQpOwp9CgovKiBCdXR0b25zICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG4gewogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMik7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1tZCk7CiAgICBwYWRkaW5nOiA3cHggMTBweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDEyMG1zIGVhc2UsIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLCB0cmFuc2Zvcm0gODBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDcwJSwgdmFyKC0tbWpyLWFjY2VudCkgMTAlKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWJ0bjphY3RpdmUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG46ZGlzYWJsZWQgewogICAgb3BhY2l0eTogMC41NTsKICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG4ubWpyLXByaW1hcnkgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNjAlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMTQlLCB2YXIoLS1tanItc3VyZmFjZS0yKSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG4gewogICAgLyogT3ZlcnJpZGUgaW5saW5lIHN0eWxlcyBpZiBwcmVzZW50ICovCiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTIpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbWQpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDcwJSwgdmFyKC0tbWpyLWFjY2VudCkgMTAlKTsKfQoKLyogSW5wdXRzIC8gc2VsZWN0cyAodXNlZCBpbnNpZGUgcG9ydGFsZWQgcG9wb3ZlcnMgdG9vKSAqLwoubWpyLWlucHV0LAoubWpyLXNlbGVjdCwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWlucHV0LAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItc2VsZWN0IHsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LWlucHV0LWJnLCByZ2JhKDAsIDAsIDAsIDAuMjUpKTsKICAgIGNvbG9yOiB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLW1kKTsKICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgZm9udC1zaXplOiAxM3B4OwogICAgb3V0bGluZTogbm9uZTsKICAgIHdpZHRoOiAxMDAlOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaW5wdXQ6OnBsYWNlaG9sZGVyIHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLW11dGVkKSA4MCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1pbnB1dDpmb2N1cywKLm1qci1zZWxlY3Q6Zm9jdXMsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pbnB1dDpmb2N1cywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXNlbGVjdDpmb2N1cyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2NSUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMjAlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItaW5wdXQsCi5tanItc2VsZWN0LAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaW5wdXQsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1zZWxlY3QgewogICAgLyogT3ZlcnJpZGUgaW5saW5lIHN0eWxlcyBpZiBwcmVzZW50ICovCiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LWlucHV0LWJnLCByZ2JhKDAsIDAsIDAsIDAuMjUpKTsKICAgIGNvbG9yOiB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLW1kKTsKICAgIHBhZGRpbmc6IDhweCAxMHB4Owp9CgovKiBUYWJzOiBvdmVycmlkZGVuIGFib3ZlIHdpdGggcXVldWUtbGlrZSBzdHlsZSAqLwoKLyogUmVtb3ZlZCByZWR1bmRhbnQgdGFiIGRlY2xhcmF0aW9ucyB0aGF0IHdlcmUgdXNpbmcgIWltcG9ydGFudCAqLwoKLyogTXV0ZWQgdGV4dCBoZWxwZXIgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW11dGVkIHsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQpOwp9CgovKiBHcmlkICsgY2FyZHMgKG92ZXJyaWRlIGlubGluZSBzdHlsZXMgZnJvbSBDYXJkLmpzKSAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyICNtanItYXNzZXRzLWdyaWQgewogICAgZ2FwOiAxMHB4ICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xKSAhaW1wb3J0YW50OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcikgIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnKSAhaW1wb3J0YW50OwogICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50OwogICAgbWluLXdpZHRoOiAwOwogICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDEyMG1zIGVhc2UsIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLCBib3gtc2hhZG93IDEyMG1zIGVhc2UgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQ6aG92ZXIsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSA1NSUsIHZhcigtLW1qci1ib3JkZXIpKSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWpyLWNhcmQtaG92ZXItY29sb3IpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiAwIDhweCAyMnB4IHJnYmEoMCwgMCwgMCwgMC4yNSkgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgaW1nLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCB2aWRlbywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRodW1iLW1lZGlhIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50OwogICAgb2JqZWN0LWZpdDogY292ZXIgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRodW1iIHsKICAgIHdpZHRoOiAxMDAlOwogICAgYXNwZWN0LXJhdGlvOiAxIC8gMTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA4MCUsIHRyYW5zcGFyZW50KTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi8qIEtlZXAgZ2VuZXJhdGlvbi10aW1lIGJhZGdlIHBpbm5lZCB0byB0aGUgdGh1bWJuYWlsIGNvcm5lciBhY3Jvc3MgZ3JpZC9mZWVkIHZhcmlhbnRzLgogICBUaGUgIWltcG9ydGFudCBvdmVycmlkZXMgYXJlIGludGVudGlvbmFsOiBHZW5UaW1lQmFkZ2UudnVlIHVzZXMgPHN0eWxlIHNjb3BlZD4gd2hvc2UKICAgaGFzaGVkIGNsYXNzIGhhcyB0aGUgc2FtZSBzcGVjaWZpY2l0eSBhcyBnbG9iYWwgc2VsZWN0b3JzLiBXaXRob3V0ICFpbXBvcnRhbnQsIGEKICAgY29uZmxpY3RpbmcgcnVsZSAoZS5nLiBmcm9tIGEgdGhlbWUgZXh0ZW5zaW9uIG9yIGFuIG9sZGVyIG5vbi1zY29wZWQgY29udGV4dCkgdGhhdCBzZXRzCiAgIGxlZnQ6MC90b3A6MCB3b3VsZCB3aW4uIGxlZnQ6YXV0byArIHRvcDphdXRvIGV4cGxpY2l0bHkgY2FuY2VsIGFueSBzdWNoIGFjY2lkZW50YWwgcmVzZXQuICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci10aHVtYiA+IC5tanItZ2VudGltZS1iYWRnZSwKLm1qci1ib3R0b20tZmVlZCAubWpyLXRodW1iID4gLm1qci1nZW50aW1lLWJhZGdlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OwogICAgcmlnaHQ6IDZweCAhaW1wb3J0YW50OwogICAgYm90dG9tOiA2cHggIWltcG9ydGFudDsKICAgIGxlZnQ6IGF1dG8gIWltcG9ydGFudDsKICAgIHRvcDogYXV0byAhaW1wb3J0YW50OwogICAgei1pbmRleDogMTAgIWltcG9ydGFudDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDJweCA2cHggIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IDRweCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjUpICFpbXBvcnRhbnQ7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpICFpbXBvcnRhbnQ7CiAgICBmb250LXdlaWdodDogODAwICFpbXBvcnRhbnQ7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMTVlbTsKICAgIHRleHQtc2hhZG93OgogICAgICAgIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuOSksCiAgICAgICAgMCAwIDEwcHggY29sb3ItbWl4KGluIHNyZ2IsIGN1cnJlbnRDb2xvciAzNSUsIHRyYW5zcGFyZW50KTsKfQoKLyogS2VlcCByYXRpbmcvdGFncyBiYWRnZXMgYW5jaG9yZWQgZXZlbiB3aGVuIHNjb3BlZCBWdWUgc3R5bGVzIGFyZSBub3QgYXBwbGllZCBhZnRlciByZWxvYWQuCiAgIERvIG5vdCBmb3JjZSBkaXNwbGF5IGhlcmUgc28gZ3JpZCB2aXNpYmlsaXR5IHRvZ2dsZXMgKC5tanItc2hvdy1iYWRnZXMtKikgc3RpbGwgY29udHJvbCBzaG93L2hpZGUuICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci10aHVtYiA+IC5tanItcmF0aW5nLWJhZGdlLAoubWpyLWJvdHRvbS1mZWVkIC5tanItdGh1bWIgPiAubWpyLXJhdGluZy1iYWRnZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKICAgIHRvcDogNnB4ICFpbXBvcnRhbnQ7CiAgICByaWdodDogNnB4ICFpbXBvcnRhbnQ7CiAgICBsZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICBib3R0b206IGF1dG8gIWltcG9ydGFudDsKICAgIHotaW5kZXg6IDEwICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNTUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjI1KTsKICAgIHRleHQtc2hhZG93OiAwIDJweCA2cHggcmdiYSgwLCAwLCAwLCAwLjYpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGh1bWIgPiAubWpyLXRhZ3MtYmFkZ2UsCi5tanItYm90dG9tLWZlZWQgLm1qci10aHVtYiA+IC5tanItdGFncy1iYWRnZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKICAgIGxlZnQ6IDZweCAhaW1wb3J0YW50OwogICAgYm90dG9tOiA2cHggIWltcG9ydGFudDsKICAgIHJpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICB0b3A6IGF1dG8gIWltcG9ydGFudDsKICAgIHotaW5kZXg6IDEwICFpbXBvcnRhbnQ7CiAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDU2cHgpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpOwogICAgYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRodW1iLXBsYXkgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBkaXNwbGF5OiBncmlkOwogICAgcGxhY2UtaXRlbXM6IGNlbnRlcjsKICAgIGZvbnQtc2l6ZTogMjhweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuOSk7CiAgICB0ZXh0LXNoYWRvdzogMCAwIDEwcHggcmdiYSgwLDAsMCwwLjcpOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDEyMG1zIGVhc2U7Cn0KCi8qIOKUgOKUgOKUgCBIb3ZlciBpbmZvIG92ZXJsYXkgKHBvc2l0aXZlIHByb21wdCArIGdlbiB0aW1lKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgU2xpZGVzIHVwIGZyb20gdGhlIGJvdHRvbSBvZiAubWpyLXRodW1iIG9uIGNhcmQgaG92ZXIuCiAgIHBvaW50ZXItZXZlbnRzOiBub25lICDihpIgbmV2ZXIgYmxvY2tzIHZpZGVvIG1vdXNlZW50ZXIgLyBwbGF5LW9uLWhvdmVyLgogICB6LWluZGV4OiAyICAgICAgICAgICDihpIgc2l0cyBhYm92ZSB0aGUgdGh1bWJuYWlsIGltYWdlLCBiZWxvdyB0aGUgcGxheSBpY29uLgogICBDb250cm9sbGVkIGJ5IHRoZSAubWpyLXNob3ctaG92ZXItaW5mbyBjbGFzcyBvbiB0aGUgZ3JpZCBjb250YWluZXIsIHdoaWNoCiAgIGlzIHRvZ2dsZWQgdmlhIHRoZSAiU2hvdyBwcm9tcHQgb24gaG92ZXIiIHNldHRpbmcuCiAgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZC1ob3Zlci1pbmZvIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGJvdHRvbTogMDsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIHBhZGRpbmc6IDIycHggOHB4IDdweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHRyYW5zcGFyZW50IDAlLCByZ2JhKDAsIDAsIDAsIDAuNzgpIDEwMCUpOwogICAgY29sb3I6ICNmZmY7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBsaW5lLWhlaWdodDogMS40OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDVweCk7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDE1MG1zIGVhc2UsIHRyYW5zZm9ybSAxNTBtcyBlYXNlOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDNweDsKICAgIHotaW5kZXg6IDI7Cn0KLyogT25seSByZXZlYWwgb24gaG92ZXIgd2hlbiB0aGUgc2V0dGluZyBpcyBlbmFibGVkIChjbGFzcyBvbiBncmlkIGNvbnRhaW5lcikgKi8KLm1qci1ncmlkLm1qci1zaG93LWhvdmVyLWluZm8gLm1qci1jYXJkOmhvdmVyIC5tanItY2FyZC1ob3Zlci1pbmZvIHsKICAgIG9wYWNpdHk6IDE7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7Cn0KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQtaG92ZXItaW5mbyAubWpyLWhvdmVyLXByb21wdCB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgZGlzcGxheTogLXdlYmtpdC1ib3g7CiAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7CiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsOwogICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgIG9wYWNpdHk6IDAuOTsKICAgIGZvbnQtc2l6ZTogOS41cHg7Cn0KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQtaG92ZXItaW5mbyAubWpyLWhvdmVyLWdlbnRpbWUgewogICAgY29sb3I6IHJnYmEoMjU1LCAyMTAsIDEyMCwgMC45NSk7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgZm9udC1zaXplOiA5cHg7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMmVtOwp9CkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7CiAgICAubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZC1ob3Zlci1pbmZvIHsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDBtczsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICB9Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLW1ldGEgewogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBmb250LXNpemU6IDExcHg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLWZpbGVuYW1lIHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIG1pbi13aWR0aDogMDsKICAgIG1hcmdpbi1ib3R0b206IDJweDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQtZGV0YWlscyB7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICBvcGFjaXR5OiAwLjg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLWZpbGVuYW1lLXRleHQgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG1pbi13aWR0aDogMDsKfQoKLyogUmF0aW5nICYgVGFncyBFZGl0b3JzICovCkBrZXlmcmFtZXMgZmFkZUluIHsKICAgIGZyb20gewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00cHgpOwogICAgfQogICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgfQp9Ci8qKgogKiBBcmNoaXZlZCBDU1MgU3R5bGVzIC0gUmF0aW5nIGFuZCBUYWdzCiAqIFRoZXNlIHN0eWxlcyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGVtZS1jb21meS5jc3MKICovCgovKiBBbmltYXRpb25zICovCkBrZXlmcmFtZXMgc2xpZGVJblJpZ2h0IHsKICAgIGZyb20gewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgfQogICAgdG8gewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgfQp9CgovKiBQb3BvdmVycyAqLwoubWpyLXJhdGluZy1wb3BvdmVyLAoubWpyLXRhZ3MtcG9wb3ZlciB7CiAgICBhbmltYXRpb246IGZhZGVJbiAwLjJzIGVhc2U7Cn0KCi5tanItcmF0aW5nLXBvcG92ZXIsCi5tanItdGFncy1wb3BvdmVyIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZywgMC41cmVtKTsKICAgIGJveC1zaGFkb3c6IDAgMTJweCAyOHB4IHJnYmEoMCwwLDAsMC4zNSk7CiAgICBwYWRkaW5nOiA4cHg7Cn0KCi8qIFJhdGluZyBFZGl0b3IgKi8KLm1qci1yYXRpbmctZWRpdG9yIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNHB4OwogICAgcGFkZGluZzogMnB4Owp9CgoubWpyLXJhdGluZy1zdGFyIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBmb250LXNpemU6IDIwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBwYWRkaW5nOiA0cHggNnB4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMTIwbXMgZWFzZSwgYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLCBib3JkZXItY29sb3IgMTIwbXMgZWFzZSwgY29sb3IgMTIwbXMgZWFzZTsKfQoKLm1qci1yYXRpbmctc3Rhcjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpIDM1JSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbWZ5LW1lbnUtc2Vjb25kYXJ5LWJnLCAjMzMzKSA2NSUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1yYXRpbmctZWRpdG9yIC5tanItcmF0aW5nLXN0YXI6aG92ZXIgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpICFpbXBvcnRhbnQ7Cn0KCi5tanItcmF0aW5nLWVkaXRvciAubWpyLXJhdGluZy1zdGFyOmFjdGl2ZSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTUpICFpbXBvcnRhbnQ7Cn0KCi8qIFRhZ3MgRWRpdG9yICovCi5tanItdGFncy1lZGl0b3IgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDhweDsKICAgIHBhZGRpbmc6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgOTIlLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLXNtKTsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjM1KTsKICAgIG1pbi13aWR0aDogMjUwcHg7CiAgICBtYXgtd2lkdGg6IG1pbigzNTBweCwgY2FsYygxMDB2dyAtIDIwcHgpKTsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0Owp9CgoubWpyLXRhZ3MtZWRpdG9yLmlzLWRpc2FibGVkIHsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgb3BhY2l0eTogMC43Owp9CgoubWpyLXRhZ3MtZGlzcGxheSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgZ2FwOiA2cHg7CiAgICBtaW4taGVpZ2h0OiAzMnB4Owp9CgoubWpyLXRhZ3MtZW1wdHkgewogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCk7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KCi5tanItdGFnLWNoaXAgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDI0JSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDQwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiB2YXIoLS1tanItdGFnLWNvbG9yKTsKICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7Cn0KCi5tanItdGFnLWNoaXAtcmVtb3ZlIHsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgYm9yZGVyOiAwOwogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICBjb2xvcjogaW5oZXJpdDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIG9wYWNpdHk6IDAuNzsKfQoKLm1qci10YWctY2hpcC1yZW1vdmU6ZGlzYWJsZWQgewogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgoubWpyLXRhZ3MtaW5wdXQtd3JhcCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5tanItdGFnLWlucHV0IHsKICAgIHdpZHRoOiAxMDAlOwogICAgcGFkZGluZzogNnB4IDhweDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA3NSUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcpOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci10YWctaW5wdXQ6Zm9jdXMgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDg4JSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHZhcigtLW1qci1hY2NlbnQpICFpbXBvcnRhbnQ7Cn0KCi5tanItdGFnLWNoaXA6aG92ZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDM0JSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItdGFnLWNvbG9yKSA2MCUsIHZhcigtLW1qci1ib3JkZXIpKSAhaW1wb3J0YW50Owp9CgoubWpyLXRhZ3MtZHJvcGRvd24gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAxMDAlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgbWFyZ2luLXRvcDogNHB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDkyJSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBtYXgtaGVpZ2h0OiAxNTBweDsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICB6LWluZGV4OiAxMDAwOwp9CgoubWpyLXRhZy1zdWdnZXN0aW9uIHsKICAgIHBhZGRpbmc6IDZweCA4cHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGNvbG9yOiB2YXIoLS1tanItdGFnLWNvbG9yKTsKICAgIGZvbnQtc2l6ZTogMTJweDsKfQoKLm1qci10YWctc3VnZ2VzdGlvbi5pcy1hY3RpdmUsCi5tanItdGFnLXN1Z2dlc3Rpb246aG92ZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDI4JSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7Cn0KCi8qIEJhZGdlcyBJbnRlcmFjdGl2ZSAqLwoubWpyLXJhdGluZy1iYWRnZSwKLm1qci10YWdzLWJhZGdlIHsKICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7Cn0KCi5tanItcmF0aW5nLWJhZGdlIHsKICAgIGNvbG9yOiB2YXIoLS1tanItcmF0aW5nLWNvbG9yKSAhaW1wb3J0YW50Owp9CgoubWpyLXRhZ3MtYmFkZ2UgewogICAgY29sb3I6IHZhcigtLW1qci10YWctY29sb3IpICFpbXBvcnRhbnQ7Cn0KCi5tanItcmF0aW5nLWJhZGdlOmhvdmVyLAoubWpyLXRhZ3MtYmFkZ2U6aG92ZXIgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTsKICAgIGJveC1zaGFkb3c6IDAgNHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuNSk7Cn0KCi8qIFNjcm9sbGJhciBmb3IgdGFncyBkcm9wZG93biAqLwoubWpyLXRhZ3MtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiA2cHg7Cn0KCi5tanItdGFncy1kcm9wZG93bjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDY1JSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyLXJhZGl1czogM3B4Owp9CgoubWpyLXRhZ3MtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItdGFnLWNvbG9yKSA0OCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKfQoKLm1qci10YWdzLWRyb3Bkb3duOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXRhZy1jb2xvcikgNjUlLCB2YXIoLS1tanItYm9yZGVyKSk7Cn0KCi8qIFNpZGViYXIgKGNhbiBiZSBsZWZ0IG9yIHJpZ2h0KSAqLwoubWpyLXNpZGViYXIgewogICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKfQoKLm1qci1zaWRlYmFyLmlzLW9wZW4gewogICAgLyogQm9yZGVyIGlzIHNldCBkeW5hbWljYWxseSBiYXNlZCBvbiBwb3NpdGlvbiAqLwp9CgoubWpyLXNpZGViYXIgLm1qci1zaWRlYmFyLWhlYWRlciB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0yLCAjMzMzKTsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpKTsKfQoKLm1qci1zaWRlYmFyIC5tanItc2lkZWJhci1jb250ZW50IHsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEsICMyYTJhMmEpOwp9CgoubWpyLXNpZGViYXIgLm1qci1zaWRlYmFyLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiA4cHg7Cn0KCi5tanItc2lkZWJhciAubWpyLXNpZGViYXItY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMpOwp9CgoubWpyLXNpZGViYXIgLm1qci1zaWRlYmFyLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKfQoKLm1qci1zaWRlYmFyIC5tanItc2lkZWJhci1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7Cn0KCi8qIEN1c3RvbSBSb290cyBQb3BvdmVyIFN0eWxpbmcgKi8KLm1qci1jdXN0b20tcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDMwMHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSwgdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSkpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgdmFyKC0tYm9yZGVyLWNvbG9yLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKSk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcsIDAuNXJlbSk7CiAgICBib3gtc2hhZG93OiAwIDEycHggMjhweCByZ2JhKDAsMCwwLDAuMzUpOwogICAgei1pbmRleDogdmFyKC0tbWpyLXBvcG92ZXItei1pbmRleCk7CiAgICBwYWRkaW5nOiAxMnB4Owp9CgoubWpyLWN1c3RvbS1wb3BvdmVyIC5tanItcG9wb3Zlci1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLWN1c3RvbS1wb3BvdmVyIC5tanItcG9wb3Zlci1yb3c6bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tYm90dG9tOiAwOwp9CgoubWpyLWN1c3RvbS1wb3BvdmVyIC5tanItcG9wb3Zlci1sYWJlbCB7CiAgICB3aWR0aDogNjBweDsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHZhcigtLWRlc2NyaXAtdGV4dCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSkpOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDUwMDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLXNlbGVjdCB7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWN1c3RvbS1wb3BvdmVyIC5tanItYnRuIHsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IDVweDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLWJ0bjpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1yaWdodDogMDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLWJ0bi5tanItcHJpbWFyeSB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMTglLCB2YXIoLS1tanItc3VyZmFjZS0yKSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLWJ0bi5tanItcHJpbWFyeTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMjUlLCB2YXIoLS1tanItc3VyZmFjZS0yKSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA4MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1zaWRlYmFyIC5tanItc2lkZWJhci1zZWN0aW9uIHsKICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7Cn0KCi5tanItc2lkZWJhciAubWpyLXNpZGViYXItc2VjdGlvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMykgIWltcG9ydGFudDsKfQoKLyogSW5saW5lIFNpZGViYXIgKHdpZHRoLWJhc2VkIHRyYW5zaXRpb25zIGxpa2UgYXJjaGl2ZWQgdmVyc2lvbikgKi8KLm1qci1pbmxpbmUtc2lkZWJhciB7CiAgICB3aWR0aDogMDsKICAgIG1pbi13aWR0aDogMDsKICAgIG1heC13aWR0aDogNDgwcHg7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzJhMmEyYSk7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIHRyYW5zaXRpb246IHdpZHRoIDAuM3MgZWFzZSwgbWluLXdpZHRoIDAuM3MgZWFzZTsKfQoKLm1qci1pbmxpbmUtc2lkZWJhci5pcy1vcGVuIHsKICAgIHdpZHRoOiA0MDBweDsKICAgIG1pbi13aWR0aDogMjYwcHg7Cn0KCi8qIFNwYWNlIGJldHdlZW4gc2lkZWJhciBhbmQgZ3JpZCAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tYnJvd3NlIHsKICAgIGdhcDogMDsKfQoKLyogQm9yZGVyIGJhc2VkIG9uIHBvc2l0aW9uICovCi5tanItaW5saW5lLXNpZGViYXJbZGF0YS1wb3NpdGlvbj0ibGVmdCJdIHsKICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikpOwp9CgoubWpyLWlubGluZS1zaWRlYmFyW2RhdGEtcG9zaXRpb249InJpZ2h0Il0gewogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpKTsKfQoKLyogU2lkZWJhciBwbGFjZWhvbGRlciAqLwoubWpyLXNpZGViYXItcGxhY2Vob2xkZXIgewogICAgcGFkZGluZzogMjBweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMjU1LDI1NSwyNTUsMC42NSkpOwogICAgZm9udC1zaXplOiAxNHB4OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLyogPT09PT09PT09PSBWaWV3ZXIgQ29tcG9uZW50ID09PT09PT09PT0gKi8KLm1qci12aWV3ZXItb3ZlcmxheSB7CiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICB0b3A6IDA7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICBib3R0b206IDA7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOTUpOwogICAgLyogU2l0IGFib3ZlIE1GViAoMTAwMDApIHNvIHRoZSBmdWxsIHZpZXdlciBhbHdheXMgY292ZXJzIHRoZSBmbG9hdGluZyBwYW5lbCAqLwogICAgei1pbmRleDogMTAwMDE7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwp9Ci8qIEZhZGUtaW46IGFuaW1hdGlvbiByZS10cmlnZ2VycyBlYWNoIHRpbWUgSlMgc3dpdGNoZXMgZGlzcGxheSBiYWNrIHRvIGZsZXggKi8KLm1qci12aWV3ZXItb3ZlcmxheVtzdHlsZSo9ImZsZXgiXSB7CiAgICBhbmltYXRpb246IG1qci1mYWRlLWluIDAuMThzIGVhc2Utb3V0Owp9CgpAa2V5ZnJhbWVzIG1qci1mYWRlLWluIHsKICAgIGZyb20geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHNjYWxlKDAuOTk1KTsgfQogICAgdG8gICB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogc2NhbGUoMSk7IH0KfQoKLm1qci12aWV3ZXItaGVhZGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgcGFkZGluZzogMTJweCAyMHB4OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE3MGRlZywgcmdiYSgyNCwgMjcsIDMzLCAwLjk2KSwgcmdiYSgxNywgMTksIDI1LCAwLjk3KSk7CiAgICBib3JkZXItYm90dG9tOiAwLjhweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMik7CiAgICBjb2xvcjogd2hpdGU7Cn0KCi5tanItdmlld2VyLWZpbGVuYW1lIHsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICBtYXgtd2lkdGg6IDQwMHB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci12aWV3ZXItbW9kZS1idXR0b25zIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBnYXA6IDZweDsKfQoKLm1qci12aWV3ZXItbW9kZS1idXR0b25zIGJ1dHRvbiB7CiAgICBwYWRkaW5nOiA0cHggMTJweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjA2LCAyMTEsIDIxOCwgMC4xKSwgcmdiYSgyMDYsIDIxMSwgMjE4LCAwLjAzKSk7CiAgICBib3JkZXI6IDAuOHB4IHNvbGlkIHJnYmEoMTk2LCAyMDIsIDIxMCwgMC4zKTsKICAgIGNvbG9yOiByZ2JhKDIzMCwgMjMzLCAyMzgsIDAuOTUpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgdHJhbnNpdGlvbjogYWxsIDAuMTZzOwp9CgoubWpyLXZpZXdlci1tb2RlLWJ1dHRvbnMgYnV0dG9uOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjEwLCAyMTQsIDIyMCwgMC4xNCksIHJnYmEoMjEwLCAyMTQsIDIyMCwgMC4wNikpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIxNCwgMjE4LCAyMjQsIDAuNDIpOwp9CgovKiBWaWV3ZXIgY2xvc2UgYnV0dG9uIHBpbm5lZCB0byBvdmVybGF5IGNvcm5lciAqLwoubWpyLXZpZXdlci1jbG9zZSwKLm1qci12aWV3ZXItZnMgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMjYpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItd2lkdGg6IDAuOHB4ICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIwNiwgMjExLCAyMTgsIDAuMDgpLCByZ2JhKDIwNiwgMjExLCAyMTgsIDAuMDIpKSwKICAgICAgICByZ2JhKDIwLCAyMywgMjksIDAuOTQpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItY2xvc2UgewogICAgY29sb3I6ICNmZmY0ZjQgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMDUsIDgyLCA4MiwgMC41KSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyMDUsIDgyLCA4MiwgMC4zKSwgcmdiYSgyMDUsIDgyLCA4MiwgMC4xMikpLAogICAgICAgIHJnYmEoNTgsIDE4LCAxOCwgMC45NCkgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDIxOSwgMjE5LCAwLjE2KSwgMCAwIDAgMXB4IHJnYmEoMjA1LCA4MiwgODIsIDAuMDgpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLWNsb3NlOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjM1LCAxMTAsIDExMCwgMC4zOCksIHJnYmEoMjM1LCAxMTAsIDExMCwgMC4xNikpLAogICAgICAgIHJnYmEoNzAsIDE4LCAxOCwgMC45NykgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMzUsIDEzOCwgMTM4LCAwLjY0KSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci1mczpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMTQpLCByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMDYpKSwKICAgICAgICByZ2JhKDIzLCAyNiwgMzIsIDAuOTUpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjE0LCAyMTgsIDIyNCwgMC4zOCkgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItY2xvc2UgLnBpIHsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLXZpZXdlci1jb250ZW50IHsKICAgIGZsZXg6IDE7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKfQoKLm1qci12aWV3ZXItc2luZ2xlLAoubWpyLXZpZXdlci1hYiwKLm1qci12aWV3ZXItc2lkZWJ5c2lkZSB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKfQoKLm1qci12aWV3ZXItc2luZ2xlIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Cn0KCi5tanItdmlld2VyLXNpbmdsZSBpbWcsCi5tanItdmlld2VyLXNpbmdsZSB2aWRlbyB7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBtYXgtaGVpZ2h0OiAxMDAlOwogICAgb2JqZWN0LWZpdDogY29udGFpbjsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzOwp9CgoubWpyLXZpZXdlci1hYiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBub25lOwp9CgoubWpyLXZpZXdlci1zaWRlYnlzaWRlIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgZ2FwOiAycHg7Cn0KCi5tanItdmlld2VyLXNpZGVieXNpZGUgPiBkaXYgewogICAgZmxleDogMTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDUpOwp9CgoubWpyLXZpZXdlci1zaWRlYnlzaWRlIGltZywKLm1qci12aWV3ZXItc2lkZWJ5c2lkZSB2aWRlbyB7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBtYXgtaGVpZ2h0OiAxMDAlOwogICAgb2JqZWN0LWZpdDogY29udGFpbjsKfQoKLm1qci12aWV3ZXItZm9vdGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBwYWRkaW5nOiAxMnB4IDIwcHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOCk7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgY29sb3I6IHdoaXRlOwogICAgZ2FwOiAyMHB4Owp9CgoubWpyLXZpZXdlci1mb290ZXIgYnV0dG9uIHsKICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7CiAgICBjb2xvcjogd2hpdGU7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKfQoKLm1qci12aWV3ZXItZm9vdGVyIGJ1dHRvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7Cn0KCi5tanItdmlld2VyLW5hdiB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTRweDsKfQoKLm1qci12aWV3ZXItbmF2LWJ0biB7CiAgICB3aWR0aDogNDBweCAhaW1wb3J0YW50OwogICAgaGVpZ2h0OiA0MHB4ICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4ICFpbXBvcnRhbnQ7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuNDIpICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMTk0LCAyMDAsIDIwOCwgMC4xOCksIHJnYmEoMTk0LCAyMDAsIDIwOCwgMC4wNykpLAogICAgICAgIHJnYmEoMzQsIDM4LCA0NCwgMC45MikgIWltcG9ydGFudDsKICAgIGNvbG9yOiByZ2JhKDIzNCwgMjM2LCAyNDAsIDAuOTYpICFpbXBvcnRhbnQ7CiAgICBmb250LXNpemU6IDIwcHggIWltcG9ydGFudDsKICAgIGZvbnQtd2VpZ2h0OiA3MDAgIWltcG9ydGFudDsKICAgIGxpbmUtaGVpZ2h0OiAxICFpbXBvcnRhbnQ7CiAgICB0ZXh0LXNoYWRvdzogbm9uZTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjE0cyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDAuMTRzIGVhc2UsIGJvcmRlci1jb2xvciAwLjE0cyBlYXNlICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLW5hdi1idG46aG92ZXI6bm90KDpkaXNhYmxlZCkgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIxNCwgMjE4LCAyMjQsIDAuNTYpICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjA3LCAyMTIsIDIxOSwgMC4yKSwgcmdiYSgyMDcsIDIxMiwgMjE5LCAwLjEpKSwKICAgICAgICByZ2JhKDM5LCA0MywgNDksIDAuOTQpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKfQoKLm1qci12aWV3ZXItbmF2LWJ0bjphY3RpdmU6bm90KDpkaXNhYmxlZCkgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApIHNjYWxlKDAuOTgpOwogICAgZmlsdGVyOiBub25lOwp9CgoubWpyLXZpZXdlci1uYXYtYnRuOmRpc2FibGVkIHsKICAgIG9wYWNpdHk6IDAuMzQgIWltcG9ydGFudDsKICAgIGZpbHRlcjogZ3JheXNjYWxlKDAuMjUpOwogICAgYm94LXNoYWRvdzogbm9uZTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci1pbmRleCB7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBtaW4td2lkdGg6IDc0cHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDRlbTsKICAgIGNvbG9yOiByZ2JhKDIyNiwgMjI4LCAyMzMsIDAuOTQpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgxOTcsIDIwMywgMjExLCAwLjE1KSwgcmdiYSgxOTcsIDIwMywgMjExLCAwLjA2KSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE5NywgMjAzLCAyMTEsIDAuMzQpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBwYWRkaW5nOiA1cHggMTFweDsKICAgIHRleHQtc2hhZG93OiBub25lOwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpOwp9CgoubWpyLXZpZXdlci1wbGF5ZXJiYXIgewogICAgYm9yZGVyLXJhZGl1czogMThweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTk0LCAyMDAsIDIwOCwgMC4xNik7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgdG9wIGxlZnQsIHJnYmEoOTAsIDE1MCwgMjU1LCAwLjA4KSwgdHJhbnNwYXJlbnQgMzYlKSwKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTYwZGVnLCByZ2JhKDIwLCAyNCwgMzAsIDAuOTQpLCByZ2JhKDEyLCAxNSwgMjEsIDAuOTgpKTsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpLAogICAgICAgIDAgMTZweCAzNnB4IHJnYmEoMCwgMCwgMCwgMC4yMik7CiAgICAvKiBvdmVyZmxvdyBtdXN0IHN0YXkgdmlzaWJsZSBzbyB0aGUgc2VlayBydWxlciB0aWNrcy9sYWJlbHMgKHRvcDotMTZweCAvIHRvcDotMzRweCkKICAgICAgIHRoYXQgYXJlIGFic29sdXRlbHkgcG9zaXRpb25lZCBhYm92ZSB0aGUgc2VlayBiYXIgYXJlIG5vdCBjbGlwcGVkLiAqLwogICAgb3ZlcmZsb3c6IHZpc2libGU7Cn0KCi5tanItdmlld2VyLXRvb2xzIHsKICAgIGFsaWduLWl0ZW1zOiBzdGFydDsKICAgIGp1c3RpZnktY29udGVudDogc3RyZXRjaDsKICAgIGdhcDogOHB4Owp9CgoubWpyLXZpZXdlci1oZWFkZXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgoubWpyLXZpZXdlci1oZWFkZXI6OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMThweDsKICAgIHJpZ2h0OiAxOHB4OwogICAgdG9wOiA0NHB4OwogICAgaGVpZ2h0OiAxcHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHRyYW5zcGFyZW50LCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpLCB0cmFuc3BhcmVudCk7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIG9wYWNpdHk6IDAuNzsKfQoKLm1qci12aWV3ZXItaGVhZGVyLW1ldGEgewogICAgbWluLWhlaWdodDogMzBweDsKICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjAzNSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDYpOwp9CgoubWpyLXZpZXdlci1oZWFkZXItdG9wIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBwYWRkaW5nLXJpZ2h0OiA4NHB4OwogICAgcGFkZGluZy1sZWZ0OiAxMnB4Owp9CgoubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tbGVmdCB7CiAgICBkaXNwbGF5OiBub25lOwogICAgZmxleDogMSAxIDA7CiAgICBtaW4td2lkdGg6IDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tY2VudGVyIHsKICAgIG1pbi13aWR0aDogMDsKICAgIGZsZXg6IDEgMSBhdXRvOwp9CgoubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tcmlnaHQgewogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgIGZsZXg6IDEgMSAwOwogICAgbWluLXdpZHRoOiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci12aWV3ZXItdGl0bGUtd3JhcCB7CiAgICB3aWR0aDogYXV0bzsKICAgIG1pbi13aWR0aDogMDsKICAgIG1heC13aWR0aDogbWluKDEwMCUsIGNhbGMoMTAwdncgLSAyMjBweCkpOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogMTJweDsKfQoKLm1qci12aWV3ZXItdGl0bGUtbGluZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tanItdmlld2VyLWZpbGVuYW1lIHsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMWVtOwogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW46IDAgYXV0bzsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLm1qci12aWV3ZXItYmFkZ2VzIHsKICAgIGdhcDogNHB4Owp9CgoubWpyLXZpZXdlci10aXRsZS1saW5lIC5tanItdmlld2VyLWJhZGdlcyB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGZsZXgtd3JhcDogbm93cmFwOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXZpZXdlci1oZWFkZXItbWV0YS0tbGVmdCB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICB3aWR0aDogZml0LWNvbnRlbnQ7CiAgICBtYXgtd2lkdGg6IDEwMCU7Cn0KCi5tanItdmlld2VyLWhlYWRlci1tZXRhLS1sZWZ0OmVtcHR5IHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5tanItdmlld2VyLWhlYWRlci1tZXRhLS1yaWdodCB7CiAgICBqdXN0aWZ5LXNlbGY6IGVuZDsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKICAgIG1heC13aWR0aDogMTAwJTsKfQoKLm1qci12aWV3ZXItbW9kZS1idXR0b25zIHsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgcGFkZGluZzogM3B4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDQpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjA0KTsKfQoKLm1qci12aWV3ZXItdG9vbHMtZGVjayB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC13cmFwOiBub3dyYXA7CiAgICBnYXA6IDhweDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBtaW4td2lkdGg6IDA7CiAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluOwp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtaW4td2lkdGg6IGF1dG87CiAgICBtaW4taGVpZ2h0OiAwOwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4wOCk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LDI1NSwyNTUsMC4wNSksIHJnYmEoMjU1LDI1NSwyNTUsMC4wMikpLAogICAgICAgIHJnYmEoMTAsIDEyLCAxNiwgMC4yNCk7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjA0KSwKICAgICAgICAwIDZweCAxNnB4IHJnYmEoMCwwLDAsMC4xMik7CiAgICBwYWRkaW5nOiA1cHggNnB4OwogICAgZmxleDogMCAwIGF1dG87Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsOjpiZWZvcmUgewogICAgY29udGVudDogIiI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMCAwIGF1dG8gMDsKICAgIGhlaWdodDogMXB4OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB0cmFuc3BhcmVudCwgcmdiYSgyNTUsMjU1LDI1NSwwLjE2KSwgdHJhbnNwYXJlbnQpOwogICAgb3BhY2l0eTogMC43OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsLWhlYWQgewogICAgZGlzcGxheTogbm9uZTsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtaGVhZGluZyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMXB4OwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbC1leWVicm93IHsKICAgIGZvbnQtc2l6ZTogOXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjE0ZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC40Nik7Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsLXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMWVtOwogICAgY29sb3I6IHJnYmEoMjQ4LDI1MCwyNTIsMC45Nik7Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsLWJvZHkgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIGdhcDogNnB4OwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbFtkYXRhLXBhbmVsPSJncmFkZSJdIC5tanItdmlld2VyLXRvb2xzLXBhbmVsLWJvZHkgewogICAgZGlzcGxheTogZmxleDsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWxbZGF0YS1wYW5lbD0ib3ZlcmxheSJdIC5tanItdmlld2VyLXRvb2xzLXBhbmVsLWJvZHkgewogICAgZGlzcGxheTogZmxleDsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWxbZGF0YS1wYW5lbD0iaW5zcGVjdCJdIC5tanItdmlld2VyLXRvb2xzLXBhbmVsLWJvZHksCi5tanItdmlld2VyLXRvb2xzLXBhbmVsW2RhdGEtcGFuZWw9ImFjdGlvbnMiXSAubWpyLXZpZXdlci10b29scy1wYW5lbC1ib2R5LAoubWpyLXZpZXdlci10b29scy1wYW5lbFtkYXRhLXBhbmVsPSJpbmZvIl0gLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtYm9keSB7CiAgICBkaXNwbGF5OiBmbGV4Owp9CgoubWpyLXZpZXdlci10b29scy1ncm91cCB7CiAgICB3aWR0aDogYXV0bzsKICAgIG1pbi1oZWlnaHQ6IDMwcHg7CiAgICBwYWRkaW5nOiA1cHggN3B4OwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgZ2FwOiA2cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMTIpOwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsMjU1LDI1NSwwLjAzNSksIHJnYmEoMjU1LDI1NSwyNTUsMC4wMikpLAogICAgICAgIHJnYmEoMTAsIDEyLCAxNiwgMC4xOCk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4wMyk7CiAgICBtaW4td2lkdGg6IGZpdC1jb250ZW50Owp9CgoubWpyLXZpZXdlci10b29scy1ncm91cC1sYWJlbCB7CiAgICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjc1KTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjE1cHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDEwcHg7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW3N0eWxlKj0iLS1tanItZ3JvdXAtYWNjZW50Il0gLm1qci12aWV3ZXItdG9vbHMtZ3JvdXAtbGFiZWwgewogICAgY29sb3I6IHJnYmEodmFyKC0tbWpyLWdyb3VwLWFjY2VudCksIDAuOTApOwp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtzdHlsZSo9Ii0tbWpyLWdyb3VwLWFjY2VudCJdIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1tanItZ3JvdXAtYWNjZW50KSwgMC4zNSk7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9ImNoYW5uZWwiXSAubWpyLXZpZXdlci10b29scy1ncm91cC1sYWJlbCwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iYW5hbHlzaXMiXSAubWpyLXZpZXdlci10b29scy1ncm91cC1sYWJlbCwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1ndWlkZXMiXSAubWpyLXZpZXdlci10b29scy1ncm91cC1sYWJlbCwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1pbnNwZWN0Il0gLm1qci12aWV3ZXItdG9vbHMtZ3JvdXAtbGFiZWwgewogICAgbWluLXdpZHRoOiA0MnB4Owp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbFtkYXRhLXBhbmVsPSJvdmVybGF5Il0gLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1ndWlkZXMiXSB7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1ndWlkZXMiXSwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1pbnNwZWN0Il0gewogICAgZmxleC13cmFwOiB3cmFwOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iY2hhbm5lbCJdLAoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJleHBvc3VyZSJdLAoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJnYW1tYSJdLAoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJhbmFseXNpcyJdLAoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJjb21wYXJlIl0sCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9ImF1ZGlvLXZpeiJdIHsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKfQoKLm1qci12aWV3ZXItdG9vbHMtYWN0aW9ucywKLm1qci12aWV3ZXItdG9vbHMtbWV0YSB7CiAgICB3aWR0aDogYXV0bzsKICAgIG1pbi1oZWlnaHQ6IDMwcHg7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgcGFkZGluZzogNXB4IDdweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDYpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjAzKTsKfQoKLm1qci12aWV3ZXItdG9vbHMtYWN0aW9ucyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIGdhcDogNnB4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXZpZXdlci10b29scy1tZXRhIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiA2cHg7CiAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItdmlld2VyLXRvb2xzLWFjdGlvbi0tcHJpbWFyeSB7CiAgICBtYXJnaW4tbGVmdDogMDsKfQoKLm1qci12aWV3ZXItdG9vbHMtYWN0aW9uICsgLm1qci12aWV3ZXItdG9vbHMtYWN0aW9uIHsKICAgIG1hcmdpbi1sZWZ0OiA0cHg7Cn0KCi5tanItdmlld2VyLXRvb2xzLXNlbGVjdCB7CiAgICBtaW4taGVpZ2h0OiAyNHB4Owp9CgoubWpyLXZpZXdlci10b29scy1yYW5nZS1pbnB1dCB7CiAgICB3aWR0aDogOTJweCAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29scy1yYW5nZSBzcGFuIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKfQoKQG1lZGlhIChtYXgtd2lkdGg6IDE0ODBweCkgewogICAgLm1qci12aWV3ZXItdG9vbHMtZGVjayB7CiAgICAgICAgZ2FwOiA2cHg7CiAgICB9Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiAxMjIwcHgpIHsKICAgIC5tanItdmlld2VyLWhlYWRlci10b3AgewogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiA4NHB4OwogICAgICAgIHBhZGRpbmctbGVmdDogMDsKICAgIH0KCiAgICAubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tY2VudGVyLAogICAgLm1qci12aWV3ZXItaGVhZGVyLWFyZWEtLXJpZ2h0IHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIH0KCiAgICAubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tY2VudGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4OiAxIDEgMTAwJTsKICAgIH0KCiAgICAubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tcmlnaHQgewogICAgICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgICAgICAgdHJhbnNmb3JtOiBub25lOwogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4OiAxIDEgMTAwJTsKICAgIH0KCiAgICAubWpyLXZpZXdlci1oZWFkZXItbWV0YS0tcmlnaHQgewogICAgICAgIGp1c3RpZnktc2VsZjogY2VudGVyOwogICAgfQoKICAgIC5tanItdmlld2VyLXRvb2xzLWRlY2sgewogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBvdmVyZmxvdy14OiB2aXNpYmxlOwogICAgfQoKICAgIC5tanItdmlld2VyLXRvb2xzLXBhbmVsLAogICAgLm1qci12aWV3ZXItdG9vbHMtYWN0aW9ucywKICAgIC5tanItdmlld2VyLXRvb2xzLW1ldGEsCiAgICAubWpyLXZpZXdlci10b29scy1wYW5lbC1ib2R5IHsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB9CgogICAgLm1qci12aWV3ZXItdG9vbHMtbWV0YSB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgfQp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJjb21wYXJlIl1bZGF0YS1hY3RpdmU9IjEiXSB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLW1qci1ncm91cC1hY2NlbnQpLCAwLjEwKTsKICAgIGJvcmRlci1sZWZ0LWNvbG9yOiByZ2JhKHZhcigtLW1qci1ncm91cC1hY2NlbnQpLCAwLjYwKTsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCByZ2JhKHZhcigtLW1qci1ncm91cC1hY2NlbnQpLCAwLjIyKTsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iY29tcGFyZSJdW2RhdGEtYWN0aXZlPSIxIl0gLm1qci12aWV3ZXItdG9vbHMtc2VsZWN0IHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1tanItZ3JvdXAtYWNjZW50KSwgMC42MCk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAycHggcmdiYSh2YXIoLS1tanItZ3JvdXAtYWNjZW50KSwgMC4xOCk7Cn0KCi5tanItdmlld2VyLXRvb2xzLXNlbGVjdDpmb2N1cyB7CiAgICBvdXRsaW5lOiBub25lOwogICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHJnYmEoNjQsMTYwLDI1NSwwLjIyKTsKfQoKLyogTmF0aXZlIGRyb3Bkb3duczogaGludCBkYXJrIFVJIGFuZCBzdHlsZSBvcHRpb25zIHdoZW4gdGhlIGJyb3dzZXIgYWxsb3dzIGl0LiAqLwoubWpyLXZpZXdlci1oZWFkZXIgewogICAgY29sb3Itc2NoZW1lOiBkYXJrOwp9CgoubWpyLXZpZXdlci10b29scy1zZWxlY3QgewogICAgbWluLWhlaWdodDogMjRweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC40NikgIWltcG9ydGFudDsKICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuOTIpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4xNCkgIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IDhweCAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29scy1zZWxlY3Qgb3B0aW9uIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsIHZhcigtLWlucHV0LXRleHQsICNkZGQpKTsKfQoKLm1qci12aWV3ZXItdG9vbHMtcmFuZ2UtaW5wdXQ6Zm9jdXMgewogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci12aWV3ZXItdG9vbC1idG4tLXJlc2V0IHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjIyKSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29sLWJ0biB7CiAgICBtaW4taGVpZ2h0OiAyNHB4ICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiA4cHggIWltcG9ydGFudDsKICAgIGJvcmRlci13aWR0aDogMXB4ICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIxMCwyMTQsMjIwLDAuMDc1KSwgcmdiYSgyMTAsMjE0LDIyMCwwLjAyNSkpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMTk2LDIwMiwyMTAsMC4xNikgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjA1KTsKICAgIGZvbnQtc2l6ZTogMTFweCAhaW1wb3J0YW50OwogICAgcGFkZGluZzogMCA4cHggIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbC1idG46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIyMCwyMjQsMjMwLDAuMjQpICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIyMCwyMjQsMjMwLDAuMSksIHJnYmEoMjIwLDIyNCwyMzAsMC4wMzUpKSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJhbmFseXNpcyJdIC5tanItdmlld2VyLXRvb2wtYnRuW2RhdGEtYWN0aXZlPSIxIl0gewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDE2NiwgOTIsIDAuMjIpLCByZ2JhKDI1NSwgMTE2LCA2NCwgMC4wOCkpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAxNjAsIDkyLCAwLjM0KSAhaW1wb3J0YW50OwogICAgY29sb3I6IHJnYmEoMjU1LCAyMzYsIDIyNCwgMC45NikgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iYW5hbHlzaXMiXSAubWpyLXZpZXdlci10b29sLWJ0bltkYXRhLWFjdGl2ZT0iMSJdOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAxODAsIDEwOCwgMC4yOCksIHJnYmEoMjU1LCAxMjgsIDcyLCAwLjE0KSkgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDE4NCwgMTE2LCAwLjQ2KSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJvdmVybGF5LWd1aWRlcyJdIC5tanItdmlld2VyLXRvb2wtYnRuW2RhdGEtYWN0aXZlPSIxIl0gewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSg5MiwgMjE5LCAxODYsIDAuMjIpLCByZ2JhKDQ0LCAxNzAsIDE0NCwgMC4wOCkpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoOTIsIDIxOSwgMTg2LCAwLjM0KSAhaW1wb3J0YW50OwogICAgY29sb3I6IHJnYmEoMjI0LCAyNTUsIDI0OCwgMC45NikgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1ndWlkZXMiXSAubWpyLXZpZXdlci10b29sLWJ0bltkYXRhLWFjdGl2ZT0iMSJdOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMTAyLCAyMzAsIDE5NiwgMC4yOCksIHJnYmEoNTIsIDE4MiwgMTU2LCAwLjE0KSkgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgxMTAsIDIzNiwgMjAyLCAwLjQ2KSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJvdmVybGF5LWluc3BlY3QiXSAubWpyLXZpZXdlci10b29sLWJ0bltkYXRhLWFjdGl2ZT0iMSJdIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMTI0LCAxNjYsIDI1NSwgMC4yMiksIHJnYmEoMTA5LCA4OCwgMjIyLCAwLjA4KSkgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgxMzIsIDE3MCwgMjU1LCAwLjM2KSAhaW1wb3J0YW50OwogICAgY29sb3I6IHJnYmEoMjM2LCAyNDIsIDI1NSwgMC45NykgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1pbnNwZWN0Il0gLm1qci12aWV3ZXItdG9vbC1idG5bZGF0YS1hY3RpdmU9IjEiXTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDEzOCwgMTgwLCAyNTUsIDAuMzApLCByZ2JhKDEyNCwgMTAwLCAyMzIsIDAuMTQpKSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE0OCwgMTg4LCAyNTUsIDAuNDgpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLXRvb2wtYnRuW2RhdGEtYWN0aXZlPSIxIl0gewogICAgZmlsdGVyOiBzYXR1cmF0ZSgxLjEyKSBicmlnaHRuZXNzKDEuMDQpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xMCksCiAgICAgICAgMCAwIDAgMXB4IHJnYmEoMjU1LDI1NSwyNTUsMC4wNiksCiAgICAgICAgMCA4cHggMThweCByZ2JhKDAsMCwwLDAuMTYpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLWhlbHAgewogICAgYm9yZGVyLXJhZGl1czogMTRweCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgxMywxNywyMiwwLjk2KSwgcmdiYSg4LDExLDE2LDAuOTgpKSAhaW1wb3J0YW50OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogMCAxOHB4IDM0cHggcmdiYSgwLDAsMCwwLjM0KSAhaW1wb3J0YW50Owp9CgpAbWVkaWEgKG1heC13aWR0aDogMTIyMHB4KSB7CiAgICAubWpyLXZpZXdlci10b29scyB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICB9CgogICAgLm1qci12aWV3ZXItdG9vbHMtYWN0aW9ucyB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgfQoKICAgIC5tanItdmlld2VyLWhlYWRlci10b3AgewogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgICAgIGp1c3RpZnktaXRlbXM6IGNlbnRlcjsKICAgIH0KCiAgICAubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tbGVmdCwKICAgIC5tanItdmlld2VyLWhlYWRlci1hcmVhLS1jZW50ZXIsCiAgICAubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tcmlnaHQgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgfQoKICAgIC5tanItdmlld2VyLWhlYWRlci1tZXRhLS1sZWZ0LAogICAgLm1qci12aWV3ZXItaGVhZGVyLW1ldGEtLXJpZ2h0IHsKICAgICAgICBqdXN0aWZ5LXNlbGY6IGNlbnRlcjsKICAgIH0KCiAgICAubWpyLXZpZXdlci10b29scy1ib2R5IHsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDIyMHB4LCAxZnIpKTsKICAgIH0KfQoKLyogPT09PT09PT09PSBDdXN0b20gVmlkZW8gQ29udHJvbHMgKG5vIG5hdGl2ZSBiYXIpID09PT09PT09PT0gKi8KLm1qci12aWRlby1ob3N0IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLm1qci12aWRlby1jb250cm9scyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAxMnB4OwogICAgcmlnaHQ6IDEycHg7CiAgICBib3R0b206IDEycHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNik7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpOwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTsKICAgIG9wYWNpdHk6IDA7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgZWFzZTsKICAgIHotaW5kZXg6IDU7Cn0KCi5tanItdmlkZW8tcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXZpZGVvLXJvdy0tdG9wIHsKICAgIGdhcDogMTJweDsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIGF1dG8gMWZyIGF1dG8gYXV0bzsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tcm93LS10b3AgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIGF1dG8gMWZyIGF1dG8gYXV0bzsKfQoKLm1qci12aWRlby1jb250cm9scy0tcHJldmlldyAubWpyLXZpZGVvLXJvdy0tdG9wIHsKICAgIGRpc3BsYXk6IGZsZXg7Cn0KCi5tanItdmlkZW8tcm93LS1ib3R0b20gewogICAgZ2FwOiA4cHg7Cn0KCi5tanItdmlkZW8tZ3JvdXAgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtaW4td2lkdGg6IDA7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg1KTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIHVzZXItc2VsZWN0OiBub25lOwp9CgoubWpyLXZpZGVvLW51bSB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgcGFkZGluZzogNXB4IDhweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci12aWRlby1udW06Zm9jdXMgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOwp9CgoubWpyLXZpZGVvLW51bS0tc3BlZWQgewogICAgY29sb3Itc2NoZW1lOiBkYXJrOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjYyKTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpOwp9CgoubWpyLXZpZGVvLW51bS0tc3BlZWQgb3B0aW9uIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwp9CgoubWpyLXZpZGVvLWZyYW1lIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgICBtaW4td2lkdGg6IDUycHg7CiAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgIHVzZXItc2VsZWN0OiBub25lOwp9CgoubWpyLXZpZGVvLWZyYW1lLmlzLXN0ZXAgewogICAgY29sb3I6ICNmZmQyNGQ7Cn0KCi5tanItdmlkZW8tYm90dG9tIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmbGV4OiAxOwp9CgoubWpyLXZpZGVvLWJvdHRvbS0tbGVmdCB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7Cn0KCi5tanItdmlkZW8tYm90dG9tLS1yaWdodCB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwp9CgoubWpyLXZpZGVvLXRyYW5zcG9ydCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgZmxleDogMCAwIGF1dG87Cn0KCi8qIFNob3cgY29udHJvbHMgb24gaG92ZXIvZm9jdXMgKHZpZXdlcikuICovCi5tanItdmlkZW8taG9zdDpob3ZlciAubWpyLXZpZGVvLWNvbnRyb2xzLAoubWpyLXZpZGVvLWNvbnRyb2xzOmZvY3VzLXdpdGhpbiB7CiAgICBvcGFjaXR5OiAxOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87Cn0KCi8qIFByZXZpZXc6IGtlZXAgY29udHJvbHMgdmlzaWJsZSBiZWNhdXNlIHRoZSBhcmVhIGlzIHNtYWxsLiAqLwoubWpyLXZpZGVvLWNvbnRyb2xzLS1wcmV2aWV3IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IGF1dG87CiAgICByaWdodDogMTBweDsKICAgIHRvcDogYXV0bzsKICAgIGJvdHRvbTogMTBweDsKICAgIG9wYWNpdHk6IDE7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyOiBub25lOwogICAgcGFkZGluZzogMDsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgd2lkdGg6IGF1dG87CiAgICBoZWlnaHQ6IGF1dG87CiAgICBiYWNrZHJvcC1maWx0ZXI6IG5vbmU7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogbm9uZTsKfQoKLm1qci12aWRlby1wcmV2aWV3LWJ0biB7CiAgICB3aWR0aDogMzhweDsKICAgIGhlaWdodDogMzhweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjIyKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC40Mik7CiAgICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjkyKTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwp9CgoubWpyLXZpZGVvLXByZXZpZXctYnRuOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC41MCk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4yOCk7Cn0KCi5tanItdmlkZW8tcHJldmlldy1idG4gLnBpIHsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLXZpZGVvLWJ0biB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KTsKICAgIGNvbG9yOiAjZmZmOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci12aWRlby1idG46aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKfQoKLm1qci12aWRlby1idG4uaXMtb24gewogICAgYmFja2dyb3VuZDogcmdiYSg2NCwgMTYwLCAyNTUsIDAuMjUpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDY0LCAxNjAsIDI1NSwgMC41NSk7Cn0KCi5tanItdmlkZW8tYnRuLS1pbiB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoNzAsIDI1NSwgMTIwLCAwLjU1KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzAsIDI1NSwgMTIwLCAwLjEyKTsKfQoKLm1qci12aWRlby1idG4tLWluOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzAsIDI1NSwgMTIwLCAwLjE4KTsKfQoKLm1qci12aWRlby1idG4tLW91dCB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCA3MCwgNzAsIDAuNTUpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDcwLCA3MCwgMC4xMCk7Cn0KCi5tanItdmlkZW8tYnRuLS1vdXQ6aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDcwLCA3MCwgMC4xNik7Cn0KCi5tanItdmlkZW8tdGltZSB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgbWluLXdpZHRoOiA5MnB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItdmlkZW8tdGltZWdyb3VwIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICBnYXA6IDEwcHg7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItdmlkZW8tcmFuZ2UtY291bnQgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IHJnYmEoNjQsIDE5MCwgMjU1LCAwLjkyKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoNjQsIDE5MCwgMjU1LCAwLjEwKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNjQsIDE5MCwgMjU1LCAwLjI1KTsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgcGFkZGluZzogMXB4IDhweDsKICAgIGxpbmUtaGVpZ2h0OiAxNnB4OwogICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKICAgIHVzZXItc2VsZWN0OiBub25lOwp9CgoubWpyLXZpZGVvLXJhbmdlIHsKICAgIGFjY2VudC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwp9CgoubWpyLXZpZGVvLXJhbmdlLS1zZWVrIHsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDgwcHg7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAxOwogICAgLyogV2UgZHJhdyBvdXIgb3duIHBsYXloZWFkL21hcmtlcnM7IGhpZGUgdGhlIG5hdGl2ZSB0aHVtYiAiZG90Ii4gKi8KICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgIGFwcGVhcmFuY2U6IG5vbmU7Cn0KCi5tanItdmlkZW8tcmFuZ2UtLXNlZWs6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHsKICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICB3aWR0aDogMDsKICAgIGhlaWdodDogMDsKICAgIGJvcmRlcjogMDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm94LXNoYWRvdzogbm9uZTsKfQoKLm1qci12aWRlby1yYW5nZS0tc2Vlazo6LW1vei1yYW5nZS10aHVtYiB7CiAgICB3aWR0aDogMDsKICAgIGhlaWdodDogMDsKICAgIGJvcmRlcjogMDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm94LXNoYWRvdzogbm9uZTsKfQoKLm1qci12aWRlby1zZWVrLXdyYXAgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWluLXdpZHRoOiA4MHB4OwogICAgZmxleDogMTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwp9CgoubWpyLXZpZGVvLXNlZWstem9uZXMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiA1MCU7CiAgICBoZWlnaHQ6IDEwcHg7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDI7Cn0KCi5tanItdmlkZW8tc2Vlay16b25lIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMDsKICAgIGJvdHRvbTogMDsKfQoKLyogMC4uSW46IHRyaW1tZWQtb3V0IHJhbmdlLiAqLwoubWpyLXZpZGVvLXNlZWstem9uZS0tbGVmdFRyaW0gewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDcwLCA3MCwgMC4xOCk7Cn0KCi8qIEluLi5PdXQ6IHNlbGVjdGVkIHBsYXliYWNrIHJhbmdlIGhpZ2hsaWdodC4gKi8KLm1qci12aWRlby1zZWVrLXpvbmUtLXNlbGVjdGVkIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoNjQsIDE5MCwgMjU1LCAwLjU1KTsKfQoKLm1qci12aWRlby1zZWVrLXpvbmVzLmlzLWZ1bGxyYW5nZSAubWpyLXZpZGVvLXNlZWstem9uZS0tc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKfQoKLyogT3V0Li5FbmQ6IHNob3cgb3V0LW9mLXJhbmdlIGZyYW1lcyBhcyBhIGRpZmZlcmVudCBjb2xvci4gKi8KLm1qci12aWRlby1zZWVrLXpvbmUtLXJpZ2h0VHJpbSB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgNzAsIDcwLCAwLjIwKTsKfQoKLm1qci12aWRlby1zZWVrLW92ZXJsYXkgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiA1MCU7CiAgICBoZWlnaHQ6IDA7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDM7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiA1MCU7CiAgICB3aWR0aDogMTZweDsKICAgIGhlaWdodDogMzJweDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgY3Vyc29yOiBldy1yZXNpemU7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIHRvdWNoLWFjdGlvbjogbm9uZTsKICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgei1pbmRleDogNDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpOwogICAgYm94LXNoYWRvdzogMCA0cHggMTBweCByZ2JhKDAsMCwwLDAuMzUpOwp9CgoubWpyLXZpZGVvLXNlZWstaGFuZGxlOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMCk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNCk7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjphZnRlciwKLm1qci12aWRlby1zZWVrLWhhbmRsZS0tb3V0OjphZnRlciB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDUwJTsKICAgIHRvcDogNTAlOwogICAgd2lkdGg6IDJweDsKICAgIGhlaWdodDogMThweDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDcwLCA3MCwgMC45NSk7CiAgICBib3JkZXItcmFkaXVzOiAycHg7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjphZnRlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDcwLCAyNTUsIDEyMCwgMC45NSk7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjpiZWZvcmUsCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLW91dDo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogNTAlOwogICAgd2lkdGg6IDA7CiAgICBoZWlnaHQ6IDA7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjpiZWZvcmUgewogICAgdG9wOiA0cHg7CiAgICBib3JkZXItbGVmdDogNXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYm9yZGVyLXJpZ2h0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItYm90dG9tOiA2cHggc29saWQgcmdiYSg3MCwgMjU1LCAxMjAsIDAuOTUpOwp9CgoubWpyLXZpZGVvLXNlZWstaGFuZGxlLS1vdXQ6OmJlZm9yZSB7CiAgICBib3R0b206IDRweDsKICAgIGJvcmRlci1sZWZ0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmlnaHQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJvcmRlci10b3A6IDZweCBzb2xpZCByZ2JhKDI1NSwgNzAsIDcwLCAwLjk1KTsKfQoKLm1qci12aWRlby1zZWVrLXRpY2tzIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIHRvcDogLTE2cHg7CiAgICBoZWlnaHQ6IDEycHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEwKTsKICAgIG9wYWNpdHk6IDAuOTsKfQoKLm1qci12aWRlby1zZWVrLWxhYmVscyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICB0b3A6IC0zNHB4OwogICAgaGVpZ2h0OiAxNHB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBsaW5lLWhlaWdodDogMTRweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuNzIpOwogICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKICAgIHRleHQtc2hhZG93OiAwIDFweCAwIHJnYmEoMCwwLDAsMC41NSk7Cn0KCi5tanItdmlkZW8tc2Vlay1sYWJlbCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoubWpyLXZpZGVvLXNlZWstcGxheWhlYWQtbGFiZWwgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAxMnB4OwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgcGFkZGluZzogMXB4IDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjU1KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xNCk7CiAgICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjkyKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGxpbmUtaGVpZ2h0OiAxNHB4OwogICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoubWpyLXZpZGVvLXNlZWstbWFyayB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IC0xMHB4OwogICAgd2lkdGg6IDE0cHg7CiAgICBoZWlnaHQ6IDIwcHg7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgIGN1cnNvcjogZXctcmVzaXplOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICB0b3VjaC1hY3Rpb246IG5vbmU7CiAgICB6LWluZGV4OiA0OwogICAgLS1tanItbWFyay1jb2xvcjogcmdiYSgyNTUsIDcwLCA3MCwgMC45NSk7Cn0KCi5tanItdmlkZW8tc2Vlay1tYXJrLS1pbiB7CiAgICAtLW1qci1tYXJrLWNvbG9yOiByZ2JhKDcwLCAyNTUsIDEyMCwgMC45NSk7Cn0KCi5tanItdmlkZW8tc2Vlay1tYXJrOjpiZWZvcmUgewogICAgY29udGVudDogIiI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiA1MCU7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7CiAgICB3aWR0aDogMnB4OwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLW1hcmstY29sb3IpOwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHJnYmEoMCwwLDAsMC4zNSk7Cn0KCi5tanItdmlkZW8tc2Vlay1tYXJrOjphZnRlciB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogLTVweDsKICAgIGxlZnQ6IDUwJTsKICAgIHdpZHRoOiAwOwogICAgaGVpZ2h0OiAwOwogICAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJvcmRlci1yaWdodDogNXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYm9yZGVyLWJvdHRvbTogNnB4IHNvbGlkIHZhcigtLW1qci1tYXJrLWNvbG9yKTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKfQoKLm1qci12aWRlby1zZWVrLW1hcmstLWluOjphZnRlciB7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiB2YXIoLS1tanItbWFyay1jb2xvcik7Cn0KCi5tanItdmlkZW8tc2Vlay1tYXJrLS1vdXQ6OmFmdGVyIHsKICAgIHRvcDogYXV0bzsKICAgIGJvdHRvbTogLTVweDsKICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICBib3JkZXItdG9wOiA2cHggc29saWQgdmFyKC0tbWpyLW1hcmstY29sb3IpOwp9CgoubWpyLXZpZGVvLXNlZWstcGxheWhlYWQgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAtMTJweDsKICAgIHdpZHRoOiAycHg7CiAgICBoZWlnaHQ6IDI0cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjAwLCA3MCwgMC45NSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgwLDAsMCwwLjM1KTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMXB4KTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIHsKICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgICBsZWZ0OiBhdXRvOwogICAgcmlnaHQ6IGF1dG87CiAgICBib3R0b206IGF1dG87CiAgICBvcGFjaXR5OiAxOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICB3aWR0aDogMTAwJTsKICAgIG1heC13aWR0aDogbm9uZTsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDE0cHg7CiAgICBib3JkZXItcmFkaXVzOiAxOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxOTYsIDIwMiwgMjEwLCAwLjEyKTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCB0b3AgbGVmdCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzKSwgdHJhbnNwYXJlbnQgMzQlKSwKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDE5OCwgMjAzLCAyMTAsIDAuMDI1KSwgcmdiYSgxOTgsIDIwMywgMjEwLCAwLjAwOCkpLAogICAgICAgIGxpbmVhci1ncmFkaWVudCgxNjVkZWcsIHJnYmEoMTgsIDIyLCAyOCwgMC44MiksIHJnYmEoMTIsIDE1LCAyMSwgMC45KSk7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSwKICAgICAgICAwIDEwcHggMzBweCByZ2JhKDAsIDAsIDAsIDAuMTQpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBub25lOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IG5vbmU7CiAgICBnYXA6IDEycHg7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJ0biB7CiAgICBtaW4taGVpZ2h0OiAzOHB4OwogICAgcGFkZGluZzogOHB4IDEycHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyMTAsIDIxNCwgMjIwLCAwLjA3KSwgcmdiYSgyMTAsIDIxNCwgMjIwLCAwLjAyKSk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMTk0LCAyMDEsIDIwOCwgMC4xOCk7CiAgICBib3JkZXItd2lkdGg6IDFweDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjEycyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDAuMTJzIGVhc2UsIGJvcmRlci1jb2xvciAwLjEycyBlYXNlLCBib3gtc2hhZG93IDAuMTJzIGVhc2U7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJ0bjpob3ZlciB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjIwLCAyMjQsIDIzMCwgMC4yNik7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSwKICAgICAgICAwIDhweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xNCk7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJ0bi5pcy1vbiB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDEwMCwgMTcwLCAyNTUsIDAuMiksIHJnYmEoMTAwLCAxNzAsIDI1NSwgMC4wOCkpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDEyMCwgMTg2LCAyNTUsIDAuNDIpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHJnYmEoMTIwLCAxODYsIDI1NSwgMC4xMikgaW5zZXQ7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJ0biAucGkgewogICAgZm9udC1zaXplOiAxNHB4OwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1oZWFkLAoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItYWN0aW9ucyB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKSBhdXRvIG1pbm1heCgwLCAxZnIpOwogICAgZ2FwOiAxMnB4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXN0YXR1cywKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXNpZGUgewogICAgbWluLXdpZHRoOiAwOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBmbGV4LXdyYXA6IHdyYXA7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1jZW50ZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLWhlYWQgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXNpZGUtLXJpZ2h0IHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci10aW1lbGluZSB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIG1pbm1heCgwLCAxZnIpIGF1dG87CiAgICBnYXA6IDEycHg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1tZWRpYS1iYWRnZSB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICBwYWRkaW5nOiAwIDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzgsIDIyNCwgMTk2LCAwLjEyKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNzgsIDIyNCwgMTk2LCAwLjIyKTsKICAgIGNvbG9yOiByZ2JhKDIyMCwgMjQ3LCAyNDEsIDAuOTYpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby10aW1lZ3JvdXAgewogICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiA1cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0NSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby10aW1lLAoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1mcmFtZSB7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgY29sb3I6IHJnYmEoMjI4LCAyMzAsIDIzNCwgMC45Mik7CiAgICB0ZXh0LXNoYWRvdzogbm9uZTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tZnJhbWUgewogICAgbWluLXdpZHRoOiA5NHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgcGFkZGluZzogNXB4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNDUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tdGltZSB7CiAgICBtaW4td2lkdGg6IGF1dG87CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1yYW5nZS0tc2VlayB7CiAgICBoZWlnaHQ6IDIycHg7CiAgICBhY2NlbnQtY29sb3I6IHJnYmEoMjE0LCAyMTgsIDIyNCwgMC45Mik7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXJhbmdlLWNvdW50IHsKICAgIGNvbG9yOiByZ2JhKDIyMiwgMjI1LCAyMzAsIDAuOTUpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE5NCwgMjAxLCAyMDksIDAuMjYpOwogICAgYm9yZGVyLXdpZHRoOiAwLjhweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTk0LCAyMDEsIDIwOSwgMC4wOCk7CiAgICB0ZXh0LXNoYWRvdzogbm9uZTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tZ3JvdXAgewogICAgbWluLWhlaWdodDogMzZweDsKICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzNSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1ncm91cC0tYWRqdXN0LWxlZnQsCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWdyb3VwLS1hZGp1c3QtcmlnaHQsCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWdyb3VwLS1zcGVlZCB7CiAgICBnYXA6IDhweDsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tbnVtIHsKICAgIG1pbi1oZWlnaHQ6IDM0cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYmFja2dyb3VuZDogcmdiYSg5LCAxMiwgMTYsIDAuNTUpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXRyYW5zcG9ydCB7CiAgICBnYXA6IDEwcHg7CiAgICBwYWRkaW5nOiA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNDUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYnRuLS1wbGF5IHsKICAgIG1pbi13aWR0aDogODhweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXNlZWstd3JhcCB7CiAgICBtaW4taGVpZ2h0OiA0NHB4Owp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1zZWVrLXpvbmVzIHsKICAgIGhlaWdodDogMTJweDsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tc2Vlay1oYW5kbGUgewogICAgd2lkdGg6IDE4cHg7CiAgICBoZWlnaHQ6IDM0cHg7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXZvbHVtZS13cmFwIHsKICAgIHBhZGRpbmc6IDAgNHB4Owp9CgoubWpyLXZpZGVvLXJhbmdlLS12b2x1bWUgewogICAgd2lkdGg6IDkwcHg7Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiA5ODBweCkgewogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLWhlYWQsCiAgICAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItYWN0aW9ucywKICAgIC5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci10aW1lbGluZSB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICB9CgogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLWNlbnRlciwKICAgIC5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1zaWRlLS1yaWdodCB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICB9CgogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lIHsKICAgICAgICBnYXA6IDEwcHg7CiAgICB9CgogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tdHJhbnNwb3J0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgIH0KfQoKLyogPT09PT09PT09PSBDb250ZXh0IE1lbnUgQ29tcG9uZW50ID09PT09PT09PT0gKi8KLm1qci1jb250ZXh0LW1lbnUgewogICAgcG9zaXRpb246IGZpeGVkOwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktbWVudS1iZyk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpOwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICBtaW4td2lkdGg6IDIwMHB4OwogICAgLyogQWJvdmUgdmlld2VyIG92ZXJsYXkgKDEwMDAxKSBhbmQgTUZWIGRpYWxvZyAoMTAwMDApICovCiAgICB6LWluZGV4OiAxMDAwMjsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBwYWRkaW5nOiA0cHggMDsKICAgIGFuaW1hdGlvbjogbWpyLWNvbnRleHQtbWVudS1pbiAwLjE1cyBlYXNlLW91dDsKfQoKLm1qci1jb250ZXh0LW1lbnUsCi5tanItY29udGV4dC1tZW51ICogewogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKQGtleWZyYW1lcyBtanItY29udGV4dC1tZW51LWluIHsKICAgIGZyb20gewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01cHgpOwogICAgfQogICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgfQp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtIHsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICBwYWRkaW5nOiA4cHggMTRweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgd2lkdGg6IDEwMCU7CiAgICBib3JkZXI6IDA7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3gtc2hhZG93OiBub25lOwogICAgbWFyZ2luOiAwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgIGxldHRlci1zcGFjaW5nOiBub3JtYWw7CiAgICBsaW5lLWhlaWdodDogMS4zNTsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXM7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbTo6LW1vei1mb2N1cy1pbm5lciB7CiAgICBib3JkZXI6IDA7CiAgICBwYWRkaW5nOiAwOwp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtOmhvdmVyLAoubWpyLWNvbnRleHQtbWVudS1pdGVtOmZvY3VzLXZpc2libGUgewogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktaW5wdXQtYmcpOwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy1kaXNhYmxlZCB7CiAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICBvcGFjaXR5OiAwLjQ1Owp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLWRpc2FibGVkOmhvdmVyLAoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLWRpc2FibGVkOmZvY3VzLXZpc2libGUgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCi5tanItY29udGV4dC1tZW51LXNlcGFyYXRvciB7CiAgICBoZWlnaHQ6IDFweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJvcmRlci1jb2xvcik7CiAgICBtYXJnaW46IDRweCAwOwp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLWxlZnQsCi5tanItY29udGV4dC1tZW51LWl0ZW0tcmlnaHQgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4Owp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLWxlZnQgewogICAgZmxleDogMSAxIGF1dG87CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItY29udGV4dC1tZW51LWl0ZW0tcmlnaHQgewogICAgZmxleDogMCAwIGF1dG87CiAgICBtYXJnaW4tbGVmdDogMTZweDsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS1sZWZ0IGkgewogICAgd2lkdGg6IDE2cHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBvcGFjaXR5OiAwLjgyOwp9CgoubWpyLWNvbnRleHQtbWVudS1oaW50IHsKICAgIG9wYWNpdHk6IDAuNTg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoubWpyLWNvbnRleHQtbWVudS1zdWJtZW51LWFycm93IHsKICAgIG9wYWNpdHk6IDAuNzI7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci1hZGQtdG8tY29sbGVjdGlvbi1tZW51IHsKICAgIG1pbi13aWR0aDogMjYwcHg7CiAgICBtYXgtd2lkdGg6IG1pbigzNjBweCwgY2FsYygxMDB2dyAtIDE2cHgpKTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMnB4KTsKfQoKLm1qci1jb250ZXh0LW1lbnUtdGl0bGUgewogICAgcGFkZGluZzogOHB4IDE0cHggMTBweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBjb2xvcjogdmFyKC0tZmctY29sb3IpOwogICAgb3BhY2l0eTogMC45MjsKfQoKLm1qci1jb250ZXh0LW1lbnUtbm90ZSB7CiAgICBwYWRkaW5nOiAxMHB4IDE0cHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcpIDcyJSwgdmFyKC0tbWpyLW11dGVkKSk7CiAgICBsaW5lLWhlaWdodDogMS40NTsKfQoKLm1qci1ncmlkLXBvcG92ZXIsCi5tanItdmlld2VyLXBvcG92ZXIgewogICAgbWluLXdpZHRoOiAyNTBweDsKICAgIG1heC13aWR0aDogbWluKDM2MHB4LCBjYWxjKDEwMHZ3IC0gMTZweCkpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLXNtKTsKICAgIGJveC1zaGFkb3c6IDAgMTJweCAyOHB4IHJnYmEoMCwgMCwgMCwgMC4zNSk7Cn0KCkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7CiAgICAubWpyLXZpZXdlci1vdmVybGF5ICosCiAgICAubWpyLXZpZGVvLWNvbnRyb2xzLAogICAgLm1qci1jb250ZXh0LW1lbnUgewogICAgICAgIGFuaW1hdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDsKICAgICAgICBzY3JvbGwtYmVoYXZpb3I6IGF1dG8gIWltcG9ydGFudDsKICAgIH0KfQoKLyogSGlkZSBoZWFkZXIgKHRvb2xiYXIpIHdoZW4gdmlld2VyIG92ZXJsYXkgaXMgaW4gZnVsbHNjcmVlbiAqLwoubWpyLXZpZXdlci1vdmVybGF5OmZ1bGxzY3JlZW4gLm1qci12aWV3ZXItaGVhZGVyIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAogICBNYWpvb3IgRmxvYXRpbmcgVmlld2VyIChNRlYpIOKAlCBwb3J0YWxlZCB0byBkb2N1bWVudC5ib2R5CiAgIFJlZGVjbGFyZXMgQ1NTIHZhcmlhYmxlcyBzbyB0aGUgcGFuZWwgd29ya3Mgb3V0c2lkZSAubWpyLWFzc2V0cy1tYW5hZ2VyCiAgIChzYW1lIHBhdHRlcm4gYXMgLm1qci1wb3BvdmVyKQogICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi8KCi5tanItbWZ2IHsKICAgIC0tbWpyLXN1cmZhY2UtMDogdmFyKC0tY29udGVudC1iZywgIzFlMWUxZSk7CiAgICAtLW1qci1zdXJmYWNlLTE6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpOwogICAgLS1tanItc3VyZmFjZS0yOiB2YXIoLS1jb21meS1tZW51LXNlY29uZGFyeS1iZywgIzMzMyk7CiAgICAtLW1qci1ib3JkZXI6IHZhcigtLWJvcmRlci1jb2xvciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICAtLW1qci1tdXRlZDogdmFyKC0tZGVzY3JpcC10ZXh0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKTsKICAgIC0tbWpyLWFjY2VudDogdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKTsKICAgIC0tbWpyLXN0YXR1cy1zdWNjZXNzOiB2YXIoLS1jb21meS1zdGF0dXMtc3VjY2VzcywgIzRDQUY1MCk7CgogICAgZm9udC1mYW1pbHk6IHZhcigtLWNvbWZ5LWZvbnQsIHVpLXNhbnMtc2VyaWYsIHN5c3RlbS11aSwgLWFwcGxlLXN5c3RlbSwgIlNlZ29lIFVJIiwgUm9ib3RvLCBBcmlhbCwgc2Fucy1zZXJpZik7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBsaW5lLWhlaWdodDogMS4zNTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSk7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwoKICAgIC8qIFZpc3VhbCBjaHJvbWUgKi8KICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBib3gtc2hhZG93OiAwIDhweCAzMnB4IHJnYmEoMCwgMCwgMCwgMC41NSksIDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMyk7Cn0KCi5tanItbWZ2ICogewogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKaHRtbC5tanItbWZ2LXBvcG91dC1kb2N1bWVudCB7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIHJhZGlhbC1ncmFkaWVudCgKICAgICAgICAgICAgMTIwMHB4IDQyMHB4IGF0IDUwJSAwJSwKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLXByaW1hcnktYmFja2dyb3VuZCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSkgMTAlLCB0cmFuc3BhcmVudCksCiAgICAgICAgICAgIHRyYW5zcGFyZW50IDYyJQogICAgICAgICksCiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtc3VyZmFjZSwgdmFyKC0tY29udGVudC1iZywgIzE2MTkxZikpIDgyJSwgIzAwMCAxOCUpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0taW50ZXJmYWNlLW1lbnUtc3VyZmFjZSwgdmFyKC0tY29tZnktbWVudS1iZywgIzFmMjIyNykpIDg0JSwgIzAwMCAxNiUpCiAgICAgICAgKTsKfQoKYm9keS5tanItbWZ2LXBvcG91dC1ib2R5IHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9CgojbWpyLW1mdi1wb3BvdXQtcm9vdCwKLm1qci1tZnYtcG9wb3V0LXJvb3QgewogICAgaXNvbGF0aW9uOiBpc29sYXRlOwp9CgovKiDilIDilIAgSGVhZGVyIChkcmFnIGhhbmRsZSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5tanItbWZ2LWhlYWRlciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSk7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBjdXJzb3I6IG1vdmU7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgZ2FwOiA2cHg7CiAgICBtaW4taGVpZ2h0OiAzNHB4Owp9CgoubWpyLW1mdi1oZWFkZXItdGl0bGUgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIG9wYWNpdHk6IDAuNzg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICBmbGV4OiAxOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMjhweDsKfQoKLyog4pSA4pSAIFRvb2xiYXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5tanItbWZ2LXRvb2xiYXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDRweDsKICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgNTAlLCB2YXIoLS1tanItc3VyZmFjZS0xKSA1MCUpOwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgZmxleC1zaHJpbms6IDA7CiAgICBtaW4taGVpZ2h0OiAzNnB4OwogICAgZmxleC13cmFwOiBub3dyYXA7CiAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgc2Nyb2xsYmFyLXdpZHRoOiBub25lOwp9Ci5tanItbWZ2LXRvb2xiYXI6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5tanItbWZ2LXRvb2xiYXItc2VwIHsKICAgIHdpZHRoOiAxcHg7CiAgICBoZWlnaHQ6IDE4cHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItYm9yZGVyKTsKICAgIG1hcmdpbjogMCAzcHg7CiAgICBmbGV4LXNocmluazogMDsKfQoKLm1qci1tZnYtcHJvZ3Jlc3MgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGhlaWdodDogMjJweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA3MiUsICMwMDAgMjglKTsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgoubWpyLW1mdi1wcm9ncmVzcy5pcy1jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwp9CgoubWpyLW1mdi1wcm9ncmVzcy5pcy1jbGlja2FibGU6aG92ZXIgewogICAgZmlsdGVyOiBicmlnaHRuZXNzKDEuMDMpOwp9CgoubWpyLW1mdi1wcm9ncmVzcy1iYXIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHdpZHRoOiAwJTsKICAgIHRyYW5zaXRpb246IHdpZHRoIDcwbXMgZWFzZS1pbi1vdXQ7Cn0KCi5tanItbWZ2LXByb2dyZXNzLWJhci0tbm9kZXMgewogICAgdG9wOiAwOwogICAgaGVpZ2h0OiA1MCU7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1zdWNjZXNzKSA2OCUsICMwYjM1MTMgMzIlKTsKfQoKLm1qci1tZnYtcHJvZ3Jlc3MtYmFyLS1zdGVwcyB7CiAgICB0b3A6IDUwJTsKICAgIGhlaWdodDogNTAlOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDY0JSwgIzBiMjM0MCAzNiUpOwp9CgoubWpyLW1mdi1wcm9ncmVzcy5pcy1lcnJvciAubWpyLW1mdi1wcm9ncmVzcy1iYXItLW5vZGVzLAoubWpyLW1mdi1wcm9ncmVzcy5pcy1lcnJvciAubWpyLW1mdi1wcm9ncmVzcy1iYXItLXN0ZXBzIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCAjZDk1MzRmIDc4JSwgIzRhMTQxNCAyMiUpOwp9CgoubWpyLW1mdi1wcm9ncmVzcy1vdmVybGF5IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KSwgcmdiYSgwLCAwLCAwLCAwLjE4KSk7CiAgICBtaXgtYmxlbmQtbW9kZTogc2NyZWVuOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5tanItbWZ2LXByb2dyZXNzLXRleHQgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgei1pbmRleDogMjsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgaGVpZ2h0OiAxMDAlOwogICAgcGFkZGluZzogMCA4cHg7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgdGV4dC1zaGFkb3c6IDAgMCAycHggcmdiYSgwLCAwLCAwLCAwLjkpOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKfQoKLm1qci1tZnYtcGluLWdyb3VwIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBnYXA6IDJweDsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQoubWpyLW1mdi1waW4tYnRuIHsKICAgIHdpZHRoOiAyNnB4OwogICAgaGVpZ2h0OiAyNnB4OwogICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0yKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBwYWRkaW5nOiAwOwogICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDEyMG1zIGVhc2UsIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLCBjb2xvciAxMjBtcyBlYXNlLCBib3gtc2hhZG93IDEyMG1zIGVhc2U7Cn0KLm1qci1tZnYtcGluLWJ0bjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA0NSUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4MCUsIHZhcigtLW1qci1hY2NlbnQpIDglKTsKfQoubWpyLW1mdi1waW4tYnRuLmlzLXBpbm5lZCB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1OCUsICNmZmZmZmYgMTIlKTsKICAgIGJhY2tncm91bmQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA0MiUsIHZhcigtLW1qci1hY2NlbnQpIDU4JSk7CiAgICBjb2xvcjogI2VlZjdmZjsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMjQlLCB0cmFuc3BhcmVudCk7Cn0KCi8qIOKUgOKUgCBQaW4gZ3JvdXA6IG5vdyBhIGRyb3Bkb3duIG1lbnUgKGRpc3BsYXk6bm9uZSBieSBkZWZhdWx0LCBmbGV4IHdoZW4gLmlzLW9wZW4pIOKUgOKUgCAqLwoubWpyLW1mdi1waW4tZ3JvdXAgewogICAgZGlzcGxheTogbm9uZTsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDJweDsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogY2FsYygxMDAlICsgNHB4KTsKICAgIGxlZnQ6IDA7CiAgICB6LWluZGV4OiAxMDAxMDsKICAgIG1pbi13aWR0aDogNzBweDsKICAgIHBhZGRpbmc6IDRweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSk7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBib3gtc2hhZG93OiAwIDhweCAyNHB4IHJnYmEoMCwwLDAsMC41NSk7Cn0KLm1qci1tZnYtcGluLWdyb3VwLmlzLW9wZW4gewogICAgZGlzcGxheTogZmxleDsKfQoubWpyLW1mdi1waW4tYnRuIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMzBweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYmFja2dyb3VuZDogbm9uZTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBwYWRkaW5nOiAwIDEwcHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDEyMG1zIGVhc2UsIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLCBjb2xvciAxMjBtcyBlYXNlOwp9Ci5tanItbWZ2LXBpbi1idG46aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA4KTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDM1JSwgdHJhbnNwYXJlbnQpOwp9Ci5tanItbWZ2LXBpbi1idG4uaXMtcGlubmVkIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU4JSwgI2ZmZmZmZiAxMiUpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIsICMzMzMpIDQyJSwgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgNTglKTsKICAgIGNvbG9yOiAjZWVmN2ZmOwp9CgovKiDilIDilIAgSWNvbiBEcm9wZG93biBjb21wb25lbnQgKC5tanItbWZ2LWlkcm9wKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLm1qci1tZnYtaWRyb3AgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZmxleC1zaHJpbms6IDA7Cn0KCi5tanItbWZ2LWlkcm9wLW1lbnUgewogICAgZGlzcGxheTogbm9uZTsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDJweDsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogY2FsYygxMDAlICsgNHB4KTsKICAgIGxlZnQ6IDA7CiAgICB6LWluZGV4OiAxMDAxMDsKICAgIG1pbi13aWR0aDogMTEwcHg7CiAgICBwYWRkaW5nOiA0cHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1tZW51LWJnLCAjMmEyYTJhKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikpOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgYm94LXNoYWRvdzogMCA4cHggMjRweCByZ2JhKDAsMCwwLDAuNTUpOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoubWpyLW1mdi1pZHJvcC1tZW51LmlzLW9wZW4gewogICAgZGlzcGxheTogZmxleDsKfQoKLm1qci1tZnYtaWRyb3AtaXRlbSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgd2lkdGg6IDEwMCU7CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICBib3JkZXI6IG5vbmU7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzIGVhc2U7Cn0KLm1qci1tZnYtaWRyb3AtaXRlbTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpOwp9Ci5tanItbWZ2LWlkcm9wLWl0ZW0uaXMtc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogcmdiYSg5NSwxNzksMjU1LDAuMTYpOwogICAgY29sb3I6ICNhOGQ4ZmY7Cn0KLm1qci1tZnYtaWRyb3AtdHJpZ2dlclthcmlhLWV4cGFuZGVkPSJ0cnVlIl0gewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjEpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4yKSAhaW1wb3J0YW50Owp9Ci8qIENoYW5uZWwgdHJpZ2dlcjogc2xpZ2h0bHkgd2lkZXIgdG8gZml0ICJSR0IiICovCi5tanItbWZ2LWNoLWxhYmVsIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLyogVG9vbGJhciBpY29uLWJ1dHRvbiBwb3BvdmVycyAoY2hhbm5lbCwgZ3VpZGVzLCBwaW4sIGZvcm1hdCDigJQgc29ydC1zdHlsZSBjb250ZXh0IG1lbnVzKSAqLwoubWpyLW1mdi1jaC1wb3BvdmVyLAoubWpyLW1mdi1ndWlkZXMtcG9wb3ZlciwKLm1qci1tZnYtcGluLXBvcG92ZXIsCi5tanItbWZ2LWZvcm1hdC1wb3BvdmVyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIG1pbi13aWR0aDogMTIwcHg7CiAgICBwYWRkaW5nOiA2cHg7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcsIDAuNXJlbSk7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xLCB2YXIoLS1jb21meS1tZW51LWJnLCAjMmEyYTJhKSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpKTsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDI0cHggcmdiYSgwLDAsMCwwLjU1KTsKICAgIHotaW5kZXg6IDEwMDEwOwogICAgZGlzcGxheTogbm9uZTsKfQoubWpyLW1mdi1jaC1wb3BvdmVyLmlzLW9wZW4sCi5tanItbWZ2LWd1aWRlcy1wb3BvdmVyLmlzLW9wZW4sCi5tanItbWZ2LXBpbi1wb3BvdmVyLmlzLW9wZW4sCi5tanItbWZ2LWZvcm1hdC1wb3BvdmVyLmlzLW9wZW4gewogICAgZGlzcGxheTogYmxvY2s7Cn0KLyogVG9vbGJhciBpY29uIGltYWdlcyDigJQgY2ggaWNvbiBpcyBibGFjayAoaW52ZXJ0ZWQpLCBndWlkZXMgaWNvbiBpcyBuYXRpdmUgd2hpdGUgKi8KLm1qci1tZnYtY2gtaWNvbiB7CiAgICB3aWR0aDogMThweDsKICAgIGhlaWdodDogMThweDsKICAgIGZpbHRlcjogaW52ZXJ0KDEpOwogICAgb3BhY2l0eTogMC44NTsKICAgIGRpc3BsYXk6IGJsb2NrOwp9Ci5tanItbWZ2LWd1aWRlcy1pY29uIHsKICAgIHdpZHRoOiAxOHB4OwogICAgaGVpZ2h0OiAxOHB4OwogICAgb3BhY2l0eTogMC44NTsKICAgIGRpc3BsYXk6IGJsb2NrOwp9Ci5tanItbWZ2LWNoLXRyaWdnZXJbYXJpYS1leHBhbmRlZD0idHJ1ZSJdLAoubWpyLW1mdi1ndWlkZXMtdHJpZ2dlclthcmlhLWV4cGFuZGVkPSJ0cnVlIl0sCi5tanItbWZ2LXBpbi10cmlnZ2VyW2FyaWEtZXhwYW5kZWQ9InRydWUiXSwKLm1qci1tZnYtZm9ybWF0LXRyaWdnZXJbYXJpYS1leHBhbmRlZD0idHJ1ZSJdIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4xKSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuMikgIWltcG9ydGFudDsKfQovKiBQaW4gc2xvdCBhY3RpdmUgc3RhdGUgKi8KLm1qci1tZnYtcGluLXBvcG92ZXIgLm1qci1tZW51LWl0ZW0uaXMtcGlubmVkIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoOTUsMTc5LDI1NSwwLjE2KTsKICAgIGNvbG9yOiAjYThkOGZmOwp9Ci5tanItbWZ2LXBpbi1wb3BvdmVyIC5tanItbWVudS1pdGVtLmlzLXBpbm5lZCAubWpyLW1lbnUtaXRlbS1jaGVjayB7CiAgICBvcGFjaXR5OiAxICFpbXBvcnRhbnQ7Cn0KLyogRm9ybWF0IHBvcG92ZXI6IHNlcGFyYXRvciArIG9wYWNpdHkgc2xpZGVyIHJvdyAqLwoubWpyLW1mdi1mb3JtYXQtc2VwIHsKICAgIGhlaWdodDogMXB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsMjU1LDI1NSwwLjEpKTsKICAgIG1hcmdpbjogNHB4IDJweDsKfQoubWpyLW1mdi1mb3JtYXQtc2xpZGVyLXJvdyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgcGFkZGluZzogNHB4IDhweCAycHg7Cn0KLm1qci1tZnYtZm9ybWF0LXNsaWRlci1sYWJlbCB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICBvcGFjaXR5OiAwLjY1OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZsZXgtc2hyaW5rOiAwOwp9Ci5tanItbWZ2LWZvcm1hdC1wb3BvdmVyIGlucHV0W3R5cGU9InJhbmdlIl0gewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogNzBweDsKICAgIGFjY2VudC1jb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7Cn0KLm1qci1tZnYtZm9ybWF0LXBvcG92ZXIgLm1qci1tZnYtdG9vbGJhci1yYW5nZS1vdXQgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHZhcigtLWlucHV0LXRleHQsICNkZGQpOwogICAgb3BhY2l0eTogMC42NTsKICAgIG1pbi13aWR0aDogMzBweDsKICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgZmxleC1zaHJpbms6IDA7Cn0KCgoubWpyLW1mdiAubWpyLWljb24tYnRuIHsKICAgIHdpZHRoOiAzMHB4OwogICAgaGVpZ2h0OiAzMHB4OwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBib3JkZXItcmFkaXVzOiA3cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTIpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgcGFkZGluZzogMDsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDEyMG1zIGVhc2UsIGJhY2tncm91bmQtY29sb3IgMTIwbXMgZWFzZSwgYm9yZGVyLWNvbG9yIDEyMG1zIGVhc2UsIGNvbG9yIDEyMG1zIGVhc2UsIGJveC1zaGFkb3cgMTIwbXMgZWFzZTsKfQoKLm1qci1tZnYgLm1qci1pY29uLWJ0bjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA0NSUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4MCUsIHZhcigtLW1qci1hY2NlbnQpIDglKTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKfQoKLm1qci1tZnYgLm1qci1pY29uLWJ0bjpmb2N1cy12aXNpYmxlIHsKICAgIG91dGxpbmU6IG5vbmU7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1OCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMjQlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4gLnBpIHsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgb3BhY2l0eTogMC45Owp9CgovKiBVbml2ZXJzYWwgYWN0aXZlIGhpZ2hsaWdodCDigJQgYW55IGFyaWEtcHJlc3NlZD0idHJ1ZSIgYnV0dG9uIGdldHMgYWNjZW50IGdsb3cuCiAgIFBsYWNlZCBiZWZvcmUgdGhlIGNvbG9yZWQgYWN0aXZlIGNsYXNzZXMgc28gdGhleSBjYW4gb3ZlcnJpZGUgd2l0aCB0aGVpciBvd24gY29sb3IuICovCi5tanItbWZ2IC5tanItaWNvbi1idG5bYXJpYS1wcmVzc2VkPSJ0cnVlIl0gewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDk1LCAxNzksIDI1NSwgMC41NSk7CiAgICBjb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMiwgIzMzMykgODAlLCB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSAxNSUpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSAyNSUsIHRyYW5zcGFyZW50KTsKfQoubWpyLW1mdiAubWpyLWljb24tYnRuW2FyaWEtcHJlc3NlZD0idHJ1ZSJdIC5waSB7CiAgICBvcGFjaXR5OiAxOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1saXZlLWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MpIDYwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgY29sb3I6IHZhcigtLW1qci1zdGF0dXMtc3VjY2Vzcyk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MpIDEyJSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgMjUlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4ubWpyLWxpdmUtYWN0aXZlIC5waSB7CiAgICBvcGFjaXR5OiAxOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1wcmV2aWV3LWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4MCUsIHZhcigtLW1qci1hY2NlbnQpIDEyJSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDI1JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1wcmV2aWV3LWFjdGl2ZSAucGkgewogICAgb3BhY2l0eTogMTsKfQoKLm1qci1tZnYgLm1qci1pY29uLWJ0bi5tanItbm9kZXN0cmVhbS1hY3RpdmUgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCAjZmY5ODAwKSA2MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGNvbG9yOiB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDgwJSwgdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCAjZmY5ODAwKSAxMiUpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApIDI1JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1ub2Rlc3RyZWFtLWFjdGl2ZSAucGkgewogICAgb3BhY2l0eTogMTsKfQoKLyogUG9wLWluIG1vZGUgKHZpZXdlciBwb3BwZWQgb3V0KTogcmFpc2UgYnV0dG9uIGNvbnRyYXN0L2JyaWdodG5lc3MgKi8KLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA5MiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCkpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgOTIlLCByZ2JhKDAsIDAsIDAsIDAuMTgpKQogICAgICAgICk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3NCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCkpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSksCiAgICAgICAgMCAyNHB4IDU2cHggcmdiYSgwLCAwLCAwLCAwLjQyKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LWhlYWRlciB7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTgwZGVnLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODglLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpKSwKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDkwJSwgcmdiYSgwLCAwLCAwLCAwLjI0KSkKICAgICAgICApOwogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KSk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1oZWFkZXItdGl0bGUgewogICAgb3BhY2l0eTogMC45ODsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2VlZjRmZikgOTQlLCAjZmZmZmZmIDYlKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LXRvb2xiYXIgewogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDE4MGRlZywKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDg4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSksCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA5MCUsIHJnYmEoMCwgMCwgMCwgMC4yNCkpCiAgICAgICAgKTsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3OCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCkpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtdG9vbGJhci1zZXAgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1wcm9ncmVzcyB7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTgwZGVnLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgODIlLCAjMGExMTE4IDE4JSksCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA5MiUsICMwMDAgOCUpCiAgICAgICAgKTsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3OCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCkpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtcHJvZ3Jlc3MtdGV4dCB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcsICNlZWY0ZmYpIDk0JSwgI2ZmZmZmZiA2JSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1jb250ZW50IHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCB0b3AsIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAxMCUsIHRyYW5zcGFyZW50KSAwJSwgdHJhbnNwYXJlbnQgNDIlKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgODIlLCAjMDAwIDE4JSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLWljb24tYnRuIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc2JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KSk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTgwZGVnLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODYlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpKSwKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDkyJSwgcmdiYSgwLCAwLCAwLCAwLjE4KSkKICAgICAgICApOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSA5MiUsICNmZmZmZmYgOCUpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSwKICAgICAgICAwIDhweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xOCk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLWljb24tYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDUyJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDE4MGRlZywKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDU4JSwgdmFyKC0tbWpyLWFjY2VudCkgNDIlKSwKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDYyJSwgdmFyKC0tbWpyLWFjY2VudCkgMzglKQogICAgICAgICk7CiAgICBjb2xvcjogI2Y0ZjhmZiAhaW1wb3J0YW50Owp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1pY29uLWJ0biAucGkgewogICAgb3BhY2l0eTogMTsKICAgIGNvbG9yOiBpbmhlcml0ICFpbXBvcnRhbnQ7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLWljb24tYnRuLm1qci1saXZlLWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MpIDYwJSwgI2ZmZmZmZiA0MCUpOwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDE4MGRlZywKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgNjIlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpKSwKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgMzYlLCB2YXIoLS1tanItc3VyZmFjZS0xKSA2NCUpCiAgICAgICAgKTsKICAgIGNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSwKICAgICAgICAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgMjQlLCB0cmFuc3BhcmVudCksCiAgICAgICAgMCAwIDE4cHggcmdiYSg3NiwgMTc1LCA4MCwgMC4xOCk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLWljb24tYnRuLm1qci1wcmV2aWV3LWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1OCUsICNmZmZmZmYgNDIlKTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2MiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMzYlLCB2YXIoLS1tanItc3VyZmFjZS0xKSA2NCUpCiAgICAgICAgKTsKICAgIGNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSwKICAgICAgICAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDI0JSwgdHJhbnNwYXJlbnQpLAogICAgICAgIDAgMCAxOHB4IHJnYmEoOTUsIDE3OSwgMjU1LCAwLjE4KTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItaWNvbi1idG4ubWpyLW5vZGVzdHJlYW0tYWN0aXZlIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtd2FybmluZywgI2ZmOTgwMCkgNTglLCAjZmZmZmZmIDQyJSk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTgwZGVnLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCAjZmY5ODAwKSA2MiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCAjZmY5ODAwKSAzNiUsIHZhcigtLW1qci1zdXJmYWNlLTEpIDY0JSkKICAgICAgICApOwogICAgY29sb3I6ICNmZmZmZmYgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpLAogICAgICAgIDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCAjZmY5ODAwKSAyNCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDAgMThweCByZ2JhKDI1NSwgMTUyLCAwLCAwLjE4KTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LXBpbi1idG4gewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzYlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpKTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4NCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgOTIlLCByZ2JhKDAsIDAsIDAsIDAuMTgpKQogICAgICAgICk7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcsICNkZGQpIDkyJSwgI2ZmZmZmZiA4JSk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1waW4tYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDUyJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDE4MGRlZywKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDU2JSwgdmFyKC0tbWpyLWFjY2VudCkgNDQlKSwKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDY0JSwgdmFyKC0tbWpyLWFjY2VudCkgMzYlKQogICAgICAgICk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1waW4tYnRuLmlzLXBpbm5lZCB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1OCUsICNmZmZmZmYgNDIlKTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2MiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMzYlLCB2YXIoLS1tanItc3VyZmFjZS0xKSA2NCUpCiAgICAgICAgKTsKICAgIGNvbG9yOiAjZmZmZmZmOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1zaWRlYmFyIHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA5NCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCkpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgOTQlLCByZ2JhKDAsIDAsIDAsIDAuMTgpKQogICAgICAgICk7CiAgICBib3JkZXItbGVmdC1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KSk7CiAgICBib3gtc2hhZG93OiBpbnNldCAxcHggMCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMyk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0ibGVmdCJdIC5tanItd3Mtc2lkZWJhciB7CiAgICBib3JkZXItcmlnaHQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3OCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNikpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1zaWRlYmFyLWhlYWRlciB7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTgwZGVnLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODQlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpKSwKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDkyJSwgcmdiYSgwLCAwLCAwLCAwLjE4KSkKICAgICAgICApOwogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc2JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLXNpZGViYXItdGl0bGUgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZWVmNGZmKSA4MiUsIHZhcigtLW1qci1tdXRlZCkgMTglKTsKICAgIG9wYWNpdHk6IDAuODg7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLW5vZGUgewogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDcyJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLW5vZGUtaGVhZGVyIHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKSksCiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA4NiUsIHZhcigtLW1qci1hY2NlbnQpIDE0JSksCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA4NiUsIHJnYmEoMCwgMCwgMCwgMC4xNCkpCiAgICAgICAgKTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3Mtbm9kZS10aXRsZSB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcsICNlZWY0ZmYpIDk0JSwgI2ZmZmZmZiA2JSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLXdpZGdldC1sYWJlbCwKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3Mtc2lkZWJhci1lbXB0eSwKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3Mtbm9kZS1lbXB0eSB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1tdXRlZCkgODQlLCAjZmZmZmZmIDE2JSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLWlucHV0IHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA3NCUsICMwNTA3MGEgMjYlKTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc0JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KSk7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLWlucHV0OmZvY3VzIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU4JSwgI2ZmZmZmZiAxMCUpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCksCiAgICAgICAgMCAwIDAgMnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAxOCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZnYgLm1qci1pY29uLWJ0bi5tanItcG9waW4tYWN0aXZlIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU4JSwgI2ZmZmZmZiA0MiUpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDQ1JSwgdmFyKC0tbWpyLWFjY2VudCkgNTUlKTsKICAgIGNvbG9yOiAjZWVmN2ZmOwp9CgovKiDilIDilIAgQ29udGVudCB3cmFwcGVyIChob3Jpem9udGFsIGZsZXg6IGNvbnRlbnQgKyBzaWRlYmFyKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLm1qci1tZnYtY29udGVudC13cmFwcGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4OiAxOwogICAgbWluLWhlaWdodDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi8qIOKUgOKUgCBTaWRlYmFyIHBvc2l0aW9uIHZhcmlhbnRzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0ibGVmdCJdIHsKICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7Cn0KLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImxlZnQiXSAubWpyLXdzLXNpZGViYXIgewogICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKfQoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gewogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKfQoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci13cy1zaWRlYmFyIHsKICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDA7CiAgICB0cmFuc2l0aW9uOiBoZWlnaHQgMC4ycyBlYXNlLCB3aWR0aCAwczsKfQoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci13cy1zaWRlYmFyLm9wZW4gewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDIyMHB4OwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG1pbi1oZWlnaHQ6IDEyMHB4OwogICAgbWF4LWhlaWdodDogNjUlOwp9CgovKiDilIDilIAgQ29udGVudCBhcmVhIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLW1mdi1jb250ZW50IHsKICAgIGZsZXg6IDE7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgYmFja2dyb3VuZDogIzBkMGQwZDsKICAgIG1pbi1oZWlnaHQ6IDA7Cn0KCi5tanItbWZ2LW92ZXJsYXktY2FudmFzIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEyOwp9CgoubWpyLW1mdi10b29sYmFyLXNlbGVjdCB7CiAgICBoZWlnaHQ6IDI0cHg7CiAgICBwYWRkaW5nOiAwIDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJvcmRlcjogMC44cHggc29saWQgcmdiYSgxOTYsIDIwMiwgMjEwLCAwLjI0KTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjEwLDIxNCwyMjAsMC4wNiksIHJnYmEoMjEwLDIxNCwyMjAsMC4wMikpOwogICAgY29sb3I6IHJnYmEoMjMwLDIzMywyMzgsMC45Mik7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBvdXRsaW5lOiBub25lOwp9CgoubWpyLW1mdi10b29sYmFyLXJhbmdlIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4Owp9CgoubWpyLW1mdi10b29sYmFyLXJhbmdlIGlucHV0W3R5cGU9InJhbmdlIl0gewogICAgd2lkdGg6IDcycHg7CiAgICBhY2NlbnQtY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC44NSk7Cn0KCi5tanItbWZ2LXRvb2xiYXItcmFuZ2Utb3V0IHsKICAgIG1pbi13aWR0aDogMzBweDsKICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC45KTsKfQoKLyogRVYgc2xpZGVyIGFjdGl2ZSBzdGF0ZSAodmFsdWUg4omgIDApICovCi5tanItbWZ2LXRvb2xiYXItcmFuZ2UuaXMtYWN0aXZlIGlucHV0W3R5cGU9InJhbmdlIl0gewogICAgYWNjZW50LWNvbG9yOiAjZjVjODQyOwp9Ci5tanItbWZ2LXRvb2xiYXItcmFuZ2UuaXMtYWN0aXZlIC5tanItbWZ2LXRvb2xiYXItcmFuZ2Utb3V0IHsKICAgIGNvbG9yOiAjZjVjODQyOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKfQoKLm1qci1tZnYtbWVkaWEtcHJvZ3Jlc3MgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAxMHB4OwogICAgbGVmdDogMTBweDsKICAgIHotaW5kZXg6IDY7CiAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpOwogICAgcGFkZGluZzogNXB4IDlweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpKSA4OCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCByZ2JhKDUsIDgsIDE0LCAwLjg2KSA4NiUsIHZhcigtLW1qci1zdXJmYWNlLTAsICMxMTEpIDE0JSk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2Y1ZjdmYSk7CiAgICBib3gtc2hhZG93OiAwIDJweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4yOCk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIG9wYWNpdHk6IDA7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTRweCk7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTZzIGVhc2UsIHRyYW5zZm9ybSAwLjE2cyBlYXNlOwp9CgoubWpyLW1mdi1tZWRpYS1wcm9ncmVzcy5pcy12aXNpYmxlIHsKICAgIG9wYWNpdHk6IDE7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7Cn0KCi5tanItbWZ2LW1lZGlhLXByb2dyZXNzLmlzLWVycm9yIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtZXJyb3IsICNmZjVjN2EpIDcyJSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHJnYmEoNjAsIDEwLCAxOCwgMC45KSA4MiUsIHZhcigtLW1qci1zdXJmYWNlLTAsICMxMTEpIDE4JSk7Cn0KCi5tanItbWZ2LW1lZGlhLXByb2dyZXNzLXRleHQgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7Cn0KCi8qIOKUgOKUgCBXb3JrZmxvdyBTaWRlYmFyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLXdzLXNpZGViYXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICB3aWR0aDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKTsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjJzIGVhc2U7CiAgICBmbGV4LXNocmluazogMDsKfQoKLm1qci13cy1zaWRlYmFyLm9wZW4gewogICAgd2lkdGg6IDI2MHB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIG1pbi13aWR0aDogMTgwcHg7CiAgICBtYXgtd2lkdGg6IDY1JTsKICAgIHRyYW5zaXRpb246IG5vbmU7Cn0KCi5tanItd3Mtc2lkZWJhci1oZWFkZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgbWluLWhlaWdodDogMzRweDsKfQoubWpyLXdzLXNpZGViYXItdGl0bGUgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7CiAgICBvcGFjaXR5OiAwLjY1Owp9Ci5tanItd3Mtc2lkZWJhci1ib2R5IHsKICAgIGZsZXg6IDE7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIHBhZGRpbmc6IDA7Cn0KLm1qci13cy1zaWRlYmFyLWVtcHR5IHsKICAgIHBhZGRpbmc6IDI0cHggMTZweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgbGluZS1oZWlnaHQ6IDEuNTsKfQoKLyog4pSA4pSAIFRhYiBiYXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5tanItd3MtdGFiLWJhciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1zaHJpbms6IDA7CiAgICBnYXA6IDJweDsKICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMTgpOwp9CgoubWpyLXdzLXRhYiB7CiAgICBmbGV4OiAxOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogNXB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40NSk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNTAwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cywgY29sb3IgMC4xNXM7Cn0KCi5tanItd3MtdGFiOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNyk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KTsKfQoKLm1qci13cy10YWIuaXMtYWN0aXZlIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoOTksIDE1NSwgMjU1LCAwLjE1KTsKICAgIGNvbG9yOiAjNjM5YmZmOwp9CgovKiDilIDilIAgTm9kZXMgdGFiIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLXdzLW5vZGVzLXRhYiB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGZsZXg6IDE7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci13cy1zZWFyY2gtd3JhcCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgcGFkZGluZzogNnB4IDhweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKfQoKLm1qci13cy1zZWFyY2gtaWNvbiB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAxNnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoubWpyLXdzLXNlYXJjaCB7CiAgICBmbGV4OiAxOwogICAgcGFkZGluZzogNHB4IDI4cHggNHB4IDI2cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMzUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODUpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci13cy1zZWFyY2g6OnBsYWNlaG9sZGVyIHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjgpOwp9CgoubWpyLXdzLXNlYXJjaDpmb2N1cyB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoOTksIDE1NSwgMjU1LCAwLjUpOwp9CgoubWpyLXdzLXNlYXJjaC1jbGVhciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICByaWdodDogMTRweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICB3aWR0aDogMThweDsKICAgIGhlaWdodDogMThweDsKICAgIHBhZGRpbmc6IDA7CiAgICBib3JkZXI6IG5vbmU7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7Cn0KCi5tanItd3Mtc2VhcmNoLWNsZWFyOmhvdmVyIHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwp9CgoubWpyLXdzLW5vZGVzLWxpc3QgewogICAgZmxleDogMTsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBwYWRkaW5nOiA0cHggMDsKfQoKLm1qci13cy1ub2RlLXJvdyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgcGFkZGluZzogNXB4IDEwcHggNXB4IDEycHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgIG1pbi1oZWlnaHQ6IDMycHg7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXM7Cn0KCi5tanItd3Mtbm9kZS1yb3c6aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKfQoKLm1qci13cy1ub2RlLXJvdy10eXBlIHsKICAgIGZsZXg6IDE7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc4KTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cn0KCi5tanItd3Mtbm9kZS1yb3ctdGl0bGUgewogICAgZm9udC1zaXplOiAxMHB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40KTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICBtYXgtd2lkdGg6IDgwcHg7CiAgICBmbGV4LXNocmluazogMDsKfQoKLm1qci13cy1ub2RlLWxvY2F0ZSB7CiAgICBmbGV4LXNocmluazogMDsKICAgIHdpZHRoOiAyMnB4OwogICAgaGVpZ2h0OiAyMnB4OwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDA7CiAgICBib3JkZXI6IG5vbmU7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjFzLCBjb2xvciAwLjFzLCBiYWNrZ3JvdW5kIDAuMXM7Cn0KCi5tanItd3Mtbm9kZS1yb3c6aG92ZXIgLm1qci13cy1ub2RlLWxvY2F0ZSB7CiAgICBvcGFjaXR5OiAxOwp9CgoubWpyLXdzLW5vZGUtbG9jYXRlOmhvdmVyIHsKICAgIGNvbG9yOiAjNjM5YmZmOwogICAgYmFja2dyb3VuZDogcmdiYSg5OSwgMTU1LCAyNTUsIDAuMTUpOwp9CgovKiDilIDilIAgTm9kZSBzZWN0aW9ucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLm1qci13cy1ub2RlIHsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKfQoubWpyLXdzLXNpZGViYXItcmVzaXplciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7CiAgICB3aWR0aDogMTRweDsKICAgIHotaW5kZXg6IDI7CiAgICBjdXJzb3I6IGV3LXJlc2l6ZTsKICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwp9CgoubWpyLXdzLXNpZGViYXItcmVzaXplcjo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiA1MCU7CiAgICBsZWZ0OiA1MCU7CiAgICB3aWR0aDogNHB4OwogICAgaGVpZ2h0OiA1NnB4OwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKICAgIG9wYWNpdHk6IDA7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGVhc2UsIGJhY2tncm91bmQgMC4xNXMgZWFzZTsKfQoKLm1qci13cy1zaWRlYmFyLm9wZW46aG92ZXIgLm1qci13cy1zaWRlYmFyLXJlc2l6ZXI6OmJlZm9yZSwKLm1qci13cy1zaWRlYmFyLmlzLXJlc2l6aW5nIC5tanItd3Mtc2lkZWJhci1yZXNpemVyOjpiZWZvcmUsCi5tanItd3Mtc2lkZWJhci1yZXNpemVyLmlzLWRyYWdnaW5nOjpiZWZvcmUgewogICAgb3BhY2l0eTogMTsKfQoKLm1qci13cy1zaWRlYmFyLmlzLXJlc2l6aW5nIC5tanItd3Mtc2lkZWJhci1yZXNpemVyOjpiZWZvcmUsCi5tanItd3Mtc2lkZWJhci1yZXNpemVyOmhvdmVyOjpiZWZvcmUsCi5tanItd3Mtc2lkZWJhci1yZXNpemVyLmlzLWRyYWdnaW5nOjpiZWZvcmUgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjM0KTsKfQoKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9InJpZ2h0Il0gLm1qci13cy1zaWRlYmFyLXJlc2l6ZXIgewogICAgcmlnaHQ6IDA7Cn0KCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJsZWZ0Il0gLm1qci13cy1zaWRlYmFyLXJlc2l6ZXIgewogICAgbGVmdDogMDsKfQoKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImJvdHRvbSJdIC5tanItd3Mtc2lkZWJhci1yZXNpemVyIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KLm1qci13cy1ub2RlLWhlYWRlciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCwgIzFlMWUxZSkgNDAlLCB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKSA2MCUpOwogICAgY3Vyc29yOiBkZWZhdWx0OwogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTJzIGVhc2U7Cn0KLm1qci13cy1ub2RlLmlzLWNvbGxhcHNpYmxlIC5tanItd3Mtbm9kZS1oZWFkZXIgewogICAgY3Vyc29yOiBwb2ludGVyOwp9Ci5tanItd3Mtbm9kZS5pcy1jb2xsYXBzaWJsZSAubWpyLXdzLW5vZGUtaGVhZGVyOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wLCAjMWUxZTFlKSAyOCUsIHZhcigtLW1qci1zdXJmYWNlLTEsICMyYTJhMmEpIDcyJSk7Cn0KLm1qci13cy1ub2RlLmlzLWNvbGxhcHNpYmxlLmlzLWNvbGxhcHNlZCAubWpyLXdzLW5vZGUtaGVhZGVyOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCAjNWI4YWYwKSA4JSwgdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzJhMmEyYSkgOTIlKTsKfQoubWpyLXdzLW5vZGUtdG9nZ2xlIHsKICAgIGZsZXg6IDAgMCBhdXRvOwp9Ci5tanItd3Mtbm9kZS10aXRsZS13cmFwIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMXB4Owp9Ci5tanItd3Mtbm9kZS10eXBlIHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwp9Ci5tanItd3Mtbm9kZS10aXRsZSB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQ4KTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cn0KLm1qci13cy1ub2RlLmlzLWNvbGxhcHNlZCAubWpyLXdzLW5vZGUtYm9keSB7CiAgICBkaXNwbGF5OiBub25lOwp9Ci5tanItd3Mtbm9kZS1ib2R5IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA0cHg7CiAgICBwYWRkaW5nOiA2cHggMTBweDsKfQoubWpyLXdzLW5vZGUtZW1wdHkgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTsKICAgIHBhZGRpbmc6IDRweCAwOwp9CgovKiDilIDilIAgTmVzdGVkIG5vZGVzIChpbnNpZGUgc3ViZ3JhcGhzKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLm1qci13cy1ub2RlLS1uZXN0ZWQgewogICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCByZ2JhKDkxLCAxMzgsIDI0MCwgMC4zNSk7Cn0KLm1qci13cy1ub2RlLS1uZXN0ZWQgLm1qci13cy1ub2RlLWhlYWRlciB7CiAgICBwYWRkaW5nLWxlZnQ6IDE2cHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgIzViOGFmMCkgNSUsIHZhcigtLW1qci1zdXJmYWNlLTEsICMyYTJhMmEpIDk1JSk7Cn0KLm1qci13cy1ub2RlLS1uZXN0ZWQuaXMtY29sbGFwc2libGUgLm1qci13cy1ub2RlLWhlYWRlcjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgIzViOGFmMCkgMTAlLCB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKSA5MCUpOwp9CgovKiDilIDilIAgU3ViZ3JhcGggY2hpbGRyZW4gZ3JvdXAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5tanItd3MtY2hpbGRyZW4tdG9nZ2xlIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICB3aWR0aDogMTAwJTsKICAgIHBhZGRpbmc6IDVweCAxMHB4IDVweCAyMHB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsICM1YjhhZjApIDYlLCB2YXIoLS1tanItc3VyZmFjZS0wLCAjMWUxZTFlKSA5NCUpOwogICAgYm9yZGVyOiBub25lOwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwogICAgY29sb3I6IHZhcigtLW1qci1hY2NlbnQsICM1YjhhZjApOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIG9wYWNpdHk6IDAuODsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xcyBlYXNlLCBiYWNrZ3JvdW5kIDAuMXMgZWFzZTsKfQoubWpyLXdzLWNoaWxkcmVuLXRvZ2dsZS0tbmVzdGVkIHsKICAgIHBhZGRpbmctbGVmdDogMjhweDsKfQoubWpyLXdzLWNoaWxkcmVuLXRvZ2dsZTpob3ZlciB7CiAgICBvcGFjaXR5OiAxOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsICM1YjhhZjApIDEyJSwgdmFyKC0tbWpyLXN1cmZhY2UtMCwgIzFlMWUxZSkgODglKTsKfQoubWpyLXdzLWNoaWxkcmVuLXRvZ2dsZVthcmlhLWV4cGFuZGVkPSJ0cnVlIl0gewogICAgb3BhY2l0eTogMTsKfQoubWpyLXdzLWNoaWxkcmVuIHsKICAgIGJvcmRlci1sZWZ0OiAycHggc29saWQgcmdiYSg5MSwgMTM4LCAyNDAsIDAuMjUpOwogICAgbWFyZ2luLWxlZnQ6IDZweDsKfQoKCi5tanItd3Mtd2lkZ2V0LXJvdyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICBnYXA6IDhweDsKfQoubWpyLXdzLXdpZGdldC1yb3ctLWJsb2NrIHsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDJweDsKfQoubWpyLXdzLXdpZGdldC1yb3ctLWJsb2NrIC5tanItd3Mtd2lkZ2V0LWxhYmVsIHsKICAgIGZsZXg6IG5vbmU7CiAgICBwYWRkaW5nLXRvcDogMDsKfQoubWpyLXdzLXdpZGdldC1yb3ctLWJsb2NrIC5tanItd3Mtd2lkZ2V0LWlucHV0IHsKICAgIHdpZHRoOiAxMDAlOwp9Ci5tanItd3Mtd2lkZ2V0LWxhYmVsIHsKICAgIGZsZXg6IDAgMCA4MHB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHZhcigtLWRlc2NyaXAtdGV4dCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjU1KSk7CiAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKfQoubWpyLXdzLXdpZGdldC1pbnB1dCB7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwp9Ci5tanItd3MtaW5wdXQgewogICAgd2lkdGg6IDEwMCU7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1pbnB1dC1iZywgIzIyMik7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIHBhZGRpbmc6IDRweCA2cHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIG91dGxpbmU6IG5vbmU7CiAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMTIwbXMgZWFzZTsKfQoubWpyLXdzLWlucHV0OmZvY3VzIHsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7Cn0KLm1qci13cy10ZXh0YXJlYSB7CiAgICByZXNpemU6IG5vbmU7CiAgICBtaW4taGVpZ2h0OiAyOHB4OwogICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgIG92ZXJmbG93LXk6IGhpZGRlbjsKfQoubWpyLXdzLXRleHQtd3JhcHBlciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMnB4OwogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMDsKfQoubWpyLXdzLXRleHQtd3JhcHBlciAubWpyLXdzLXRleHRhcmVhIHsKICAgIHdpZHRoOiAxMDAlOwp9Ci5tanItd3MtZXhwYW5kLWJ0biB7CiAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICBib3JkZXI6IG5vbmU7CiAgICBjb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBwYWRkaW5nOiAwIDRweDsKICAgIG9wYWNpdHk6IDAuODsKfQoubWpyLXdzLWV4cGFuZC1idG46aG92ZXIgewogICAgb3BhY2l0eTogMTsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9Ci5tanItd3MtcmVhZG9ubHkgewogICAgb3BhY2l0eTogMC41OwogICAgY3Vyc29yOiBkZWZhdWx0Owp9Ci5tanItd3MtY2hlY2tib3ggewogICAgYWNjZW50LWNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKICAgIHdpZHRoOiAxNnB4OwogICAgaGVpZ2h0OiAxNnB4OwogICAgbWFyZ2luLXRvcDogNHB4Owp9Ci5tanItd3MtdG9nZ2xlLWxhYmVsIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwp9CgovKiDilIDilIAgTG9jYXRlIGJ1dHRvbiBpbnNpZGUgbm9kZSBoZWFkZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5tanItd3MtbG9jYXRlIHsKICAgIHdpZHRoOiAyNHB4ICFpbXBvcnRhbnQ7CiAgICBoZWlnaHQ6IDI0cHggIWltcG9ydGFudDsKICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgIG9wYWNpdHk6IDAuNTsKfQoubWpyLXdzLWxvY2F0ZTpob3ZlciB7CiAgICBvcGFjaXR5OiAxOwp9CgovKiDilIDilIAgUnVuIGJ1dHRvbiBzdGF0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLm1qci1tZnYtcnVuLWNvbnRyb2xzIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNHB4Owp9Ci5tanItbWZ2LXJ1bi1idG4gLnBpIHsgY29sb3I6IHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcywgIzRDQUY1MCk7IH0KLm1qci1tZnYtcnVuLWJ0bi5ydW5uaW5nIC5waSB7IGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NSkpOyB9Ci5tanItbWZ2LXJ1bi1idG4uc3RvcHBpbmcgLnBpIHsgY29sb3I6IHZhcigtLW1qci1zdGF0dXMtd2FybmluZywgI0ZGQTcyNik7IH0KLm1qci1tZnYtcnVuLWJ0bi5lcnJvciAucGkgeyBjb2xvcjogI2Y0NDMzNjsgfQoKLm1qci1tZnYtc3RvcC1idG4gLnBpIHsgY29sb3I6ICNlZjUzNTA7IH0KLm1qci1tZnYtc3RvcC1idG4uYWN0aXZlIC5waSB7IGNvbG9yOiAjZmY4YTY1OyB9Ci5tanItbWZ2LXN0b3AtYnRuLnN0b3BwaW5nIC5waSB7IGNvbG9yOiB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNGRkE3MjYpOyB9CgovKiDilIDilIAgRmxvYXRpbmcgVmlld2VyIHNpbXBsZSB2aWRlbyBwbGF5ZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci5pcy1hdWRpbyB7CiAgICBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDIwJSAyMCUsIHJnYmEoOTUsIDE3OSwgMjU1LCAwLjIpLCByZ2JhKDE4LCAyMCwgMjgsIDAuOTUpKTsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1hdWRpby1iYWNrZHJvcCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjJweDsKICAgIHRleHQtc2hhZG93OiAwIDJweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC40NSk7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHBhZGRpbmc6IDE4cHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItY29udHJvbHMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMTJweDsKICAgIHJpZ2h0OiAxMnB4OwogICAgYm90dG9tOiAxMnB4OwogICAgei1pbmRleDogMzA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogOXB4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiAxNHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byB0b3AsIHJnYmEoMTAsIDEwLCAxNCwgMC43NiksIHJnYmEoMTYsIDE2LCAyNCwgMC41NSkpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1yb3cgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItc2VlayB7CiAgICAtLW1qci1zZWVrLXBjdDogMCU7CiAgICBhcHBlYXJhbmNlOiBub25lOwogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgb3V0bGluZTogbm9uZTsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICB0byByaWdodCwKICAgICAgICAjZmYyZjUyIDAlLAogICAgICAgICNmZjJmNTIgdmFyKC0tbWpyLXNlZWstcGN0KSwKICAgICAgICByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjQpIHZhcigtLW1qci1zZWVrLXBjdCksCiAgICAgICAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI0KSAxMDAlCiAgICApOwogICAgY3Vyc29yOiBwb2ludGVyOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLXNlZWs6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHsKICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgIHdpZHRoOiAxMnB4OwogICAgaGVpZ2h0OiAxMnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzUpOwogICAgYmFja2dyb3VuZDogI2ZmMmY1MjsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1zZWVrOjotbW96LXJhbmdlLXRodW1iIHsKICAgIHdpZHRoOiAxMnB4OwogICAgaGVpZ2h0OiAxMnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzUpOwogICAgYmFja2dyb3VuZDogI2ZmMmY1MjsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1idG4gewogICAgd2lkdGg6IDMwcHg7CiAgICBoZWlnaHQ6IDMwcHg7CiAgICBtaW4td2lkdGg6IDMwcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yMik7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLWJ0biAucGkgewogICAgZm9udC1zaXplOiAxM3B4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSk7Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItYnRuLmlzLWRpc2FibGVkLAoubWpyLW1mdi1zaW1wbGUtcGxheWVyLXNlZWsuaXMtZGlzYWJsZWQgewogICAgb3BhY2l0eTogMC40NTsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci10aW1lIHsKICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45Mik7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLWZyYW1lIHsKICAgIG1hcmdpbi1yaWdodDogMnB4OwogICAgcGFkZGluZzogM3B4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGNvbnRhaW5lci10eXBlOiBpbmxpbmUtc2l6ZTsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9scyB7CiAgICB6LWluZGV4OiAzMDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXSwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSB7CiAgICBsZWZ0OiA4cHg7CiAgICByaWdodDogOHB4OwogICAgYm90dG9tOiA4cHg7CiAgICBwYWRkaW5nOiA4cHg7CiAgICBnYXA6IDZweDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXSAubWpyLXZpZGVvLXJvdy0tdG9wLAoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdIC5tanItdmlkZW8tcm93LS10b3AgewogICAgZ2FwOiA4cHg7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby10aW1lZ3JvdXAsCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0gLm1qci12aWRlby10aW1lZ3JvdXAgewogICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgZ2FwOiA2cHg7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby1yb3ctLWJvdHRvbSwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLXJvdy0tYm90dG9tIHsKICAgIGZsZXgtd3JhcDogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGdhcDogNnB4Owp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0iY29tcGFjdCJdIC5tanItdmlkZW8tYm90dG9tLAoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdIC5tanItdmlkZW8tYm90dG9tIHsKICAgIGZsZXgtc2hyaW5rOiAxOwogICAgZmxleC13cmFwOiBub3dyYXA7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby10cmFuc3BvcnQsCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0gLm1qci12aWRlby10cmFuc3BvcnQgewogICAgZmxleC13cmFwOiBub3dyYXA7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby1ncm91cCwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLWdyb3VwIHsKICAgIGZsZXgtd3JhcDogbm93cmFwOwp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0iY29tcGFjdCJdIC5tanItdmlkZW8tc2Vlay13cmFwLAoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdIC5tanItdmlkZW8tc2Vlay13cmFwIHsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXSAubWpyLXZpZGVvLWJhci10aW1lbGluZSwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLWJhci10aW1lbGluZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXSAubWpyLXZpZGVvLWJhci10aW1lbGluZSAubWpyLXZpZGVvLXNlZWstd3JhcCwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLWJhci10aW1lbGluZSAubWpyLXZpZGVvLXNlZWstd3JhcCB7CiAgICBvcmRlcjogLTE7CiAgICBmbGV4OiAxIDEgMTAwJTsKICAgIHdpZHRoOiAxMDAlOwp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0iY29tcGFjdCJdIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lIC5tanItdmlkZW8tZ3JvdXAtLWluLAoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0iY29tcGFjdCJdIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lIC5tanItdmlkZW8tZ3JvdXAtLW91dCwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLWJhci10aW1lbGluZSAubWpyLXZpZGVvLWdyb3VwLS1pbiwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLWJhci10aW1lbGluZSAubWpyLXZpZGVvLWdyb3VwLS1vdXQgewogICAgZmxleDogMCAxIGF1dG87Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby1yYW5nZS1jb3VudCwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXSAubWpyLXZpZGVvLWZyYW1lIHsKICAgIG1pbi13aWR0aDogYXV0bzsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLXJhbmdlLWNvdW50IHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLWZyYW1lIHsKICAgIG1pbi13aWR0aDogYXV0bzsKICAgIHBhZGRpbmc6IDNweCA2cHg7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0gLm1qci12aWRlby1idG4tLWluLAoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdIC5tanItdmlkZW8tYnRuLS1vdXQsCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0gLm1qci12aWRlby1idG4tLW1hcmsgewogICAgbWluLXdpZHRoOiAzMnB4Owp9CgpAY29udGFpbmVyIChtYXgtd2lkdGg6IDkwMHB4KSB7CiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzIHsKICAgICAgICBsZWZ0OiA4cHg7CiAgICAgICAgcmlnaHQ6IDhweDsKICAgICAgICBib3R0b206IDhweDsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgZ2FwOiA2cHg7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1yb3ctLXRvcCB7CiAgICAgICAgZ2FwOiA4cHg7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby10aW1lZ3JvdXAgewogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBnYXA6IDZweDsKICAgIH0KCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLXJvdy0tYm90dG9tIHsKICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGdhcDogNnB4OwogICAgfQoKICAgIC5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tYm90dG9tIHsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIH0KCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLXRyYW5zcG9ydCB7CiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1ncm91cCB7CiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1zZWVrLXdyYXAgewogICAgICAgIG1pbi13aWR0aDogMDsKICAgIH0KCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItdGltZWxpbmUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lIC5tanItdmlkZW8tc2Vlay13cmFwIHsKICAgICAgICBvcmRlcjogLTE7CiAgICAgICAgZmxleDogMSAxIDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICB9Cn0KCkBjb250YWluZXIgKG1heC13aWR0aDogNjgwcHgpIHsKICAgIC5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHMgewogICAgICAgIHBhZGRpbmc6IDZweDsKICAgIH0KCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWJ0biB7CiAgICAgICAgcGFkZGluZzogNXB4IDhweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1udW0gewogICAgICAgIHBhZGRpbmc6IDRweCA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgfQoKICAgIC5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tdGltZSwKICAgIC5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tZnJhbWUsCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLXJhbmdlLWNvdW50IHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICB9Cn0KCi8qIOKUgOKUgCBTZXR0aW5ncyBidXR0b24gYWN0aXZlIHN0YXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLW1mdi1zZXR0aW5ncy1idG4uYWN0aXZlIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpIDU1JSwgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSkpOwogICAgYmFja2dyb3VuZC1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIsICMzMzMpIDcwJSwgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgMTglKTsKfQoubWpyLW1mdi1zZXR0aW5ncy1idG4uYWN0aXZlIC5waSB7CiAgICBjb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7Cn0KCi8qIOKUgOKUgCBDbG9zZSBidXR0b24gKHJlZCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5tanItbWZ2IC5tanItbWZ2LWNsb3NlLWJ0biB7CiAgICBjb2xvcjogI2U4NTA1MDsKfQoubWpyLW1mdiAubWpyLW1mdi1jbG9zZS1idG46aG92ZXIgewogICAgY29sb3I6ICNmZjZiNmI7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDIzMiwgODAsIDgwLCAwLjE1KTsKfQoKLyog4pSA4pSAIEVtcHR5IHN0YXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLW1mdi1lbXB0eSB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgcGFkZGluZzogMTJweDsKfQoKLyog4pSA4pSAIENvbXBhcmUgbGFiZWxzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLW1mdi1sYWJlbCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDhweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41OCk7CiAgICBjb2xvcjogI2ZmZjsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBwYWRkaW5nOiAycHggN3B4OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAyMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjRweDsKfQoKLm1qci1tZnYtbGFiZWwubGFiZWwtbGVmdCAgeyBsZWZ0OiA4cHg7IH0KLm1qci1tZnYtbGFiZWwubGFiZWwtcmlnaHQgeyByaWdodDogOHB4OyB9CgovKiDilIDilIAgQUIgZGl2aWRlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLm1qci1tZnYtYWItZGl2aWRlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7CiAgICB3aWR0aDogMC41cHg7CiAgICBjdXJzb3I6IGNvbC1yZXNpemU7CiAgICB6LWluZGV4OiAxMDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44OCk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAwLjVweCByZ2JhKDAsIDAsIDAsIDAuNCksIDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDEwMG1zIGVhc2U7Cn0KCi5tanItbWZ2LWFiLWRpdmlkZXI6OmJlZm9yZSB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMDsKICAgIGJvdHRvbTogMDsKICAgIGxlZnQ6IDUwJTsKICAgIHdpZHRoOiAxMnB4OwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwp9CgoubWpyLW1mdi1hYi1kaXZpZGVyOmhvdmVyLAoubWpyLW1mdi1hYi1kaXZpZGVyOmFjdGl2ZSB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKfQoKLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiAgIE1GViBHZW9tZXRyeSAmIExheW91dCBDbGFzc2VzIChyZXBsYWNlcyBpbmxpbmUgc3R5bGVzIGluIEZsb2F0aW5nVmlld2VyLmpzKQogICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi8KCi8qIE1haW4gTUZWIGNvbnRhaW5lciBnZW9tZXRyeSAqLwoubWpyLW1mdiB7CiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICB0b3A6IHZhcigtLW1qci1tZnYtdG9wLW9mZnNldCwgNjBweCk7CiAgICByaWdodDogMjBweDsKICAgIHdpZHRoOiA2NDBweDsKICAgIGhlaWdodDogMzYwcHg7CiAgICBtaW4td2lkdGg6IDIyMHB4OwogICAgbWluLWhlaWdodDogMTYwcHg7CiAgICAvKiBBbHdheXMgZmxleDsgdmlzaWJpbGl0eSArIG9wYWNpdHkgY29udHJvbCBzaG93L2hpZGUgc28gQ1NTIHRyYW5zaXRpb25zIHdvcmsuCiAgICAgICBwb2ludGVyLWV2ZW50czpub25lIHdoaWxlIGhpZGRlbiBwcmV2ZW50cyBhY2NpZGVudGFsIGludGVyYWN0aW9uLiAqLwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICByZXNpemU6IGJvdGg7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgei1pbmRleDogMTAwMDA7CiAgICAvKiBIaWRkZW4gc3RhdGUgKi8KICAgIG9wYWNpdHk6IDA7CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNnB4KSBzY2FsZSgwLjk4KTsKICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcCByaWdodDsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xOHMgZWFzZS1vdXQsCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm0gMC4xOHMgZWFzZS1vdXQsCiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5IDBzIGxpbmVhciAwLjE4czsKfQoKLm1qci1tZnYubWpyLW1mdi0tcmVzaXppbmcgewogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItbWZ2LmlzLXZpc2libGUgewogICAgb3BhY2l0eTogMTsKICAgIHZpc2liaWxpdHk6IHZpc2libGU7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKSBzY2FsZSgxKTsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xOHMgZWFzZS1vdXQsCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm0gMC4xOHMgZWFzZS1vdXQsCiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5IDBzIGxpbmVhciAwczsKfQoKCi8qIE1lZGlhIGVsZW1lbnRzIChpbWcvdmlkZW8pIHNpemluZyB2YXJpYW50cyAqLwoubWpyLW1mdi1tZWRpYSB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgbWF4LXdpZHRoOiAxMDAlOwogICAgbWF4LWhlaWdodDogMTAwJTsKICAgIG9iamVjdC1maXQ6IGNvbnRhaW47CiAgICBvYmplY3QtcG9zaXRpb246IGNlbnRlcjsKfQoKLm1qci1tZnYtbWVkaWEtLWZpdC1oZWlnaHQgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBtYXgtaGVpZ2h0OiAxMDAlOwogICAgb2JqZWN0LWZpdDogY29udGFpbjsKICAgIG9iamVjdC1wb3NpdGlvbjogY2VudGVyOwp9CgoubWpyLW1mdi1tZWRpYS0tZmlsbCB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIG1heC1oZWlnaHQ6IDEwMCU7CiAgICBvYmplY3QtZml0OiBjb250YWluOwogICAgb2JqZWN0LXBvc2l0aW9uOiBjZW50ZXI7CiAgICBkaXNwbGF5OiBibG9jazsKfQoKLyogQXVkaW8gY2FyZCBpbnNpZGUgTUZWICovCi5tanItbWZ2LWF1ZGlvLWNhcmQgewogICAgd2lkdGg6IG1pbig5MiUsIDU2MHB4KTsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAxMHB4OwogICAgcGFkZGluZzogMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE2MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAyKSk7CiAgICBib3gtc2hhZG93OiAwIDZweCAxNnB4IHJnYmEoMCwgMCwgMCwgMC4zNSk7Cn0KCi5tanItbWZ2LWF1ZGlvLWhlYWQgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1tZnYtYXVkaW8taWNvbiB7CiAgICBjb2xvcjogdmFyKC0tbWpyLWJhZGdlLWF1ZGlvLCAjRkY5ODAwKTsKICAgIG9wYWNpdHk6IDAuOTU7Cn0KCi5tanItbWZ2LWF1ZGlvLXRpdGxlIHsKICAgIG1pbi13aWR0aDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwp9CgoubWpyLW1mdi1hdWRpby1wbGF5ZXIgewogICAgd2lkdGg6IDEwMCU7Cn0KCi5tanItbWZ2LXNpZGUtcGFuZWwgLm1qci1tZnYtYXVkaW8tY2FyZCwKLm1qci1tZnYtYWItbGF5ZXIgLm1qci1tZnYtYXVkaW8tY2FyZCwKLm1qci1tZnYtZ3JpZC1jZWxsIC5tanItbWZ2LWF1ZGlvLWNhcmQgewogICAgd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpOwp9CgovKiBWaWRlbyBlbGVtZW50IHNwZWNpZmljIHN0eWxlcyAqLwoubWpyLW1mdi1tZWRpYS12aWRlbyB7CiAgICAvKiBJbmhlcml0cyBmcm9tIC5tanItbWZ2LW1lZGlhIG9yIC5tanItbWZ2LW1lZGlhLS1maWxsICovCn0KCi8qIEdlbiBpbmZvIG92ZXJsYXkg4oCUIGFsbCBtb2RlcyBzaGFyZSBiYXNlIGxheW91dCAqLwoubWpyLW1mdi1nZW5pbmZvLAoubWpyLW1mdi1nZW5pbmZvLWEsCi5tanItbWZ2LWdlbmluZm8tYiB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiA4cHg7CiAgICByaWdodDogOHB4OwogICAgYm90dG9tOiA4cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNjUpOwogICAgY29sb3I6ICNmZmY7CiAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIG1heC1oZWlnaHQ6IDQwJTsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yLXk6IGNvbnRhaW47CiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICB0b3VjaC1hY3Rpb246IHBhbi15OwogICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjQpOwp9CgovKiBLZWVwIEdlbiBJbmZvIGFib3ZlIGN1c3RvbSBzaW1wbGUtcGxheWVyIGNvbnRyb2xzIHdoZW4gcHJlc2VudC4gKi8KLm1qci1tZnYtZ2VuaW5mby5tanItbWZ2LWdlbmluZm8tLWFib3ZlLXBsYXllciwKLm1qci1tZnYtZ2VuaW5mby1hLm1qci1tZnYtZ2VuaW5mby0tYWJvdmUtcGxheWVyLAoubWpyLW1mdi1nZW5pbmZvLWIubWpyLW1mdi1nZW5pbmZvLS1hYm92ZS1wbGF5ZXIgewogICAgdG9wOiA4cHg7CiAgICBib3R0b206IGF1dG87CiAgICBtYXgtaGVpZ2h0OiBtaW4oNDUlLCBjYWxjKDEwMCUgLSAxMjRweCkpOwp9CgovKiBGYWxsYmFjazogd2hlbiBzaW1wbGUtcGxheWVyIGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgZ2VuaW5mbyBvdmVybGF5LAogICBtb3ZlIGl0IHVwIGV2ZW4gaWYgdGhlIG1vZGlmaWVyIGNsYXNzIHdhcyBub3QgYXR0YWNoZWQuICovCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXIgKyAubWpyLW1mdi1nZW5pbmZvLAoubWpyLW1mdi1zaW1wbGUtcGxheWVyICsgLm1qci1tZnYtZ2VuaW5mby1hLAoubWpyLW1mdi1zaW1wbGUtcGxheWVyICsgLm1qci1tZnYtZ2VuaW5mby1iIHsKICAgIHRvcDogOHB4OwogICAgYm90dG9tOiBhdXRvOwogICAgbWF4LWhlaWdodDogbWluKDQ1JSwgY2FsYygxMDAlIC0gMTI0cHgpKTsKfQoKLyogQUIgbW9kZSBvdmVybGF5cyBhcmUgYXR0YWNoZWQgYXQgY29udGFpbmVyIGxldmVsOyBzaGlmdCB0aGVtIHdoZW4gQUIgbGF5ZXJzIHVzZSBzaW1wbGUtcGxheWVyLiAqLwoubWpyLW1mdi1hYi1jb250YWluZXI6aGFzKC5tanItbWZ2LWFiLWxheWVyIC5tanItbWZ2LXNpbXBsZS1wbGF5ZXIpIC5tanItbWZ2LWdlbmluZm8tYSwKLm1qci1tZnYtYWItY29udGFpbmVyOmhhcygubWpyLW1mdi1hYi1sYXllciAubWpyLW1mdi1zaW1wbGUtcGxheWVyKSAubWpyLW1mdi1nZW5pbmZvLWIgewogICAgdG9wOiA4cHg7CiAgICBib3R0b206IGF1dG87CiAgICBtYXgtaGVpZ2h0OiBtaW4oNDUlLCBjYWxjKDEwMCUgLSAxMjRweCkpOwp9CgovKiBTaGFyZWQgc3R5bGUgZm9yIGFsbCBnZW4gaW5mbyBvdmVybGF5IHZhcmlhbnRzICovCi5tanItbWZ2LWdlbmluZm8gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWEgc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgc3Ryb25nIHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBtYXJnaW4tcmlnaHQ6IDRweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpOyAvKiBkZWZhdWx0IOKAlCBvdmVycmlkZGVuIHBlciBmaWVsZCBiZWxvdyAqLwp9CgovKiBQZXItZmllbGQgbGFiZWwgY29sb3JzICovCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9InByb21wdCJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIFtkYXRhLWZpZWxkPSJwcm9tcHQiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBbZGF0YS1maWVsZD0icHJvbXB0Il0gc3Ryb25nIHsgY29sb3I6ICM3ZWM4ZmY7IH0gLyogYmx1ZSAgIOKAlCBQcm9tcHQgKi8KCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9InNlZWQiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYSBbZGF0YS1maWVsZD0ic2VlZCJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1iIFtkYXRhLWZpZWxkPSJzZWVkIl0gc3Ryb25nICAgeyBjb2xvcjogI2ZmZDQ3YTsgfSAvKiBhbWJlciAg4oCUIFNlZWQgICAqLwoKLm1qci1tZnYtZ2VuaW5mbyBbZGF0YS1maWVsZD0ibW9kZWwiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYSBbZGF0YS1maWVsZD0ibW9kZWwiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBbZGF0YS1maWVsZD0ibW9kZWwiXSBzdHJvbmcgIHsgY29sb3I6ICM3ZGRhOGE7IH0gLyogZ3JlZW4gIOKAlCBNb2RlbCAgKi8KCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9ImxvcmEiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYSBbZGF0YS1maWVsZD0ibG9yYSJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1iIFtkYXRhLWZpZWxkPSJsb3JhIl0gc3Ryb25nICAgeyBjb2xvcjogI2Q0OGNmZjsgfSAvKiB2aW9sZXQg4oCUIExvUkEgICAqLwoKLm1qci1tZnYtZ2VuaW5mbyBbZGF0YS1maWVsZD0ic2FtcGxlciJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIFtkYXRhLWZpZWxkPSJzYW1wbGVyIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9InNhbXBsZXIiXSBzdHJvbmcgeyBjb2xvcjogI2ZmOWY3YTsgfSAvKiBvcmFuZ2Ug4oCUIFNhbXBsZXIgKi8KCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9InNjaGVkdWxlciJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIFtkYXRhLWZpZWxkPSJzY2hlZHVsZXIiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBbZGF0YS1maWVsZD0ic2NoZWR1bGVyIl0gc3Ryb25nIHsgY29sb3I6ICNmZjdhOWY7IH0gLyogcGluayAgIOKAlCBTY2hlZHVsZXIgKi8KCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9ImNmZyJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIFtkYXRhLWZpZWxkPSJjZmciXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBbZGF0YS1maWVsZD0iY2ZnIl0gc3Ryb25nICAgIHsgY29sb3I6ICM3YTlmZmY7IH0gLyogaW5kaWdvIOKAlCBDRkcgKi8KCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9InN0ZXAiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYSBbZGF0YS1maWVsZD0ic3RlcCJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1iIFtkYXRhLWZpZWxkPSJzdGVwIl0gc3Ryb25nICAgeyBjb2xvcjogIzdhZmZkNDsgfSAvKiB0ZWFsICAg4oCUIFN0ZXAgKi8KCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9ImdlblRpbWUiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYSBbZGF0YS1maWVsZD0iZ2VuVGltZSJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1iIFtkYXRhLWZpZWxkPSJnZW5UaW1lIl0gc3Ryb25nIHsgY29sb3I6ICNlMGZmN2E7IH0gLyogbGltZSAgIOKAlCBHZW4gVGltZSAqLwoKLm1qci1tZnYtZ2VuaW5mbyBkaXYsCi5tanItbWZ2LWdlbmluZm8tYSBkaXYsCi5tanItbWZ2LWdlbmluZm8tYiBkaXYgewogICAgbGluZS1oZWlnaHQ6IDEuMzU7CiAgICBtYXJnaW4tYm90dG9tOiAzcHg7Cn0KCi5tanItbWZ2LWdlbmluZm8gZGl2Omxhc3QtY2hpbGQsCi5tanItbWZ2LWdlbmluZm8tYSBkaXY6bGFzdC1jaGlsZCwKLm1qci1tZnYtZ2VuaW5mby1iIGRpdjpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1ib3R0b206IDA7Cn0KCgovKiBTaW1wbGUgbW9kZSBjb250YWluZXIgKi8KLm1qci1tZnYtc2ltcGxlLWNvbnRhaW5lciB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgovKiBBQiBtb2RlIGNvbnRhaW5lciAqLwoubWpyLW1mdi1hYi1jb250YWluZXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYmFja2dyb3VuZDogIzAwMDsKfQoKLyogQUIgbW9kZSBsYXllcnMgKi8KLm1qci1tZnYtYWItbGF5ZXIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwp9CgoubWpyLW1mdi1hYi1sYXllci0tYiB7CiAgICAvKiBjbGlwLXBhdGggYXBwbGllZCBpbmxpbmUgZm9yIGR5bmFtaWMgZGl2aWRlciBwb3NpdGlvbiAqLwp9CgovKiBTaWRlLWJ5LXNpZGUgbW9kZSBjb250YWluZXIgKi8KLm1qci1tZnYtc2lkZS1jb250YWluZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgZ2FwOiAycHg7CiAgICBiYWNrZ3JvdW5kOiAjMTExOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLyogU2lkZS1ieS1zaWRlIGhhbGYgcGFuZWxzICovCi5tanItbWZ2LXNpZGUtcGFuZWwgewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgYmFja2dyb3VuZDogIzBkMGQwZDsKfQoKLyogR3JpZCBjb21wYXJlICgyw5cyKSBjb250YWluZXIgKi8KLm1qci1tZnYtZ3JpZC1jb250YWluZXIgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsKICAgIGdyaWQtdGVtcGxhdGUtcm93czogMWZyIDFmcjsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgZ2FwOiAycHg7CiAgICBiYWNrZ3JvdW5kOiAjMTExOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLyogR3JpZCBjZWxscyAqLwoubWpyLW1mdi1ncmlkLWNlbGwgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBiYWNrZ3JvdW5kOiAjMGQwZDBkOwogICAgbWluLXdpZHRoOiAwOwogICAgbWluLWhlaWdodDogMDsKfQoKLyogR2VuIGluZm8gb3ZlcmxheXMgZm9yIGdyaWQgY2VsbHMgQyBhbmQgRCAqLwoubWpyLW1mdi1nZW5pbmZvLWMsCi5tanItbWZ2LWdlbmluZm8tZCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiA4cHg7CiAgICByaWdodDogOHB4OwogICAgYm90dG9tOiA4cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNjUpOwogICAgY29sb3I6ICNmZmY7CiAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIG1heC1oZWlnaHQ6IDQwJTsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yLXk6IGNvbnRhaW47CiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICB0b3VjaC1hY3Rpb246IHBhbi15OwogICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjQpOwp9CgoubWpyLW1mdi1nZW5pbmZvLWMgc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgc3Ryb25nIHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBtYXJnaW4tcmlnaHQ6IDRweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpOwp9CgovKiBQZXItZmllbGQgbGFiZWwgY29sb3JzIGZvciBDL0QgZ2VuIGluZm8gb3ZlcmxheXMgKi8KLm1qci1tZnYtZ2VuaW5mby1jIFtkYXRhLWZpZWxkPSJwcm9tcHQiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tZCBbZGF0YS1maWVsZD0icHJvbXB0Il0gc3Ryb25nIHsgY29sb3I6ICM3ZWM4ZmY7IH0KLm1qci1tZnYtZ2VuaW5mby1jIFtkYXRhLWZpZWxkPSJzZWVkIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgW2RhdGEtZmllbGQ9InNlZWQiXSBzdHJvbmcgICB7IGNvbG9yOiAjZmZkNDdhOyB9Ci5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0ibW9kZWwiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tZCBbZGF0YS1maWVsZD0ibW9kZWwiXSBzdHJvbmcgIHsgY29sb3I6ICM3ZGRhOGE7IH0KLm1qci1tZnYtZ2VuaW5mby1jIFtkYXRhLWZpZWxkPSJsb3JhIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgW2RhdGEtZmllbGQ9ImxvcmEiXSBzdHJvbmcgICB7IGNvbG9yOiAjZDQ4Y2ZmOyB9Ci5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0ic2FtcGxlciJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1kIFtkYXRhLWZpZWxkPSJzYW1wbGVyIl0gc3Ryb25nIHsgY29sb3I6ICNmZjlmN2E7IH0KLm1qci1tZnYtZ2VuaW5mby1jIFtkYXRhLWZpZWxkPSJzY2hlZHVsZXIiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tZCBbZGF0YS1maWVsZD0ic2NoZWR1bGVyIl0gc3Ryb25nIHsgY29sb3I6ICNmZjdhOWY7IH0KLm1qci1tZnYtZ2VuaW5mby1jIFtkYXRhLWZpZWxkPSJjZmciXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tZCBbZGF0YS1maWVsZD0iY2ZnIl0gc3Ryb25nICAgICB7IGNvbG9yOiAjN2E5ZmZmOyB9Ci5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0ic3RlcCJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1kIFtkYXRhLWZpZWxkPSJzdGVwIl0gc3Ryb25nICAgIHsgY29sb3I6ICM3YWZmZDQ7IH0KCi8qIEdlbiBpbmZvIGFjdGl2ZSBzdGF0ZSDigJQgYnV0dG9uIGdsb3dzIHdoZW4gYXQgbGVhc3Qgb25lIGZpZWxkIGlzIHNlbGVjdGVkICovCi5tanItbWZ2IC5tanItaWNvbi1idG4uaXMtb24gewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKHZhcigtLW1qci1ncm91cC1hY2NlbnQsIDk1LCAxNzksIDI1NSksIDAuNTUpOwogICAgY29sb3I6IHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIsICMzMzMpIDgwJSwgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgMTUlKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgMjUlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4uaXMtb3BlbiB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSA2MiUsICNmZmZmZmYgMTIlKTsKICAgIGNvbG9yOiAjZWVmN2ZmOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSg5NSwgMTc5LCAyNTUsIDAuMjgpLCByZ2JhKDk1LCAxNzksIDI1NSwgMC4xNCkpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDAgMCAxcHggcmdiYSgyNTUsMjU1LDI1NSwwLjA4KSwKICAgICAgICAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpIDI2JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1pY29uLWJ0bi5pcy1vcGVuIHsKICAgIGNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7Cn0KCi8qIEdlbiBpbmZvIGRyb3Bkb3duIHBhbmVsICovCi5tanItbWZ2LWdlbi1kcm9wZG93biB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB6LWluZGV4OiAxMDAwMTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKSA5NiUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIHBhZGRpbmc6IDZweCA0cHg7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMTgpOwogICAgYm94LXNoYWRvdzogMCA4cHggMjRweCByZ2JhKDAsIDAsIDAsIDAuNTUpLCAwIDJweCA2cHggcmdiYSgwLCAwLCAwLCAwLjMpOwogICAgZGlzcGxheTogbm9uZTsKICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoOHB4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7Cn0KCi5tanItbWZ2LWdlbi1kcm9wZG93bjo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJHRU4gSU5GTyI7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZvbnQtc2l6ZTogOXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjhweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzUpOwogICAgcGFkZGluZzogMnB4IDEwcHggNnB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMTk2LCAyMDIsIDIxMCwgMC4xKTsKICAgIG1hcmdpbi1ib3R0b206IDRweDsKfQoKLm1qci1tZnYtZ2VuLWRyb3Bkb3duLmlzLXZpc2libGUgewogICAgZGlzcGxheTogYmxvY2s7Cn0KCi5tanItbWZ2LWdlbi1kcm9wZG93bi1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIHBhZGRpbmc6IDVweCAxMHB4OwogICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAxMDBtcyBlYXNlOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItbWZ2LWdlbi1kcm9wZG93bi1yb3c6aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA3KTsKfQoKLm1qci1tZnYtZ2VuLWRyb3Bkb3duLXJvdyBpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsKICAgIHdpZHRoOiAxM3B4OwogICAgaGVpZ2h0OiAxM3B4OwogICAgYWNjZW50LWNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZsZXgtc2hyaW5rOiAwOwp9CgovKiBUcmFuc2Zvcm0gZm9yIHBhbi96b29tIC0gYXBwbGllZCBpbmxpbmUgZm9yIGR5bmFtaWMgdmFsdWVzICovCi5tanItbWZ2LW1lZGlhLS10cmFuc2Zvcm0gewogICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyOwp9CgovKiBDdXJzb3IgZmVlZGJhY2sgZm9yIHBhbi96b29tIGludGVyYWN0aW9ucyAqLwoubWpyLW1mdi1jb250ZW50LS1ncmFiIHsKICAgIGN1cnNvcjogZ3JhYjsKfQoKLm1qci1tZnYtY29udGVudC0tZ3JhYmJpbmcgewogICAgY3Vyc29yOiBncmFiYmluZzsKfQoKLyogU2lkZWJhciB0YWIgYnV0dG9uOiBhbGxvdyAyLWxpbmUgbGFiZWwgdmlhIFxuIGluIGxhYmVsIHN0cmluZyAqLwoubWFqb29yLWFzc2V0cy10YWItYnV0dG9uIC5zaWRlLWJhci1idXR0b24tbGFiZWwgewogICAgd2hpdGUtc3BhY2U6IHByZS1saW5lOwp9CgovKiBCb3R0b20tcGFuZWwgZ2VuZXJhdGVkIGZlZWQ6IGNvbXBhY3QgY2FyZHMgd2l0aCBvbmx5IHRoZSBnZW5lcmF0aW9uLXRpbWUgcGlsbCAqLwoubWpyLWJvdHRvbS1mZWVkIHsKICAgIG1pbi1oZWlnaHQ6IDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItYW0tZ3JpZC1zY3JvbGwgewogICAgZmxleDogMSAxIGF1dG87CiAgICBtaW4taGVpZ2h0OiAwOwogICAgaGVpZ2h0OiAxMDAlOwogICAgb3ZlcmZsb3c6IGF1dG87CiAgICBzY3JvbGxiYXItZ3V0dGVyOiBzdGFibGU7CiAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yLXk6IGNvbnRhaW47CiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICB0b3VjaC1hY3Rpb246IHBhbi15OwogICAgc2Nyb2xsLWJlaGF2aW9yOiBzbW9vdGg7CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47CiAgICBzY3JvbGxiYXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yLCAjMmYzNTQwKSA3MCUsICM3ZjhlYTMgMzAlKSBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCwgIzE2MTkxZikgODglLCAjMDAwIDEyJSk7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci1hbS1ncmlkLXNjcm9sbDo6LXdlYmtpdC1zY3JvbGxiYXIsCi5tanItZmVlZC1ncm91cC1wb3BvdmVyLWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiAxMHB4OwogICAgaGVpZ2h0OiAxMHB4Owp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItYW0tZ3JpZC1zY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLAoubWpyLWZlZWQtZ3JvdXAtcG9wb3Zlci1ncmlkOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMiwgIzJmMzU0MCkgNzAlLCAjN2Y4ZWEzIDMwJSk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWFtLWdyaWQtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhci10cmFjaywKLm1qci1mZWVkLWdyb3VwLXBvcG92ZXItZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTAsICMxNjE5MWYpIDg4JSwgIzAwMCAxMiUpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkIHsKICAgIGdhcDogNnB4ICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heChtaW4oMTAwJSwgMTMycHgpLCAxZnIpKSAhaW1wb3J0YW50OwogICAgbWluLWhlaWdodDogMDsKICAgIGhlaWdodDogYXV0bzsKICAgIGFsaWduLWNvbnRlbnQ6IHN0YXJ0Owp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZCwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmQgewogICAgYm9yZGVyLXJhZGl1czogMTJweCAhaW1wb3J0YW50OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA5MiUsICMwMDAgOCUpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4yMikgIWltcG9ydGFudDsKICAgIHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50Owp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZDpob3ZlciwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmQ6aG92ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiAwIDEwcHggMjRweCByZ2JhKDAsIDAsIDAsIDAuMjgpICFpbXBvcnRhbnQ7CgoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZC5pcy1zZWxlY3RlZCB7CiAgICBib3gtc2hhZG93OgogICAgICAgIDAgMCAwIDNweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSA4MCUsIHZhcigtLWNvbnRlbnQtZmcpKSwKICAgICAgICAwIDAgMCA2cHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1jYXJkLXNlbGVjdGlvbi1jb2xvcikgMzAlLCB0cmFuc3BhcmVudCksCiAgICAgICAgMCAwIDIwcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1jYXJkLXNlbGVjdGlvbi1jb2xvcikgNDAlLCB0cmFuc3BhcmVudCksCiAgICAgICAgMCAxMHB4IDI4cHggcmdiYSgwLDAsMCwwLjI4KSAhaW1wb3J0YW50OwogICAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLW1qci1jYXJkLXNlbGVjdGlvbi1jb2xvcikgIWltcG9ydGFudDsKICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7Cn0KfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gewogICAgb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iIHsKICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7CiAgICBpc29sYXRpb246IGlzb2xhdGU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iOjpiZWZvcmUsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iOjphZnRlciwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItdGh1bWI6OmJlZm9yZSwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItdGh1bWI6OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAtMTsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxNDBtcyBlYXNlLCBvcGFjaXR5IDE0MG1zIGVhc2U7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iOjpiZWZvcmUsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iOjpiZWZvcmUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNXB4LCA1cHgpIHNjYWxlKDAuOTg1KTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEwKSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzKSksCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEsICMyMDI0MmIpIDg0JSwgIzAwMCAxNiUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjE2KTsKICAgIG9wYWNpdHk6IDAuOTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItdGh1bWI6OmFmdGVyLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci10aHVtYjo6YWZ0ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTBweCwgMTBweCkgc2NhbGUoMC45Nyk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNiksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMikpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wLCAjMTYxOTFmKSA4MiUsICMwMDAgMTglKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBib3gtc2hhZG93OiAwIDEycHggMjJweCByZ2JhKDAsIDAsIDAsIDAuMTQpOwogICAgb3BhY2l0eTogMC43NTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOmhvdmVyIC5tanItdGh1bWI6OmJlZm9yZSwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOmhvdmVyIC5tanItdGh1bWI6OmJlZm9yZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg2cHgsIDZweCkgc2NhbGUoMC45ODUpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl06aG92ZXIgLm1qci10aHVtYjo6YWZ0ZXIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTpob3ZlciAubWpyLXRodW1iOjphZnRlciB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMnB4LCAxMnB4KSBzY2FsZSgwLjk3KTsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLXRodW1iIHsKICAgIGFzcGVjdC1yYXRpbzogMC45NSAvIDEgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA3MiUsICMwMDAgMjglKSAhaW1wb3J0YW50Owp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItdGh1bWItcGxheSB7CiAgICBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IGNlbnRlciwgcmdiYSgwLCAwLCAwLCAwLjE4KSwgcmdiYSgwLCAwLCAwLCAwLjA0KSAzOCUsIHRyYW5zcGFyZW50IDcwJSk7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci1iYWRnZS1leHQsCi5tanItYm90dG9tLWZlZWQgLm1qci1iYWRnZS1yYXRpbmcsCi5tanItYm90dG9tLWZlZWQgLm1qci1iYWRnZS10YWdzIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC45Mik7CiAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgbGVmdDsKfQoKLyog4pSA4pSAIEZlZWQgY2FyZCBpbmZvOiBkZWZhdWx0IGhpZGRlbiwgdG9nZ2xlZCB2aWEgbWpyLWZlZWQtc2hvdy0qIGNsYXNzZXMgb24gLm1qci1ncmlkIOKUgOKUgCAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZC1pbmZvIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDRweCA2cHggIWltcG9ydGFudDsKICAgIG1pbi13aWR0aDogMDsKfQoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWluZm8gLm1qci1jYXJkLWluZm8gewogICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKfQoKLyogRmVlZCBmaWxlbmFtZSAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZC1maWxlbmFtZSB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfQoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWZpbGVuYW1lIC5tanItY2FyZC1maWxlbmFtZSB7IGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IH0KCi8qIEZlZWQgZGltZW5zaW9ucyAvIGR1cmF0aW9uICovCi5tanItYm90dG9tLWZlZWQgLm1qci1tZXRhLXJlcywKLm1qci1ib3R0b20tZmVlZCAubWpyLW1ldGEtZHVyYXRpb24geyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1kaW1lbnNpb25zIC5tanItbWV0YS1yZXMsCi5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctZGltZW5zaW9ucyAubWpyLW1ldGEtZHVyYXRpb24geyBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsgfQoKLyogRmVlZCBkYXRlL3RpbWUgKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLW1ldGEtZGF0ZSwKLm1qci1ib3R0b20tZmVlZCAubWpyLW1ldGEtdGltZS12YWwgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1kYXRlIC5tanItbWV0YS1kYXRlLAoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWRhdGUgLm1qci1tZXRhLXRpbWUtdmFsIHsgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7IH0KCi8qIEZlZWQgZ2VuZXJhdGlvbiB0aW1lIGJhZGdlICovCi5tanItYm90dG9tLWZlZWQgLm1qci1tZXRhLWdlbnRpbWUgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1nZW50aW1lIC5tanItbWV0YS1nZW50aW1lIHsgZGlzcGxheTogaW5saW5lLWZsZXggIWltcG9ydGFudDsgfQoKLyogRmVlZCB3b3JrZmxvdyBkb3QgKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQtZG90LXdyYXBwZXIgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1kb3QgLm1qci1jYXJkLWRvdC13cmFwcGVyIHsgZGlzcGxheTogaW5saW5lLWZsZXggIWltcG9ydGFudDsgfQoKLyogRmVlZCBiYWRnZXMgKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWJhZGdlLWV4dCB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfQoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWJhZGdlcy1leHQgLm1qci1iYWRnZS1leHQgeyBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7IH0KCi5tanItYm90dG9tLWZlZWQgLm1qci1iYWRnZS1yYXRpbmcgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1iYWRnZXMtcmF0aW5nIC5tanItYmFkZ2UtcmF0aW5nIHsgZGlzcGxheTogZmxleCAhaW1wb3J0YW50OyB9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItYmFkZ2UtdGFncyB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfQoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWJhZGdlcy10YWdzIC5tanItYmFkZ2UtdGFncyB7IGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsgfQoKLyogRmVlZCBtZXRhIHJvdyBzdHlsaW5nIOKAlCBmbGV4IGxheW91dCBzbyB2aXNpYmxlIGl0ZW1zIHN0YXkgc2VwYXJhdGVkICovCi5tanItYm90dG9tLWZlZWQgLm1qci1jYXJkLW1ldGEtcm93IHsKICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsKICAgIGZsZXgtd3JhcDogbm93cmFwICFpbXBvcnRhbnQ7CiAgICBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7CiAgICBnYXA6IDVweCAhaW1wb3J0YW50OwogICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50OwogICAgbWluLXdpZHRoOiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLXJpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICBsaW5lLWhlaWdodDogMS4zICFpbXBvcnRhbnQ7CiAgICBvcGFjaXR5OiAwLjc4ICFpbXBvcnRhbnQ7CiAgICBmb250LXNpemU6IDAuOGVtICFpbXBvcnRhbnQ7CiAgICAvKiB0ZXh0LW92ZXJmbG93IGVsbGlwc2lzIGRvZXNuJ3QgYXBwbHkgb24gYSBmbGV4IGNvbnRhaW5lciBpdHNlbGYgKi8KfQovKiBFYWNoIG1ldGEgc3BhbiB0cnVuY2F0ZXMgaW5kaXZpZHVhbGx5IGlmIHRvbyBsb25nICovCi5tanItYm90dG9tLWZlZWQgLm1qci1jYXJkLW1ldGEtcm93ID4gc3BhbiB7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgbWluLXdpZHRoOiAwOwogICAgZmxleC1zaHJpbms6IDE7Cn0KLyogR2VudGltZSBiYWRnZSBhbmQgdGltZSB2YWx1ZSBzaG91bGQgc3RheSB2aXNpYmxlIChkb24ndCBzaHJpbmsgYXdheSkgKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQtbWV0YS1yb3cgPiAubWpyLW1ldGEtZ2VudGltZSwKLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQtbWV0YS1yb3cgPiAubWpyLW1ldGEtdGltZS12YWwgewogICAgZmxleC1zaHJpbms6IDA7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctZ2VudGltZSAubWpyLW1ldGEtZ2VudGltZSB7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAzcHg7CiAgICBwYWRkaW5nOiAzcHggN3B4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDEwLCAxNCwgMjAsIDAuNzQpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMjIpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDgwMCAhaW1wb3J0YW50OwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDE1ZW07CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk4KTsKICAgIHRleHQtc2hhZG93OgogICAgICAgIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuOSksCiAgICAgICAgMCAwIDEwcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKfQoKLyog4pSA4pSAIEF1ZGlvIC8gM0QgcGxhY2Vob2xkZXIgdGh1bWJuYWlscyBpbiB0aGUgZmVlZCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCi8qIEF1ZGlvIGNhcmRzIHNob3cgdGhlIHdhdmVmb3JtIHNwcml0ZTsgZ2l2ZSBpdCBhIGRpc3RpbmN0IGJhY2tncm91bmQgc28gaXQKICAgZG9lc24ndCBsb29rIGxpa2UgYSBicm9rZW4gaW1hZ2UgcGxhY2Vob2xkZXIgaW4gdGhlIGZlZWQuICovCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWtpbmQ9ImF1ZGlvIl0gLm1qci10aHVtYiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZXh0PSJtcDMiXSAubWpyLXRodW1iLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1leHQ9IndhdiJdIC5tanItdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWV4dD0ib2dnIl0gLm1qci10aHVtYiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZXh0PSJmbGFjIl0gLm1qci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgNjAlLCAjMWExZjJiIDQwJSkgIWltcG9ydGFudDsKfQoKLyogM0QgbW9kZWwgY2FyZHMgdXNlIGFuIGljb24gcGxhY2Vob2xkZXIg4oCUIGFkZCBhIHN1YnRsZSBncmFkaWVudCBzbyB0aGV5IHJlYWQKICAgYXMgaW50ZW50aW9uYWwgcmF0aGVyIHRoYW4gbWlzc2luZy4gKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanIta2luZD0ibW9kZWwzZCJdIC5tanItdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWV4dD0iZ2xiIl0gLm1qci10aHVtYiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZXh0PSJnbHRmIl0gLm1qci10aHVtYiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZXh0PSJvYmoiXSAubWpyLXRodW1iLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1leHQ9ImZieCJdIC5tanItdGh1bWIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDUwJSwgIzBkMTExNyA1MCUpICFpbXBvcnRhbnQ7Cn0KCi8qIOKUgOKUgCBGZWVkIGdyb3VwIGJ1dHRvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCi5tanItYm90dG9tLWZlZWQgLm1qci1mZWVkLWdyb3VwLWJ1dHRvbiB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDM0cHg7CiAgICByaWdodDogNnB4OwogICAgei1pbmRleDogMTE7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogNHB4OwogICAgbWluLXdpZHRoOiAyOHB4OwogICAgbWluLWhlaWdodDogMjhweDsKICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDEwLCAxNCwgMjAsIDAuNzQpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45Nik7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjI0KTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAxMjBtcyBlYXNlLCB0cmFuc2Zvcm0gODBtcyBlYXNlOwp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItZmVlZC1ncm91cC1idXR0b246aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgxOCwgMjQsIDM0LCAwLjkpOwp9CgoubWpyLWZlZWQtZ3JvdXAtYnV0dG9uLWljb24gewogICAgZm9udC1zaXplOiAxMXB4OwogICAgb3BhY2l0eTogMC45Owp9CgoubWpyLWZlZWQtZ3JvdXAtYnV0dG9uLWNvdW50IHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLyog4pSA4pSAIEZlZWQgZ3JvdXAgcG9wb3ZlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCi5tanItZmVlZC1ncm91cC1wb3BvdmVyIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyMjIpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yLCAjM2EzYTNhKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnLCA4cHgpOwogICAgYm94LXNoYWRvdzogMCA4cHggMjhweCByZ2JhKDAsIDAsIDAsIDAuNDUpOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci1mZWVkLWdyb3VwLXBvcG92ZXItdGl0bGUgewogICAgcGFkZGluZzogOHB4IDEwcHggNHB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBtYXJnaW4tYm90dG9tOiA4cHg7Cn0KCi5tanItZmVlZC1ncm91cC1wb3BvdmVyLWdyaWQgewogICAgcGFkZGluZzogNHB4IDhweCAxMHB4OwogICAgbWF4LWhlaWdodDogMzYwcHg7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgIHNjcm9sbGJhci1ndXR0ZXI6IHN0YWJsZTsKICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjsKICAgIHNjcm9sbGJhci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIsICMyZjM1NDApIDcwJSwgIzdmOGVhMyAzMCUpIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wLCAjMTYxOTFmKSA4OCUsICMwMDAgMTIlKTsKfQoKLm1qci1mZWVkLWdyb3VwLWJ1dHRvbi1pY29uLAoubWpyLWZlZWQtZ3JvdXAtYnV0dG9uLWNvdW50IHsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoubWpyLWZlZWQtZ3JvdXAtbWVtYmVyLWNhcmQgewogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWZlZWQtZ3JvdXAtbWVtYmVyLWNhcmQgLm1qci10aHVtYiB7CiAgICBhc3BlY3QtcmF0aW86IDEgLyAxICFpbXBvcnRhbnQ7Cn0KCi5tanItZmVlZC1ncm91cC1tZW1iZXItY2FyZCAubWpyLWNhcmQtaW5mbyB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1zdGFjay1ncm91cC1idXR0b24gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAzNHB4OwogICAgcmlnaHQ6IDZweDsKICAgIHotaW5kZXg6IDExOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDRweDsKICAgIG1pbi13aWR0aDogMjhweDsKICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgxMCwgMTQsIDIwLCAwLjc0KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTYpOwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjI0KTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAxMjBtcyBlYXNlLCB0cmFuc2Zvcm0gODBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItc3RhY2stZ3JvdXAtYnV0dG9uOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTgsIDI0LCAzNCwgMC45KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXN0YWNrLWdyb3VwLWJ1dHRvbiA+ICogewogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5tanItZmlsbXN0cmlwOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICB3aWR0aDogNHB4OwogICAgaGVpZ2h0OiA0cHg7Cn0KCi5tanItZmlsbXN0cmlwOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKfQoKLm1qci1maWxtc3RyaXA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKfQoKLm1qci1maWxtc3RyaXA6aG92ZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yMik7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1zdGFjay1ncm91cC1idXR0b24tY291bnQgewogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgovKiDilIDilIAgRHVwbGljYXRlIHN0YWNrIGJ1dHRvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLyogU2hvd3Mgb24gdGhlIHByaW1hcnkgY2FyZCB3aGVuIHNhbWUtZmlsZW5hbWUgZHVwbGljYXRlcyBleGlzdC4gICAgICAgICAgICAgKi8KLyogUG9zaXRpb25lZCBhdCBib3R0b20tcmlnaHQgdG8gbm90IG92ZXJsYXAgdGhlIHN0YWNrLWdyb3VwIGJ1dHRvbiAodG9wLXJpZ2h0KS4gKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWR1cC1zdGFjay1idXR0b24gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYm90dG9tOiAzMHB4OwogICAgcmlnaHQ6IDZweDsKICAgIHotaW5kZXg6IDExOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDRweDsKICAgIG1pbi13aWR0aDogMjhweDsKICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDE4MCwgMCwgMC4zOCk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMzAsIDE4LCAwLCAwLjgyKTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjAwLCA2MCwgMC45Nik7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjMyKTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzLCB0cmFuc2Zvcm0gODBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZHVwLXN0YWNrLWJ1dHRvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDUwLCAzMCwgMCwgMC45NCk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAxODAsIDAsIDAuNik7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1kdXAtc3RhY2stYnV0dG9uID4gKiB7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWR1cC1zdGFjay1jb3VudCB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWR1cC1zdGFja2VkPSJ0cnVlIl0gLm1qci1kdXAtc3RhY2stYnV0dG9uIHsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4zMiksCiAgICAgICAgMCAwIDAgMXB4IHJnYmEoMjU1LCAxODAsIDAsIDAuMik7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXN0YWNrLWdyb3VwLWJ1dHRvbiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItZmVlZC1ncm91cC1idXR0b24gewogICAgYm94LXNoYWRvdzoKICAgICAgICAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjI0KSwKICAgICAgICAwIDAgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOmhvdmVyLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1kdXAtc3RhY2tlZD0idHJ1ZSJdOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50Owp9CgovKiDilIDilIAgVmlzdWFsIHN0YWNraW5nIGVmZmVjdCDigJQgbGF5ZXJlZCBjYXJkcyBiZWhpbmQgdGhlIG1haW4gY2FyZCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLyogQ3JlYXRlcyBwc2V1ZG8tZWxlbWVudCAiY2FyZHMiIG9mZnNldCBiZWhpbmQgdGhlIHByaW1hcnkgY2FyZCB0byB2aXN1YWxseSAgICAqLwovKiBjb21tdW5pY2F0ZSB0aGF0IHRoaXMgY2FyZCByZXByZXNlbnRzIGEgZ3JvdXAgb2YgbXVsdGlwbGUgaW1hZ2VzLiAgICAgICAgICAgICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAxOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl06OmJlZm9yZSwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOjphZnRlciB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMxYTFhMmUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgei1pbmRleDogLTE7CiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMTgwbXMgZWFzZSwgb3BhY2l0eSAxODBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl06OmJlZm9yZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgzcHgsIDNweCkgcm90YXRlKDFkZWcpOwogICAgb3BhY2l0eTogMC40NTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOjphZnRlciB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg2cHgsIDZweCkgcm90YXRlKDIuMmRlZyk7CiAgICBvcGFjaXR5OiAwLjI1Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl06aG92ZXI6OmJlZm9yZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg0cHgsIDRweCkgcm90YXRlKDEuNWRlZyk7CiAgICBvcGFjaXR5OiAwLjU1Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl06aG92ZXI6OmFmdGVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDhweCwgOHB4KSByb3RhdGUoM2RlZyk7CiAgICBvcGFjaXR5OiAwLjM1Owp9CgoubWpyLXN0YWNrLWdyb3VwLXBvcG92ZXIgewogICAgd2lkdGg6IG1pbig0NDBweCwgOTJ2dyk7Cn0KCi5tanItc3RhY2stZ3JvdXAtbWVtYmVyLWNhcmQgewogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXN0YWNrLWdyb3VwLW1lbWJlci1jYXJkIC5tanItdGh1bWIgewogICAgYXNwZWN0LXJhdGlvOiAxIC8gMSAhaW1wb3J0YW50Owp9CgoubWpyLXN0YWNrLWdyb3VwLW1lbWJlci1jYXJkIC5tanItY2FyZC1pbmZvIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIExpZ2h0IG1vZGUgb3ZlcnJpZGVzIChDb21meVVJIHYxLjQyKyBpbXByb3ZlZCBsaWdodCB0aGVtZSkKICogVXNlcyBDb21meVVJIGRhdGEtdGhlbWUgYXR0cmlidXRlIHdoZW4gc2V0LCB3aXRoCiAqIHByZWZlcnMtY29sb3Itc2NoZW1lIGFzIGEgZmFsbGJhY2sgZm9yIG9sZGVyIHZlcnNpb25zLgogKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCi8qIENvbWZ5VUkgc2V0cyBkYXRhLXRoZW1lPSJsaWdodCIgb24gPGh0bWw+IG9yIDxib2R5PiAqLwo6aXMoW2RhdGEtdGhlbWU9ImxpZ2h0Il0sIFtkYXRhLWNvbG9yLXNjaGVtZT0ibGlnaHQiXSkgLm1qci1hc3NldHMtbWFuYWdlciwKOmlzKFtkYXRhLXRoZW1lPSJsaWdodCJdLCBbZGF0YS1jb2xvci1zY2hlbWU9ImxpZ2h0Il0pIC5tanItcG9wb3ZlciB7CiAgICAtLW1qci1zdXJmYWNlLTA6IHZhcigtLWludGVyZmFjZS1wYW5lbC1zdXJmYWNlLCAjZjBmMGYwKTsKICAgIC0tbWpyLXN1cmZhY2UtMTogdmFyKC0taW50ZXJmYWNlLW1lbnUtc3VyZmFjZSwgI2ZhZmFmYSk7CiAgICAtLW1qci1zdXJmYWNlLTI6IHZhcigtLWludGVyZmFjZS1wYW5lbC1ob3Zlci1zdXJmYWNlLCAjZThlOGU4KTsKICAgIC0tbWpyLXN1cmZhY2UtMzogdmFyKC0tbW9kYWwtY2FyZC1iYWNrZ3JvdW5kLCAjZmZmZmZmKTsKICAgIC0tbWpyLWJvcmRlcjogdmFyKC0tYm9yZGVyLWRlZmF1bHQsIHJnYmEoMCwgMCwgMCwgMC4xNCkpOwogICAgLS1tanItbXV0ZWQ6IHZhcigtLW11dGVkLWZvcmVncm91bmQsIHJnYmEoMCwgMCwgMCwgMC41NSkpOwogICAgLS1tanItY2FyZC1ob3Zlci1jb2xvcjogdmFyKC0taW50ZXJmYWNlLXBhbmVsLWhvdmVyLXN1cmZhY2UsICNlMGUwZTApOwp9CgpAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkgewogICAgLyogRmFsbGJhY2s6IG9ubHkgYXBwbHkgaWYgQ29tZnlVSSBoYXNuJ3Qgc2V0IGFuIGV4cGxpY2l0IGRhdGEtdGhlbWUgKi8KICAgIC5tanItYXNzZXRzLW1hbmFnZXI6bm90KFtkYXRhLXRoZW1lLWFwcGxpZWRdKSwKICAgIC5tanItcG9wb3Zlcjpub3QoW2RhdGEtdGhlbWUtYXBwbGllZF0pIHsKICAgICAgICAtLW1qci1zdXJmYWNlLTA6IHZhcigtLWludGVyZmFjZS1wYW5lbC1zdXJmYWNlLCAjZjBmMGYwKTsKICAgICAgICAtLW1qci1zdXJmYWNlLTE6IHZhcigtLWludGVyZmFjZS1tZW51LXN1cmZhY2UsICNmYWZhZmEpOwogICAgICAgIC0tbWpyLXN1cmZhY2UtMjogdmFyKC0taW50ZXJmYWNlLXBhbmVsLWhvdmVyLXN1cmZhY2UsICNlOGU4ZTgpOwogICAgICAgIC0tbWpyLXN1cmZhY2UtMzogdmFyKC0tbW9kYWwtY2FyZC1iYWNrZ3JvdW5kLCAjZmZmZmZmKTsKICAgICAgICAtLW1qci1ib3JkZXI6IHZhcigtLWJvcmRlci1kZWZhdWx0LCByZ2JhKDAsIDAsIDAsIDAuMTQpKTsKICAgICAgICAtLW1qci1tdXRlZDogdmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjU1KSk7CiAgICAgICAgLS1tanItY2FyZC1ob3Zlci1jb2xvcjogdmFyKC0taW50ZXJmYWNlLXBhbmVsLWhvdmVyLXN1cmZhY2UsICNlMGUwZTApOwogICAgfQp9CgovKiDilIDilIDilIAgU2tlbGV0b24gbG9hZGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCi5tanItY2FyZC1za2VsZXRvbiB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsICMzYTNhM2EpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbGcsIDhweCk7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgLyogTWF0Y2ggLm1qci10aHVtYiBhc3BlY3QgcmF0aW8gc28gc2tlbGV0b25zIGhhdmUgdGhlIHNhbWUgZm9vdHByaW50IGFzIHJlYWwgY2FyZHMuICovCiAgICBhc3BlY3QtcmF0aW86IDEgLyAxOwp9CgovKiBTaGltbWVyIHN3ZWVwICovCi5tanItY2FyZC1za2VsZXRvbjo6YWZ0ZXIgewogICAgY29udGVudDogJyc7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICA5MGRlZywKICAgICAgICB0cmFuc3BhcmVudCAwJSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMiwgIzNhM2EzYSkgODAlLCB0cmFuc3BhcmVudCkgNTAlLAogICAgICAgIHRyYW5zcGFyZW50IDEwMCUKICAgICk7CiAgICBhbmltYXRpb246IG1qci1zaGltbWVyIDEuNHMgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpOwp9CgpAa2V5ZnJhbWVzIG1qci1zaGltbWVyIHsKICAgIGZyb20geyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpOyB9CiAgICB0byAgIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpOyB9Cn0KCkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7CiAgICAubWpyLWNhcmQtc2tlbGV0b246OmFmdGVyIHsgYW5pbWF0aW9uOiBub25lOyB9Cn0KCi8qIOKUgOKUgOKUgCBSZXNwb25zaXZlIHN1bW1hcnkgYmFyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoKLyoKICogRW5hYmxlIGNvbnRhaW5lciBxdWVyaWVzIG9uIHRoZSBzdW1tYXJ5IGJhciBzbyBjaGlsZHJlbiBjYW4gcmVzcG9uZCB0byBpdHMKICogYWN0dWFsIHJlbmRlcmVkIHdpZHRoIChlLmcuIHdoZW4gdGhlIHBhbmVsIGlzIGRvY2tlZCBpbiBhIG5hcnJvdyBzaWRlYmFyKS4KICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zdW1tYXJ5IHsKICAgIGNvbnRhaW5lci10eXBlOiBpbmxpbmUtc2l6ZTsKICAgIGNvbnRhaW5lci1uYW1lOiBtanItc3VtbWFyeS1iYXI7Cn0KCi8qIEJlbG93IH4zODAgcHg6IGhpZGUgdGhlIHBpbGxzL3JpZ2h0IHNlY3Rpb24gdG8gcHJldmVudCBvdmVyZmxvdy4gKi8KQGNvbnRhaW5lciBtanItc3VtbWFyeS1iYXIgKG1heC13aWR0aDogMzgwcHgpIHsKICAgIC5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zdW1tYXJ5LXJpZ2h0IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQogICAgLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXN1bW1hcnktdGV4dCB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgfQp9Cg==", import.meta.url).toString(), i = document.createElement("link");
i.id = t, i.rel = "stylesheet", i.type = "text/css", i.href = n, i.onerror = () => {
var o;
try {
@@ -5018,7 +5018,7 @@ function Jh({ enabled: e = !0 } = {}) {
}, document.head.appendChild(i), i.onload = () => {
var o;
try {
- document.documentElement.dataset.mjrThemeComfy = "1", Qc();
+ document.documentElement.dataset.mjrThemeComfy = "1", _c();
} catch (r) {
(o = console.debug) == null || o.call(console, r);
}
@@ -5027,12 +5027,12 @@ function Jh({ enabled: e = !0 } = {}) {
console.warn("Majoor: failed to load Comfy theme CSS", n);
}
}
-Qc();
-const uc = "mjr-runtime-status-dashboard", Th = "__mjr_write_token";
-function Bh() {
+_c();
+const mc = "mjr-runtime-status-dashboard", TC = "__mjr_write_token";
+function KC() {
var e;
try {
- return String(((e = sessionStorage == null ? void 0 : sessionStorage.getItem) == null ? void 0 : e.call(sessionStorage, Th)) || "").trim();
+ return String(((e = sessionStorage == null ? void 0 : sessionStorage.getItem) == null ? void 0 : e.call(sessionStorage, TC)) || "").trim();
} catch {
return "";
}
@@ -5044,8 +5044,8 @@ function du(e, t) {
const i = document.createElement("div");
return i.style.whiteSpace = "nowrap", i.style.lineHeight = "1.35", t === "auth" && (i.style.marginTop = "4px", i.style.fontWeight = "600"), e.appendChild(i), e[n] = i, i;
}
-function Uh(e) {
- const t = Bh(), i = String((e == null ? void 0 : e.token_hint) || "").trim() || (t ? `...${t.slice(-4)}` : ""), o = (e == null ? void 0 : e.allow_write) !== !1, r = (e == null ? void 0 : e.require_auth) === !0, l = (e == null ? void 0 : e.token_configured) === !0;
+function BC(e) {
+ const t = KC(), i = String((e == null ? void 0 : e.token_hint) || "").trim() || (t ? `...${t.slice(-4)}` : ""), o = (e == null ? void 0 : e.allow_write) !== !1, r = (e == null ? void 0 : e.require_auth) === !0, l = (e == null ? void 0 : e.token_configured) === !0;
return o ? t ? {
text: m("runtime.writeAuthActive", "Write auth: active {tokenHint}", {
tokenHint: i || "(session)"
@@ -5072,10 +5072,10 @@ function Uh(e) {
color: "#ff9b9b"
};
}
-function Kh() {
+function UC() {
var e, t, n;
try {
- const i = document.querySelector(".mjr-assets-manager.mjr-am-container"), o = document.getElementById(uc);
+ const i = document.querySelector(".mjr-assets-manager.mjr-am-container"), o = document.getElementById(mc);
if (!i) {
try {
(e = o == null ? void 0 : o.remove) == null || e.call(o);
@@ -5090,41 +5090,41 @@ function Kh() {
} catch (l) {
(n = console.debug) == null || n.call(console, l);
}
- let r = document.getElementById(uc);
- return r ? r.parentElement !== i && i.appendChild(r) : (r = document.createElement("div"), r.id = uc, r.style.position = "absolute", r.style.bottom = "10px", r.style.right = "10px", r.style.zIndex = "9999", r.style.padding = "6px 10px", r.style.borderRadius = "10px", r.style.border = "1px solid rgba(255,255,255,0.16)", r.style.background = "rgba(0,0,0,0.45)", r.style.backdropFilter = "blur(4px)", r.style.color = "var(--content-fg, #fff)", r.style.fontSize = "11px", r.style.pointerEvents = "none", r.style.display = "flex", r.style.flexDirection = "column", i.appendChild(r)), r;
+ let r = document.getElementById(mc);
+ return r ? r.parentElement !== i && i.appendChild(r) : (r = document.createElement("div"), r.id = mc, r.style.position = "absolute", r.style.bottom = "10px", r.style.right = "10px", r.style.zIndex = "9999", r.style.padding = "6px 10px", r.style.borderRadius = "10px", r.style.border = "1px solid rgba(255,255,255,0.16)", r.style.background = "rgba(0,0,0,0.45)", r.style.backdropFilter = "blur(4px)", r.style.color = "var(--content-fg, #fff)", r.style.fontSize = "11px", r.style.pointerEvents = "none", r.style.display = "flex", r.style.flexDirection = "column", i.appendChild(r)), r;
} catch {
return null;
}
}
async function uu() {
var i;
- const e = Kh();
+ const e = UC();
if (!e) return !1;
const t = du(e, "metrics"), n = du(e, "auth");
try {
const [o, r] = await Promise.all([
- Ff(),
- kg()
+ Of(),
+ Xg()
]);
let l = m("runtime.unavailable", "Runtime: unavailable");
if (!(o != null && o.ok) || !(o != null && o.data))
t.textContent = l;
else {
- const c = o.data.db || {}, s = o.data.index || {}, d = o.data.watcher || {}, u = Number(c.active_connections || 0), I = Number(s.enrichment_queue_length || 0), y = Number(d.pending_files || 0);
+ const c = o.data.db || {}, s = o.data.index || {}, d = o.data.watcher || {}, u = Number(c.active_connections || 0), I = Number(s.enrichment_queue_length || 0), A = Number(d.pending_files || 0);
t.textContent = m(
"runtime.metricsLine",
"DB active: {active} | Enrich Q: {enrichQ} | Watcher pending: {pending}",
- { active: u, enrichQ: I, pending: y }
+ { active: u, enrichQ: I, pending: A }
), l = m(
"runtime.metricsTitle",
`Runtime Metrics
DB active connections: {active}
Enrichment queue: {enrichQ}
Watcher pending files: {pending}`,
- { active: u, enrichQ: I, pending: y }
+ { active: u, enrichQ: I, pending: A }
);
}
- const a = Uh(((i = r == null ? void 0 : r.data) == null ? void 0 : i.prefs) || null);
+ const a = BC(((i = r == null ? void 0 : r.data) == null ? void 0 : i.prefs) || null);
return n.textContent = a.text, n.style.color = a.color, e.title = `${l}
${a.text}`, !0;
} catch {
@@ -5132,7 +5132,7 @@ ${a.text}`, !0;
${n.textContent}`, !0;
}
}
-function Dh() {
+function DC() {
var e;
try {
uu().catch(() => {
@@ -5167,7 +5167,7 @@ function oi(e, t, { target: n = null, warnPrefix: i = "[Majoor]" } = {}) {
return !1;
}
}
-const kn = (e, t) => {
+const Nn = (e, t) => {
if (typeof e == "boolean") return e;
if (typeof e == "string") {
const n = e.trim().toLowerCase();
@@ -5175,16 +5175,16 @@ const kn = (e, t) => {
if (["0", "false", "no", "off"].includes(n)) return !1;
}
return !!t;
-}, Gn = (e, t) => {
+}, xn = (e, t) => {
const n = Number(e);
return Number.isFinite(n) ? n : Number(t);
-}, Ks = (e, t, n) => {
+}, Ds = (e, t, n) => {
const i = typeof e == "string" ? e.trim() : String(e ?? "");
return t.includes(i) ? i : n;
-}, Eh = (e) => e === "__proto__" || e === "prototype" || e === "constructor", _g = (e, t) => {
+}, HC = (e) => e === "__proto__" || e === "prototype" || e === "constructor", _g = (e, t) => {
const n = { ...e };
return !t || typeof t != "object" || Object.keys(t).forEach((i) => {
- if (Eh(i)) return;
+ if (HC(i)) return;
const o = t[i];
o && typeof o == "object" && !Array.isArray(o) ? n[i] = _g(e[i] || {}, o) : o !== void 0 && (n[i] = o);
}), n;
@@ -5192,67 +5192,67 @@ const kn = (e, t) => {
small: 80,
medium: 120,
large: 180
-}), eI = Object.freeze(["small", "medium", "large"]), _c = (e, t) => Math.max(60, Math.min(600, Math.round(Gn(e, t)))), Hh = (e = {}) => {
+}), eI = Object.freeze(["small", "medium", "large"]), $c = (e, t) => Math.max(60, Math.min(600, Math.round(xn(e, t)))), EC = (e = {}) => {
const t = Number(e == null ? void 0 : e.minSize);
if (Number.isFinite(t))
- return _c(t, Ge.GRID_MIN_SIZE);
- const n = Ks(
+ return $c(t, Se.GRID_MIN_SIZE);
+ const n = Ds(
String((e == null ? void 0 : e.minSizePreset) || "").toLowerCase(),
eI,
""
);
- return n ? $g[n] : _c(e == null ? void 0 : e.minSize, Ge.GRID_MIN_SIZE);
-}, qh = (e = {}) => _c(e == null ? void 0 : e.minSize, Ge.FEED_GRID_MIN_SIZE), mc = (e) => {
- const t = Math.round(Gn(e, Ge.GRID_MIN_SIZE));
+ return n ? $g[n] : $c(e == null ? void 0 : e.minSize, Se.GRID_MIN_SIZE);
+}, qC = (e = {}) => $c(e == null ? void 0 : e.minSize, Se.FEED_GRID_MIN_SIZE), gc = (e) => {
+ const t = Math.round(xn(e, Se.GRID_MIN_SIZE));
return t <= 100 ? "small" : t >= 150 ? "large" : "medium";
-}, Un = {
+}, Bn = {
debug: {
- safeCall: Ge.DEBUG_SAFE_CALL,
- safeListeners: Ge.DEBUG_SAFE_LISTENERS,
- viewer: Ge.DEBUG_VIEWER
+ safeCall: Se.DEBUG_SAFE_CALL,
+ safeListeners: Se.DEBUG_SAFE_LISTENERS,
+ viewer: Se.DEBUG_VIEWER
},
grid: {
- pageSize: Ge.DEFAULT_PAGE_SIZE,
- minSize: Ge.GRID_MIN_SIZE,
+ pageSize: Se.DEFAULT_PAGE_SIZE,
+ minSize: Se.GRID_MIN_SIZE,
minSizePreset: "medium",
- gap: Ge.GRID_GAP,
- showExtBadge: Ge.GRID_SHOW_BADGES_EXTENSION,
- showRatingBadge: Ge.GRID_SHOW_BADGES_RATING,
- showTagsBadge: Ge.GRID_SHOW_BADGES_TAGS,
- showDetails: Ge.GRID_SHOW_DETAILS,
- showFilename: Ge.GRID_SHOW_DETAILS_FILENAME,
- showDate: Ge.GRID_SHOW_DETAILS_DATE,
- showDimensions: Ge.GRID_SHOW_DETAILS_DIMENSIONS,
- showGenTime: Ge.GRID_SHOW_DETAILS_GENTIME,
- showHoverInfo: Ge.GRID_SHOW_HOVER_INFO,
- showWorkflowDot: Ge.GRID_SHOW_WORKFLOW_DOT,
- videoAutoplayMode: Ge.GRID_VIDEO_AUTOPLAY_MODE,
- starColor: Ge.BADGE_STAR_COLOR,
- badgeImageColor: Ge.BADGE_IMAGE_COLOR,
- badgeVideoColor: Ge.BADGE_VIDEO_COLOR,
- badgeAudioColor: Ge.BADGE_AUDIO_COLOR,
- badgeModel3dColor: Ge.BADGE_MODEL3D_COLOR,
- badgeDuplicateAlertColor: Ge.BADGE_DUPLICATE_ALERT_COLOR
+ gap: Se.GRID_GAP,
+ showExtBadge: Se.GRID_SHOW_BADGES_EXTENSION,
+ showRatingBadge: Se.GRID_SHOW_BADGES_RATING,
+ showTagsBadge: Se.GRID_SHOW_BADGES_TAGS,
+ showDetails: Se.GRID_SHOW_DETAILS,
+ showFilename: Se.GRID_SHOW_DETAILS_FILENAME,
+ showDate: Se.GRID_SHOW_DETAILS_DATE,
+ showDimensions: Se.GRID_SHOW_DETAILS_DIMENSIONS,
+ showGenTime: Se.GRID_SHOW_DETAILS_GENTIME,
+ showHoverInfo: Se.GRID_SHOW_HOVER_INFO,
+ showWorkflowDot: Se.GRID_SHOW_WORKFLOW_DOT,
+ videoAutoplayMode: Se.GRID_VIDEO_AUTOPLAY_MODE,
+ starColor: Se.BADGE_STAR_COLOR,
+ badgeImageColor: Se.BADGE_IMAGE_COLOR,
+ badgeVideoColor: Se.BADGE_VIDEO_COLOR,
+ badgeAudioColor: Se.BADGE_AUDIO_COLOR,
+ badgeModel3dColor: Se.BADGE_MODEL3D_COLOR,
+ badgeDuplicateAlertColor: Se.BADGE_DUPLICATE_ALERT_COLOR
},
infiniteScroll: {
- enabled: Ge.INFINITE_SCROLL_ENABLED,
- rootMargin: Ge.INFINITE_SCROLL_ROOT_MARGIN,
- threshold: Ge.INFINITE_SCROLL_THRESHOLD,
- bottomGapPx: Ge.BOTTOM_GAP_PX
+ enabled: Se.INFINITE_SCROLL_ENABLED,
+ rootMargin: Se.INFINITE_SCROLL_ROOT_MARGIN,
+ threshold: Se.INFINITE_SCROLL_THRESHOLD,
+ bottomGapPx: Se.BOTTOM_GAP_PX
},
siblings: {
hidePngSiblings: !0
},
autoScan: {
- onStartup: Ge.AUTO_SCAN_ON_STARTUP
+ onStartup: Se.AUTO_SCAN_ON_STARTUP
},
scan: {
fastMode: !0
},
watcher: {
enabled: !0,
- debounceMs: Ge.WATCHER_DEBOUNCE_MS,
- dedupeTtlMs: Ge.WATCHER_DEDUPE_TTL_MS,
+ debounceMs: Se.WATCHER_DEBOUNCE_MS,
+ dedupeTtlMs: Se.WATCHER_DEDUPE_TTL_MS,
maxPending: 500,
minSize: 100,
maxSize: 4294967296
@@ -5261,29 +5261,29 @@ const kn = (e, t) => {
confirmDeletion: !0
},
status: {
- pollInterval: Ge.STATUS_POLL_INTERVAL
+ pollInterval: Se.STATUS_POLL_INTERVAL
},
viewer: {
- allowPanAtZoom1: Ge.VIEWER_ALLOW_PAN_AT_ZOOM_1,
- disableWebGL: Ge.VIEWER_DISABLE_WEBGL_VIDEO,
- pauseDuringExecution: Ge.VIEWER_PAUSE_DURING_EXECUTION,
- floatingPauseDuringExecution: Ge.FLOATING_VIEWER_PAUSE_DURING_EXECUTION,
- mfvLiveDefault: Ge.MFV_LIVE_DEFAULT,
- mfvPreviewDefault: Ge.MFV_PREVIEW_DEFAULT,
- videoGradeThrottleFps: Ge.VIEWER_VIDEO_GRADE_THROTTLE_FPS,
- scopesFps: Ge.VIEWER_SCOPES_FPS,
- metaTtlMs: Ge.VIEWER_META_TTL_MS,
- metaMaxEntries: Ge.VIEWER_META_MAX_ENTRIES,
+ allowPanAtZoom1: Se.VIEWER_ALLOW_PAN_AT_ZOOM_1,
+ disableWebGL: Se.VIEWER_DISABLE_WEBGL_VIDEO,
+ pauseDuringExecution: Se.VIEWER_PAUSE_DURING_EXECUTION,
+ floatingPauseDuringExecution: Se.FLOATING_VIEWER_PAUSE_DURING_EXECUTION,
+ mfvLiveDefault: Se.MFV_LIVE_DEFAULT,
+ mfvPreviewDefault: Se.MFV_PREVIEW_DEFAULT,
+ videoGradeThrottleFps: Se.VIEWER_VIDEO_GRADE_THROTTLE_FPS,
+ scopesFps: Se.VIEWER_SCOPES_FPS,
+ metaTtlMs: Se.VIEWER_META_TTL_MS,
+ metaMaxEntries: Se.VIEWER_META_MAX_ENTRIES,
mfvSidebarPosition: "right",
- mfvPreviewMethod: Ge.MFV_PREVIEW_METHOD,
+ mfvPreviewMethod: Se.MFV_PREVIEW_METHOD,
ltxavRgbFallback: !1
},
rtHydrate: {
- concurrency: Ge.RT_HYDRATE_CONCURRENCY,
- queueMax: Ge.RT_HYDRATE_QUEUE_MAX,
- seenMax: Ge.RT_HYDRATE_SEEN_MAX,
- pruneBudget: Ge.RT_HYDRATE_PRUNE_BUDGET,
- seenTtlMs: Ge.RT_HYDRATE_SEEN_TTL_MS
+ concurrency: Se.RT_HYDRATE_CONCURRENCY,
+ queueMax: Se.RT_HYDRATE_QUEUE_MAX,
+ seenMax: Se.RT_HYDRATE_SEEN_MAX,
+ pruneBudget: Se.RT_HYDRATE_PRUNE_BUDGET,
+ seenTtlMs: Se.RT_HYDRATE_SEEN_TTL_MS
},
observability: {
enabled: !1,
@@ -5292,16 +5292,16 @@ const kn = (e, t) => {
verboseStartupLogs: !1
},
feed: {
- minSize: Ge.FEED_GRID_MIN_SIZE,
- showInfo: Ge.FEED_SHOW_INFO,
- showFilename: Ge.FEED_SHOW_FILENAME,
- showDimensions: Ge.FEED_SHOW_DIMENSIONS,
- showDate: Ge.FEED_SHOW_DATE,
- showGenTime: Ge.FEED_SHOW_GENTIME,
- showWorkflowDot: Ge.FEED_SHOW_WORKFLOW_DOT,
- showExtBadge: Ge.FEED_SHOW_BADGES_EXTENSION,
- showRatingBadge: Ge.FEED_SHOW_BADGES_RATING,
- showTagsBadge: Ge.FEED_SHOW_BADGES_TAGS
+ minSize: Se.FEED_GRID_MIN_SIZE,
+ showInfo: Se.FEED_SHOW_INFO,
+ showFilename: Se.FEED_SHOW_FILENAME,
+ showDimensions: Se.FEED_SHOW_DIMENSIONS,
+ showDate: Se.FEED_SHOW_DATE,
+ showGenTime: Se.FEED_SHOW_GENTIME,
+ showWorkflowDot: Se.FEED_SHOW_WORKFLOW_DOT,
+ showExtBadge: Se.FEED_SHOW_BADGES_EXTENSION,
+ showRatingBadge: Se.FEED_SHOW_BADGES_RATING,
+ showTagsBadge: Se.FEED_SHOW_BADGES_TAGS
},
sidebar: {
position: "right",
@@ -5334,14 +5334,14 @@ const kn = (e, t) => {
tagsTTLms: 3e4
},
search: {
- maxResults: Ge.SEARCH_DEFAULT_LIMIT
+ maxResults: Se.SEARCH_DEFAULT_LIMIT
},
ai: {
vectorSearchEnabled: !0,
verboseAiLogs: !1
},
executionGrouping: {
- enabled: Ge.EXECUTION_GROUPING_ENABLED
+ enabled: Se.EXECUTION_GROUPING_ENABLED
},
workflowMinimap: {
enabled: !1,
@@ -5355,10 +5355,10 @@ const kn = (e, t) => {
size: "comfortable"
},
ui: {
- cardHoverColor: Ge.UI_CARD_HOVER_COLOR,
- cardSelectionColor: Ge.UI_CARD_SELECTION_COLOR,
- ratingColor: Ge.UI_RATING_COLOR,
- tagColor: Ge.UI_TAG_COLOR
+ cardHoverColor: Se.UI_CARD_HOVER_COLOR,
+ cardSelectionColor: Se.UI_CARD_SELECTION_COLOR,
+ ratingColor: Se.UI_RATING_COLOR,
+ tagColor: Se.UI_TAG_COLOR
},
security: {
safeMode: !1,
@@ -5372,17 +5372,17 @@ const kn = (e, t) => {
tokenConfigured: !1,
tokenHint: ""
}
-}, Xn = () => {
+}, kn = () => {
var e;
try {
- const t = ni.get(Oi);
- if (!t) return { ...Un };
+ const t = ni.get(Fi);
+ if (!t) return { ...Bn };
const n = JSON.parse(t), i = n && typeof n == "object" && Number.isInteger(n.version) && n.data && typeof n.data == "object", o = n && typeof n == "object" && !Array.isArray(n);
- if (!i && !o) return { ...Un };
+ if (!i && !o) return { ...Bn };
if (i && Number(n.version) > Number(sg))
return console.warn(
"[Majoor] settings schema version is newer than this build, using defaults"
- ), { ...Un };
+ ), { ...Bn };
const r = i ? n.data : n, l = /* @__PURE__ */ new Set([
"debug",
"grid",
@@ -5414,18 +5414,18 @@ const kn = (e, t) => {
if (r && typeof r == "object")
for (const [s, d] of Object.entries(r))
l.has(s) && (a[s] = d);
- const c = _g(Un, a);
+ const c = _g(Bn, a);
if (!i)
try {
- Be(c);
+ Ue(c);
} catch (s) {
(e = console.debug) == null || e.call(console, s);
}
return c;
} catch (t) {
- return console.warn("[Majoor] settings load failed, using defaults", t), { ...Un };
+ return console.warn("[Majoor] settings load failed, using defaults", t), { ...Bn };
}
-}, Be = (e) => {
+}, Ue = (e) => {
var t, n;
try {
const i = JSON.parse(JSON.stringify(e || {}));
@@ -5434,12 +5434,12 @@ const kn = (e, t) => {
version: sg,
data: i
};
- ni.set(Oi, JSON.stringify(o));
+ ni.set(Fi, JSON.stringify(o));
} catch (i) {
console.warn("[Majoor] settings save failed", i);
try {
const o = Date.now(), r = Number((window == null ? void 0 : window._mjrSettingsSaveFailAt) || 0) || 0;
- o - r > 3e4 && (window._mjrSettingsSaveFailAt = o, Promise.resolve().then(() => jh).then(
+ o - r > 3e4 && (window._mjrSettingsSaveFailAt = o, Promise.resolve().then(() => jC).then(
({ comfyAlert: l }) => l(
m(
"dialog.settingsSaveFailed",
@@ -5461,222 +5461,222 @@ const kn = (e, t) => {
(n = console.debug) == null || n.call(console, o);
}
}
-}, At = (e) => {
- var o, r, l, a, c, s, d, u, I, y, S, Z, C, g, A, p, b, L, h, G, W, f, X, x, T, v, w, R, Y, F, N, V, k, K, z, B, J, P, H, $, E, oe, M, j, O, D, q, ee, ce, ue, U, Q, _, le, de, se, ge, je, Se, ke, we, Je, $e, qe, Ue, Te, Oe, pt, Me, Xt, Mt;
- const t = Number(Ge.MAX_PAGE_SIZE) || 2e3, n = Math.max(
+}, Zt = (e) => {
+ var o, r, l, a, c, s, d, u, I, A, h, S, W, g, y, p, b, L, C, G, Z, f, X, x, K, j, w, R, V, O, k, Y, N, U, z, T, J, P, E, $, H, ne, M, v, F, D, q, ee, ae, ue, B, Q, _, le, ce, de, ge, Le, xe, Xe, Me, Fe, it, qe, Pe, Re, rt, Te, qt, kt, we;
+ const t = Number(Se.MAX_PAGE_SIZE) || 2e3, n = Math.max(
50,
- Math.min(t, Number((o = e.grid) == null ? void 0 : o.pageSize) || Ge.DEFAULT_PAGE_SIZE)
+ Math.min(t, Number((o = e.grid) == null ? void 0 : o.pageSize) || Se.DEFAULT_PAGE_SIZE)
);
- fe.DEFAULT_PAGE_SIZE = n, fe.AUTO_SCAN_ON_STARTUP = !!((r = e.autoScan) != null && r.onStartup), fe.EXECUTION_GROUPING_ENABLED = !!(((l = e.executionGrouping) == null ? void 0 : l.enabled) ?? Ge.EXECUTION_GROUPING_ENABLED), fe.STATUS_POLL_INTERVAL = Math.max(
+ he.DEFAULT_PAGE_SIZE = n, he.AUTO_SCAN_ON_STARTUP = !!((r = e.autoScan) != null && r.onStartup), he.EXECUTION_GROUPING_ENABLED = !!(((l = e.executionGrouping) == null ? void 0 : l.enabled) ?? Se.EXECUTION_GROUPING_ENABLED), he.STATUS_POLL_INTERVAL = Math.max(
1e3,
- Number((a = e.status) == null ? void 0 : a.pollInterval) || Ge.STATUS_POLL_INTERVAL
- ), fe.DEBUG_SAFE_CALL = !!((c = e.debug) != null && c.safeCall), fe.DEBUG_SAFE_LISTENERS = !!((s = e.debug) != null && s.safeListeners), fe.DEBUG_VIEWER = !!((d = e.debug) != null && d.viewer), fe.GRID_MIN_SIZE = Hh(e.grid), fe.FEED_GRID_MIN_SIZE = qh(e.feed), fe.GRID_GAP = Math.max(
+ Number((a = e.status) == null ? void 0 : a.pollInterval) || Se.STATUS_POLL_INTERVAL
+ ), he.DEBUG_SAFE_CALL = !!((c = e.debug) != null && c.safeCall), he.DEBUG_SAFE_LISTENERS = !!((s = e.debug) != null && s.safeListeners), he.DEBUG_VIEWER = !!((d = e.debug) != null && d.viewer), he.GRID_MIN_SIZE = EC(e.grid), he.FEED_GRID_MIN_SIZE = qC(e.feed), he.GRID_GAP = Math.max(
0,
- Math.min(40, Math.round(Gn((u = e.grid) == null ? void 0 : u.gap, Ge.GRID_GAP)))
- ), fe.GRID_SHOW_BADGES_EXTENSION = !!(((I = e.grid) == null ? void 0 : I.showExtBadge) ?? Ge.GRID_SHOW_BADGES_EXTENSION), fe.GRID_SHOW_BADGES_RATING = !!(((y = e.grid) == null ? void 0 : y.showRatingBadge) ?? Ge.GRID_SHOW_BADGES_RATING), fe.GRID_SHOW_BADGES_TAGS = !!(((S = e.grid) == null ? void 0 : S.showTagsBadge) ?? Ge.GRID_SHOW_BADGES_TAGS), fe.GRID_SHOW_DETAILS = !!(((Z = e.grid) == null ? void 0 : Z.showDetails) ?? Ge.GRID_SHOW_DETAILS), fe.GRID_SHOW_DETAILS_FILENAME = !!(((C = e.grid) == null ? void 0 : C.showFilename) ?? Ge.GRID_SHOW_DETAILS_FILENAME), fe.GRID_SHOW_DETAILS_DATE = !!(((g = e.grid) == null ? void 0 : g.showDate) ?? Ge.GRID_SHOW_DETAILS_DATE), fe.GRID_SHOW_DETAILS_DIMENSIONS = !!(((A = e.grid) == null ? void 0 : A.showDimensions) ?? Ge.GRID_SHOW_DETAILS_DIMENSIONS), fe.GRID_SHOW_DETAILS_GENTIME = !!(((p = e.grid) == null ? void 0 : p.showGenTime) ?? Ge.GRID_SHOW_DETAILS_GENTIME), fe.GRID_SHOW_HOVER_INFO = !!(((b = e.grid) == null ? void 0 : b.showHoverInfo) ?? Ge.GRID_SHOW_HOVER_INFO), fe.GRID_SHOW_WORKFLOW_DOT = !!(((L = e.grid) == null ? void 0 : L.showWorkflowDot) ?? Ge.GRID_SHOW_WORKFLOW_DOT), fe.FEED_SHOW_INFO = !!(((h = e.feed) == null ? void 0 : h.showInfo) ?? Ge.FEED_SHOW_INFO), fe.FEED_SHOW_FILENAME = !!(((G = e.feed) == null ? void 0 : G.showFilename) ?? Ge.FEED_SHOW_FILENAME), fe.FEED_SHOW_DIMENSIONS = !!(((W = e.feed) == null ? void 0 : W.showDimensions) ?? Ge.FEED_SHOW_DIMENSIONS), fe.FEED_SHOW_DATE = !!(((f = e.feed) == null ? void 0 : f.showDate) ?? Ge.FEED_SHOW_DATE), fe.FEED_SHOW_GENTIME = !!(((X = e.feed) == null ? void 0 : X.showGenTime) ?? Ge.FEED_SHOW_GENTIME), fe.FEED_SHOW_WORKFLOW_DOT = !!(((x = e.feed) == null ? void 0 : x.showWorkflowDot) ?? Ge.FEED_SHOW_WORKFLOW_DOT), fe.FEED_SHOW_BADGES_EXTENSION = !!(((T = e.feed) == null ? void 0 : T.showExtBadge) ?? Ge.FEED_SHOW_BADGES_EXTENSION), fe.FEED_SHOW_BADGES_RATING = !!(((v = e.feed) == null ? void 0 : v.showRatingBadge) ?? Ge.FEED_SHOW_BADGES_RATING), fe.FEED_SHOW_BADGES_TAGS = !!(((w = e.feed) == null ? void 0 : w.showTagsBadge) ?? Ge.FEED_SHOW_BADGES_TAGS);
+ Math.min(40, Math.round(xn((u = e.grid) == null ? void 0 : u.gap, Se.GRID_GAP)))
+ ), he.GRID_SHOW_BADGES_EXTENSION = !!(((I = e.grid) == null ? void 0 : I.showExtBadge) ?? Se.GRID_SHOW_BADGES_EXTENSION), he.GRID_SHOW_BADGES_RATING = !!(((A = e.grid) == null ? void 0 : A.showRatingBadge) ?? Se.GRID_SHOW_BADGES_RATING), he.GRID_SHOW_BADGES_TAGS = !!(((h = e.grid) == null ? void 0 : h.showTagsBadge) ?? Se.GRID_SHOW_BADGES_TAGS), he.GRID_SHOW_DETAILS = !!(((S = e.grid) == null ? void 0 : S.showDetails) ?? Se.GRID_SHOW_DETAILS), he.GRID_SHOW_DETAILS_FILENAME = !!(((W = e.grid) == null ? void 0 : W.showFilename) ?? Se.GRID_SHOW_DETAILS_FILENAME), he.GRID_SHOW_DETAILS_DATE = !!(((g = e.grid) == null ? void 0 : g.showDate) ?? Se.GRID_SHOW_DETAILS_DATE), he.GRID_SHOW_DETAILS_DIMENSIONS = !!(((y = e.grid) == null ? void 0 : y.showDimensions) ?? Se.GRID_SHOW_DETAILS_DIMENSIONS), he.GRID_SHOW_DETAILS_GENTIME = !!(((p = e.grid) == null ? void 0 : p.showGenTime) ?? Se.GRID_SHOW_DETAILS_GENTIME), he.GRID_SHOW_HOVER_INFO = !!(((b = e.grid) == null ? void 0 : b.showHoverInfo) ?? Se.GRID_SHOW_HOVER_INFO), he.GRID_SHOW_WORKFLOW_DOT = !!(((L = e.grid) == null ? void 0 : L.showWorkflowDot) ?? Se.GRID_SHOW_WORKFLOW_DOT), he.FEED_SHOW_INFO = !!(((C = e.feed) == null ? void 0 : C.showInfo) ?? Se.FEED_SHOW_INFO), he.FEED_SHOW_FILENAME = !!(((G = e.feed) == null ? void 0 : G.showFilename) ?? Se.FEED_SHOW_FILENAME), he.FEED_SHOW_DIMENSIONS = !!(((Z = e.feed) == null ? void 0 : Z.showDimensions) ?? Se.FEED_SHOW_DIMENSIONS), he.FEED_SHOW_DATE = !!(((f = e.feed) == null ? void 0 : f.showDate) ?? Se.FEED_SHOW_DATE), he.FEED_SHOW_GENTIME = !!(((X = e.feed) == null ? void 0 : X.showGenTime) ?? Se.FEED_SHOW_GENTIME), he.FEED_SHOW_WORKFLOW_DOT = !!(((x = e.feed) == null ? void 0 : x.showWorkflowDot) ?? Se.FEED_SHOW_WORKFLOW_DOT), he.FEED_SHOW_BADGES_EXTENSION = !!(((K = e.feed) == null ? void 0 : K.showExtBadge) ?? Se.FEED_SHOW_BADGES_EXTENSION), he.FEED_SHOW_BADGES_RATING = !!(((j = e.feed) == null ? void 0 : j.showRatingBadge) ?? Se.FEED_SHOW_BADGES_RATING), he.FEED_SHOW_BADGES_TAGS = !!(((w = e.feed) == null ? void 0 : w.showTagsBadge) ?? Se.FEED_SHOW_BADGES_TAGS);
{
- let me = ((R = e.grid) == null ? void 0 : R.videoAutoplayMode) ?? Ge.GRID_VIDEO_AUTOPLAY_MODE;
- me == null && (me = ((Y = e.grid) == null ? void 0 : Y.videoHoverAutoplay) === !1 ? "off" : "hover"), me === !0 && (me = "hover"), me === !1 && (me = "off"), me !== "hover" && me !== "always" && me !== "off" && (me = "hover"), fe.GRID_VIDEO_AUTOPLAY_MODE = me;
+ let me = ((R = e.grid) == null ? void 0 : R.videoAutoplayMode) ?? Se.GRID_VIDEO_AUTOPLAY_MODE;
+ me == null && (me = ((V = e.grid) == null ? void 0 : V.videoHoverAutoplay) === !1 ? "off" : "hover"), me === !0 && (me = "hover"), me === !1 && (me = "off"), me !== "hover" && me !== "always" && me !== "off" && (me = "hover"), he.GRID_VIDEO_AUTOPLAY_MODE = me;
}
- const i = (me, Pe) => {
- let Le = String(me || "").trim();
- return /^[0-9a-fA-F]{6}$/.test(Le) && (Le = `#${Le}`), /^#[0-9a-fA-F]{3,8}$/.test(Le) ? Le : Pe;
+ const i = (me, He) => {
+ let Ye = String(me || "").trim();
+ return /^[0-9a-fA-F]{6}$/.test(Ye) && (Ye = `#${Ye}`), /^#[0-9a-fA-F]{3,8}$/.test(Ye) ? Ye : He;
};
- fe.BADGE_STAR_COLOR = i(
- (F = e.grid) == null ? void 0 : F.starColor,
- Ge.BADGE_STAR_COLOR
- ), fe.BADGE_IMAGE_COLOR = i(
- (N = e.grid) == null ? void 0 : N.badgeImageColor,
- Ge.BADGE_IMAGE_COLOR
- ), fe.BADGE_VIDEO_COLOR = i(
- (V = e.grid) == null ? void 0 : V.badgeVideoColor,
- Ge.BADGE_VIDEO_COLOR
- ), fe.BADGE_AUDIO_COLOR = i(
- (k = e.grid) == null ? void 0 : k.badgeAudioColor,
- Ge.BADGE_AUDIO_COLOR
- ), fe.BADGE_MODEL3D_COLOR = i(
- (K = e.grid) == null ? void 0 : K.badgeModel3dColor,
- Ge.BADGE_MODEL3D_COLOR
- ), fe.BADGE_DUPLICATE_ALERT_COLOR = i(
+ he.BADGE_STAR_COLOR = i(
+ (O = e.grid) == null ? void 0 : O.starColor,
+ Se.BADGE_STAR_COLOR
+ ), he.BADGE_IMAGE_COLOR = i(
+ (k = e.grid) == null ? void 0 : k.badgeImageColor,
+ Se.BADGE_IMAGE_COLOR
+ ), he.BADGE_VIDEO_COLOR = i(
+ (Y = e.grid) == null ? void 0 : Y.badgeVideoColor,
+ Se.BADGE_VIDEO_COLOR
+ ), he.BADGE_AUDIO_COLOR = i(
+ (N = e.grid) == null ? void 0 : N.badgeAudioColor,
+ Se.BADGE_AUDIO_COLOR
+ ), he.BADGE_MODEL3D_COLOR = i(
+ (U = e.grid) == null ? void 0 : U.badgeModel3dColor,
+ Se.BADGE_MODEL3D_COLOR
+ ), he.BADGE_DUPLICATE_ALERT_COLOR = i(
(z = e.grid) == null ? void 0 : z.badgeDuplicateAlertColor,
- Ge.BADGE_DUPLICATE_ALERT_COLOR
- ), fe.UI_CARD_HOVER_COLOR = i(
- (B = e.ui) == null ? void 0 : B.cardHoverColor,
- Ge.UI_CARD_HOVER_COLOR
- ), fe.UI_CARD_SELECTION_COLOR = i(
+ Se.BADGE_DUPLICATE_ALERT_COLOR
+ ), he.UI_CARD_HOVER_COLOR = i(
+ (T = e.ui) == null ? void 0 : T.cardHoverColor,
+ Se.UI_CARD_HOVER_COLOR
+ ), he.UI_CARD_SELECTION_COLOR = i(
(J = e.ui) == null ? void 0 : J.cardSelectionColor,
- Ge.UI_CARD_SELECTION_COLOR
- ), fe.UI_RATING_COLOR = i((P = e.ui) == null ? void 0 : P.ratingColor, Ge.UI_RATING_COLOR), fe.UI_TAG_COLOR = i((H = e.ui) == null ? void 0 : H.tagColor, Ge.UI_TAG_COLOR);
+ Se.UI_CARD_SELECTION_COLOR
+ ), he.UI_RATING_COLOR = i((P = e.ui) == null ? void 0 : P.ratingColor, Se.UI_RATING_COLOR), he.UI_TAG_COLOR = i((E = e.ui) == null ? void 0 : E.tagColor, Se.UI_TAG_COLOR);
try {
const me = Array.from(document.querySelectorAll(".mjr-assets-manager"));
- for (const Pe of me)
- Pe.style.setProperty("--mjr-star-active", fe.BADGE_STAR_COLOR), Pe.style.setProperty("--mjr-badge-image", fe.BADGE_IMAGE_COLOR), Pe.style.setProperty("--mjr-badge-video", fe.BADGE_VIDEO_COLOR), Pe.style.setProperty("--mjr-badge-audio", fe.BADGE_AUDIO_COLOR), Pe.style.setProperty("--mjr-badge-model3d", fe.BADGE_MODEL3D_COLOR), Pe.style.setProperty(
+ for (const He of me)
+ He.style.setProperty("--mjr-star-active", he.BADGE_STAR_COLOR), He.style.setProperty("--mjr-badge-image", he.BADGE_IMAGE_COLOR), He.style.setProperty("--mjr-badge-video", he.BADGE_VIDEO_COLOR), He.style.setProperty("--mjr-badge-audio", he.BADGE_AUDIO_COLOR), He.style.setProperty("--mjr-badge-model3d", he.BADGE_MODEL3D_COLOR), He.style.setProperty(
"--mjr-badge-duplicate-alert",
- fe.BADGE_DUPLICATE_ALERT_COLOR
- ), Pe.style.setProperty("--mjr-card-hover-color", fe.UI_CARD_HOVER_COLOR), Pe.style.setProperty(
+ he.BADGE_DUPLICATE_ALERT_COLOR
+ ), He.style.setProperty("--mjr-card-hover-color", he.UI_CARD_HOVER_COLOR), He.style.setProperty(
"--mjr-card-selection-color",
- fe.UI_CARD_SELECTION_COLOR
- ), Pe.style.setProperty("--mjr-rating-color", fe.UI_RATING_COLOR), Pe.style.setProperty("--mjr-tag-color", fe.UI_TAG_COLOR);
+ he.UI_CARD_SELECTION_COLOR
+ ), He.style.setProperty("--mjr-rating-color", he.UI_RATING_COLOR), He.style.setProperty("--mjr-tag-color", he.UI_TAG_COLOR);
} catch (me) {
($ = console.debug) == null || $.call(console, me);
}
- fe.INFINITE_SCROLL_ENABLED = !!((E = e.infiniteScroll) != null && E.enabled), fe.INFINITE_SCROLL_ROOT_MARGIN = String(
- ((oe = e.infiniteScroll) == null ? void 0 : oe.rootMargin) || Ge.INFINITE_SCROLL_ROOT_MARGIN
- ), fe.INFINITE_SCROLL_THRESHOLD = Math.max(
+ he.INFINITE_SCROLL_ENABLED = !!((H = e.infiniteScroll) != null && H.enabled), he.INFINITE_SCROLL_ROOT_MARGIN = String(
+ ((ne = e.infiniteScroll) == null ? void 0 : ne.rootMargin) || Se.INFINITE_SCROLL_ROOT_MARGIN
+ ), he.INFINITE_SCROLL_THRESHOLD = Math.max(
0,
Math.min(
1,
- Gn((M = e.infiniteScroll) == null ? void 0 : M.threshold, Ge.INFINITE_SCROLL_THRESHOLD)
+ xn((M = e.infiniteScroll) == null ? void 0 : M.threshold, Se.INFINITE_SCROLL_THRESHOLD)
)
- ), fe.BOTTOM_GAP_PX = Math.max(
+ ), he.BOTTOM_GAP_PX = Math.max(
0,
Math.min(
5e3,
- Math.round(Gn((j = e.infiniteScroll) == null ? void 0 : j.bottomGapPx, Ge.BOTTOM_GAP_PX))
+ Math.round(xn((v = e.infiniteScroll) == null ? void 0 : v.bottomGapPx, Se.BOTTOM_GAP_PX))
)
- ), fe.VIEWER_ALLOW_PAN_AT_ZOOM_1 = !!((O = e.viewer) != null && O.allowPanAtZoom1), fe.VIEWER_DISABLE_WEBGL_VIDEO = !!((D = e.viewer) != null && D.disableWebGL), fe.VIEWER_PAUSE_DURING_EXECUTION = !!(((q = e.viewer) == null ? void 0 : q.pauseDuringExecution) ?? Ge.VIEWER_PAUSE_DURING_EXECUTION), fe.FLOATING_VIEWER_PAUSE_DURING_EXECUTION = !!(((ee = e.viewer) == null ? void 0 : ee.floatingPauseDuringExecution) ?? Ge.FLOATING_VIEWER_PAUSE_DURING_EXECUTION), fe.MFV_LIVE_DEFAULT = ((ce = e.viewer) == null ? void 0 : ce.mfvLiveDefault) ?? Ge.MFV_LIVE_DEFAULT, fe.MFV_PREVIEW_DEFAULT = ((ue = e.viewer) == null ? void 0 : ue.mfvPreviewDefault) ?? Ge.MFV_PREVIEW_DEFAULT;
+ ), he.VIEWER_ALLOW_PAN_AT_ZOOM_1 = !!((F = e.viewer) != null && F.allowPanAtZoom1), he.VIEWER_DISABLE_WEBGL_VIDEO = !!((D = e.viewer) != null && D.disableWebGL), he.VIEWER_PAUSE_DURING_EXECUTION = !!(((q = e.viewer) == null ? void 0 : q.pauseDuringExecution) ?? Se.VIEWER_PAUSE_DURING_EXECUTION), he.FLOATING_VIEWER_PAUSE_DURING_EXECUTION = !!(((ee = e.viewer) == null ? void 0 : ee.floatingPauseDuringExecution) ?? Se.FLOATING_VIEWER_PAUSE_DURING_EXECUTION), he.MFV_LIVE_DEFAULT = ((ae = e.viewer) == null ? void 0 : ae.mfvLiveDefault) ?? Se.MFV_LIVE_DEFAULT, he.MFV_PREVIEW_DEFAULT = ((ue = e.viewer) == null ? void 0 : ue.mfvPreviewDefault) ?? Se.MFV_PREVIEW_DEFAULT;
{
const me = String(
- ((U = e.viewer) == null ? void 0 : U.mfvPreviewMethod) || Ge.MFV_PREVIEW_METHOD
+ ((B = e.viewer) == null ? void 0 : B.mfvPreviewMethod) || Se.MFV_PREVIEW_METHOD
).toLowerCase();
- fe.MFV_PREVIEW_METHOD = ["default", "auto", "latent2rgb", "taesd", "none"].includes(
+ he.MFV_PREVIEW_METHOD = ["default", "auto", "latent2rgb", "taesd", "none"].includes(
me
- ) ? me : Ge.MFV_PREVIEW_METHOD;
+ ) ? me : Se.MFV_PREVIEW_METHOD;
}
{
const me = String(((Q = e.viewer) == null ? void 0 : Q.mfvSidebarPosition) || "right").toLowerCase();
- fe.MFV_SIDEBAR_POSITION = ["left", "right", "bottom"].includes(me) ? me : "right";
+ he.MFV_SIDEBAR_POSITION = ["left", "right", "bottom"].includes(me) ? me : "right";
}
- fe.VIEWER_VIDEO_GRADE_THROTTLE_FPS = Math.max(
+ he.VIEWER_VIDEO_GRADE_THROTTLE_FPS = Math.max(
1,
Math.min(
60,
Math.round(
- Gn(
+ xn(
(_ = e.viewer) == null ? void 0 : _.videoGradeThrottleFps,
- Ge.VIEWER_VIDEO_GRADE_THROTTLE_FPS
+ Se.VIEWER_VIDEO_GRADE_THROTTLE_FPS
)
)
)
- ), fe.VIEWER_SCOPES_FPS = Math.max(
+ ), he.VIEWER_SCOPES_FPS = Math.max(
1,
Math.min(
60,
- Math.round(Gn((le = e.viewer) == null ? void 0 : le.scopesFps, Ge.VIEWER_SCOPES_FPS))
+ Math.round(xn((le = e.viewer) == null ? void 0 : le.scopesFps, Se.VIEWER_SCOPES_FPS))
)
- ), fe.VIEWER_META_TTL_MS = Math.max(
+ ), he.VIEWER_META_TTL_MS = Math.max(
1e3,
Math.min(
10 * 6e4,
- Math.round(Gn((de = e.viewer) == null ? void 0 : de.metaTtlMs, Ge.VIEWER_META_TTL_MS))
+ Math.round(xn((ce = e.viewer) == null ? void 0 : ce.metaTtlMs, Se.VIEWER_META_TTL_MS))
)
- ), fe.VIEWER_META_MAX_ENTRIES = Math.max(
+ ), he.VIEWER_META_MAX_ENTRIES = Math.max(
50,
Math.min(
5e3,
Math.round(
- Gn((se = e.viewer) == null ? void 0 : se.metaMaxEntries, Ge.VIEWER_META_MAX_ENTRIES)
+ xn((de = e.viewer) == null ? void 0 : de.metaMaxEntries, Se.VIEWER_META_MAX_ENTRIES)
)
)
- ), fe.WORKFLOW_MINIMAP_ENABLED = !!(((ge = e.workflowMinimap) == null ? void 0 : ge.enabled) ?? !1), fe.RT_HYDRATE_CONCURRENCY = Math.max(
+ ), he.WORKFLOW_MINIMAP_ENABLED = !!(((ge = e.workflowMinimap) == null ? void 0 : ge.enabled) ?? !1), he.RT_HYDRATE_CONCURRENCY = Math.max(
1,
Math.min(
16,
Math.round(
- Gn((je = e.rtHydrate) == null ? void 0 : je.concurrency, Ge.RT_HYDRATE_CONCURRENCY)
+ xn((Le = e.rtHydrate) == null ? void 0 : Le.concurrency, Se.RT_HYDRATE_CONCURRENCY)
)
)
- ), fe.RT_HYDRATE_QUEUE_MAX = Math.max(
+ ), he.RT_HYDRATE_QUEUE_MAX = Math.max(
10,
Math.min(
5e3,
- Math.round(Gn((Se = e.rtHydrate) == null ? void 0 : Se.queueMax, Ge.RT_HYDRATE_QUEUE_MAX))
+ Math.round(xn((xe = e.rtHydrate) == null ? void 0 : xe.queueMax, Se.RT_HYDRATE_QUEUE_MAX))
)
- ), fe.RT_HYDRATE_SEEN_MAX = Math.max(
+ ), he.RT_HYDRATE_SEEN_MAX = Math.max(
1e3,
Math.min(
2e5,
- Math.round(Gn((ke = e.rtHydrate) == null ? void 0 : ke.seenMax, Ge.RT_HYDRATE_SEEN_MAX))
+ Math.round(xn((Xe = e.rtHydrate) == null ? void 0 : Xe.seenMax, Se.RT_HYDRATE_SEEN_MAX))
)
- ), fe.RT_HYDRATE_PRUNE_BUDGET = Math.max(
+ ), he.RT_HYDRATE_PRUNE_BUDGET = Math.max(
10,
Math.min(
1e4,
Math.round(
- Gn((we = e.rtHydrate) == null ? void 0 : we.pruneBudget, Ge.RT_HYDRATE_PRUNE_BUDGET)
+ xn((Me = e.rtHydrate) == null ? void 0 : Me.pruneBudget, Se.RT_HYDRATE_PRUNE_BUDGET)
)
)
- ), fe.RT_HYDRATE_SEEN_TTL_MS = Math.max(
+ ), he.RT_HYDRATE_SEEN_TTL_MS = Math.max(
5e3,
Math.min(
360 * 6e4,
Math.round(
- Gn((Je = e.rtHydrate) == null ? void 0 : Je.seenTtlMs, Ge.RT_HYDRATE_SEEN_TTL_MS)
+ xn((Fe = e.rtHydrate) == null ? void 0 : Fe.seenTtlMs, Se.RT_HYDRATE_SEEN_TTL_MS)
)
)
- ), fe.DELETE_CONFIRMATION = !!(($e = e.safety) != null && $e.confirmDeletion), fe.DEBUG_VERBOSE_ERRORS = !!((qe = e.observability) != null && qe.verboseErrors), fe.WATCHER_MAX_PENDING = Math.max(
+ ), he.DELETE_CONFIRMATION = !!((it = e.safety) != null && it.confirmDeletion), he.DEBUG_VERBOSE_ERRORS = !!((qe = e.observability) != null && qe.verboseErrors), he.WATCHER_MAX_PENDING = Math.max(
10,
- Math.min(5e3, Math.round(Gn((Ue = e.watcher) == null ? void 0 : Ue.maxPending, 500)))
- ), fe.WATCHER_MIN_SIZE = Math.max(
+ Math.min(5e3, Math.round(xn((Pe = e.watcher) == null ? void 0 : Pe.maxPending, 500)))
+ ), he.WATCHER_MIN_SIZE = Math.max(
0,
- Math.min(1e6, Math.round(Gn((Te = e.watcher) == null ? void 0 : Te.minSize, 100)))
- ), fe.WATCHER_MAX_SIZE = Math.max(
+ Math.min(1e6, Math.round(xn((Re = e.watcher) == null ? void 0 : Re.minSize, 100)))
+ ), he.WATCHER_MAX_SIZE = Math.max(
1e5,
- Math.min(17179869184, Math.round(Gn((Oe = e.watcher) == null ? void 0 : Oe.maxSize, 4294967296)))
- ), fe.DB_TIMEOUT_MS = Math.max(
+ Math.min(17179869184, Math.round(xn((rt = e.watcher) == null ? void 0 : rt.maxSize, 4294967296)))
+ ), he.DB_TIMEOUT_MS = Math.max(
1e3,
- Math.min(3e4, Math.round(Gn((pt = e.db) == null ? void 0 : pt.timeoutMs, 5e3)))
- ), fe.DB_MAX_CONNECTIONS = Math.max(
+ Math.min(3e4, Math.round(xn((Te = e.db) == null ? void 0 : Te.timeoutMs, 5e3)))
+ ), he.DB_MAX_CONNECTIONS = Math.max(
1,
- Math.min(100, Math.round(Gn((Me = e.db) == null ? void 0 : Me.maxConnections, 10)))
- ), fe.DB_QUERY_TIMEOUT_MS = Math.max(
+ Math.min(100, Math.round(xn((qt = e.db) == null ? void 0 : qt.maxConnections, 10)))
+ ), he.DB_QUERY_TIMEOUT_MS = Math.max(
500,
- Math.min(1e4, Math.round(Gn((Xt = e.db) == null ? void 0 : Xt.queryTimeoutMs, 1e3)))
- ), fe.SEARCH_REQUEST_LIMIT = Math.max(
+ Math.min(1e4, Math.round(xn((kt = e.db) == null ? void 0 : kt.queryTimeoutMs, 1e3)))
+ ), he.SEARCH_REQUEST_LIMIT = Math.max(
10,
Math.min(
- Ge.MAX_PAGE_SIZE || 2e3,
- Math.round(Gn((Mt = e.search) == null ? void 0 : Mt.maxResults, Ge.SEARCH_DEFAULT_LIMIT))
+ Se.MAX_PAGE_SIZE || 2e3,
+ Math.round(xn((we = e.search) == null ? void 0 : we.maxResults, Se.SEARCH_DEFAULT_LIMIT))
)
);
};
async function oa() {
var e, t, n;
try {
- const i = await kg();
+ const i = await Xg();
if (!(i != null && i.ok)) return;
const o = (e = i.data) == null ? void 0 : e.prefs;
if (!o || typeof o != "object") return;
- const r = Xn();
- if (r.security = r.security || {}, r.security.safeMode = kn(o.safe_mode, r.security.safeMode), r.security.allowWrite = kn(o.allow_write, r.security.allowWrite), r.security.requireAuth = kn(o.require_auth, r.security.requireAuth), r.security.allowRemoteWrite = kn(
+ const r = kn();
+ if (r.security = r.security || {}, r.security.safeMode = Nn(o.safe_mode, r.security.safeMode), r.security.allowWrite = Nn(o.allow_write, r.security.allowWrite), r.security.requireAuth = Nn(o.require_auth, r.security.requireAuth), r.security.allowRemoteWrite = Nn(
o.allow_remote_write,
r.security.allowRemoteWrite
- ), r.security.allowInsecureTokenTransport = kn(
+ ), r.security.allowInsecureTokenTransport = Nn(
o.allow_insecure_token_transport,
r.security.allowInsecureTokenTransport
- ), r.security.allowDelete = kn(
+ ), r.security.allowDelete = Nn(
o.allow_delete,
r.security.allowDelete
- ), r.security.allowRename = kn(
+ ), r.security.allowRename = Nn(
o.allow_rename,
r.security.allowRename
- ), r.security.allowOpenInFolder = kn(
+ ), r.security.allowOpenInFolder = Nn(
o.allow_open_in_folder,
r.security.allowOpenInFolder
- ), r.security.allowResetIndex = kn(
+ ), r.security.allowResetIndex = Nn(
o.allow_reset_index,
r.security.allowResetIndex
- ), r.security.tokenConfigured = kn(
+ ), r.security.tokenConfigured = Nn(
o.token_configured,
r.security.tokenConfigured
), r.security.tokenHint = String(o.token_hint || "").trim(), !String(r.security.apiToken || "").trim())
try {
- const l = await kf(), a = String(((t = l == null ? void 0 : l.data) == null ? void 0 : t.token) || "").trim();
+ const l = await Xf(), a = String(((t = l == null ? void 0 : l.data) == null ? void 0 : t.token) || "").trim();
l != null && l.ok && a && (r.security.apiToken = a);
} catch (l) {
(n = console.debug) == null || n.call(console, l);
}
- Be(r), At(r), oi(
+ Ue(r), Zt(r), oi(
"mjr-settings-changed",
{ key: "security" },
{ warnPrefix: "[Majoor]" }
@@ -5685,18 +5685,18 @@ async function oa() {
console.warn("[Majoor] failed to sync backend security settings", i);
}
}
-async function Ph() {
+async function PC() {
var e;
try {
const t = await pf();
if (!(t != null && t.ok)) return;
const n = (e = t.data) == null ? void 0 : e.prefs;
if (!n || typeof n != "object") return;
- const i = Xn();
- i.ai = i.ai || {}, i.ai.vectorSearchEnabled = kn(
+ const i = kn();
+ i.ai = i.ai || {}, i.ai.vectorSearchEnabled = Nn(
n.enabled,
i.ai.vectorSearchEnabled ?? !0
- ), Be(i), At(i), oi(
+ ), Ue(i), Zt(i), oi(
"mjr-settings-changed",
{ key: "ai.vectorSearchEnabled" },
{ warnPrefix: "[Majoor]" }
@@ -5705,18 +5705,18 @@ async function Ph() {
console.warn("[Majoor] failed to sync backend vector search settings", t);
}
}
-async function Qh() {
+async function QC() {
var e;
try {
const t = await ff();
if (!(t != null && t.ok)) return;
const n = (e = t.data) == null ? void 0 : e.prefs;
if (!n || typeof n != "object") return;
- const i = Xn();
- i.executionGrouping = i.executionGrouping || {}, i.executionGrouping.enabled = kn(
+ const i = kn();
+ i.executionGrouping = i.executionGrouping || {}, i.executionGrouping.enabled = Nn(
n.enabled,
- i.executionGrouping.enabled ?? Ge.EXECUTION_GROUPING_ENABLED
- ), Be(i), At(i), oi(
+ i.executionGrouping.enabled ?? Se.EXECUTION_GROUPING_ENABLED
+ ), Ue(i), Zt(i), oi(
"mjr-settings-changed",
{ key: "executionGrouping.enabled" },
{ warnPrefix: "[Majoor]" }
@@ -5725,8 +5725,8 @@ async function Qh() {
console.warn("[Majoor] failed to sync backend execution grouping settings", t);
}
}
-const _h = 300;
-function $c(e, t = _h) {
+const _C = 300;
+function es(e, t = _C) {
let n;
const i = (...o) => {
clearTimeout(n), n = setTimeout(() => e(...o), t);
@@ -5737,14 +5737,14 @@ function $c(e, t = _h) {
clearTimeout(n), e(...o);
}, i;
}
-const Sn = "Majoor", kl = "Majoor Assets Manager";
-function $h(e, t, n) {
- var c, s, d, u, I, y, S, Z, C, g, A, p, b, L, h, G, W, f, X, x, T, v, w, R, Y, F, N;
- const i = (V, k) => [kl, V, k], o = (V) => [kl, m("cat.cards", "Cards"), V], r = (V) => [kl, m("cat.badges", "Badges"), V], l = (V) => [kl, m("cat.badges", "Badges"), V], a = (V, k) => {
- let K = String(V || "").trim();
- return /^[0-9a-fA-F]{6}$/.test(K) && (K = `#${K}`), /^#[0-9a-fA-F]{6}$/.test(K) ? K.toUpperCase() : k;
+const Sn = "Majoor", Xl = "Majoor Assets Manager";
+function $C(e, t, n) {
+ var c, s, d, u, I, A, h, S, W, g, y, p, b, L, C, G, Z, f, X, x, K, j, w, R, V, O, k;
+ const i = (Y, N) => [Xl, Y, N], o = (Y) => [Xl, m("cat.cards", "Cards"), Y], r = (Y) => [Xl, m("cat.badges", "Badges"), Y], l = (Y) => [Xl, m("cat.badges", "Badges"), Y], a = (Y, N) => {
+ let U = String(Y || "").trim();
+ return /^[0-9a-fA-F]{6}$/.test(U) && (U = `#${U}`), /^#[0-9a-fA-F]{6}$/.test(U) ? U.toUpperCase() : N;
};
- (c = t.grid) != null && c.minSizePreset || (t.grid = t.grid || {}, t.grid.minSizePreset = mc(t.grid.minSize), Be(t)), e({
+ (c = t.grid) != null && c.minSizePreset || (t.grid = t.grid || {}, t.grid.minSizePreset = gc(t.grid.minSize), Ue(t)), e({
id: `${Sn}.Cards.ThumbSize`,
category: o(m("setting.grid.cardSize.group", "Card size")),
name: m("setting.grid.cardSize.name", "Majoor: Card Size"),
@@ -5754,27 +5754,27 @@ function $h(e, t, n) {
),
type: "combo",
defaultValue: (() => {
- var K, z;
- const V = Ks(
- String(((K = t.grid) == null ? void 0 : K.minSizePreset) || "").toLowerCase(),
+ var U, z;
+ const Y = Ds(
+ String(((U = t.grid) == null ? void 0 : U.minSizePreset) || "").toLowerCase(),
eI,
- mc((z = t.grid) == null ? void 0 : z.minSize)
- ), k = {
+ gc((z = t.grid) == null ? void 0 : z.minSize)
+ ), N = {
small: m("setting.grid.cardSize.small", "Small"),
medium: m("setting.grid.cardSize.medium", "Medium"),
large: m("setting.grid.cardSize.large", "Large")
};
- return k[V] || k.medium;
+ return N[Y] || N.medium;
})(),
options: [
m("setting.grid.cardSize.small", "Small"),
m("setting.grid.cardSize.medium", "Medium"),
m("setting.grid.cardSize.large", "Large")
],
- onChange: (V) => {
- const k = String(V || "").trim().toLowerCase(), K = m("setting.grid.cardSize.small", "Small").toLowerCase(), z = m("setting.grid.cardSize.medium", "Medium").toLowerCase(), B = m("setting.grid.cardSize.large", "Large").toLowerCase();
+ onChange: (Y) => {
+ const N = String(Y || "").trim().toLowerCase(), U = m("setting.grid.cardSize.small", "Small").toLowerCase(), z = m("setting.grid.cardSize.medium", "Medium").toLowerCase(), T = m("setting.grid.cardSize.large", "Large").toLowerCase();
let J = "medium";
- k === K || k === "small" || k === "petit" ? J = "small" : k === B || k === "large" || k === "grand" ? J = "large" : (k === z || k === "medium" || k === "moyen") && (J = "medium"), t.grid.minSizePreset = J, t.grid.minSize = $g[J], Be(t), At(t), n("grid.minSizePreset");
+ N === U || N === "small" || N === "petit" ? J = "small" : N === T || N === "large" || N === "grand" ? J = "large" : (N === z || N === "medium" || N === "moyen") && (J = "medium"), t.grid.minSizePreset = J, t.grid.minSize = $g[J], Ue(t), Zt(t), n("grid.minSizePreset");
}
}), e({
id: `${Sn}.Cards.CustomThumbSize`,
@@ -5784,9 +5784,9 @@ function $h(e, t, n) {
type: "number",
defaultValue: Math.max(60, Math.min(600, Number((s = t.grid) == null ? void 0 : s.minSize) || 120)),
attrs: { min: 60, max: 600, step: 10 },
- onChange: (V) => {
- const k = Math.max(60, Math.min(600, Math.round(Number(V) || 120)));
- t.grid.minSize = k, t.grid.minSizePreset = mc(k), Be(t), At(t), n("grid.minSize");
+ onChange: (Y) => {
+ const N = Math.max(60, Math.min(600, Math.round(Number(Y) || 120)));
+ t.grid.minSize = N, t.grid.minSizePreset = gc(N), Ue(t), Zt(t), n("grid.minSize");
}
}), e({
id: `${Sn}.Grid.ShowDetails`,
@@ -5795,8 +5795,8 @@ function $h(e, t, n) {
tooltip: "Show the bottom details panel on asset cards (filename, date, etc.)",
type: "boolean",
defaultValue: !!((d = t.grid) != null && d.showDetails),
- onChange: (V) => {
- t.grid.showDetails = !!V, Be(t), At(t), n("grid.showDetails");
+ onChange: (Y) => {
+ t.grid.showDetails = !!Y, Ue(t), Zt(t), n("grid.showDetails");
}
}), e({
id: `${Sn}.Grid.ShowFilename`,
@@ -5805,8 +5805,8 @@ function $h(e, t, n) {
tooltip: "Display filename in details panel",
type: "boolean",
defaultValue: !!((u = t.grid) != null && u.showFilename),
- onChange: (V) => {
- t.grid.showFilename = !!V, Be(t), At(t), n("grid.showFilename");
+ onChange: (Y) => {
+ t.grid.showFilename = !!Y, Ue(t), Zt(t), n("grid.showFilename");
}
}), e({
id: `${Sn}.Grid.ShowDate`,
@@ -5815,8 +5815,8 @@ function $h(e, t, n) {
tooltip: "Display date and time in details panel",
type: "boolean",
defaultValue: !!((I = t.grid) != null && I.showDate),
- onChange: (V) => {
- t.grid.showDate = !!V, Be(t), At(t), n("grid.showDate");
+ onChange: (Y) => {
+ t.grid.showDate = !!Y, Ue(t), Zt(t), n("grid.showDate");
}
}), e({
id: `${Sn}.Grid.ShowDimensions`,
@@ -5824,9 +5824,9 @@ function $h(e, t, n) {
name: "Show dimensions",
tooltip: "Display resolution (WxH) in details panel",
type: "boolean",
- defaultValue: !!((y = t.grid) != null && y.showDimensions),
- onChange: (V) => {
- t.grid.showDimensions = !!V, Be(t), At(t), n("grid.showDimensions");
+ defaultValue: !!((A = t.grid) != null && A.showDimensions),
+ onChange: (Y) => {
+ t.grid.showDimensions = !!Y, Ue(t), Zt(t), n("grid.showDimensions");
}
}), e({
id: `${Sn}.Grid.ShowGenTime`,
@@ -5834,9 +5834,9 @@ function $h(e, t, n) {
name: "Show generation time",
tooltip: "Display seconds taken to generate the asset (if available)",
type: "boolean",
- defaultValue: !!((S = t.grid) != null && S.showGenTime),
- onChange: (V) => {
- t.grid.showGenTime = !!V, Be(t), At(t), n("grid.showGenTime");
+ defaultValue: !!((h = t.grid) != null && h.showGenTime),
+ onChange: (Y) => {
+ t.grid.showGenTime = !!Y, Ue(t), Zt(t), n("grid.showGenTime");
}
}), e({
id: `${Sn}.Grid.ShowHoverInfo`,
@@ -5844,9 +5844,9 @@ function $h(e, t, n) {
name: "Show prompt on hover",
tooltip: "Show positive prompt and generation time as a tooltip overlay when hovering over a card thumbnail. Does not block video play-on-hover.",
type: "boolean",
- defaultValue: !!(((Z = t.grid) == null ? void 0 : Z.showHoverInfo) ?? Ge.GRID_SHOW_HOVER_INFO),
- onChange: (V) => {
- t.grid.showHoverInfo = !!V, Be(t), At(t), n("grid.showHoverInfo");
+ defaultValue: !!(((S = t.grid) == null ? void 0 : S.showHoverInfo) ?? Se.GRID_SHOW_HOVER_INFO),
+ onChange: (Y) => {
+ t.grid.showHoverInfo = !!Y, Ue(t), Zt(t), n("grid.showHoverInfo");
}
}), e({
id: `${Sn}.Grid.ShowWorkflowDot`,
@@ -5854,9 +5854,9 @@ function $h(e, t, n) {
name: "Show workflow indicator",
tooltip: "Display the green dot indicating workflow metadata availability (bottom right of card)",
type: "boolean",
- defaultValue: !!((C = t.grid) != null && C.showWorkflowDot),
- onChange: (V) => {
- t.grid.showWorkflowDot = !!V, Be(t), At(t), n("grid.showWorkflowDot");
+ defaultValue: !!((W = t.grid) != null && W.showWorkflowDot),
+ onChange: (Y) => {
+ t.grid.showWorkflowDot = !!Y, Ue(t), Zt(t), n("grid.showWorkflowDot");
}
}), e({
id: `${Sn}.Grid.ShowExtBadge`,
@@ -5865,8 +5865,8 @@ function $h(e, t, n) {
tooltip: "Display format badges (e.g. JPG, MP4) on thumbnails",
type: "boolean",
defaultValue: !!((g = t.grid) != null && g.showExtBadge),
- onChange: (V) => {
- t.grid.showExtBadge = !!V, Be(t), At(t), n("grid.showExtBadge");
+ onChange: (Y) => {
+ t.grid.showExtBadge = !!Y, Ue(t), Zt(t), n("grid.showExtBadge");
}
}), e({
id: `${Sn}.Grid.ShowRatingBadge`,
@@ -5874,9 +5874,9 @@ function $h(e, t, n) {
name: "Show ratings",
tooltip: "Display star ratings on thumbnails",
type: "boolean",
- defaultValue: !!((A = t.grid) != null && A.showRatingBadge),
- onChange: (V) => {
- t.grid.showRatingBadge = !!V, Be(t), At(t), n("grid.showRatingBadge");
+ defaultValue: !!((y = t.grid) != null && y.showRatingBadge),
+ onChange: (Y) => {
+ t.grid.showRatingBadge = !!Y, Ue(t), Zt(t), n("grid.showRatingBadge");
}
}), e({
id: `${Sn}.Grid.ShowTagsBadge`,
@@ -5885,8 +5885,8 @@ function $h(e, t, n) {
tooltip: "Display a small indicator if an asset has tags",
type: "boolean",
defaultValue: !!((p = t.grid) != null && p.showTagsBadge),
- onChange: (V) => {
- t.grid.showTagsBadge = !!V, Be(t), At(t), n("grid.showTagsBadge");
+ onChange: (Y) => {
+ t.grid.showTagsBadge = !!Y, Ue(t), Zt(t), n("grid.showTagsBadge");
}
}), e({
id: `${Sn}.Badges.StarColor`,
@@ -5897,9 +5897,9 @@ function $h(e, t, n) {
"Color of rating stars on thumbnails (hex, e.g. #FFD45A)"
),
type: "color",
- defaultValue: a((b = t.grid) == null ? void 0 : b.starColor, Ge.BADGE_STAR_COLOR),
- onChange: (V) => {
- t.grid.starColor = a(V, Ge.BADGE_STAR_COLOR), Be(t), At(t), n("grid.starColor");
+ defaultValue: a((b = t.grid) == null ? void 0 : b.starColor, Se.BADGE_STAR_COLOR),
+ onChange: (Y) => {
+ t.grid.starColor = a(Y, Se.BADGE_STAR_COLOR), Ue(t), Zt(t), n("grid.starColor");
}
}), e({
id: `${Sn}.Badges.ImageColor`,
@@ -5912,13 +5912,13 @@ function $h(e, t, n) {
type: "color",
defaultValue: a(
(L = t.grid) == null ? void 0 : L.badgeImageColor,
- Ge.BADGE_IMAGE_COLOR
+ Se.BADGE_IMAGE_COLOR
),
- onChange: (V) => {
+ onChange: (Y) => {
t.grid.badgeImageColor = a(
- V,
- Ge.BADGE_IMAGE_COLOR
- ), Be(t), At(t), n("grid.badgeImageColor");
+ Y,
+ Se.BADGE_IMAGE_COLOR
+ ), Ue(t), Zt(t), n("grid.badgeImageColor");
}
}), e({
id: `${Sn}.Badges.VideoColor`,
@@ -5930,14 +5930,14 @@ function $h(e, t, n) {
),
type: "color",
defaultValue: a(
- (h = t.grid) == null ? void 0 : h.badgeVideoColor,
- Ge.BADGE_VIDEO_COLOR
+ (C = t.grid) == null ? void 0 : C.badgeVideoColor,
+ Se.BADGE_VIDEO_COLOR
),
- onChange: (V) => {
+ onChange: (Y) => {
t.grid.badgeVideoColor = a(
- V,
- Ge.BADGE_VIDEO_COLOR
- ), Be(t), At(t), n("grid.badgeVideoColor");
+ Y,
+ Se.BADGE_VIDEO_COLOR
+ ), Ue(t), Zt(t), n("grid.badgeVideoColor");
}
}), e({
id: `${Sn}.Badges.AudioColor`,
@@ -5950,13 +5950,13 @@ function $h(e, t, n) {
type: "color",
defaultValue: a(
(G = t.grid) == null ? void 0 : G.badgeAudioColor,
- Ge.BADGE_AUDIO_COLOR
+ Se.BADGE_AUDIO_COLOR
),
- onChange: (V) => {
+ onChange: (Y) => {
t.grid.badgeAudioColor = a(
- V,
- Ge.BADGE_AUDIO_COLOR
- ), Be(t), At(t), n("grid.badgeAudioColor");
+ Y,
+ Se.BADGE_AUDIO_COLOR
+ ), Ue(t), Zt(t), n("grid.badgeAudioColor");
}
}), e({
id: `${Sn}.Badges.Model3dColor`,
@@ -5968,14 +5968,14 @@ function $h(e, t, n) {
),
type: "color",
defaultValue: a(
- (W = t.grid) == null ? void 0 : W.badgeModel3dColor,
- Ge.BADGE_MODEL3D_COLOR
+ (Z = t.grid) == null ? void 0 : Z.badgeModel3dColor,
+ Se.BADGE_MODEL3D_COLOR
),
- onChange: (V) => {
+ onChange: (Y) => {
t.grid.badgeModel3dColor = a(
- V,
- Ge.BADGE_MODEL3D_COLOR
- ), Be(t), At(t), n("grid.badgeModel3dColor");
+ Y,
+ Se.BADGE_MODEL3D_COLOR
+ ), Ue(t), Zt(t), n("grid.badgeModel3dColor");
}
}), e({
id: `${Sn}.Badges.DuplicateAlertColor`,
@@ -5988,13 +5988,13 @@ function $h(e, t, n) {
type: "color",
defaultValue: a(
(f = t.grid) == null ? void 0 : f.badgeDuplicateAlertColor,
- Ge.BADGE_DUPLICATE_ALERT_COLOR
+ Se.BADGE_DUPLICATE_ALERT_COLOR
),
- onChange: (V) => {
+ onChange: (Y) => {
t.grid.badgeDuplicateAlertColor = a(
- V,
- Ge.BADGE_DUPLICATE_ALERT_COLOR
- ), Be(t), At(t), n("grid.badgeDuplicateAlertColor");
+ Y,
+ Se.BADGE_DUPLICATE_ALERT_COLOR
+ ), Ue(t), Zt(t), n("grid.badgeDuplicateAlertColor");
}
}), e({
id: `${Sn}.Grid.PageSize`,
@@ -6003,13 +6003,13 @@ function $h(e, t, n) {
tooltip: m("setting.grid.pagesize.desc"),
type: "number",
defaultValue: t.grid.pageSize,
- attrs: { min: 50, max: Number(fe.MAX_PAGE_SIZE) || 2e3, step: 50 },
- onChange: (V) => {
- const k = Number(fe.MAX_PAGE_SIZE) || 2e3;
+ attrs: { min: 50, max: Number(he.MAX_PAGE_SIZE) || 2e3, step: 50 },
+ onChange: (Y) => {
+ const N = Number(he.MAX_PAGE_SIZE) || 2e3;
t.grid.pageSize = Math.max(
50,
- Math.min(k, Number(V) || Ge.DEFAULT_PAGE_SIZE)
- ), Be(t), At(t), n("grid.pageSize");
+ Math.min(N, Number(Y) || Se.DEFAULT_PAGE_SIZE)
+ ), Ue(t), Zt(t), n("grid.pageSize");
}
}), e({
id: `${Sn}.InfiniteScroll.Enabled`,
@@ -6018,8 +6018,8 @@ function $h(e, t, n) {
tooltip: m("setting.nav.infinite.desc"),
type: "boolean",
defaultValue: !!((X = t.infiniteScroll) != null && X.enabled),
- onChange: (V) => {
- t.infiniteScroll = t.infiniteScroll || {}, t.infiniteScroll.enabled = !!V, Be(t), At(t), n("infiniteScroll.enabled");
+ onChange: (Y) => {
+ t.infiniteScroll = t.infiniteScroll || {}, t.infiniteScroll.enabled = !!Y, Ue(t), Zt(t), n("infiniteScroll.enabled");
}
}), e({
id: `${Sn}.Sidebar.Position`,
@@ -6029,8 +6029,8 @@ function $h(e, t, n) {
type: "combo",
defaultValue: ((x = t.sidebar) == null ? void 0 : x.position) || "right",
options: ["left", "right"],
- onChange: (V) => {
- t.sidebar = t.sidebar || {}, t.sidebar.position = V === "left" ? "left" : "right", Be(t), n("sidebar.position");
+ onChange: (Y) => {
+ t.sidebar = t.sidebar || {}, t.sidebar.position = Y === "left" ? "left" : "right", Ue(t), n("sidebar.position");
}
}), e({
id: `${Sn}.Sidebar.ShowPreviewThumb`,
@@ -6038,9 +6038,9 @@ function $h(e, t, n) {
name: "Show sidebar preview thumb",
tooltip: "Show/hide the large media preview at the top of the sidebar metadata panel.",
type: "boolean",
- defaultValue: !!(((T = t.sidebar) == null ? void 0 : T.showPreviewThumb) ?? !0),
- onChange: (V) => {
- t.sidebar = t.sidebar || {}, t.sidebar.showPreviewThumb = !!V, Be(t), n("sidebar.showPreviewThumb");
+ defaultValue: !!(((K = t.sidebar) == null ? void 0 : K.showPreviewThumb) ?? !0),
+ onChange: (Y) => {
+ t.sidebar = t.sidebar || {}, t.sidebar.showPreviewThumb = !!Y, Ue(t), n("sidebar.showPreviewThumb");
}
}), e({
id: `${Sn}.Sidebar.WidthPx`,
@@ -6048,17 +6048,17 @@ function $h(e, t, n) {
name: "Sidebar width (px)",
tooltip: "Set the details sidebar width in pixels (240-640).",
type: "number",
- defaultValue: Math.max(240, Math.min(640, Number((v = t.sidebar) == null ? void 0 : v.widthPx) || 360)),
+ defaultValue: Math.max(240, Math.min(640, Number((j = t.sidebar) == null ? void 0 : j.widthPx) || 360)),
attrs: {
min: 240,
max: 640,
step: 10
},
- onChange: (V) => {
+ onChange: (Y) => {
t.sidebar = t.sidebar || {}, t.sidebar.widthPx = Math.max(
240,
- Math.min(640, Math.round(Number(V) || 360))
- ), Be(t), n("sidebar.widthPx");
+ Math.min(640, Math.round(Number(Y) || 360))
+ ), Ue(t), n("sidebar.widthPx");
}
}), e({
id: `${Sn}.General.HideSiblings`,
@@ -6067,8 +6067,8 @@ function $h(e, t, n) {
tooltip: m("setting.siblings.hide.desc"),
type: "boolean",
defaultValue: !!((w = t.siblings) != null && w.hidePngSiblings),
- onChange: (V) => {
- t.siblings = t.siblings || {}, t.siblings.hidePngSiblings = !!V, Be(t), n("siblings.hidePngSiblings");
+ onChange: (Y) => {
+ t.siblings = t.siblings || {}, t.siblings.hidePngSiblings = !!Y, Ue(t), n("siblings.hidePngSiblings");
}
}), e({
id: `${Sn}.Grid.VideoAutoplayMode`,
@@ -6083,28 +6083,28 @@ function $h(e, t, n) {
),
type: "combo",
defaultValue: (() => {
- var K, z;
- let V = (K = t.grid) == null ? void 0 : K.videoAutoplayMode;
- V == null && (V = ((z = t.grid) == null ? void 0 : z.videoHoverAutoplay) === !1 ? "off" : "hover"), V === !0 && (V = "hover"), V === !1 && (V = "off"), V !== "hover" && V !== "always" && V !== "off" && (V = "hover");
- const k = {
+ var U, z;
+ let Y = (U = t.grid) == null ? void 0 : U.videoAutoplayMode;
+ Y == null && (Y = ((z = t.grid) == null ? void 0 : z.videoHoverAutoplay) === !1 ? "off" : "hover"), Y === !0 && (Y = "hover"), Y === !1 && (Y = "off"), Y !== "hover" && Y !== "always" && Y !== "off" && (Y = "hover");
+ const N = {
off: m("setting.grid.videoAutoplayMode.off", "Off"),
hover: m("setting.grid.videoAutoplayMode.hover", "Hover"),
always: m("setting.grid.videoAutoplayMode.always", "Always")
};
- return k[V] || k.off;
+ return N[Y] || N.off;
})(),
options: [
m("setting.grid.videoAutoplayMode.off", "Off"),
m("setting.grid.videoAutoplayMode.hover", "Hover"),
m("setting.grid.videoAutoplayMode.always", "Always")
],
- onChange: (V) => {
- const K = {
+ onChange: (Y) => {
+ const U = {
[m("setting.grid.videoAutoplayMode.off", "Off")]: "off",
[m("setting.grid.videoAutoplayMode.hover", "Hover")]: "hover",
[m("setting.grid.videoAutoplayMode.always", "Always")]: "always"
- }[V] || "off";
- t.grid = t.grid || {}, t.grid.videoAutoplayMode = K, delete t.grid.videoHoverAutoplay, Be(t), At(t), n("grid.videoAutoplayMode");
+ }[Y] || "off";
+ t.grid = t.grid || {}, t.grid.videoAutoplayMode = U, delete t.grid.videoHoverAutoplay, Ue(t), Zt(t), n("grid.videoAutoplayMode");
}
}), e({
id: `${Sn}.Cards.HoverColor`,
@@ -6114,10 +6114,10 @@ function $h(e, t, n) {
type: "color",
defaultValue: a(
(R = t.ui) == null ? void 0 : R.cardHoverColor,
- Ge.UI_CARD_HOVER_COLOR
+ Se.UI_CARD_HOVER_COLOR
),
- onChange: (V) => {
- t.ui = t.ui || {}, t.ui.cardHoverColor = a(V, Ge.UI_CARD_HOVER_COLOR), Be(t), At(t), n("ui.cardHoverColor");
+ onChange: (Y) => {
+ t.ui = t.ui || {}, t.ui.cardHoverColor = a(Y, Se.UI_CARD_HOVER_COLOR), Ue(t), Zt(t), n("ui.cardHoverColor");
}
}), e({
id: `${Sn}.Cards.SelectionColor`,
@@ -6126,14 +6126,14 @@ function $h(e, t, n) {
tooltip: "Outline/accent color used for selected cards (hex, e.g. #4A90E2).",
type: "color",
defaultValue: a(
- (Y = t.ui) == null ? void 0 : Y.cardSelectionColor,
- Ge.UI_CARD_SELECTION_COLOR
+ (V = t.ui) == null ? void 0 : V.cardSelectionColor,
+ Se.UI_CARD_SELECTION_COLOR
),
- onChange: (V) => {
+ onChange: (Y) => {
t.ui = t.ui || {}, t.ui.cardSelectionColor = a(
- V,
- Ge.UI_CARD_SELECTION_COLOR
- ), Be(t), At(t), n("ui.cardSelectionColor");
+ Y,
+ Se.UI_CARD_SELECTION_COLOR
+ ), Ue(t), Zt(t), n("ui.cardSelectionColor");
}
}), e({
id: `${Sn}.Badges.RatingColor`,
@@ -6141,9 +6141,9 @@ function $h(e, t, n) {
name: "Majoor: Rating badge color",
tooltip: "Color used for rating badge text/accent (hex, e.g. #FF9500).",
type: "color",
- defaultValue: a((F = t.ui) == null ? void 0 : F.ratingColor, Ge.UI_RATING_COLOR),
- onChange: (V) => {
- t.ui = t.ui || {}, t.ui.ratingColor = a(V, Ge.UI_RATING_COLOR), Be(t), At(t), n("ui.ratingColor");
+ defaultValue: a((O = t.ui) == null ? void 0 : O.ratingColor, Se.UI_RATING_COLOR),
+ onChange: (Y) => {
+ t.ui = t.ui || {}, t.ui.ratingColor = a(Y, Se.UI_RATING_COLOR), Ue(t), Zt(t), n("ui.ratingColor");
}
}), e({
id: `${Sn}.Badges.TagColor`,
@@ -6151,16 +6151,16 @@ function $h(e, t, n) {
name: "Majoor: Tags badge color",
tooltip: "Color used for tags badge text/accent (hex, e.g. #4A90E2).",
type: "color",
- defaultValue: a((N = t.ui) == null ? void 0 : N.tagColor, Ge.UI_TAG_COLOR),
- onChange: (V) => {
- t.ui = t.ui || {}, t.ui.tagColor = a(V, Ge.UI_TAG_COLOR), Be(t), At(t), n("ui.tagColor");
+ defaultValue: a((k = t.ui) == null ? void 0 : k.tagColor, Se.UI_TAG_COLOR),
+ onChange: (Y) => {
+ t.ui = t.ui || {}, t.ui.tagColor = a(Y, Se.UI_TAG_COLOR), Ue(t), Zt(t), n("ui.tagColor");
}
});
}
-const Ti = "Majoor", eC = "Majoor Assets Manager";
-function tC(e, t, n) {
- var r, l, a, c, s, d, u, I, y, S;
- const i = (Z, C) => [eC, Z, C];
+const Ti = "Majoor", eh = "Majoor Assets Manager";
+function th(e, t, n) {
+ var r, l, a, c, s, d, u, I, A, h;
+ const i = (S, W) => [eh, S, W];
e({
id: `${Ti}.Viewer.AllowPanAtZoom1`,
category: i(m("cat.viewer"), m("setting.viewer.pan.name").replace("Majoor: ", "")),
@@ -6168,8 +6168,8 @@ function tC(e, t, n) {
tooltip: m("setting.viewer.pan.desc"),
type: "boolean",
defaultValue: !!((r = t.viewer) != null && r.allowPanAtZoom1),
- onChange: (Z) => {
- t.viewer = t.viewer || {}, t.viewer.allowPanAtZoom1 = !!Z, Be(t), At(t), n("viewer.allowPanAtZoom1");
+ onChange: (S) => {
+ t.viewer = t.viewer || {}, t.viewer.allowPanAtZoom1 = !!S, Ue(t), Zt(t), n("viewer.allowPanAtZoom1");
}
}), e({
id: `${Ti}.Viewer.DisableWebGL`,
@@ -6178,8 +6178,8 @@ function tC(e, t, n) {
tooltip: "Use CPU rendering (Canvas 2D) for video playback. Fixes 'black screen' issues on incompatible hardware/browsers.",
type: "boolean",
defaultValue: !!((l = t.viewer) != null && l.disableWebGL),
- onChange: (Z) => {
- t.viewer = t.viewer || {}, t.viewer.disableWebGL = !!Z, Be(t), At(t), n("viewer.disableWebGL");
+ onChange: (S) => {
+ t.viewer = t.viewer || {}, t.viewer.disableWebGL = !!S, Ue(t), Zt(t), n("viewer.disableWebGL");
}
}), e({
id: `${Ti}.Viewer.PauseDuringExecution`,
@@ -6188,8 +6188,8 @@ function tC(e, t, n) {
tooltip: m("setting.viewer.pauseExecution.desc"),
type: "boolean",
defaultValue: !!((a = t.viewer) != null && a.pauseDuringExecution),
- onChange: (Z) => {
- t.viewer = t.viewer || {}, t.viewer.pauseDuringExecution = !!Z, Be(t), At(t), n("viewer.pauseDuringExecution");
+ onChange: (S) => {
+ t.viewer = t.viewer || {}, t.viewer.pauseDuringExecution = !!S, Ue(t), Zt(t), n("viewer.pauseDuringExecution");
}
}), e({
id: `${Ti}.Viewer.FloatingPauseDuringExecution`,
@@ -6201,8 +6201,8 @@ function tC(e, t, n) {
tooltip: m("setting.viewer.floatingPauseExecution.desc"),
type: "boolean",
defaultValue: !!((c = t.viewer) != null && c.floatingPauseDuringExecution),
- onChange: (Z) => {
- t.viewer = t.viewer || {}, t.viewer.floatingPauseDuringExecution = !!Z, Be(t), At(t), n("viewer.floatingPauseDuringExecution");
+ onChange: (S) => {
+ t.viewer = t.viewer || {}, t.viewer.floatingPauseDuringExecution = !!S, Ue(t), Zt(t), n("viewer.floatingPauseDuringExecution");
}
}), e({
id: `${Ti}.Viewer.MfvLiveDefault`,
@@ -6210,9 +6210,9 @@ function tC(e, t, n) {
name: m("setting.viewer.mfvLiveDefault.name"),
tooltip: m("setting.viewer.mfvLiveDefault.desc"),
type: "boolean",
- defaultValue: !!(((s = t.viewer) == null ? void 0 : s.mfvLiveDefault) ?? Ge.MFV_LIVE_DEFAULT),
- onChange: (Z) => {
- t.viewer = t.viewer || {}, t.viewer.mfvLiveDefault = !!Z, Be(t), At(t), n("viewer.mfvLiveDefault");
+ defaultValue: !!(((s = t.viewer) == null ? void 0 : s.mfvLiveDefault) ?? Se.MFV_LIVE_DEFAULT),
+ onChange: (S) => {
+ t.viewer = t.viewer || {}, t.viewer.mfvLiveDefault = !!S, Ue(t), Zt(t), n("viewer.mfvLiveDefault");
}
}), e({
id: `${Ti}.Viewer.MfvPreviewDefault`,
@@ -6223,9 +6223,9 @@ function tC(e, t, n) {
name: m("setting.viewer.mfvPreviewDefault.name"),
tooltip: m("setting.viewer.mfvPreviewDefault.desc"),
type: "boolean",
- defaultValue: !!(((d = t.viewer) == null ? void 0 : d.mfvPreviewDefault) ?? Ge.MFV_PREVIEW_DEFAULT),
- onChange: (Z) => {
- t.viewer = t.viewer || {}, t.viewer.mfvPreviewDefault = !!Z, Be(t), At(t), n("viewer.mfvPreviewDefault");
+ defaultValue: !!(((d = t.viewer) == null ? void 0 : d.mfvPreviewDefault) ?? Se.MFV_PREVIEW_DEFAULT),
+ onChange: (S) => {
+ t.viewer = t.viewer || {}, t.viewer.mfvPreviewDefault = !!S, Ue(t), Zt(t), n("viewer.mfvPreviewDefault");
}
}), e({
id: `${Ti}.Viewer.MfvSidebarPosition`,
@@ -6235,9 +6235,9 @@ function tC(e, t, n) {
type: "combo",
defaultValue: ((u = t.viewer) == null ? void 0 : u.mfvSidebarPosition) || "right",
options: ["right", "left", "bottom"],
- onChange: (Z) => {
- const C = ["left", "right", "bottom"].includes(Z) ? Z : "right";
- t.viewer = t.viewer || {}, t.viewer.mfvSidebarPosition = C, Be(t), At(t), n("viewer.mfvSidebarPosition");
+ onChange: (S) => {
+ const W = ["left", "right", "bottom"].includes(S) ? S : "right";
+ t.viewer = t.viewer || {}, t.viewer.mfvSidebarPosition = W, Ue(t), Zt(t), n("viewer.mfvSidebarPosition");
}
}), e({
id: `${Ti}.Viewer.MfvPreviewMethod`,
@@ -6247,9 +6247,9 @@ function tC(e, t, n) {
type: "combo",
defaultValue: ((I = t.viewer) == null ? void 0 : I.mfvPreviewMethod) || "taesd",
options: ["taesd", "latent2rgb", "auto", "default", "none"],
- onChange: (Z) => {
- const C = ["taesd", "latent2rgb", "auto", "default", "none"].includes(Z) ? Z : "taesd";
- t.viewer = t.viewer || {}, t.viewer.mfvPreviewMethod = C, Be(t), At(t), n("viewer.mfvPreviewMethod");
+ onChange: (S) => {
+ const W = ["taesd", "latent2rgb", "auto", "default", "none"].includes(S) ? S : "taesd";
+ t.viewer = t.viewer || {}, t.viewer.mfvPreviewMethod = W, Ue(t), Zt(t), n("viewer.mfvPreviewMethod");
}
}), e({
id: `${Ti}.Viewer.LtxavRgbFallback`,
@@ -6257,19 +6257,19 @@ function tC(e, t, n) {
name: "Majoor: LTXAV RGB Preview Fallback (experimental)",
tooltip: "Reuse LTXV RGB projection for LTXAV when native latent preview is unavailable. Experimental; quality may be approximate.",
type: "boolean",
- defaultValue: !!((y = t.viewer) != null && y.ltxavRgbFallback),
- onChange: async (Z) => {
- var A;
- const C = !!Z, g = !!((A = t.viewer) != null && A.ltxavRgbFallback);
- t.viewer = t.viewer || {}, t.viewer.ltxavRgbFallback = C, Be(t), At(t), n("viewer.ltxavRgbFallback");
+ defaultValue: !!((A = t.viewer) != null && A.ltxavRgbFallback),
+ onChange: async (S) => {
+ var y;
+ const W = !!S, g = !!((y = t.viewer) != null && y.ltxavRgbFallback);
+ t.viewer = t.viewer || {}, t.viewer.ltxavRgbFallback = W, Ue(t), Zt(t), n("viewer.ltxavRgbFallback");
try {
- const p = await jf(C);
+ const p = await jf(W);
if (!(p != null && p.ok))
throw new Error(
(p == null ? void 0 : p.error) || "Failed to update LTXAV RGB preview fallback setting"
);
} catch (p) {
- t.viewer.ltxavRgbFallback = g, Be(t), At(t), n("viewer.ltxavRgbFallback"), Ze(
+ t.viewer.ltxavRgbFallback = g, Ue(t), Zt(t), n("viewer.ltxavRgbFallback"), Ae(
(p == null ? void 0 : p.message) || "Failed to update LTXAV RGB preview fallback setting",
"error"
);
@@ -6277,27 +6277,27 @@ function tC(e, t, n) {
}
});
try {
- xf().then((Z) => {
- var g, A;
- if (!(Z != null && Z.ok)) return;
- const C = !!((A = (g = Z == null ? void 0 : Z.data) == null ? void 0 : g.prefs) != null && A.enabled);
- t.viewer = t.viewer || {}, !!t.viewer.ltxavRgbFallback !== C && (t.viewer.ltxavRgbFallback = C, Be(t), At(t), n("viewer.ltxavRgbFallback"));
+ xf().then((S) => {
+ var g, y;
+ if (!(S != null && S.ok)) return;
+ const W = !!((y = (g = S == null ? void 0 : S.data) == null ? void 0 : g.prefs) != null && y.enabled);
+ t.viewer = t.viewer || {}, !!t.viewer.ltxavRgbFallback !== W && (t.viewer.ltxavRgbFallback = W, Ue(t), Zt(t), n("viewer.ltxavRgbFallback"));
}).catch(() => {
});
- } catch (Z) {
- (S = console.debug) == null || S.call(console, Z);
+ } catch (S) {
+ (h = console.debug) == null || h.call(console, S);
}
- ((Z, C, g, A) => {
+ ((S, W, g, y) => {
var p;
e({
- id: `${Ti}.WorkflowMinimap.${Z}`,
+ id: `${Ti}.WorkflowMinimap.${S}`,
category: i(m("cat.viewer"), m(g).replace("Majoor: ", "")),
name: m(g),
- tooltip: m(A),
+ tooltip: m(y),
type: "boolean",
- defaultValue: !!((p = t.workflowMinimap) != null && p[C]),
+ defaultValue: !!((p = t.workflowMinimap) != null && p[W]),
onChange: (b) => {
- t.workflowMinimap = t.workflowMinimap || {}, t.workflowMinimap[C] = !!b, Be(t), n(`workflowMinimap.${C}`);
+ t.workflowMinimap = t.workflowMinimap || {}, t.workflowMinimap[W] = !!b, Ue(t), n(`workflowMinimap.${W}`);
}
});
})(
@@ -6307,70 +6307,70 @@ function tC(e, t, n) {
"setting.minimap.enabled.desc"
);
}
-const Xi = "Majoor", nC = "Majoor Assets Manager";
-function iC(e, t, n) {
- var a, c, s, d, u, I, y, S, Z, C, g, A;
- const i = (p, b) => [nC, p, b];
+const Ni = "Majoor", nh = "Majoor Assets Manager";
+function ih(e, t, n) {
+ var a, c, s, d, u, I, A, h, S, W, g, y;
+ const i = (p, b) => [nh, p, b];
e({
- id: `${Xi}.ExecutionGrouping.Enabled`,
+ id: `${Ni}.ExecutionGrouping.Enabled`,
category: i(m("cat.scanning"), "Execution grouping"),
name: "Execution job/stack grouping",
tooltip: "Enable or disable all live job_id / stack_id tracking, grouping, and stack finalization logic.",
type: "boolean",
- defaultValue: !!(((a = t.executionGrouping) == null ? void 0 : a.enabled) ?? Ge.EXECUTION_GROUPING_ENABLED),
+ defaultValue: !!(((a = t.executionGrouping) == null ? void 0 : a.enabled) ?? Se.EXECUTION_GROUPING_ENABLED),
onChange: async (p) => {
- var h, G, W;
- const b = !!(((h = t.executionGrouping) == null ? void 0 : h.enabled) ?? Ge.EXECUTION_GROUPING_ENABLED), L = !!p;
- t.executionGrouping = t.executionGrouping || {}, t.executionGrouping.enabled = L, Be(t), At(t), n("executionGrouping.enabled");
+ var C, G, Z;
+ const b = !!(((C = t.executionGrouping) == null ? void 0 : C.enabled) ?? Se.EXECUTION_GROUPING_ENABLED), L = !!p;
+ t.executionGrouping = t.executionGrouping || {}, t.executionGrouping.enabled = L, Ue(t), Zt(t), n("executionGrouping.enabled");
try {
- const f = await hf(L);
+ const f = await Cf(L);
if (!(f != null && f.ok))
throw new Error((f == null ? void 0 : f.error) || "Failed to update execution grouping setting");
- t.executionGrouping.enabled = !!((W = (G = f == null ? void 0 : f.data) == null ? void 0 : G.prefs) != null && W.enabled), Be(t), At(t), n("executionGrouping.enabled");
+ t.executionGrouping.enabled = !!((Z = (G = f == null ? void 0 : f.data) == null ? void 0 : G.prefs) != null && Z.enabled), Ue(t), Zt(t), n("executionGrouping.enabled");
} catch (f) {
- t.executionGrouping.enabled = b, Be(t), At(t), n("executionGrouping.enabled"), Ze((f == null ? void 0 : f.message) || "Failed to update execution grouping setting", "error");
+ t.executionGrouping.enabled = b, Ue(t), Zt(t), n("executionGrouping.enabled"), Ae((f == null ? void 0 : f.message) || "Failed to update execution grouping setting", "error");
}
}
}), e({
- id: `${Xi}.AutoScan.OnStartup`,
+ id: `${Ni}.AutoScan.OnStartup`,
category: i(m("cat.scanning"), m("setting.scan.startup.name").replace("Majoor: ", "")),
name: m("setting.scan.startup.name"),
tooltip: m("setting.scan.startup.desc"),
type: "boolean",
defaultValue: !!((c = t.autoScan) != null && c.onStartup),
onChange: (p) => {
- t.autoScan = t.autoScan || {}, t.autoScan.onStartup = !!p, Be(t), At(t), n("autoScan.onStartup");
+ t.autoScan = t.autoScan || {}, t.autoScan.onStartup = !!p, Ue(t), Zt(t), n("autoScan.onStartup");
}
}), e({
- id: `${Xi}.Scan.FastMode`,
+ id: `${Ni}.Scan.FastMode`,
category: i(m("cat.scanning"), "Scan mode"),
name: "Fast scan mode",
tooltip: "Use fast scan mode for manual backfill scans (skip heavier metadata work during scan).",
type: "boolean",
defaultValue: !!(((s = t.scan) == null ? void 0 : s.fastMode) ?? !0),
onChange: (p) => {
- t.scan = t.scan || {}, t.scan.fastMode = !!p, Be(t), n("scan.fastMode");
+ t.scan = t.scan || {}, t.scan.fastMode = !!p, Ue(t), n("scan.fastMode");
}
}), e({
- id: `${Xi}.RtHydrate.Concurrency`,
+ id: `${Ni}.RtHydrate.Concurrency`,
category: i(m("cat.scanning"), "Hydration"),
name: "Hydrate Concurrency",
tooltip: "Maximum concurrent hydration requests for rating/tags.",
type: "number",
defaultValue: Number(
- ((d = t.rtHydrate) == null ? void 0 : d.concurrency) || Ge.RT_HYDRATE_CONCURRENCY || 5
+ ((d = t.rtHydrate) == null ? void 0 : d.concurrency) || Se.RT_HYDRATE_CONCURRENCY || 5
),
attrs: { min: 1, max: 20, step: 1 },
onChange: (p) => {
t.rtHydrate = t.rtHydrate || {}, t.rtHydrate.concurrency = Math.max(
1,
- Math.min(20, Math.round(Gn(p, Ge.RT_HYDRATE_CONCURRENCY || 5)))
- ), Be(t), At(t), n("rtHydrate.concurrency");
+ Math.min(20, Math.round(xn(p, Se.RT_HYDRATE_CONCURRENCY || 5)))
+ ), Ue(t), Zt(t), n("rtHydrate.concurrency");
}
});
- const o = (p, b, L, h) => {
- const G = Math.round(Gn(p, b));
- return Math.max(L, Math.min(h, G));
+ const o = (p, b, L, C) => {
+ const G = Math.round(xn(p, b));
+ return Math.max(L, Math.min(C, G));
}, r = (p = {}) => {
const b = [];
if (t.watcher = t.watcher || {}, typeof p.debounce_ms == "number") {
@@ -6381,11 +6381,11 @@ function iC(e, t, n) {
const L = Math.max(100, Math.min(3e4, Math.round(p.dedupe_ttl_ms)));
t.watcher.dedupeTtlMs !== L && (t.watcher.dedupeTtlMs = L, b.push("watcher.dedupeTtlMs"));
}
- b.length && (Be(t), b.forEach((L) => n(L)));
+ b.length && (Ue(t), b.forEach((L) => n(L)));
}, l = async () => {
var p;
try {
- const b = await Nf();
+ const b = await kf();
if (!(b != null && b.ok))
return;
r(b.data || {});
@@ -6394,26 +6394,26 @@ function iC(e, t, n) {
}
};
e({
- id: `${Xi}.Watcher.Enabled`,
+ id: `${Ni}.Watcher.Enabled`,
category: i(m("cat.scanning"), m("setting.watcher.enabled.label", "Enable watcher")),
name: m("setting.watcher.name"),
tooltip: m("setting.watcher.desc") + " (env: MJR_ENABLE_WATCHER)",
type: "boolean",
defaultValue: !!((u = t.watcher) != null && u.enabled),
onChange: async (p) => {
- t.watcher = t.watcher || {}, t.watcher.enabled = !!p, Be(t), n("watcher.enabled");
+ t.watcher = t.watcher || {}, t.watcher.enabled = !!p, Ue(t), n("watcher.enabled");
try {
const b = await Ma(!!p);
- b != null && b.ok || (t.watcher.enabled = !p, Be(t), n("watcher.enabled"), Ze(
+ b != null && b.ok || (t.watcher.enabled = !p, Ue(t), n("watcher.enabled"), Ae(
(b == null ? void 0 : b.error) || m("toast.failedToggleWatcher", "Failed to toggle watcher"),
"error"
));
} catch {
- t.watcher.enabled = !p, Be(t), n("watcher.enabled");
+ t.watcher.enabled = !p, Ue(t), n("watcher.enabled");
}
}
}), e({
- id: `${Xi}.Watcher.DebounceDelay`,
+ id: `${Ni}.Watcher.DebounceDelay`,
category: i(
m("cat.scanning"),
m("setting.watcher.debounce.label", "Watcher debounce delay")
@@ -6421,26 +6421,26 @@ function iC(e, t, n) {
name: m("setting.watcher.debounce.name"),
tooltip: m("setting.watcher.debounce.desc") + " (env: MJR_WATCHER_DEBOUNCE_MS)",
type: "number",
- defaultValue: ((I = t.watcher) == null ? void 0 : I.debounceMs) ?? Ge.WATCHER_DEBOUNCE_MS,
+ defaultValue: ((I = t.watcher) == null ? void 0 : I.debounceMs) ?? Se.WATCHER_DEBOUNCE_MS,
attrs: { min: 50, max: 5e3, step: 50 },
onChange: async (p) => {
- var G, W;
- const b = Ge.WATCHER_DEBOUNCE_MS, L = o(p, b, 50, 5e3), h = ((G = t.watcher) == null ? void 0 : G.debounceMs) ?? b;
- if (L !== h) {
- t.watcher = t.watcher || {}, t.watcher.debounceMs = L, Be(t);
+ var G, Z;
+ const b = Se.WATCHER_DEBOUNCE_MS, L = o(p, b, 50, 5e3), C = ((G = t.watcher) == null ? void 0 : G.debounceMs) ?? b;
+ if (L !== C) {
+ t.watcher = t.watcher || {}, t.watcher.debounceMs = L, Ue(t);
try {
const f = await $d({ debounce_ms: L });
if (!(f != null && f.ok))
throw new Error((f == null ? void 0 : f.error) || m("setting.watcher.debounce.error"));
- const X = Math.round(Number(((W = f == null ? void 0 : f.data) == null ? void 0 : W.debounce_ms) ?? L));
- t.watcher.debounceMs = X, Be(t), n("watcher.debounceMs");
+ const X = Math.round(Number(((Z = f == null ? void 0 : f.data) == null ? void 0 : Z.debounce_ms) ?? L));
+ t.watcher.debounceMs = X, Ue(t), n("watcher.debounceMs");
} catch (f) {
- t.watcher.debounceMs = h, Be(t), n("watcher.debounceMs"), Ze((f == null ? void 0 : f.message) || m("setting.watcher.debounce.error"), "error");
+ t.watcher.debounceMs = C, Ue(t), n("watcher.debounceMs"), Ae((f == null ? void 0 : f.message) || m("setting.watcher.debounce.error"), "error");
}
}
}
}), e({
- id: `${Xi}.Watcher.DedupeWindow`,
+ id: `${Ni}.Watcher.DedupeWindow`,
category: i(
m("cat.scanning"),
m("setting.watcher.dedupe.label", "Watcher dedupe window")
@@ -6448,65 +6448,65 @@ function iC(e, t, n) {
name: m("setting.watcher.dedupe.name"),
tooltip: m("setting.watcher.dedupe.desc") + " (env: MJR_WATCHER_DEDUPE_TTL_MS)",
type: "number",
- defaultValue: ((y = t.watcher) == null ? void 0 : y.dedupeTtlMs) ?? Ge.WATCHER_DEDUPE_TTL_MS,
+ defaultValue: ((A = t.watcher) == null ? void 0 : A.dedupeTtlMs) ?? Se.WATCHER_DEDUPE_TTL_MS,
attrs: { min: 100, max: 3e4, step: 100 },
onChange: async (p) => {
- var G, W;
- const b = Ge.WATCHER_DEDUPE_TTL_MS, L = o(p, b, 100, 3e4), h = ((G = t.watcher) == null ? void 0 : G.dedupeTtlMs) ?? b;
- if (L !== h) {
- t.watcher = t.watcher || {}, t.watcher.dedupeTtlMs = L, Be(t);
+ var G, Z;
+ const b = Se.WATCHER_DEDUPE_TTL_MS, L = o(p, b, 100, 3e4), C = ((G = t.watcher) == null ? void 0 : G.dedupeTtlMs) ?? b;
+ if (L !== C) {
+ t.watcher = t.watcher || {}, t.watcher.dedupeTtlMs = L, Ue(t);
try {
const f = await $d({ dedupe_ttl_ms: L });
if (!(f != null && f.ok))
throw new Error((f == null ? void 0 : f.error) || m("setting.watcher.dedupe.error"));
- const X = Math.round(Number(((W = f == null ? void 0 : f.data) == null ? void 0 : W.dedupe_ttl_ms) ?? L));
- t.watcher.dedupeTtlMs = X, Be(t), n("watcher.dedupeTtlMs");
+ const X = Math.round(Number(((Z = f == null ? void 0 : f.data) == null ? void 0 : Z.dedupe_ttl_ms) ?? L));
+ t.watcher.dedupeTtlMs = X, Ue(t), n("watcher.dedupeTtlMs");
} catch (f) {
- t.watcher.dedupeTtlMs = h, Be(t), n("watcher.dedupeTtlMs"), Ze((f == null ? void 0 : f.message) || m("setting.watcher.dedupe.error"), "error");
+ t.watcher.dedupeTtlMs = C, Ue(t), n("watcher.dedupeTtlMs"), Ae((f == null ? void 0 : f.message) || m("setting.watcher.dedupe.error"), "error");
}
}
}
}), e({
- id: `${Xi}.Watcher.MaxPending`,
+ id: `${Ni}.Watcher.MaxPending`,
category: i(m("cat.scanning"), "Watcher queue"),
name: "Watcher: max pending files",
tooltip: "Maximum number of pending watcher files kept in memory.",
type: "number",
- defaultValue: Number(((S = t.watcher) == null ? void 0 : S.maxPending) ?? 500),
+ defaultValue: Number(((h = t.watcher) == null ? void 0 : h.maxPending) ?? 500),
attrs: { min: 10, max: 5e3, step: 10 },
onChange: (p) => {
t.watcher = t.watcher || {}, t.watcher.maxPending = Math.max(
10,
- Math.min(5e3, Math.round(Gn(p, 500)))
- ), Be(t), At(t), n("watcher.maxPending");
+ Math.min(5e3, Math.round(xn(p, 500)))
+ ), Ue(t), Zt(t), n("watcher.maxPending");
}
}), e({
- id: `${Xi}.Watcher.MinSize`,
+ id: `${Ni}.Watcher.MinSize`,
category: i(m("cat.scanning"), "Watcher file size"),
name: "Watcher: min size (bytes)",
tooltip: "Minimum file size indexed by watcher.",
type: "number",
- defaultValue: Number(((Z = t.watcher) == null ? void 0 : Z.minSize) ?? 100),
+ defaultValue: Number(((S = t.watcher) == null ? void 0 : S.minSize) ?? 100),
attrs: { min: 0, max: 1e6, step: 100 },
onChange: (p) => {
t.watcher = t.watcher || {}, t.watcher.minSize = Math.max(
0,
- Math.min(1e6, Math.round(Gn(p, 100)))
- ), Be(t), At(t), n("watcher.minSize");
+ Math.min(1e6, Math.round(xn(p, 100)))
+ ), Ue(t), Zt(t), n("watcher.minSize");
}
}), e({
- id: `${Xi}.Watcher.MaxSize`,
+ id: `${Ni}.Watcher.MaxSize`,
category: i(m("cat.scanning"), "Watcher file size"),
name: "Watcher: max size (bytes)",
tooltip: "Maximum file size indexed by watcher.",
type: "number",
- defaultValue: Number(((C = t.watcher) == null ? void 0 : C.maxSize) ?? 4294967296),
+ defaultValue: Number(((W = t.watcher) == null ? void 0 : W.maxSize) ?? 4294967296),
attrs: { min: 1e5, max: 17179869184, step: 1e5 },
onChange: (p) => {
t.watcher = t.watcher || {}, t.watcher.maxSize = Math.max(
1e5,
- Math.min(17179869184, Math.round(Gn(p, 4294967296)))
- ), Be(t), At(t), n("watcher.maxSize");
+ Math.min(17179869184, Math.round(xn(p, 4294967296)))
+ ), Ue(t), Zt(t), n("watcher.maxSize");
}
});
try {
@@ -6516,195 +6516,195 @@ function iC(e, t, n) {
(g = console.debug) == null || g.call(console, p);
}
e({
- id: `${Xi}.RatingTagsSync.Enabled`,
+ id: `${Ni}.RatingTagsSync.Enabled`,
category: i(m("cat.scanning"), m("setting.sync.rating.name").replace("Majoor: ", "")),
name: m("setting.sync.rating.name"),
tooltip: m("setting.sync.rating.desc"),
type: "boolean",
- defaultValue: !!((A = t.ratingTagsSync) != null && A.enabled),
+ defaultValue: !!((y = t.ratingTagsSync) != null && y.enabled),
onChange: (p) => {
- t.ratingTagsSync = t.ratingTagsSync || {}, t.ratingTagsSync.enabled = !!p, Be(t), n("ratingTagsSync.enabled");
+ t.ratingTagsSync = t.ratingTagsSync || {}, t.ratingTagsSync.enabled = !!p, Ue(t), n("ratingTagsSync.enabled");
}
});
}
-const Bi = "Majoor", oC = "Majoor Assets Manager";
-function rC(e, t, n) {
- var r, l, a, c, s, d, u, I, y, S;
- const i = (Z) => [oC, m("cat.feed", "Generated Feed"), Z], o = () => {
+const Ki = "Majoor", oh = "Majoor Assets Manager";
+function rh(e, t, n) {
+ var r, l, a, c, s, d, u, I, A, h;
+ const i = (S) => [oh, m("cat.feed", "Generated Feed"), S], o = () => {
t.feed = t.feed || {};
};
e({
- id: `${Bi}.Feed.CardSize`,
+ id: `${Ki}.Feed.CardSize`,
category: i("Card size"),
name: "Feed card size (px)",
tooltip: "Set the minimum card width used by the Generated Feed layout (60-600 px).",
type: "number",
defaultValue: Math.max(60, Math.min(600, Number((r = t.feed) == null ? void 0 : r.minSize) || 120)),
attrs: { min: 60, max: 600, step: 10 },
- onChange: (Z) => {
- o(), t.feed.minSize = Math.max(60, Math.min(600, Math.round(Number(Z) || 120))), Be(t), At(t), n("feed.minSize");
+ onChange: (S) => {
+ o(), t.feed.minSize = Math.max(60, Math.min(600, Math.round(Number(S) || 120))), Ue(t), Zt(t), n("feed.minSize");
}
}), e({
- id: `${Bi}.Feed.ShowInfo`,
+ id: `${Ki}.Feed.ShowInfo`,
category: i("Show info section"),
name: "Show card info section",
tooltip: "Show or hide the entire info section (filename, metadata, dots) below thumbnails in the Generated Feed.",
type: "boolean",
- defaultValue: !!(((l = t.feed) == null ? void 0 : l.showInfo) ?? Ge.FEED_SHOW_INFO),
- onChange: (Z) => {
- o(), t.feed.showInfo = !!Z, Be(t), At(t), n("feed.showInfo");
+ defaultValue: !!(((l = t.feed) == null ? void 0 : l.showInfo) ?? Se.FEED_SHOW_INFO),
+ onChange: (S) => {
+ o(), t.feed.showInfo = !!S, Ue(t), Zt(t), n("feed.showInfo");
}
}), e({
- id: `${Bi}.Feed.ShowFilename`,
+ id: `${Ki}.Feed.ShowFilename`,
category: i("Show filename"),
name: "Show filename",
tooltip: "Display the filename on feed cards.",
type: "boolean",
- defaultValue: !!(((a = t.feed) == null ? void 0 : a.showFilename) ?? Ge.FEED_SHOW_FILENAME),
- onChange: (Z) => {
- o(), t.feed.showFilename = !!Z, Be(t), At(t), n("feed.showFilename");
+ defaultValue: !!(((a = t.feed) == null ? void 0 : a.showFilename) ?? Se.FEED_SHOW_FILENAME),
+ onChange: (S) => {
+ o(), t.feed.showFilename = !!S, Ue(t), Zt(t), n("feed.showFilename");
}
}), e({
- id: `${Bi}.Feed.ShowDimensions`,
+ id: `${Ki}.Feed.ShowDimensions`,
category: i("Show dimensions"),
name: "Show dimensions",
tooltip: "Display resolution (WxH) and duration on feed cards.",
type: "boolean",
- defaultValue: !!(((c = t.feed) == null ? void 0 : c.showDimensions) ?? Ge.FEED_SHOW_DIMENSIONS),
- onChange: (Z) => {
- o(), t.feed.showDimensions = !!Z, Be(t), At(t), n("feed.showDimensions");
+ defaultValue: !!(((c = t.feed) == null ? void 0 : c.showDimensions) ?? Se.FEED_SHOW_DIMENSIONS),
+ onChange: (S) => {
+ o(), t.feed.showDimensions = !!S, Ue(t), Zt(t), n("feed.showDimensions");
}
}), e({
- id: `${Bi}.Feed.ShowDate`,
+ id: `${Ki}.Feed.ShowDate`,
category: i("Show date/time"),
name: "Show date/time",
tooltip: "Display date and time on feed cards.",
type: "boolean",
- defaultValue: !!(((s = t.feed) == null ? void 0 : s.showDate) ?? Ge.FEED_SHOW_DATE),
- onChange: (Z) => {
- o(), t.feed.showDate = !!Z, Be(t), At(t), n("feed.showDate");
+ defaultValue: !!(((s = t.feed) == null ? void 0 : s.showDate) ?? Se.FEED_SHOW_DATE),
+ onChange: (S) => {
+ o(), t.feed.showDate = !!S, Ue(t), Zt(t), n("feed.showDate");
}
}), e({
- id: `${Bi}.Feed.ShowGenTime`,
+ id: `${Ki}.Feed.ShowGenTime`,
category: i("Show generation time"),
name: "Show generation time",
tooltip: "Display the generation time badge on feed cards.",
type: "boolean",
- defaultValue: !!(((d = t.feed) == null ? void 0 : d.showGenTime) ?? Ge.FEED_SHOW_GENTIME),
- onChange: (Z) => {
- o(), t.feed.showGenTime = !!Z, Be(t), At(t), n("feed.showGenTime");
+ defaultValue: !!(((d = t.feed) == null ? void 0 : d.showGenTime) ?? Se.FEED_SHOW_GENTIME),
+ onChange: (S) => {
+ o(), t.feed.showGenTime = !!S, Ue(t), Zt(t), n("feed.showGenTime");
}
}), e({
- id: `${Bi}.Feed.ShowWorkflowDot`,
+ id: `${Ki}.Feed.ShowWorkflowDot`,
category: i("Show workflow dot"),
name: "Show workflow indicator",
tooltip: "Display the workflow availability dot on feed cards.",
type: "boolean",
- defaultValue: !!(((u = t.feed) == null ? void 0 : u.showWorkflowDot) ?? Ge.FEED_SHOW_WORKFLOW_DOT),
- onChange: (Z) => {
- o(), t.feed.showWorkflowDot = !!Z, Be(t), At(t), n("feed.showWorkflowDot");
+ defaultValue: !!(((u = t.feed) == null ? void 0 : u.showWorkflowDot) ?? Se.FEED_SHOW_WORKFLOW_DOT),
+ onChange: (S) => {
+ o(), t.feed.showWorkflowDot = !!S, Ue(t), Zt(t), n("feed.showWorkflowDot");
}
}), e({
- id: `${Bi}.Feed.ShowExtBadge`,
+ id: `${Ki}.Feed.ShowExtBadge`,
category: i("Show format badges"),
name: "Show format badges",
tooltip: "Display format badges (e.g. JPG, MP4) on feed card thumbnails.",
type: "boolean",
- defaultValue: !!(((I = t.feed) == null ? void 0 : I.showExtBadge) ?? Ge.FEED_SHOW_BADGES_EXTENSION),
- onChange: (Z) => {
- o(), t.feed.showExtBadge = !!Z, Be(t), At(t), n("feed.showExtBadge");
+ defaultValue: !!(((I = t.feed) == null ? void 0 : I.showExtBadge) ?? Se.FEED_SHOW_BADGES_EXTENSION),
+ onChange: (S) => {
+ o(), t.feed.showExtBadge = !!S, Ue(t), Zt(t), n("feed.showExtBadge");
}
}), e({
- id: `${Bi}.Feed.ShowRatingBadge`,
+ id: `${Ki}.Feed.ShowRatingBadge`,
category: i("Show rating badges"),
name: "Show ratings",
tooltip: "Display star ratings on feed card thumbnails.",
type: "boolean",
- defaultValue: !!(((y = t.feed) == null ? void 0 : y.showRatingBadge) ?? Ge.FEED_SHOW_BADGES_RATING),
- onChange: (Z) => {
- o(), t.feed.showRatingBadge = !!Z, Be(t), At(t), n("feed.showRatingBadge");
+ defaultValue: !!(((A = t.feed) == null ? void 0 : A.showRatingBadge) ?? Se.FEED_SHOW_BADGES_RATING),
+ onChange: (S) => {
+ o(), t.feed.showRatingBadge = !!S, Ue(t), Zt(t), n("feed.showRatingBadge");
}
}), e({
- id: `${Bi}.Feed.ShowTagsBadge`,
+ id: `${Ki}.Feed.ShowTagsBadge`,
category: i("Show tags badges"),
name: "Show tags",
tooltip: "Display tag indicators on feed card thumbnails.",
type: "boolean",
- defaultValue: !!(((S = t.feed) == null ? void 0 : S.showTagsBadge) ?? Ge.FEED_SHOW_BADGES_TAGS),
- onChange: (Z) => {
- o(), t.feed.showTagsBadge = !!Z, Be(t), At(t), n("feed.showTagsBadge");
+ defaultValue: !!(((h = t.feed) == null ? void 0 : h.showTagsBadge) ?? Se.FEED_SHOW_BADGES_TAGS),
+ onChange: (S) => {
+ o(), t.feed.showTagsBadge = !!S, Ue(t), Zt(t), n("feed.showTagsBadge");
}
});
}
-const Xl = "Majoor", lC = "Majoor Assets Manager", tI = 16;
+const Nl = "Majoor", lh = "Majoor Assets Manager", tI = 16;
function mu(e) {
return !!e;
}
-function gc(e, t) {
+function Ic(e, t) {
return mu(e) === mu(t);
}
function gu(e) {
return typeof e == "string" ? e.trim() : "";
}
-function aC(e) {
+function ah(e) {
const t = String(e || "").trim().toLowerCase();
return t === "localhost" || t === "127.0.0.1" || t === "::1";
}
-function cC() {
+function ch() {
var e;
return globalThis.location || ((e = globalThis.window) == null ? void 0 : e.location) || null;
}
-function sC() {
- const e = cC();
+function sh() {
+ const e = ch();
if (!e) return !1;
const t = String(e.protocol || "").toLowerCase(), n = String(e.hostname || "").trim();
- return t === "http:" && !aC(n);
+ return t === "http:" && !ah(n);
}
-function dC(e) {
+function dh(e) {
const t = globalThis.crypto;
if (!(t != null && t.getRandomValues))
throw new Error("Secure token generation requires crypto.getRandomValues().");
return t.getRandomValues(e);
}
-function uC(e) {
+function uh(e) {
const t = Math.max(4, Number(e) || 0), n = new Uint8Array(t);
- return dC(n), Array.from(n, (i) => i.toString(16).padStart(2, "0")).join("");
+ return dh(n), Array.from(n, (i) => i.toString(16).padStart(2, "0")).join("");
}
-function mC() {
- return `mjr_${uC(18)}`;
+function mh() {
+ return `mjr_${uh(18)}`;
}
-function gC(e) {
- return String((e == null ? void 0 : e.apiToken) || "").trim().length >= tI && kn(e == null ? void 0 : e.allowWrite, !0) && kn(e == null ? void 0 : e.requireAuth, !1) && !kn(e == null ? void 0 : e.allowRemoteWrite, !1);
+function gh(e) {
+ return String((e == null ? void 0 : e.apiToken) || "").trim().length >= tI && Nn(e == null ? void 0 : e.allowWrite, !0) && Nn(e == null ? void 0 : e.requireAuth, !1) && !Nn(e == null ? void 0 : e.allowRemoteWrite, !1);
}
-function IC(e) {
+function Ih(e) {
const n = String((e && typeof e == "object" ? e : {}).apiToken || "").trim();
return {
- apiToken: n.length >= tI ? n : mC(),
+ apiToken: n.length >= tI ? n : mh(),
allowWrite: !0,
requireAuth: !0,
allowRemoteWrite: !1,
- allowInsecureTokenTransport: sC()
+ allowInsecureTokenTransport: sh()
};
}
-function bC(e) {
+function bh(e) {
const t = e || {};
return {
- safe_mode: kn(t.safeMode, !1),
- allow_write: kn(t.allowWrite, !0),
- require_auth: kn(t.requireAuth, !1),
- allow_remote_write: kn(t.allowRemoteWrite, !1),
- allow_insecure_token_transport: kn(t.allowInsecureTokenTransport, !1),
- allow_delete: kn(t.allowDelete, !0),
- allow_rename: kn(t.allowRename, !0),
- allow_open_in_folder: kn(t.allowOpenInFolder, !0),
- allow_reset_index: kn(t.allowResetIndex, !1),
+ safe_mode: Nn(t.safeMode, !1),
+ allow_write: Nn(t.allowWrite, !0),
+ require_auth: Nn(t.requireAuth, !1),
+ allow_remote_write: Nn(t.allowRemoteWrite, !1),
+ allow_insecure_token_transport: Nn(t.allowInsecureTokenTransport, !1),
+ allow_delete: Nn(t.allowDelete, !0),
+ allow_rename: Nn(t.allowRename, !0),
+ allow_open_in_folder: Nn(t.allowOpenInFolder, !0),
+ allow_reset_index: Nn(t.allowResetIndex, !1),
...String(t.apiToken || "").trim() ? { api_token: String(t.apiToken || "").trim() } : {}
};
}
function Iu(e) {
- return Xg(bC(e));
+ return Ng(bh(e));
}
-function pC(e) {
+function ph(e) {
var n, i;
const t = String(((n = e == null ? void 0 : e.security) == null ? void 0 : n.tokenHint) || "").trim();
return t ? m(
@@ -6716,11 +6716,11 @@ function pC(e) {
"Token configured on server. Leave blank to keep the current server token."
) : m("setting.sec.token.placeholder", "Auto-generated for this browser session.");
}
-function yC(e, t, n) {
+function yh(e, t, n) {
var r, l;
- const i = (a, c) => [lC, a, c];
+ const i = (a, c) => [lh, a, c];
e({
- id: `${Xl}.Safety.ConfirmDeletion`,
+ id: `${Nl}.Safety.ConfirmDeletion`,
category: i(m("cat.security"), "Confirm before deleting"),
name: "Confirm before deleting",
tooltip: "Show a confirmation dialog before deleting files. Disabling this allows instant deletion.",
@@ -6728,40 +6728,40 @@ function yC(e, t, n) {
defaultValue: ((r = t.safety) == null ? void 0 : r.confirmDeletion) !== !1,
onChange: (a) => {
var c;
- gc(((c = t.safety) == null ? void 0 : c.confirmDeletion) !== !1, a) || (t.safety = t.safety || {}, t.safety.confirmDeletion = !!a, Be(t), At(t), n("safety.confirmDeletion"));
+ Ic(((c = t.safety) == null ? void 0 : c.confirmDeletion) !== !1, a) || (t.safety = t.safety || {}, t.safety.confirmDeletion = !!a, Ue(t), Zt(t), n("safety.confirmDeletion"));
}
});
const o = (a, c, s, d = "cat.security") => {
var u;
e({
- id: `${Xl}.Security.${a}`,
+ id: `${Nl}.Security.${a}`,
category: i(m(d), m(c).replace("Majoor: ", "")),
name: m(c),
tooltip: m(s),
type: "boolean",
defaultValue: !!((u = t.security) != null && u[a]),
onChange: (I) => {
- var y, S;
- if (!gc((y = t.security) == null ? void 0 : y[a], I)) {
- t.security = t.security || {}, t.security[a] = !!I, Be(t), n(`security.${a}`);
+ var A, h;
+ if (!Ic((A = t.security) == null ? void 0 : A[a], I)) {
+ t.security = t.security || {}, t.security[a] = !!I, Ue(t), n(`security.${a}`);
try {
- Iu(t.security).then((Z) => {
- var C;
- Z != null && Z.ok && ((C = Z.data) != null && C.prefs) ? oa() : Z && Z.ok === !1 && console.warn(
+ Iu(t.security).then((S) => {
+ var W;
+ S != null && S.ok && ((W = S.data) != null && W.prefs) ? oa() : S && S.ok === !1 && console.warn(
"[Majoor] backend security settings update failed",
- Z.error || Z
+ S.error || S
);
}).catch(() => {
});
- } catch (Z) {
- (S = console.debug) == null || S.call(console, Z);
+ } catch (S) {
+ (h = console.debug) == null || h.call(console, S);
}
}
}
});
};
o("safeMode", "setting.sec.safe.name", "setting.sec.safe.desc"), o("allowWrite", "setting.sec.write.name", "setting.sec.write.desc"), o("allowDelete", "setting.sec.del.name", "setting.sec.del.desc"), o("allowRename", "setting.sec.ren.name", "setting.sec.ren.desc"), o("allowOpenInFolder", "setting.sec.open.name", "setting.sec.open.desc"), o("allowResetIndex", "setting.sec.reset.name", "setting.sec.reset.desc"), e({
- id: `${Xl}.Security.RemoteLanPreset`,
+ id: `${Nl}.Security.RemoteLanPreset`,
category: i(
m("cat.remote"),
m("setting.sec.remoteLanPreset.name").replace("Majoor: ", "")
@@ -6769,20 +6769,20 @@ function yC(e, t, n) {
name: m("setting.sec.remoteLanPreset.name"),
tooltip: m("setting.sec.remoteLanPreset.desc"),
type: "boolean",
- defaultValue: gC(t.security),
+ defaultValue: gh(t.security),
onChange: (a) => {
var s;
- if (t.security = t.security || {}, gc(t.security.remoteLanPreset, a))
+ if (t.security = t.security || {}, Ic(t.security.remoteLanPreset, a))
return;
if (t.security.remoteLanPreset = !!a, !a) {
- Be(t), n("security.remoteLanPreset");
+ Ue(t), n("security.remoteLanPreset");
return;
}
let c;
try {
- c = IC(t.security);
+ c = Ih(t.security);
} catch (d) {
- Ze(
+ Ae(
(d == null ? void 0 : d.message) || m(
"toast.remoteLanPresetFailed",
"Failed to apply the recommended remote LAN setup."
@@ -6791,17 +6791,17 @@ function yC(e, t, n) {
);
return;
}
- Object.assign(t.security, c), t.security.tokenConfigured = !0, t.security.tokenHint = String(c.apiToken || "").trim() ? `...${String(c.apiToken).trim().slice(-4)}` : "", c.apiToken && qd(c.apiToken), Be(t), n("security.remoteLanPreset"), n("security.apiToken"), n("security.allowWrite"), n("security.requireAuth"), n("security.allowRemoteWrite"), n("security.allowInsecureTokenTransport");
+ Object.assign(t.security, c), t.security.tokenConfigured = !0, t.security.tokenHint = String(c.apiToken || "").trim() ? `...${String(c.apiToken).trim().slice(-4)}` : "", c.apiToken && qd(c.apiToken), Ue(t), n("security.remoteLanPreset"), n("security.apiToken"), n("security.allowWrite"), n("security.requireAuth"), n("security.allowRemoteWrite"), n("security.allowInsecureTokenTransport");
try {
Iu(t.security).then((d) => {
var u;
- d != null && d.ok && ((u = d.data) != null && u.prefs) ? (oa(), Ze(
+ d != null && d.ok && ((u = d.data) != null && u.prefs) ? (oa(), Ae(
m(
"toast.remoteLanPresetApplied",
"Recommended remote LAN setup applied. This browser session is now authorized for Majoor write operations."
),
"success"
- )) : d && d.ok === !1 && (Ze(
+ )) : d && d.ok === !1 && (Ae(
d.error || m(
"toast.remoteLanPresetFailed",
"Failed to apply the recommended remote LAN setup."
@@ -6812,7 +6812,7 @@ function yC(e, t, n) {
d.error || d
));
}).catch((d) => {
- Ze(
+ Ae(
(d == null ? void 0 : d.message) || m(
"toast.remoteLanPresetFailed",
"Failed to apply the recommended remote LAN setup."
@@ -6825,7 +6825,7 @@ function yC(e, t, n) {
}
}
}), e({
- id: `${Xl}.Security.ApiToken`,
+ id: `${Nl}.Security.ApiToken`,
category: i(m("cat.remote"), m("setting.sec.token.name").replace("Majoor: ", "")),
name: m("setting.sec.token.name", "Majoor: API Token"),
tooltip: m(
@@ -6835,15 +6835,15 @@ function yC(e, t, n) {
type: "text",
defaultValue: ((l = t.security) == null ? void 0 : l.apiToken) || "",
attrs: {
- placeholder: pC(t)
+ placeholder: ph(t)
},
onChange: (a) => {
var s;
t.security = t.security || {};
const c = gu(a);
- if (gu(t.security.apiToken) !== c && (t.security.apiToken = c, t.security.apiToken && (t.security.tokenConfigured = !0, t.security.tokenHint = `...${t.security.apiToken.slice(-4)}`, qd(t.security.apiToken)), Be(t), n("security.apiToken"), !!t.security.apiToken))
+ if (gu(t.security.apiToken) !== c && (t.security.apiToken = c, t.security.apiToken && (t.security.tokenConfigured = !0, t.security.tokenHint = `...${t.security.apiToken.slice(-4)}`, qd(t.security.apiToken)), Ue(t), n("security.apiToken"), !!t.security.apiToken))
try {
- Xg({ api_token: t.security.apiToken }).then((d) => {
+ Ng({ api_token: t.security.apiToken }).then((d) => {
var u;
d != null && d.ok && ((u = d.data) != null && u.prefs) ? oa() : d && d.ok === !1 && console.warn("[Majoor] backend token update failed", d.error || d);
}).catch(() => {
@@ -6869,11 +6869,11 @@ function yC(e, t, n) {
"cat.remote"
);
}
-const Pn = "Majoor", fC = "Majoor Assets Manager";
-function hC(e, t, n, i) {
- var C, g, A, p, b, L, h, G, W, f, X, x, T, v, w, R, Y, F, N, V, k, K, z;
- const o = (B, J) => [fC, B, J];
- let r = String(((C = t.paths) == null ? void 0 : C.outputDirectory) || ""), l = null, a = 0, c = null;
+const Pn = "Majoor", fh = "Majoor Assets Manager";
+function Ch(e, t, n, i) {
+ var W, g, y, p, b, L, C, G, Z, f, X, x, K, j, w, R, V, O, k, Y, N, U, z;
+ const o = (T, J) => [fh, T, J];
+ let r = String(((W = t.paths) == null ? void 0 : W.outputDirectory) || ""), l = null, a = 0, c = null;
e({
id: `${Pn}.Paths.OutputDirectory`,
category: o(m("cat.advanced"), "Paths / Output"),
@@ -6884,23 +6884,23 @@ function hC(e, t, n, i) {
attrs: {
placeholder: "D:\\\\____COMFY_OUTPUTS"
},
- onChange: async (B) => {
+ onChange: async (T) => {
var P;
- const J = String(B || "").trim();
- t.paths = t.paths || {}, t.paths.outputDirectory = J, Be(t);
+ const J = String(T || "").trim();
+ t.paths = t.paths || {}, t.paths.outputDirectory = J, Ue(t);
try {
l && (clearTimeout(l), l = null);
- } catch (H) {
- (P = console.debug) == null || P.call(console, H);
+ } catch (E) {
+ (P = console.debug) == null || P.call(console, E);
}
l = setTimeout(async () => {
- var $, E, oe;
+ var $, H, ne;
l = null;
- const H = ++a;
+ const E = ++a;
try {
($ = c == null ? void 0 : c.abort) == null || $.call(c);
} catch (M) {
- (E = console.debug) == null || E.call(console, M);
+ (H = console.debug) == null || H.call(console, M);
}
c = typeof AbortController < "u" ? new AbortController() : null;
try {
@@ -6908,7 +6908,7 @@ function hC(e, t, n, i) {
J,
c ? { signal: c.signal } : {}
);
- if (H !== a) return;
+ if (E !== a) return;
if (!(M != null && M.ok))
throw new Error(
(M == null ? void 0 : M.error) || m(
@@ -6916,11 +6916,11 @@ function hC(e, t, n, i) {
"Failed to set output directory"
)
);
- const j = String(((oe = M == null ? void 0 : M.data) == null ? void 0 : oe.output_directory) || J).trim();
- t.paths.outputDirectory = j, r = j, Be(t), n("paths.outputDirectory");
+ const v = String(((ne = M == null ? void 0 : M.data) == null ? void 0 : ne.output_directory) || J).trim();
+ t.paths.outputDirectory = v, r = v, Ue(t), n("paths.outputDirectory");
} catch (M) {
- if (H !== a || String((M == null ? void 0 : M.name) || "") === "AbortError" || String((M == null ? void 0 : M.code) || "") === "ABORTED") return;
- t.paths.outputDirectory = r, Be(t), n("paths.outputDirectory"), Ze(
+ if (E !== a || String((M == null ? void 0 : M.name) || "") === "AbortError" || String((M == null ? void 0 : M.code) || "") === "ABORTED") return;
+ t.paths.outputDirectory = r, Ue(t), n("paths.outputDirectory"), Ae(
(M == null ? void 0 : M.message) || m("toast.failedSetOutputDirectory", "Failed to set output directory"),
"error"
);
@@ -6929,15 +6929,15 @@ function hC(e, t, n, i) {
}
});
try {
- vf().then((B) => {
+ vf().then((T) => {
var P;
- if (!(B != null && B.ok)) return;
- const J = String(((P = B == null ? void 0 : B.data) == null ? void 0 : P.output_directory) || "").trim();
- t.paths = t.paths || {}, t.paths.outputDirectory !== J && (t.paths.outputDirectory = J, r = J, Be(t), n("paths.outputDirectory"));
+ if (!(T != null && T.ok)) return;
+ const J = String(((P = T == null ? void 0 : T.data) == null ? void 0 : P.output_directory) || "").trim();
+ t.paths = t.paths || {}, t.paths.outputDirectory !== J && (t.paths.outputDirectory = J, r = J, Ue(t), n("paths.outputDirectory"));
}).catch(() => {
});
- } catch (B) {
- (A = console.debug) == null || A.call(console, B);
+ } catch (T) {
+ (y = console.debug) == null || y.call(console, T);
}
let s = String(((p = t.paths) == null ? void 0 : p.indexDirectory) || ""), d = null, u = 0, I = null;
e({
@@ -6950,37 +6950,37 @@ function hC(e, t, n, i) {
attrs: {
placeholder: "D:\\MajoorIndex"
},
- onChange: async (B) => {
+ onChange: async (T) => {
var P;
- const J = String(B || "").trim();
- t.paths = t.paths || {}, t.paths.indexDirectory = J, Be(t);
+ const J = String(T || "").trim();
+ t.paths = t.paths || {}, t.paths.indexDirectory = J, Ue(t);
try {
d && (clearTimeout(d), d = null);
- } catch (H) {
- (P = console.debug) == null || P.call(console, H);
+ } catch (E) {
+ (P = console.debug) == null || P.call(console, E);
}
d = setTimeout(async () => {
- var $, E, oe;
+ var $, H, ne;
d = null;
- const H = ++u;
+ const E = ++u;
try {
($ = I == null ? void 0 : I.abort) == null || $.call(I);
} catch (M) {
- (E = console.debug) == null || E.call(console, M);
+ (H = console.debug) == null || H.call(console, M);
}
I = typeof AbortController < "u" ? new AbortController() : null;
try {
- const M = await Yf(
+ const M = await Vf(
J,
I ? { signal: I.signal } : {}
);
- if (H !== u) return;
+ if (E !== u) return;
if (!(M != null && M.ok))
throw new Error(
(M == null ? void 0 : M.error) || m("toast.failedSetIndexDirectory", "Failed to set index directory")
);
- const j = String(((oe = M == null ? void 0 : M.data) == null ? void 0 : oe.index_directory) || J).trim(), O = j !== s;
- t.paths.indexDirectory = j, s = j, Be(t), n("paths.indexDirectory"), O && Ze(
+ const v = String(((ne = M == null ? void 0 : M.data) == null ? void 0 : ne.index_directory) || J).trim(), F = v !== s;
+ t.paths.indexDirectory = v, s = v, Ue(t), n("paths.indexDirectory"), F && Ae(
m(
"toast.indexDirectorySavedRestart",
"Index directory saved. Restart ComfyUI to apply."
@@ -6994,8 +6994,8 @@ function hC(e, t, n, i) {
}
);
} catch (M) {
- if (H !== u || String((M == null ? void 0 : M.name) || "") === "AbortError" || String((M == null ? void 0 : M.code) || "") === "ABORTED") return;
- t.paths.indexDirectory = s, Be(t), n("paths.indexDirectory"), Ze(
+ if (E !== u || String((M == null ? void 0 : M.name) || "") === "AbortError" || String((M == null ? void 0 : M.code) || "") === "ABORTED") return;
+ t.paths.indexDirectory = s, Ue(t), n("paths.indexDirectory"), Ae(
(M == null ? void 0 : M.message) || m("toast.failedSetIndexDirectory", "Failed to set index directory"),
"error"
);
@@ -7004,31 +7004,31 @@ function hC(e, t, n, i) {
}
});
try {
- Vf().then((B) => {
+ Yf().then((T) => {
var P;
- if (!(B != null && B.ok)) return;
- const J = String(((P = B == null ? void 0 : B.data) == null ? void 0 : P.index_directory) || "").trim();
- t.paths = t.paths || {}, t.paths.indexDirectory !== J && (t.paths.indexDirectory = J, s = J, Be(t), n("paths.indexDirectory"));
+ if (!(T != null && T.ok)) return;
+ const J = String(((P = T == null ? void 0 : T.data) == null ? void 0 : P.index_directory) || "").trim();
+ t.paths = t.paths || {}, t.paths.indexDirectory !== J && (t.paths.indexDirectory = J, s = J, Ue(t), n("paths.indexDirectory"));
}).catch(() => {
});
- } catch (B) {
- (L = console.debug) == null || L.call(console, B);
+ } catch (T) {
+ (L = console.debug) == null || L.call(console, T);
}
- const S = Uy().map((B) => B.code), Z = ["auto", ...S];
+ const h = By().map((T) => T.code), S = ["auto", ...h];
e({
id: `${Pn}.Language`,
category: o(m("cat.advanced"), m("setting.language.name", "Language")),
name: m("setting.language.name", "Majoor: Language"),
tooltip: "Use auto to detect and follow ComfyUI language. Or choose a fixed language for Majoor only.",
type: "combo",
- defaultValue: (h = t.i18n) != null && h.followComfyLanguage ? "auto" : By(),
- options: Z,
- onChange: (B) => {
- if (t.i18n = t.i18n || {}, B === "auto") {
- t.i18n.followComfyLanguage = !0, Wa(!0), Wg(i), Be(t), n("language");
+ defaultValue: (C = t.i18n) != null && C.followComfyLanguage ? "auto" : Ky(),
+ options: S,
+ onChange: (T) => {
+ if (t.i18n = t.i18n || {}, T === "auto") {
+ t.i18n.followComfyLanguage = !0, Wa(!0), Wg(i), Ue(t), n("language");
return;
}
- S.includes(B) && (t.i18n.followComfyLanguage = !1, Wa(!1), _i(B), Be(t), n("language"));
+ h.includes(T) && (t.i18n.followComfyLanguage = !1, Wa(!1), _i(T), Ue(t), n("language"));
}
}), e({
id: `${Pn}.ProbeBackend.Mode`,
@@ -7036,15 +7036,15 @@ function hC(e, t, n, i) {
name: m("setting.probe.mode.name"),
tooltip: m("setting.probe.mode.desc") + " (env: MAJOOR_MEDIA_PROBE_BACKEND)",
type: "combo",
- defaultValue: ((G = t.probeBackend) == null ? void 0 : G.mode) || Un.probeBackend.mode,
+ defaultValue: ((G = t.probeBackend) == null ? void 0 : G.mode) || Bn.probeBackend.mode,
options: ["auto", "exiftool", "ffprobe", "both"],
- onChange: (B) => {
- const J = Ks(
- B,
+ onChange: (T) => {
+ const J = Ds(
+ T,
["auto", "exiftool", "ffprobe", "both"],
- Un.probeBackend.mode
+ Bn.probeBackend.mode
);
- t.probeBackend = t.probeBackend || {}, t.probeBackend.mode = J, Be(t), At(t), n("probeBackend.mode"), If(J).catch(() => {
+ t.probeBackend = t.probeBackend || {}, t.probeBackend.mode = J, Ue(t), Zt(t), n("probeBackend.mode"), If(J).catch(() => {
});
}
}), e({
@@ -7053,26 +7053,26 @@ function hC(e, t, n, i) {
name: "Majoor: Metadata Fallback (Images)",
tooltip: "Enable Pillow fallback when ExifTool is missing or fails.",
type: "boolean",
- defaultValue: ((W = t.metadataFallback) == null ? void 0 : W.image) ?? Un.metadataFallback.image,
- onChange: async (B) => {
- var H, $;
- const J = !!B, P = !!(((H = t.metadataFallback) == null ? void 0 : H.image) ?? Un.metadataFallback.image);
- t.metadataFallback = t.metadataFallback || {}, t.metadataFallback.image = J, Be(t), n("metadataFallback.image");
+ defaultValue: ((Z = t.metadataFallback) == null ? void 0 : Z.image) ?? Bn.metadataFallback.image,
+ onChange: async (T) => {
+ var E, $;
+ const J = !!T, P = !!(((E = t.metadataFallback) == null ? void 0 : E.image) ?? Bn.metadataFallback.image);
+ t.metadataFallback = t.metadataFallback || {}, t.metadataFallback.image = J, Ue(t), n("metadataFallback.image");
try {
- const E = await Qd({
+ const H = await Qd({
image: J,
- media: (($ = t.metadataFallback) == null ? void 0 : $.media) ?? Un.metadataFallback.media
+ media: (($ = t.metadataFallback) == null ? void 0 : $.media) ?? Bn.metadataFallback.media
});
- if (!(E != null && E.ok))
+ if (!(H != null && H.ok))
throw new Error(
- (E == null ? void 0 : E.error) || m(
+ (H == null ? void 0 : H.error) || m(
"toast.failedUpdateMetadataFallback",
"Failed to update metadata fallback settings"
)
);
- } catch (E) {
- t.metadataFallback.image = P, Be(t), n("metadataFallback.image"), Ze(
- (E == null ? void 0 : E.message) || m(
+ } catch (H) {
+ t.metadataFallback.image = P, Ue(t), n("metadataFallback.image"), Ae(
+ (H == null ? void 0 : H.message) || m(
"toast.failedUpdateMetadataFallback",
"Failed to update metadata fallback settings"
),
@@ -7086,26 +7086,26 @@ function hC(e, t, n, i) {
name: "Majoor: Metadata Fallback (Audio/Video)",
tooltip: "Enable hachoir fallback when ffprobe is missing or fails.",
type: "boolean",
- defaultValue: ((f = t.metadataFallback) == null ? void 0 : f.media) ?? Un.metadataFallback.media,
- onChange: async (B) => {
- var H, $;
- const J = !!B, P = !!(((H = t.metadataFallback) == null ? void 0 : H.media) ?? Un.metadataFallback.media);
- t.metadataFallback = t.metadataFallback || {}, t.metadataFallback.media = J, Be(t), n("metadataFallback.media");
+ defaultValue: ((f = t.metadataFallback) == null ? void 0 : f.media) ?? Bn.metadataFallback.media,
+ onChange: async (T) => {
+ var E, $;
+ const J = !!T, P = !!(((E = t.metadataFallback) == null ? void 0 : E.media) ?? Bn.metadataFallback.media);
+ t.metadataFallback = t.metadataFallback || {}, t.metadataFallback.media = J, Ue(t), n("metadataFallback.media");
try {
- const E = await Qd({
- image: (($ = t.metadataFallback) == null ? void 0 : $.image) ?? Un.metadataFallback.image,
+ const H = await Qd({
+ image: (($ = t.metadataFallback) == null ? void 0 : $.image) ?? Bn.metadataFallback.image,
media: J
});
- if (!(E != null && E.ok))
+ if (!(H != null && H.ok))
throw new Error(
- (E == null ? void 0 : E.error) || m(
+ (H == null ? void 0 : H.error) || m(
"toast.failedUpdateMetadataFallback",
"Failed to update metadata fallback settings"
)
);
- } catch (E) {
- t.metadataFallback.media = P, Be(t), n("metadataFallback.media"), Ze(
- (E == null ? void 0 : E.message) || m(
+ } catch (H) {
+ t.metadataFallback.media = P, Ue(t), n("metadataFallback.media"), Ae(
+ (H == null ? void 0 : H.message) || m(
"toast.failedUpdateMetadataFallback",
"Failed to update metadata fallback settings"
),
@@ -7115,17 +7115,17 @@ function hC(e, t, n, i) {
}
});
try {
- bf().then((B) => {
- var E;
- if (!(B != null && B.ok) || !((E = B == null ? void 0 : B.data) != null && E.prefs)) return;
- const J = B.data.prefs || {}, P = !!(J.image ?? Un.metadataFallback.image), H = !!(J.media ?? Un.metadataFallback.media);
+ bf().then((T) => {
+ var H;
+ if (!(T != null && T.ok) || !((H = T == null ? void 0 : T.data) != null && H.prefs)) return;
+ const J = T.data.prefs || {}, P = !!(J.image ?? Bn.metadataFallback.image), E = !!(J.media ?? Bn.metadataFallback.media);
t.metadataFallback = t.metadataFallback || {};
let $ = !1;
- t.metadataFallback.image !== P && (t.metadataFallback.image = P, $ = !0), t.metadataFallback.media !== H && (t.metadataFallback.media = H, $ = !0), $ && (Be(t), n("metadataFallback"));
+ t.metadataFallback.image !== P && (t.metadataFallback.image = P, $ = !0), t.metadataFallback.media !== E && (t.metadataFallback.media = E, $ = !0), $ && (Ue(t), n("metadataFallback"));
}).catch(() => {
});
- } catch (B) {
- (X = console.debug) == null || X.call(console, B);
+ } catch (T) {
+ (X = console.debug) == null || X.call(console, T);
}
e({
id: `${Pn}.Db.Timeout`,
@@ -7135,11 +7135,11 @@ function hC(e, t, n, i) {
type: "number",
defaultValue: Number(((x = t.db) == null ? void 0 : x.timeoutMs) || 5e3),
attrs: { min: 1e3, max: 3e4, step: 1e3 },
- onChange: (B) => {
+ onChange: (T) => {
t.db = t.db || {}, t.db.timeoutMs = Math.max(
1e3,
- Math.min(3e4, Math.round(Gn(B, 5e3)))
- ), Be(t), At(t), n("db.timeoutMs");
+ Math.min(3e4, Math.round(xn(T, 5e3)))
+ ), Ue(t), Zt(t), n("db.timeoutMs");
}
}), e({
id: `${Pn}.Db.MaxConnections`,
@@ -7147,13 +7147,13 @@ function hC(e, t, n, i) {
name: "DB Max Connections",
tooltip: "Client-side DB max connections preference (stored locally).",
type: "number",
- defaultValue: Number(((T = t.db) == null ? void 0 : T.maxConnections) || 10),
+ defaultValue: Number(((K = t.db) == null ? void 0 : K.maxConnections) || 10),
attrs: { min: 1, max: 100, step: 1 },
- onChange: (B) => {
+ onChange: (T) => {
t.db = t.db || {}, t.db.maxConnections = Math.max(
1,
- Math.min(100, Math.round(Gn(B, 10)))
- ), Be(t), At(t), n("db.maxConnections");
+ Math.min(100, Math.round(xn(T, 10)))
+ ), Ue(t), Zt(t), n("db.maxConnections");
}
}), e({
id: `${Pn}.Db.QueryTimeout`,
@@ -7161,13 +7161,13 @@ function hC(e, t, n, i) {
name: "DB Query Timeout (ms)",
tooltip: "Client-side DB query timeout preference (stored locally).",
type: "number",
- defaultValue: Number(((v = t.db) == null ? void 0 : v.queryTimeoutMs) || 1e3),
+ defaultValue: Number(((j = t.db) == null ? void 0 : j.queryTimeoutMs) || 1e3),
attrs: { min: 500, max: 1e4, step: 500 },
- onChange: (B) => {
+ onChange: (T) => {
t.db = t.db || {}, t.db.queryTimeoutMs = Math.max(
500,
- Math.min(1e4, Math.round(Gn(B, 1e3)))
- ), Be(t), At(t), n("db.queryTimeoutMs");
+ Math.min(1e4, Math.round(xn(T, 1e3)))
+ ), Ue(t), Zt(t), n("db.queryTimeoutMs");
}
}), e({
id: `${Pn}.Observability.Enabled`,
@@ -7176,8 +7176,8 @@ function hC(e, t, n, i) {
tooltip: m("setting.obs.enabled.desc"),
type: "boolean",
defaultValue: !!((w = t.observability) != null && w.enabled),
- onChange: (B) => {
- t.observability = t.observability || {}, t.observability.enabled = !!B, Be(t), At(t), n("observability.enabled");
+ onChange: (T) => {
+ t.observability = t.observability || {}, t.observability.enabled = !!T, Ue(t), Zt(t), n("observability.enabled");
}
}), e({
id: `${Pn}.Observability.VerboseErrors`,
@@ -7186,8 +7186,8 @@ function hC(e, t, n, i) {
tooltip: "Show detailed error messages in toasts and console. Useful for debugging.",
type: "boolean",
defaultValue: !!((R = t.observability) != null && R.verboseErrors),
- onChange: (B) => {
- t.observability = t.observability || {}, t.observability.verboseErrors = !!B, Be(t), At(t), n("observability.verboseErrors");
+ onChange: (T) => {
+ t.observability = t.observability || {}, t.observability.verboseErrors = !!T, Ue(t), Zt(t), n("observability.verboseErrors");
}
}), e({
id: `${Pn}.Observability.VerboseRouteRegistrationLogs`,
@@ -7195,26 +7195,26 @@ function hC(e, t, n, i) {
name: "Majoor: Verbose route registration logs",
tooltip: "When disabled, Majoor prints a compact startup summary instead of listing every registered API route. Takes effect on the next backend restart.",
type: "boolean",
- defaultValue: !!(((Y = t.observability) == null ? void 0 : Y.verboseRouteRegistrationLogs) ?? ((F = Un.observability) == null ? void 0 : F.verboseRouteRegistrationLogs) ?? !1),
- onChange: async (B) => {
- var H, $;
- const J = !!B, P = !!(((H = t.observability) == null ? void 0 : H.verboseRouteRegistrationLogs) ?? (($ = Un.observability) == null ? void 0 : $.verboseRouteRegistrationLogs) ?? !1);
- t.observability = t.observability || {}, t.observability.verboseRouteRegistrationLogs = J, Be(t), n("observability.verboseRouteRegistrationLogs");
+ defaultValue: !!(((V = t.observability) == null ? void 0 : V.verboseRouteRegistrationLogs) ?? ((O = Bn.observability) == null ? void 0 : O.verboseRouteRegistrationLogs) ?? !1),
+ onChange: async (T) => {
+ var E, $;
+ const J = !!T, P = !!(((E = t.observability) == null ? void 0 : E.verboseRouteRegistrationLogs) ?? (($ = Bn.observability) == null ? void 0 : $.verboseRouteRegistrationLogs) ?? !1);
+ t.observability = t.observability || {}, t.observability.verboseRouteRegistrationLogs = J, Ue(t), n("observability.verboseRouteRegistrationLogs");
try {
- const E = await Mf(J);
- if (!(E != null && E.ok))
- throw new Error((E == null ? void 0 : E.error) || "Failed to update route logging settings");
- } catch (E) {
- t.observability.verboseRouteRegistrationLogs = P, Be(t), n("observability.verboseRouteRegistrationLogs"), Ze((E == null ? void 0 : E.message) || "Failed to update route logging settings", "error");
+ const H = await Mf(J);
+ if (!(H != null && H.ok))
+ throw new Error((H == null ? void 0 : H.error) || "Failed to update route logging settings");
+ } catch (H) {
+ t.observability.verboseRouteRegistrationLogs = P, Ue(t), n("observability.verboseRouteRegistrationLogs"), Ae((H == null ? void 0 : H.message) || "Failed to update route logging settings", "error");
}
}
}), (async () => {
- var B, J, P;
+ var T, J, P;
try {
- const H = await wf(), $ = !!((J = (B = H == null ? void 0 : H.data) == null ? void 0 : B.prefs) != null && J.enabled);
- t.observability = t.observability || {}, t.observability.verboseRouteRegistrationLogs !== $ && (t.observability.verboseRouteRegistrationLogs = $, Be(t), n("observability.verboseRouteRegistrationLogs"));
- } catch (H) {
- (P = console.debug) == null || P.call(console, H);
+ const E = await wf(), $ = !!((J = (T = E == null ? void 0 : E.data) == null ? void 0 : T.prefs) != null && J.enabled);
+ t.observability = t.observability || {}, t.observability.verboseRouteRegistrationLogs !== $ && (t.observability.verboseRouteRegistrationLogs = $, Ue(t), n("observability.verboseRouteRegistrationLogs"));
+ } catch (E) {
+ (P = console.debug) == null || P.call(console, E);
}
})(), e({
id: `${Pn}.Observability.VerboseStartupLogs`,
@@ -7222,48 +7222,48 @@ function hC(e, t, n, i) {
name: "Majoor: Verbose startup logs",
tooltip: "When disabled, Majoor suppresses most informational bootstrap logs during backend startup while keeping warnings and errors. Takes effect on the next backend restart.",
type: "boolean",
- defaultValue: !!(((N = t.observability) == null ? void 0 : N.verboseStartupLogs) ?? ((V = Un.observability) == null ? void 0 : V.verboseStartupLogs) ?? !1),
- onChange: async (B) => {
- var H, $;
- const J = !!B, P = !!(((H = t.observability) == null ? void 0 : H.verboseStartupLogs) ?? (($ = Un.observability) == null ? void 0 : $.verboseStartupLogs) ?? !1);
- t.observability = t.observability || {}, t.observability.verboseStartupLogs = J, Be(t), n("observability.verboseStartupLogs");
+ defaultValue: !!(((k = t.observability) == null ? void 0 : k.verboseStartupLogs) ?? ((Y = Bn.observability) == null ? void 0 : Y.verboseStartupLogs) ?? !1),
+ onChange: async (T) => {
+ var E, $;
+ const J = !!T, P = !!(((E = t.observability) == null ? void 0 : E.verboseStartupLogs) ?? (($ = Bn.observability) == null ? void 0 : $.verboseStartupLogs) ?? !1);
+ t.observability = t.observability || {}, t.observability.verboseStartupLogs = J, Ue(t), n("observability.verboseStartupLogs");
try {
- const E = await Gf(J);
- if (!(E != null && E.ok))
- throw new Error((E == null ? void 0 : E.error) || "Failed to update startup logging settings");
- } catch (E) {
- t.observability.verboseStartupLogs = P, Be(t), n("observability.verboseStartupLogs"), Ze((E == null ? void 0 : E.message) || "Failed to update startup logging settings", "error");
+ const H = await Sf(J);
+ if (!(H != null && H.ok))
+ throw new Error((H == null ? void 0 : H.error) || "Failed to update startup logging settings");
+ } catch (H) {
+ t.observability.verboseStartupLogs = P, Ue(t), n("observability.verboseStartupLogs"), Ae((H == null ? void 0 : H.message) || "Failed to update startup logging settings", "error");
}
}
}), (async () => {
- var B, J, P;
+ var T, J, P;
try {
- const H = await Sf(), $ = !!((J = (B = H == null ? void 0 : H.data) == null ? void 0 : B.prefs) != null && J.enabled);
- t.observability = t.observability || {}, t.observability.verboseStartupLogs !== $ && (t.observability.verboseStartupLogs = $, Be(t), n("observability.verboseStartupLogs"));
- } catch (H) {
- (P = console.debug) == null || P.call(console, H);
+ const E = await Gf(), $ = !!((J = (T = E == null ? void 0 : E.data) == null ? void 0 : T.prefs) != null && J.enabled);
+ t.observability = t.observability || {}, t.observability.verboseStartupLogs !== $ && (t.observability.verboseStartupLogs = $, Ue(t), n("observability.verboseStartupLogs"));
+ } catch (E) {
+ (P = console.debug) == null || P.call(console, E);
}
})();
{
- const B = "HuggingFace Token";
- let J = "", P = null, H = 0, $ = !!((k = t.ai) != null && k.huggingFaceTokenVisible);
- const E = () => {
- var M, j;
+ const T = "HuggingFace Token";
+ let J = "", P = null, E = 0, $ = !!((N = t.ai) != null && N.huggingFaceTokenVisible);
+ const H = () => {
+ var M, v;
try {
- const O = Array.from(
+ const F = Array.from(
document.querySelectorAll('input[data-mjr-hf-token="1"]')
);
- for (const D of O)
+ for (const D of F)
try {
D.type = $ ? "text" : "password";
} catch (q) {
(M = console.debug) == null || M.call(console, q);
}
- } catch (O) {
- (j = console.debug) == null || j.call(console, O);
+ } catch (F) {
+ (v = console.debug) == null || v.call(console, F);
}
- }, oe = (M) => {
- var j, O;
+ }, ne = (M) => {
+ var v, F;
try {
const D = String(M || "").trim();
if (!D) return;
@@ -7273,27 +7273,27 @@ function hC(e, t, n, i) {
for (const ee of q)
try {
ee.placeholder = D;
- } catch (ce) {
- (j = console.debug) == null || j.call(console, ce);
+ } catch (ae) {
+ (v = console.debug) == null || v.call(console, ae);
}
} catch (D) {
- (O = console.debug) == null || O.call(console, D);
+ (F = console.debug) == null || F.call(console, D);
}
};
e({
id: `${Pn}.AI.HuggingFaceTokenVisible`,
- category: o(m("cat.advanced"), B),
+ category: o(m("cat.advanced"), T),
name: "Show HuggingFace token",
tooltip: "Show or hide the HuggingFace token while editing.",
type: "boolean",
defaultValue: $,
onChange: (M) => {
- const j = !!M;
- $ = j, t.ai = t.ai || {}, t.ai.huggingFaceTokenVisible = j, Be(t), n("ai.huggingFaceTokenVisible"), setTimeout(E, 0);
+ const v = !!M;
+ $ = v, t.ai = t.ai || {}, t.ai.huggingFaceTokenVisible = v, Ue(t), n("ai.huggingFaceTokenVisible"), setTimeout(H, 0);
}
}), e({
id: `${Pn}.AI.HuggingFaceToken`,
- category: o(m("cat.advanced"), B),
+ category: o(m("cat.advanced"), T),
name: "HuggingFace Token",
tooltip: [
"Optional token for HuggingFace Hub downloads (higher rate limits).",
@@ -7311,66 +7311,66 @@ function hC(e, t, n, i) {
"data-mjr-hf-token": "1"
},
onChange: (M) => {
- var O;
- const j = String(M || "").trim();
- if (j !== J) {
+ var F;
+ const v = String(M || "").trim();
+ if (v !== J) {
try {
P && (clearTimeout(P), P = null);
} catch (D) {
- (O = console.debug) == null || O.call(console, D);
+ (F = console.debug) == null || F.call(console, D);
}
P = setTimeout(async () => {
P = null;
- const D = ++H;
+ const D = ++E;
try {
- const q = await Zf(j);
- if (D !== H) return;
+ const q = await Zf(v);
+ if (D !== E) return;
if (!(q != null && q.ok))
throw new Error((q == null ? void 0 : q.error) || "Failed to update HuggingFace token");
- J = j, n("ai.huggingFaceToken"), j ? Ze("HuggingFace token saved", "success") : Ze("HuggingFace token cleared", "success", void 0, {
+ J = v, n("ai.huggingFaceToken"), v ? Ae("HuggingFace token saved", "success") : Ae("HuggingFace token cleared", "success", void 0, {
noHistory: !0
});
} catch (q) {
- if (D !== H) return;
- Ze((q == null ? void 0 : q.message) || "Failed to update HuggingFace token", "error");
+ if (D !== E) return;
+ Ae((q == null ? void 0 : q.message) || "Failed to update HuggingFace token", "error");
}
}, 900);
}
}
- }), setTimeout(E, 0), (async () => {
- var M, j;
+ }), setTimeout(H, 0), (async () => {
+ var M, v;
try {
- const O = await Cf(), D = ((M = O == null ? void 0 : O.data) == null ? void 0 : M.prefs) || {}, q = !!(D != null && D.has_token), ee = String((D == null ? void 0 : D.token_hint) || "").trim(), ce = q ? `Configured ${ee || "(saved)"}` : "Paste HuggingFace token (hf_...)";
- oe(ce);
- } catch (O) {
- (j = console.debug) == null || j.call(console, O);
+ const F = await hf(), D = ((M = F == null ? void 0 : F.data) == null ? void 0 : M.prefs) || {}, q = !!(D != null && D.has_token), ee = String((D == null ? void 0 : D.token_hint) || "").trim(), ae = q ? `Configured ${ee || "(saved)"}` : "Paste HuggingFace token (hf_...)";
+ ne(ae);
+ } catch (F) {
+ (v = console.debug) == null || v.call(console, F);
}
})(), e({
id: `${Pn}.AI.VerboseLogs`,
- category: o(m("cat.advanced"), B),
+ category: o(m("cat.advanced"), T),
name: "Majoor: Verbose AI logs",
tooltip: "Enable detailed HuggingFace/SigLIP2/X-CLIP logs and progress bars during model download/loading.",
type: "boolean",
- defaultValue: !!(((K = t.ai) == null ? void 0 : K.verboseAiLogs) ?? ((z = Un.ai) == null ? void 0 : z.verboseAiLogs) ?? !1),
+ defaultValue: !!(((U = t.ai) == null ? void 0 : U.verboseAiLogs) ?? ((z = Bn.ai) == null ? void 0 : z.verboseAiLogs) ?? !1),
onChange: async (M) => {
var D, q;
- const j = !!M, O = !!(((D = t.ai) == null ? void 0 : D.verboseAiLogs) ?? ((q = Un.ai) == null ? void 0 : q.verboseAiLogs) ?? !1);
- t.ai = t.ai || {}, t.ai.verboseAiLogs = j, Be(t), n("ai.verboseAiLogs");
+ const v = !!M, F = !!(((D = t.ai) == null ? void 0 : D.verboseAiLogs) ?? ((q = Bn.ai) == null ? void 0 : q.verboseAiLogs) ?? !1);
+ t.ai = t.ai || {}, t.ai.verboseAiLogs = v, Ue(t), n("ai.verboseAiLogs");
try {
- const ee = await Wf(j);
+ const ee = await Wf(v);
if (!(ee != null && ee.ok))
throw new Error((ee == null ? void 0 : ee.error) || "Failed to update AI logging settings");
} catch (ee) {
- t.ai.verboseAiLogs = O, Be(t), n("ai.verboseAiLogs"), Ze((ee == null ? void 0 : ee.message) || "Failed to update AI logging settings", "error");
+ t.ai.verboseAiLogs = F, Ue(t), n("ai.verboseAiLogs"), Ae((ee == null ? void 0 : ee.message) || "Failed to update AI logging settings", "error");
}
}
}), (async () => {
- var M, j, O;
+ var M, v, F;
try {
- const D = await Af(), q = !!((j = (M = D == null ? void 0 : D.data) == null ? void 0 : M.prefs) != null && j.enabled);
- t.ai = t.ai || {}, t.ai.verboseAiLogs !== q && (t.ai.verboseAiLogs = q, Be(t), n("ai.verboseAiLogs"));
+ const D = await Af(), q = !!((v = (M = D == null ? void 0 : D.data) == null ? void 0 : M.prefs) != null && v.enabled);
+ t.ai = t.ai || {}, t.ai.verboseAiLogs !== q && (t.ai.verboseAiLogs = q, Ue(t), n("ai.verboseAiLogs"));
} catch (D) {
- (O = console.debug) == null || O.call(console, D);
+ (F = console.debug) == null || F.call(console, D);
}
})();
}
@@ -7382,16 +7382,16 @@ function hC(e, t, n, i) {
type: "text",
defaultValue: "Loading vector status..."
}), (async () => {
- var B, J, P, H, $;
+ var T, J, P, E, $;
try {
- const E = await xa();
- E != null && E.ok ? (P = console.debug) == null || P.call(
+ const H = await xa();
+ H != null && H.ok ? (P = console.debug) == null || P.call(
console,
"[Majoor] Vector status:",
- `${((B = E.data) == null ? void 0 : B.total) || 0} assets indexed | Model: ${((J = E.data) == null ? void 0 : J.model) || "N/A"}`
- ) : (H = console.debug) == null || H.call(console, "[Majoor] Vector status unavailable");
- } catch (E) {
- ($ = console.debug) == null || $.call(console, "[Majoor] Vector status fetch failed", E);
+ `${((T = H.data) == null ? void 0 : T.total) || 0} assets indexed | Model: ${((J = H.data) == null ? void 0 : J.model) || "N/A"}`
+ ) : (E = console.debug) == null || E.call(console, "[Majoor] Vector status unavailable");
+ } catch (H) {
+ ($ = console.debug) == null || $.call(console, "[Majoor] Vector status fetch failed", H);
}
})(), e({
id: `${Pn}.AI.VectorBackfillAction`,
@@ -7410,9 +7410,9 @@ function hC(e, t, n, i) {
type: "combo",
defaultValue: "Idle",
options: ["Idle", "Run backfill now"],
- onChange: async (B) => {
- var P, H;
- if (String(B || "") !== "Run backfill now") return;
+ onChange: async (T) => {
+ var P, E;
+ if (String(T || "") !== "Run backfill now") return;
const J = {
history: {
trackId: "vector-backfill:advanced-settings",
@@ -7423,7 +7423,7 @@ function hC(e, t, n, i) {
}
};
try {
- Ze(
+ Ae(
m(
"toast.vectorBackfillStarting",
"Starting vector backfill... This may take a while."
@@ -7439,25 +7439,25 @@ function hC(e, t, n, i) {
}
);
const $ = await Tg(64, {
- onProgress: (E) => {
- const oe = String((E == null ? void 0 : E.status) || "running").toLowerCase() || "running", M = (E == null ? void 0 : E.progress) || (E == null ? void 0 : E.result) || {}, j = Number((M == null ? void 0 : M.candidates) ?? (M == null ? void 0 : M.processed) ?? 0), O = Number((M == null ? void 0 : M.indexed) ?? 0), D = Number((M == null ? void 0 : M.skipped) ?? 0), q = Number((M == null ? void 0 : M.errors) ?? 0), ee = Math.max(j, O + D + q), ce = ee > 0 ? Math.round((O + D + q) / ee * 100) : null, ue = oe === "queued" ? "Vector backfill queued" : `Candidates ${j}, indexed ${O}, skipped ${D}, errors ${q}`;
+ onProgress: (H) => {
+ const ne = String((H == null ? void 0 : H.status) || "running").toLowerCase() || "running", M = (H == null ? void 0 : H.progress) || (H == null ? void 0 : H.result) || {}, v = Number((M == null ? void 0 : M.candidates) ?? (M == null ? void 0 : M.processed) ?? 0), F = Number((M == null ? void 0 : M.indexed) ?? 0), D = Number((M == null ? void 0 : M.skipped) ?? 0), q = Number((M == null ? void 0 : M.errors) ?? 0), ee = Math.max(v, F + D + q), ae = ee > 0 ? Math.round((F + D + q) / ee * 100) : null, ue = ne === "queued" ? "Vector backfill queued" : `Candidates ${v}, indexed ${F}, skipped ${D}, errors ${q}`;
tl(
{ summary: "Vector Backfill", detail: ue },
- oe === "failed" ? "error" : oe === "succeeded" ? "success" : "info",
+ ne === "failed" ? "error" : ne === "succeeded" ? "success" : "info",
0,
{
history: {
...J.history,
- status: oe,
+ status: ne,
detail: ue,
progress: {
- current: O + D + q,
+ current: F + D + q,
total: ee,
- percent: ce,
- indexed: O,
+ percent: ae,
+ indexed: F,
skipped: D,
errors: q,
- label: oe
+ label: ne
}
}
}
@@ -7465,10 +7465,10 @@ function hC(e, t, n, i) {
}
});
if ($ != null && $.ok) {
- const E = $.data || {}, oe = String((E == null ? void 0 : E.status) || "").toLowerCase(), M = !!(E != null && E.pending) || ["queued", "running", "pending"].includes(oe), j = (E == null ? void 0 : E.progress) || {}, O = Number((E == null ? void 0 : E.processed) ?? (j == null ? void 0 : j.candidates) ?? 0), D = Number((E == null ? void 0 : E.indexed) ?? (j == null ? void 0 : j.indexed) ?? 0), q = Number((E == null ? void 0 : E.skipped) ?? (j == null ? void 0 : j.skipped) ?? 0);
+ const H = $.data || {}, ne = String((H == null ? void 0 : H.status) || "").toLowerCase(), M = !!(H != null && H.pending) || ["queued", "running", "pending"].includes(ne), v = (H == null ? void 0 : H.progress) || {}, F = Number((H == null ? void 0 : H.processed) ?? (v == null ? void 0 : v.candidates) ?? 0), D = Number((H == null ? void 0 : H.indexed) ?? (v == null ? void 0 : v.indexed) ?? 0), q = Number((H == null ? void 0 : H.skipped) ?? (v == null ? void 0 : v.skipped) ?? 0);
if (M) {
- const ee = String((E == null ? void 0 : E.job_id) || "").trim();
- Ze(
+ const ee = String((H == null ? void 0 : H.job_id) || "").trim();
+ Ae(
m(
"toast.vectorBackfillRunning",
"Vector backfill still running in background{job}.",
@@ -7483,8 +7483,8 @@ function hC(e, t, n, i) {
detail: `Vector backfill still running in background${ee ? ` (${ee.slice(0, 8)})` : ""}.`,
progress: {
current: D + q,
- total: Math.max(O, D + q),
- percent: Math.max(O, D + q) > 0 ? Math.round((D + q) / Math.max(O, D + q) * 100) : null,
+ total: Math.max(F, D + q),
+ percent: Math.max(F, D + q) > 0 ? Math.round((D + q) / Math.max(F, D + q) * 100) : null,
indexed: D,
skipped: q,
label: "running"
@@ -7496,17 +7496,17 @@ function hC(e, t, n, i) {
const ee = m(
"toast.vectorBackfillComplete",
"Vector backfill complete! Processed: {processed}, Indexed: {indexed}, Skipped: {skipped}",
- { processed: O, indexed: D, skipped: q }
+ { processed: F, indexed: D, skipped: q }
);
- Ze(ee, "success", void 0, {
+ Ae(ee, "success", void 0, {
history: {
...J.history,
status: "succeeded",
- detail: `Processed ${O}, indexed ${D}, skipped ${q}`,
+ detail: `Processed ${F}, indexed ${D}, skipped ${q}`,
progress: {
- current: O,
- total: O,
- percent: O > 0 ? 100 : null,
+ current: F,
+ total: F,
+ percent: F > 0 ? 100 : null,
indexed: D,
skipped: q,
label: "done"
@@ -7518,17 +7518,17 @@ function hC(e, t, n, i) {
const ee = await xa();
ee != null && ee.ok && ((P = console.debug) == null || P.call(console, "[Majoor] Vector stats after backfill:", ee.data));
} catch (ee) {
- (H = console.debug) == null || H.call(console, "[Majoor] Failed to refresh vector stats:", ee);
+ (E = console.debug) == null || E.call(console, "[Majoor] Failed to refresh vector stats:", ee);
}
} else
throw new Error(
($ == null ? void 0 : $.error) || m("toast.vectorBackfillFailedGeneric", "Backfill failed")
);
} catch ($) {
- const E = ($ == null ? void 0 : $.message) || String($ || m("status.unknown", "unknown"));
- Ze(
+ const H = ($ == null ? void 0 : $.message) || String($ || m("status.unknown", "unknown"));
+ Ae(
m("toast.vectorBackfillFailedDetail", "Vector backfill failed: {error}", {
- error: E
+ error: H
}),
"error",
void 0,
@@ -7536,7 +7536,7 @@ function hC(e, t, n, i) {
history: {
...J.history,
status: "failed",
- detail: E
+ detail: H
}
}
), console.error("[Majoor] Vector backfill error:", $);
@@ -7544,12 +7544,12 @@ function hC(e, t, n, i) {
}
});
}
-const Ic = "Majoor", CC = "Majoor Assets Manager";
-function ZC(e, t, n) {
+const bc = "Majoor", hh = "Majoor Assets Manager";
+function Zh(e, t, n) {
var o, r;
- const i = (l, a) => [CC, l, a];
+ const i = (l, a) => [hh, l, a];
e({
- id: `${Ic}.AI.VectorSearchEnabled`,
+ id: `${bc}.AI.VectorSearchEnabled`,
category: i(m("cat.search", "Search"), "AI"),
name: m("setting.ai.vector.enabled.name", "Enable AI semantic search"),
tooltip: m(
@@ -7561,24 +7561,24 @@ function ZC(e, t, n) {
onChange: async (l) => {
t.ai = t.ai || {};
const a = !!(t.ai.vectorSearchEnabled ?? !0), c = !!l;
- t.ai.vectorSearchEnabled = c, Be(t), At(t), n("ai.vectorSearchEnabled");
+ t.ai.vectorSearchEnabled = c, Ue(t), Zt(t), n("ai.vectorSearchEnabled");
try {
const s = await yf(c);
if (!(s != null && s.ok)) {
- t.ai.vectorSearchEnabled = a, Be(t), At(t), n("ai.vectorSearchEnabled"), Ze((s == null ? void 0 : s.error) || "Failed to update AI vector search setting", "error");
+ t.ai.vectorSearchEnabled = a, Ue(t), Zt(t), n("ai.vectorSearchEnabled"), Ae((s == null ? void 0 : s.error) || "Failed to update AI vector search setting", "error");
return;
}
- Ze(
+ Ae(
c ? "AI semantic search enabled" : "AI semantic search disabled",
"info",
2200
);
} catch (s) {
- t.ai.vectorSearchEnabled = a, Be(t), At(t), n("ai.vectorSearchEnabled"), Ze((s == null ? void 0 : s.message) || "Failed to update AI vector search setting", "error");
+ t.ai.vectorSearchEnabled = a, Ue(t), Zt(t), n("ai.vectorSearchEnabled"), Ae((s == null ? void 0 : s.message) || "Failed to update AI vector search setting", "error");
}
}
}), e({
- id: `${Ic}.Search.MaxResults`,
+ id: `${bc}.Search.MaxResults`,
category: i(m("cat.search", "Search")),
name: m("setting.search.maxResults.name", "Max search results (client)"),
tooltip: m(
@@ -7586,19 +7586,19 @@ function ZC(e, t, n) {
"Maximum number of results requested per search. The backend still enforces MAJOOR_SEARCH_MAX_LIMIT; increase that env var if you need a higher hard cap."
),
type: "number",
- defaultValue: Number(((r = t.search) == null ? void 0 : r.maxResults) || Ge.SEARCH_DEFAULT_LIMIT),
- attrs: { min: 10, max: Ge.MAX_PAGE_SIZE || 2e3, step: 1 },
+ defaultValue: Number(((r = t.search) == null ? void 0 : r.maxResults) || Se.SEARCH_DEFAULT_LIMIT),
+ attrs: { min: 10, max: Se.MAX_PAGE_SIZE || 2e3, step: 1 },
onChange: (l) => {
t.search = t.search || {}, t.search.maxResults = Math.max(
10,
Math.min(
- Ge.MAX_PAGE_SIZE || 2e3,
- Number(l) || Ge.SEARCH_DEFAULT_LIMIT
+ Se.MAX_PAGE_SIZE || 2e3,
+ Number(l) || Se.SEARCH_DEFAULT_LIMIT
)
- ), Be(t), At(t), n("search.maxResults");
+ ), Ue(t), Zt(t), n("search.maxResults");
}
}), e({
- id: `${Ic}.EnvVars.Reference`,
+ id: `${bc}.EnvVars.Reference`,
category: i(m("cat.advanced"), "Environment variables"),
name: "Environment variables reference",
tooltip: [
@@ -7629,7 +7629,7 @@ function ZC(e, t, n) {
defaultValue: "Hover for full list of environment variables"
});
}
-const bc = "Majoor Assets Manager", AC = /^\s*Majoor:\s*/i, WC = /* @__PURE__ */ new Set([
+const pc = "Majoor Assets Manager", Ah = /^\s*Majoor:\s*/i, Wh = /* @__PURE__ */ new Set([
"grid.starColor",
"grid.badgeImageColor",
"grid.badgeVideoColor",
@@ -7641,21 +7641,21 @@ const bc = "Majoor Assets Manager", AC = /^\s*Majoor:\s*/i, WC = /* @__PURE__ */
"ui.ratingColor",
"ui.tagColor"
]);
-let bu = !1, pc = null, uo = null, Fr = null, pu = !1;
-function wC(e) {
+let bu = !1, yc = null, uo = null, Or = null, pu = !1;
+function wh(e) {
var n;
if (!e || typeof e != "object") return null;
const t = { ...e };
try {
- typeof t.name == "string" && (t.name = t.name.replace(AC, "").trim());
+ typeof t.name == "string" && (t.name = t.name.replace(Ah, "").trim());
} catch (i) {
(n = console.debug) == null || n.call(console, i);
}
try {
const i = t.category;
- (!Array.isArray(i) || String(i[0] || "") !== bc) && (t.category = [bc]);
+ (!Array.isArray(i) || String(i[0] || "") !== pc) && (t.category = [pc]);
} catch {
- t.category = [bc];
+ t.category = [pc];
}
return t;
}
@@ -7664,8 +7664,8 @@ function nI(e, t, { initRuntime: n = !1 } = {}) {
if (uo)
typeof t == "function" && uo.onAppliedListeners.add(t), e && !uo.app && (uo.app = e);
else {
- const r = Xn();
- r.i18n = r.i18n || {}, typeof r.i18n.followComfyLanguage != "boolean" ? (r.i18n.followComfyLanguage = !0, Wa(!0), Be(r)) : Wa(!!r.i18n.followComfyLanguage);
+ const r = kn();
+ r.i18n = r.i18n || {}, typeof r.i18n.followComfyLanguage != "boolean" ? (r.i18n.followComfyLanguage = !0, Wa(!0), Ue(r)) : Wa(!!r.i18n.followComfyLanguage);
const l = /* @__PURE__ */ new Set();
typeof t == "function" && l.add(t);
const a = /* @__PURE__ */ new Set(), c = /* @__PURE__ */ new Set(), s = 450, d = () => {
@@ -7688,25 +7688,25 @@ function nI(e, t, { initRuntime: n = !1 } = {}) {
{ key: b },
{ warnPrefix: "[Majoor]" }
);
- }, I = $c(d, 120), y = $c(u, s), S = (p) => {
+ }, I = es(d, 120), A = es(u, s), h = (p) => {
typeof p == "string" && a.add(p), I();
- }, Z = (p) => {
- typeof p == "string" && c.add(p), y();
- }, C = () => {
- const p = Xn();
- Object.assign(r, p), At(r), S("storage");
+ }, S = (p) => {
+ typeof p == "string" && c.add(p), A();
+ }, W = () => {
+ const p = kn();
+ Object.assign(r, p), Zt(r), h("storage");
}, g = (p) => {
- !p || p.key !== Oi || p.newValue !== p.oldValue && C();
+ !p || p.key !== Fi || p.newValue !== p.oldValue && W();
};
if (!bu) {
- if (pc && typeof window < "u")
+ if (yc && typeof window < "u")
try {
- window.removeEventListener("storage", pc);
+ window.removeEventListener("storage", yc);
} catch (p) {
(i = console.debug) == null || i.call(console, p);
}
try {
- window.addEventListener("storage", g), bu = !0, pc = g;
+ window.addEventListener("storage", g), bu = !0, yc = g;
} catch (p) {
(o = console.debug) == null || o.call(console, p);
}
@@ -7718,40 +7718,40 @@ function nI(e, t, { initRuntime: n = !1 } = {}) {
for (const L of l)
try {
L(r, p);
- } catch (h) {
- (b = console.debug) == null || b.call(console, h);
+ } catch (C) {
+ (b = console.debug) == null || b.call(console, C);
}
- WC.has(String(p || "")) ? Z(p) : S(p);
+ Wh.has(String(p || "")) ? S(p) : h(p);
},
onAppliedListeners: l,
- refreshFromStorage: C,
+ refreshFromStorage: W,
settings: r
};
}
if (n && !pu) {
const r = e || uo.app, l = uo.settings;
- Wg(r), At(l), Ty(r), oa(), Ph(), Qh(), l != null && l.watcher && typeof l.watcher.enabled == "boolean" && Ma(!!l.watcher.enabled).catch(() => {
- }), Dh(), pu = !0;
+ Wg(r), Zt(l), Ty(r), oa(), PC(), QC(), l != null && l.watcher && typeof l.watcher.enabled == "boolean" && Ma(!!l.watcher.enabled).catch(() => {
+ }), DC(), pu = !0;
}
return uo;
}
-const MC = (e, t) => nI(e, t, { initRuntime: !0 }).settings, SC = (e, t) => {
+const Mh = (e, t) => nI(e, t, { initRuntime: !0 }).settings, Gh = (e, t) => {
const n = nI(e, t, { initRuntime: !1 });
- if (Fr)
- return Fr;
+ if (Or)
+ return Or;
const i = (o) => {
- const r = wC(o);
- r && Fr.push(r);
+ const r = wh(o);
+ r && Or.push(r);
};
- return Fr = [], $h(i, n.settings, n.notifyApplied), rC(i, n.settings, n.notifyApplied), tC(i, n.settings, n.notifyApplied), iC(i, n.settings, n.notifyApplied), yC(i, n.settings, n.notifyApplied), hC(i, n.settings, n.notifyApplied, e), ZC(i, n.settings, n.notifyApplied), Fr;
+ return Or = [], $C(i, n.settings, n.notifyApplied), rh(i, n.settings, n.notifyApplied), th(i, n.settings, n.notifyApplied), ih(i, n.settings, n.notifyApplied), yh(i, n.settings, n.notifyApplied), Ch(i, n.settings, n.notifyApplied, e), Zh(i, n.settings, n.notifyApplied), Or;
};
var og;
try {
- const e = Xn();
- e != null && e.watcher && typeof e.watcher.enabled == "boolean" && Ng().then((t) => {
+ const e = kn();
+ e != null && e.watcher && typeof e.watcher.enabled == "boolean" && kg().then((t) => {
var i;
const n = !!(t != null && t.ok) && !!((i = t == null ? void 0 : t.data) != null && i.enabled);
- typeof n == "boolean" && n !== !!e.watcher.enabled && (e.watcher.enabled = n, Be(e), oi(
+ typeof n == "boolean" && n !== !!e.watcher.enabled && (e.watcher.enabled = n, Ue(e), oi(
"mjr-settings-changed",
{ key: "watcher.enabled" },
{ warnPrefix: "[Majoor]" }
@@ -7761,8 +7761,8 @@ try {
} catch (e) {
(og = console.debug) == null || og.call(console, e);
}
-const Fi = "mjr:asset-rating-changed", Do = "mjr:asset-tags-changed", iI = "mjr:viewer-info-refreshed", ht = Object.freeze({
- ASSET_RATING_CHANGED: Fi,
+const Oi = "mjr:asset-rating-changed", Do = "mjr:asset-tags-changed", iI = "mjr:viewer-info-refreshed", ft = Object.freeze({
+ ASSET_RATING_CHANGED: Oi,
ASSET_TAGS_CHANGED: Do,
VIEWER_INFO_REFRESHED: iI,
SCAN_COMPLETE: "mjr-scan-complete",
@@ -7801,11 +7801,11 @@ const Fi = "mjr:asset-rating-changed", Do = "mjr:asset-tags-changed", iI = "mjr:
OPEN_STACK_GROUP: "mjr:open-stack-group",
OPEN_MESSAGE_HISTORY: "mjr:open-message-history"
});
-let Eo = null;
+let Ho = null;
function oI(e) {
return e ? typeof (e == null ? void 0 : e.isConnected) == "boolean" ? e.isConnected : !0 : !1;
}
-function GC() {
+function Sh() {
var e;
try {
const t = document.getElementById("mjr-assets-grid") || document.querySelector(".mjr-grid");
@@ -7815,16 +7815,16 @@ function GC() {
}
return null;
}
-function Ds(e) {
- return Eo = e || null, Eo;
+function ja(e) {
+ return Ho = e || null, Ho;
}
-function ja(e = null) {
- (!e || Eo === e) && (Eo = null);
+function va(e = null) {
+ (!e || Ho === e) && (Ho = null);
}
-function So() {
- return oI(Eo) ? Eo : (Eo = null, GC());
+function Go() {
+ return oI(Ho) ? Ho : (Ho = null, Sh());
}
-function Qa(e) {
+function _a(e) {
var n, i, o;
const t = /* @__PURE__ */ new Set();
if (!e) return t;
@@ -7858,7 +7858,7 @@ function rI(e, t, n = "") {
}
return i;
}
-function xC(e, t, n) {
+function xh(e, t, n) {
var o, r;
if (!e) return;
const i = t instanceof Set ? t : new Set(Array.from(t || []).map(String));
@@ -7872,13 +7872,13 @@ function xC(e, t, n) {
(r = console.debug) == null || r.call(console, l);
}
}
-function jC(e, t, { activeId: n = "" } = {}, i) {
+function jh(e, t, { activeId: n = "" } = {}, i) {
var a, c, s;
if (!e) return [];
const o = new Set(
Array.from(t || []).map(String).filter(Boolean)
), r = rI(e, o, n);
- xC(e, o, i);
+ xh(e, o, i);
const l = { selectedIds: r, activeId: n || r[0] || "" };
try {
(a = e.dispatchEvent) == null || a.call(
@@ -7895,55 +7895,55 @@ function jC(e, t, { activeId: n = "" } = {}, i) {
}
return r;
}
-function vC(e) {
+function vh(e) {
try {
return CSS != null && CSS.escape ? CSS.escape(String(e)) : String(e).replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1");
} catch {
return String(e).replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1");
}
}
-const Es = {
+const Hs = {
suspended: !1,
scope: null,
ratingHotkeysActive: !1
};
function Mo() {
- return Es;
+ return Hs;
}
function wr(e) {
- Es.scope = e == null ? null : String(e);
+ Hs.scope = e == null ? null : String(e);
}
function yu(e) {
- Es.ratingHotkeysActive = !!e;
+ Hs.ratingHotkeysActive = !!e;
}
let Mr = null, bl = null;
-const lI = ".mjr-viewer-overlay", LC = ".mjr-mfv";
+const lI = ".mjr-viewer-overlay", Lh = ".mjr-mfv";
function aI(e) {
return !!e && typeof e.appendChild == "function";
}
-function Hs() {
+function Es() {
return typeof document > "u" ? null : (document == null ? void 0 : document.body) || null;
}
-function VC() {
+function Yh() {
return typeof document > "u" ? null : (document == null ? void 0 : document.body) || (document == null ? void 0 : document.documentElement) || null;
}
function cI(e) {
- return aI(e) ? e === Hs() ? !0 : typeof (e == null ? void 0 : e.isConnected) == "boolean" ? e.isConnected : !0 : !1;
+ return aI(e) ? e === Es() ? !0 : typeof (e == null ? void 0 : e.isConnected) == "boolean" ? e.isConnected : !0 : !1;
}
function sI(e) {
return aI(e) ? e : null;
}
-function _a(e) {
- return cI(e) ? e : Hs();
+function $a(e) {
+ return cI(e) ? e : Es();
}
function dI(e) {
- const t = VC();
- return cI(t) ? t : _a(e);
+ const t = Yh();
+ return cI(t) ? t : $a(e);
}
-function uI(e, t, n = _a) {
+function uI(e, t, n = $a) {
var r, l;
const i = [], o = /* @__PURE__ */ new Set();
- for (const a of [n(t), Hs(), t]) {
+ for (const a of [n(t), Es(), t]) {
if (!a || o.has(a)) continue;
o.add(a);
let c = [];
@@ -7957,7 +7957,7 @@ function uI(e, t, n = _a) {
}
return i;
}
-function mI(e, t, n = _a) {
+function mI(e, t, n = $a) {
var r;
const i = n(t);
if (!i) return;
@@ -7970,21 +7970,21 @@ function mI(e, t, n = _a) {
(r = console.debug) == null || r.call(console, a);
}
}
-function YC(e) {
- return Mr = sI(e), mI(lI, Mr), () => kC(e);
+function Vh(e) {
+ return Mr = sI(e), mI(lI, Mr), () => Xh(e);
}
-function kC(e) {
+function Xh(e) {
(!e || Mr === e) && (Mr = null);
}
-function XC(e) {
- return bl = sI(e), mI(LC, bl, dI), () => NC(e);
+function Nh(e) {
+ return bl = sI(e), mI(Lh, bl, dI), () => kh(e);
}
-function NC(e) {
+function kh(e) {
(!e || bl === e) && (bl = null);
}
-function RC(e) {
+function Rh(e) {
var n, i;
- const t = _a(Mr);
+ const t = $a(Mr);
try {
(n = t == null ? void 0 : t.appendChild) == null || n.call(t, e);
} catch (o) {
@@ -8002,31 +8002,31 @@ function fu(e) {
}
return t;
}
-function FC() {
+function Oh() {
return uI(lI, Mr);
}
-let Nl = null, yc = null;
-async function OC() {
- return Nl || (yc || (yc = import("./FloatingViewer-BUg810bV.js").then((e) => (Nl = e.FloatingViewer, Nl))), yc);
+let kl = null, fc = null;
+async function Fh() {
+ return kl || (fc || (fc = import("./FloatingViewer-C4ghYm3b.js").then((e) => (kl = e.FloatingViewer, kl))), fc);
}
-let zC = null;
-const Hn = Object.freeze({ SIMPLE: "simple", AB: "ab", SIDE: "side", GRID: "grid" });
-let at = null;
+let zh = null;
+const En = Object.freeze({ SIMPLE: "simple", AB: "ab", SIDE: "side", GRID: "grid" });
+let ct = null;
function qs() {
- return fe.MFV_LIVE_DEFAULT !== !1;
+ return he.MFV_LIVE_DEFAULT !== !1;
}
function Ps() {
- return fe.MFV_PREVIEW_DEFAULT !== !1;
+ return he.MFV_PREVIEW_DEFAULT !== !1;
}
-let Co = qs(), $i = Ps(), es = !1, Oo = null, ts = 0;
-function JC() {
- Co = qs(), $i = Ps(), at == null || at.setLiveActive(Co), at == null || at.setPreviewActive($i);
+let ho = qs(), $i = Ps(), ts = !1, Fo = null, ns = 0;
+function Jh() {
+ ho = qs(), $i = Ps(), ct == null || ct.setLiveActive(ho), ct == null || ct.setPreviewActive($i);
}
-async function Or() {
+async function Fr() {
var e;
- if (!at) {
- const t = await OC();
- at || (at = new t({
+ if (!ct) {
+ const t = await Fh();
+ ct || (ct = new t({
controller: {
close: () => zn.close(),
toggle: () => zn.toggle(),
@@ -8035,28 +8035,28 @@ async function Or() {
toggleNodeStream: () => zn.toggleNodeStream(),
popOut: () => zn.popOut(),
onModeChanged: (n) => {
- at != null && at.isVisible && n !== Hn.SIMPLE && ra();
+ ct != null && ct.isVisible && n !== En.SIMPLE && ra();
},
handleForwardedKeydown: (n) => $s(n)
}
- }), fu(at.render()));
+ }), fu(ct.render()));
}
try {
- const t = (at == null ? void 0 : at.element) || null;
+ const t = (ct == null ? void 0 : ct.element) || null;
(t == null ? void 0 : t.isConnected) === !1 && fu(t);
} catch (t) {
(e = console.debug) == null || e.call(console, t);
}
- return at;
+ return ct;
}
function Qs() {
var e;
try {
- Oo == null || Oo.abort();
+ Fo == null || Fo.abort();
} catch (t) {
(e = console.debug) == null || e.call(console, t);
}
- Oo = null;
+ Fo = null;
}
function _s() {
var e;
@@ -8066,31 +8066,31 @@ function _s() {
} catch (t) {
(e = console.debug) == null || e.call(console, t);
}
- return So();
+ return Go();
}
-function TC() {
+function Th() {
var e, t;
- if (at) {
+ if (ct) {
try {
- (e = at.dispose) == null || e.call(at);
+ (e = ct.dispose) == null || e.call(ct);
} catch (n) {
(t = console.debug) == null || t.call(console, n);
}
- at = null;
+ ct = null;
}
}
function ar(e) {
typeof window > "u" || window.dispatchEvent(
- new CustomEvent(ht.MFV_VISIBILITY_CHANGED, {
+ new CustomEvent(ft.MFV_VISIBILITY_CHANGED, {
detail: { visible: !!e }
})
);
}
function Rl(e) {
var t;
- e && (e.setLiveActive(Co), e.setPreviewActive($i), (t = e.setNodeStreamActive) == null || t.call(e, !1));
+ e && (e.setLiveActive(ho), e.setPreviewActive($i), (t = e.setNodeStreamActive) == null || t.call(e, !1));
}
-function BC(e) {
+function Kh(e) {
var t, n;
try {
const i = _s();
@@ -8103,46 +8103,46 @@ function BC(e) {
return (n = console.debug) == null || n.call(console, "[MFV] _findAdjacentGridId error", i), null;
}
}
-async function ns(e) {
- if (!e.length || !at) return;
+async function is(e) {
+ if (!e.length || !ct) return;
Qs();
- const t = ++ts, n = typeof AbortController < "u" ? new AbortController() : null;
- Oo = n;
+ const t = ++ns, n = typeof AbortController < "u" ? new AbortController() : null;
+ Fo = n;
try {
- const i = at.getPinnedSlots(), o = i.size > 0, r = at._mode, l = r === Hn.GRID, a = r === Hn.AB || r === Hn.SIDE, c = l ? 4 : 2;
+ const i = ct.getPinnedSlots(), o = i.size > 0, r = ct._mode, l = r === En.GRID, a = r === En.AB || r === En.SIDE, c = l ? 4 : 2;
let s = e.slice(0, c);
if (o && (a || l)) {
const I = c - i.size;
s = s.slice(0, Math.max(1, I));
} else if (s.length === 1 && a) {
- const I = BC(s[0]);
+ const I = Kh(s[0]);
I && (s = [s[0], I]);
}
const d = await Bs(s, n ? { signal: n.signal } : {});
- if (n != null && n.signal.aborted || ts !== t || !(d != null && d.ok) || !Array.isArray(d.data) || !d.data.length || !at) return;
+ if (n != null && n.signal.aborted || ns !== t || !(d != null && d.ok) || !Array.isArray(d.data) || !d.data.length || !ct) return;
const u = d.data;
if (l) {
if (o) {
const I = {
- A: at._mediaA,
- B: at._mediaB,
- C: at._mediaC,
- D: at._mediaD
- }, y = ["A", "B", "C", "D"].filter((Z) => !i.has(Z));
- let S = 0;
- for (const Z of y)
- S < u.length && (I[Z] = u[S++]);
- at.loadMediaQuad(I.A, I.B, I.C, I.D);
- } else u.length >= 3 ? at.loadMediaQuad(u[0], u[1], u[2], u[3] || null) : u.length >= 2 ? at.loadMediaPair(u[0], u[1]) : at.loadMediaA(u[0], { autoMode: !0 });
+ A: ct._mediaA,
+ B: ct._mediaB,
+ C: ct._mediaC,
+ D: ct._mediaD
+ }, A = ["A", "B", "C", "D"].filter((S) => !i.has(S));
+ let h = 0;
+ for (const S of A)
+ h < u.length && (I[S] = u[h++]);
+ ct.loadMediaQuad(I.A, I.B, I.C, I.D);
+ } else u.length >= 3 ? ct.loadMediaQuad(u[0], u[1], u[2], u[3] || null) : u.length >= 2 ? ct.loadMediaPair(u[0], u[1]) : ct.loadMediaA(u[0], { autoMode: !0 });
return;
}
- if (i.has("A") && i.has("B") && at._mediaA && at._mediaB)
+ if (i.has("A") && i.has("B") && ct._mediaA && ct._mediaB)
return;
- i.has("A") && at._mediaA ? at.loadMediaPair(at._mediaA, u[0]) : i.has("B") && at._mediaB ? at.loadMediaPair(u[0], at._mediaB) : s.length >= 2 && u.length >= 2 ? at.loadMediaPair(u[0], u[1]) : at.loadMediaA(u[0], { autoMode: !0 });
+ i.has("A") && ct._mediaA ? ct.loadMediaPair(ct._mediaA, u[0]) : i.has("B") && ct._mediaB ? ct.loadMediaPair(u[0], ct._mediaB) : s.length >= 2 && u.length >= 2 ? ct.loadMediaPair(u[0], u[1]) : ct.loadMediaA(u[0], { autoMode: !0 });
} catch (i) {
(i == null ? void 0 : i.name) !== "AbortError" && ai(i, "floatingViewerManager._loadFromIds");
} finally {
- Oo === n && (Oo = null);
+ Fo === n && (Fo = null);
}
}
function ra() {
@@ -8150,43 +8150,43 @@ function ra() {
try {
const t = _s();
if (!t) return;
- const n = Qa(t);
+ const n = _a(t);
if (!n.size) return;
- ns(Array.from(n));
+ is(Array.from(n));
} catch (t) {
(e = console.debug) == null || e.call(console, "[MFV] Error reading current grid selection", t);
}
}
function gI(e) {
var n, i;
- if (!(at != null && at.isVisible)) return;
+ if (!(ct != null && ct.isVisible)) return;
const t = Array.isArray((n = e == null ? void 0 : e.detail) == null ? void 0 : n.selectedIds) ? e.detail.selectedIds.map(String).filter(Boolean) : [];
if (t.length) {
- ns(t);
+ is(t);
return;
}
try {
const o = _s();
if (!o) return;
- const r = Array.from(Qa(o)).map(String).filter(Boolean);
+ const r = Array.from(_a(o)).map(String).filter(Boolean);
if (!r.length) return;
- ns(r);
+ is(r);
} catch (o) {
(i = console.debug) == null || i.call(console, "[MFV] selection fallback failed", o);
}
}
-function fc() {
- es || typeof window > "u" || (window.addEventListener(ht.SELECTION_CHANGED, gI), es = !0);
+function Cc() {
+ ts || typeof window > "u" || (window.addEventListener(ft.SELECTION_CHANGED, gI), ts = !0);
}
function II() {
- typeof window < "u" && window.removeEventListener(ht.SELECTION_CHANGED, gI), es = !1, Qs();
+ typeof window < "u" && window.removeEventListener(ft.SELECTION_CHANGED, gI), ts = !1, Qs();
}
let pl = !1, zo = null, Jo = null, To = null, nl = null, Zo = null, ur = "";
function il() {
var e;
- at != null && at.isVisible && ((e = at.refreshSidebar) == null || e.call(at));
+ ct != null && ct.isVisible && ((e = ct.refreshSidebar) == null || e.call(ct));
}
-function UC() {
+function Bh() {
bI();
const e = typeof window < "u" ? window : globalThis;
if (typeof e.requestAnimationFrame == "function") {
@@ -8210,7 +8210,7 @@ function bI() {
}
Zo = null, ur = "";
}
-function hu() {
+function Cu() {
var e;
if (!pl)
try {
@@ -8224,12 +8224,12 @@ function hu() {
To == null || To.call(this, o), il();
};
const i = n.canvas;
- i != null && i.addEventListener && (nl = UC, i.addEventListener("pointerup", nl)), pl = !0;
+ i != null && i.addEventListener && (nl = Bh, i.addEventListener("pointerup", nl)), pl = !0;
} catch (t) {
(e = console.debug) == null || e.call(console, "[MFV] _bindNodeSelectionListener error", t);
}
}
-function KC() {
+function Uh() {
var e, t;
if (pl) {
bI();
@@ -8244,41 +8244,41 @@ function KC() {
}
const zn = {
async open() {
- const e = await Or();
- e.show(), Rl(e), fc(), hu(), pl || requestAnimationFrame(() => hu()), ra(), ar(!0);
+ const e = await Fr();
+ e.show(), Rl(e), Cc(), Cu(), pl || requestAnimationFrame(() => Cu()), ra(), ar(!0);
},
close() {
var e;
- if (at)
+ if (ct)
try {
- at.isPopped && at.popIn(), at.hide();
+ ct.isPopped && ct.popIn(), ct.hide();
} catch (t) {
(e = console.debug) == null || e.call(console, t);
}
- II(), KC(), ar(!1);
+ II(), Uh(), ar(!1);
},
async toggle() {
- at != null && at.isVisible ? zn.close() : await zn.open();
+ ct != null && ct.isVisible ? zn.close() : await zn.open();
},
toggleLive() {
- zn.setLiveActive(!Co);
+ zn.setLiveActive(!ho);
},
togglePreview() {
zn.setPreviewActive(!$i);
},
async toggleCompareAB() {
- const e = await Or();
+ const e = await Fr();
if (!!!e.isVisible) {
- e.setMode(Hn.AB), e.show(), Rl(e), fc(), ra(), ar(!0);
+ e.setMode(En.AB), e.show(), Rl(e), Cc(), ra(), ar(!0);
return;
}
const i = {
- [Hn.AB]: Hn.SIDE,
- [Hn.SIDE]: Hn.SIMPLE,
- [Hn.GRID]: Hn.SIMPLE,
- [Hn.SIMPLE]: Hn.AB
- }[e._mode] || Hn.AB;
- e.setMode(i), i !== Hn.SIMPLE && ra();
+ [En.AB]: En.SIDE,
+ [En.SIDE]: En.SIMPLE,
+ [En.GRID]: En.SIMPLE,
+ [En.SIMPLE]: En.AB
+ }[e._mode] || En.AB;
+ e.setMode(i), i !== En.SIMPLE && ra();
},
/**
* Open the MFV (if needed) and load a single file/asset.
@@ -8286,12 +8286,12 @@ const zn = {
* @param {object} fileData Raw output { filename, subfolder, type } or full asset object.
*/
async upsertWithContent(e) {
- const t = await Or(), n = !!t.isVisible;
- t.show(), Rl(t), fc();
+ const t = await Fr(), n = !!t.isVisible;
+ t.show(), Rl(t), Cc();
const i = t._mode;
- if (i === Hn.AB || i === Hn.SIDE || i === Hn.GRID) {
+ if (i === En.AB || i === En.SIDE || i === En.GRID) {
const r = t.getPinnedSlots();
- if (i === Hn.GRID) {
+ if (i === En.GRID) {
const l = {
A: t._mediaA,
B: t._mediaB,
@@ -8305,22 +8305,22 @@ const zn = {
n || ar(!0);
},
setLiveActive(e) {
- Co = !!e, at == null || at.setLiveActive(Co);
+ ho = !!e, ct == null || ct.setLiveActive(ho);
},
getLiveActive() {
- return Co;
+ return ho;
},
/**
* Toggle the viewer between the expanded dialog overlay and the floating panel.
* If the viewer isn't open yet, it is opened first so there's something to see.
*/
async popOut() {
- const e = await Or();
+ const e = await Fr();
e.isPopped ? e.popIn() : (e.isVisible || await zn.open(), e.popOut());
},
// ── Preview stream (KSampler denoising steps) ─────────────────────────
setPreviewActive(e) {
- $i = !!e, at == null || at.setPreviewActive($i);
+ $i = !!e, ct == null || ct.setPreviewActive($i);
},
getPreviewActive() {
return $i;
@@ -8332,7 +8332,7 @@ const zn = {
*/
async feedPreviewBlob(e, t = {}) {
if (!$i) return;
- const n = await Or(), i = !!n.isVisible;
+ const n = await Fr(), i = !!n.isVisible;
n.isVisible || n.show(), Rl(n), n.loadPreviewBlob(e, ...Object.keys(t).length ? [t] : []), i || ar(!0);
},
// ── Node Stream (intermediate node outputs) ───────────────────────────
@@ -8341,7 +8341,7 @@ const zn = {
setNodeStreamActive(e) {
var t;
{
- (t = at == null ? void 0 : at.setNodeStreamActive) == null || t.call(at, !1);
+ (t = ct == null ? void 0 : ct.setNodeStreamActive) == null || t.call(ct, !1);
return;
}
},
@@ -8356,19 +8356,19 @@ const zn = {
async feedNodeStream(e) {
}
};
-let va = !1;
-const pI = () => zn.open(), yI = () => zn.close(), fI = () => zn.toggle(), hI = () => zn.toggleLive(), CI = () => zn.togglePreview(), ZI = () => zn.popOut(), AI = () => {
+let La = !1;
+const pI = () => zn.open(), yI = () => zn.close(), fI = () => zn.toggle(), CI = () => zn.toggleLive(), hI = () => zn.togglePreview(), ZI = () => zn.popOut(), AI = () => {
try {
- at != null && at.isPopped && at.popIn();
+ ct != null && ct.isPopped && ct.popIn();
} catch {
}
}, WI = (e) => {
var n;
const t = String(((n = e == null ? void 0 : e.detail) == null ? void 0 : n.key) || "");
- (!t || t === "viewer" || t === "viewer.mfvLiveDefault" || t === "viewer.mfvPreviewDefault") && JC();
+ (!t || t === "viewer" || t === "viewer.mfvLiveDefault" || t === "viewer.mfvPreviewDefault") && Jh();
}, $s = (e) => {
var o, r, l, a, c;
- if (!(at != null && at.isVisible) || Mo().scope === "viewer") return;
+ if (!(ct != null && ct.isVisible) || Mo().scope === "viewer") return;
const t = ((r = (o = e == null ? void 0 : e.key) == null ? void 0 : o.toLowerCase) == null ? void 0 : r.call(o)) || "";
if (((l = e == null ? void 0 : e.target) == null ? void 0 : l.isContentEditable) || ((c = (a = e == null ? void 0 : e.target) == null ? void 0 : a.closest) == null ? void 0 : c.call(a, "input, textarea, select, [contenteditable='true']"))) return;
const i = () => {
@@ -8393,36 +8393,36 @@ const pI = () => zn.open(), yI = () => zn.close(), fI = () => zn.toggle(), hI =
}
};
function wI() {
- va || typeof window > "u" || !(window != null && window.addEventListener) || (window.addEventListener(ht.MFV_OPEN, pI), window.addEventListener(ht.MFV_CLOSE, yI), window.addEventListener(ht.MFV_TOGGLE, fI), window.addEventListener(ht.MFV_LIVE_TOGGLE, hI), window.addEventListener(ht.MFV_PREVIEW_TOGGLE, CI), window.addEventListener(ht.MFV_POPOUT, ZI), window.addEventListener(ht.SETTINGS_CHANGED, WI), window.addEventListener("keydown", $s, !0), window.addEventListener("beforeunload", AI), va = !0);
+ La || typeof window > "u" || !(window != null && window.addEventListener) || (window.addEventListener(ft.MFV_OPEN, pI), window.addEventListener(ft.MFV_CLOSE, yI), window.addEventListener(ft.MFV_TOGGLE, fI), window.addEventListener(ft.MFV_LIVE_TOGGLE, CI), window.addEventListener(ft.MFV_PREVIEW_TOGGLE, hI), window.addEventListener(ft.MFV_POPOUT, ZI), window.addEventListener(ft.SETTINGS_CHANGED, WI), window.addEventListener("keydown", $s, !0), window.addEventListener("beforeunload", AI), La = !0);
}
-function DC() {
+function Dh() {
if (typeof window > "u" || !(window != null && window.removeEventListener)) {
- va = !1;
+ La = !1;
return;
}
- window.removeEventListener(ht.MFV_OPEN, pI), window.removeEventListener(ht.MFV_CLOSE, yI), window.removeEventListener(ht.MFV_TOGGLE, fI), window.removeEventListener(ht.MFV_LIVE_TOGGLE, hI), window.removeEventListener(ht.MFV_PREVIEW_TOGGLE, CI), window.removeEventListener(ht.MFV_POPOUT, ZI), window.removeEventListener(ht.SETTINGS_CHANGED, WI), window.removeEventListener("keydown", $s, !0), window.removeEventListener("beforeunload", AI), va = !1;
+ window.removeEventListener(ft.MFV_OPEN, pI), window.removeEventListener(ft.MFV_CLOSE, yI), window.removeEventListener(ft.MFV_TOGGLE, fI), window.removeEventListener(ft.MFV_LIVE_TOGGLE, CI), window.removeEventListener(ft.MFV_PREVIEW_TOGGLE, hI), window.removeEventListener(ft.MFV_POPOUT, ZI), window.removeEventListener(ft.SETTINGS_CHANGED, WI), window.removeEventListener("keydown", $s, !0), window.removeEventListener("beforeunload", AI), La = !1;
}
function MI({ reinstallGlobalHandlers: e = !1 } = {}) {
var n;
- const t = !!(at != null && at.isVisible);
+ const t = !!(ct != null && ct.isVisible);
try {
- at != null && at.isPopped && at.popIn();
+ ct != null && ct.isPopped && ct.popIn();
} catch (o) {
(n = console.debug) == null || n.call(console, o);
}
- DC(), II(), Qs(), ts += 1, Co = qs(), $i = Ps(), TC(), t && ar(!1), e && wI();
+ Dh(), II(), Qs(), ns += 1, ho = qs(), $i = Ps(), Th(), t && ar(!1), e && wI();
}
-const La = "progress-update", Fl = Symbol.for("mjr.mfv.progress.queuePromptPatch"), is = "__MJR_MFV_PROGRESS_SERVICE__";
-function EC() {
+const Ya = "progress-update", Ol = Symbol.for("mjr.mfv.progress.queuePromptPatch"), os = "__MJR_MFV_PROGRESS_SERVICE__";
+function Hh() {
return typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : {};
}
-function Cu(e, t) {
+function hu(e, t) {
if (typeof CustomEvent == "function")
return new CustomEvent(e, { detail: t });
const n = typeof Event == "function" ? new Event(e) : { type: e };
return n.detail = t, n;
}
-class HC {
+class Eh {
constructor(t, n = () => Qn()) {
this.id = String(t || ""), this.promptApi = null, this.executedNodeIds = [], this.totalNodes = 0, this.currentlyExecuting = null, this.errorDetails = null, this._getApp = typeof n == "function" ? n : () => null;
}
@@ -8472,11 +8472,11 @@ class HC {
this.errorDetails = t || null;
}
}
-class qC extends EventTarget {
+class qh extends EventTarget {
constructor({
- getApi: t = (o) => Ca(o),
+ getApi: t = (o) => ha(o),
getApp: n = () => Qn(),
- waitForApi: i = (o) => hg(o)
+ waitForApi: i = (o) => Cg(o)
} = {}) {
super(), this._getApi = t, this._getApp = n, this._waitForApi = i, this.promptsMap = /* @__PURE__ */ new Map(), this.currentExecution = null, this.lastQueueRemaining = 0, this._api = null, this._listenerEntries = [], this._initPromise = null;
}
@@ -8496,7 +8496,7 @@ class qC extends EventTarget {
getOrMakePrompt(t) {
const n = String(t || "").trim() || "unknown";
let i = this.promptsMap.get(n);
- return i || (i = new HC(n, this._getApp), this.promptsMap.set(n, i)), i;
+ return i || (i = new Eh(n, this._getApp), this.promptsMap.set(n, i)), i;
}
async ensureInitialized({ api: t = null, app: n = null, timeoutMs: i = 0 } = {}) {
return t && this._api === t ? t : !t && this._api ? this._api : this._initPromise ? this._initPromise : (this._initPromise = this._ensureInitializedInternal({ api: t, app: n, timeoutMs: i }).finally(() => {
@@ -8520,28 +8520,28 @@ class qC extends EventTarget {
_patchQueuePrompt(t) {
var l;
if (!t || typeof t.queuePrompt != "function") return;
- const n = (l = t.queuePrompt) == null ? void 0 : l[Fl];
+ const n = (l = t.queuePrompt) == null ? void 0 : l[Ol];
if ((n == null ? void 0 : n.service) === this || n != null && n.service && n.service !== this) return;
const i = t.queuePrompt, o = this, r = async function(a, c, ...s) {
let d;
try {
d = await i.apply(this, [a, c, ...s]);
} catch (I) {
- const y = o.getOrMakePrompt("error");
- throw y.error({ exception_type: "Unknown." }), o.currentExecution = y, o.dispatchProgressUpdate(), I;
+ const A = o.getOrMakePrompt("error");
+ throw A.error({ exception_type: "Unknown." }), o.currentExecution = A, o.dispatchProgressUpdate(), I;
}
const u = String((d == null ? void 0 : d.prompt_id) || (d == null ? void 0 : d.promptId) || "").trim();
if (u) {
const I = o.getOrMakePrompt(u);
I.setPrompt(c), o.currentExecution || (o.currentExecution = I), o.dispatchEvent(
- Cu("queue-prompt", {
+ hu("queue-prompt", {
prompt: I
})
), o.dispatchProgressUpdate();
}
return d;
};
- Object.defineProperty(r, Fl, {
+ Object.defineProperty(r, Ol, {
configurable: !0,
value: {
service: o,
@@ -8588,19 +8588,19 @@ class qC extends EventTarget {
t.addEventListener(n, i), this._listenerEntries.push({ api: t, type: n, handler: i });
}
dispatchProgressUpdate() {
- this.dispatchEvent(Cu(La, this.getSnapshot()));
+ this.dispatchEvent(hu(Ya, this.getSnapshot()));
}
dispose({ resetPatchedQueuePrompt: t = !1, keepState: n = !1 } = {}) {
var i, o, r, l, a, c, s;
for (const { api: d, type: u, handler: I } of this._listenerEntries.splice(0))
try {
(i = d == null ? void 0 : d.removeEventListener) == null || i.call(d, u, I);
- } catch (y) {
- (o = console.debug) == null || o.call(console, y);
+ } catch (A) {
+ (o = console.debug) == null || o.call(console, A);
}
- if (t && ((a = (l = (r = this._api) == null ? void 0 : r.queuePrompt) == null ? void 0 : l[Fl]) == null ? void 0 : a.service) === this)
+ if (t && ((a = (l = (r = this._api) == null ? void 0 : r.queuePrompt) == null ? void 0 : l[Ol]) == null ? void 0 : a.service) === this)
try {
- const d = ((c = this._api.queuePrompt[Fl]) == null ? void 0 : c.originalQueuePrompt) || null;
+ const d = ((c = this._api.queuePrompt[Ol]) == null ? void 0 : c.originalQueuePrompt) || null;
typeof d == "function" && (this._api.queuePrompt = d);
} catch (d) {
(s = console.debug) == null || s.call(console, d);
@@ -8608,12 +8608,12 @@ class qC extends EventTarget {
this._api = null, n || (this.promptsMap.clear(), this.currentExecution = null, this.lastQueueRemaining = 0);
}
}
-const os = EC(), Ao = os[is] || new qC();
-os[is] || (os[is] = Ao);
-function SI(e = {}) {
+const rs = Hh(), Ao = rs[os] || new qh();
+rs[os] || (rs[os] = Ao);
+function GI(e = {}) {
return Ao.ensureInitialized(e);
}
-function PC(e) {
+function Ph(e) {
var i, o, r;
const t = Math.max(0, Number(e == null ? void 0 : e.queue) || 0), n = (e == null ? void 0 : e.prompt) || null;
if (n != null && n.errorDetails) {
@@ -8639,7 +8639,7 @@ function PC(e) {
}
return t > 0 ? `(${t}) Running... in another tab` : "Idle";
}
-function QC(e) {
+function Qh(e) {
var l;
const t = (e == null ? void 0 : e.prompt) || null;
if (t != null && t.errorDetails) {
@@ -8653,7 +8653,7 @@ function QC(e) {
const i = String(n.nodeLabel || n.nodeId || "Node").trim(), o = Number(n.step), r = Number(n.maxSteps);
return Number.isFinite(o) && Number.isFinite(r) && r > 0 ? n.pass > 1 ? `${i} #${n.pass} - ${o}/${r}` : `${i} - ${o}/${r}` : i;
}
-function rs(e, t) {
+function ls(e, t) {
var a, c, s, d;
if (!(e != null && e._progressEl) && !(e != null && e._mediaProgressEl)) return;
const n = (t == null ? void 0 : t.prompt) || null, i = String(
@@ -8663,18 +8663,18 @@ function rs(e, t) {
const l = !!(n != null && n.errorDetails);
if (n != null && n.currentlyExecuting) {
if (n.totalNodes > 0) {
- const y = n.executedNodeIds.length / n.totalNodes * 100;
- o = `${Math.max(2, Math.round(y * 100) / 100)}%`;
+ const A = n.executedNodeIds.length / n.totalNodes * 100;
+ o = `${Math.max(2, Math.round(A * 100) / 100)}%`;
}
const u = Number((s = n.currentlyExecuting) == null ? void 0 : s.step), I = Number((d = n.currentlyExecuting) == null ? void 0 : d.maxSteps);
Number.isFinite(u) && Number.isFinite(I) && I > 0 && (r = `${Math.max(0, Math.min(100, u / I * 100))}%`);
} else l && (o = "100%", r = "100%");
- if (e._progressCurrentNodeId = i || null, e._progressEl && (e._progressNodesEl.style.width = o, e._progressStepsEl.style.width = r, e._progressTextEl.textContent = PC(t), e._progressEl.classList.toggle("is-error", l), e._progressEl.classList.toggle("is-clickable", !!i), e._progressEl.title = i ? "Execution progress - click to center active node" : "Execution progress"), e._mediaProgressEl) {
- const u = QC(t);
+ if (e._progressCurrentNodeId = i || null, e._progressEl && (e._progressNodesEl.style.width = o, e._progressStepsEl.style.width = r, e._progressTextEl.textContent = Ph(t), e._progressEl.classList.toggle("is-error", l), e._progressEl.classList.toggle("is-clickable", !!i), e._progressEl.title = i ? "Execution progress - click to center active node" : "Execution progress"), e._mediaProgressEl) {
+ const u = Qh(t);
e._mediaProgressTextEl.textContent = u, e._mediaProgressEl.title = u || "", e._mediaProgressEl.classList.toggle("is-error", l), e._mediaProgressEl.classList.toggle("is-visible", !!u);
}
}
-function _C(e, t) {
+function _h(e, t) {
var i, o;
const n = String(t || "").trim();
if (!n) return !1;
@@ -8685,7 +8685,7 @@ function _C(e, t) {
return (o = console.debug) == null || o.call(console, r), !1;
}
}
-function hY(e) {
+function CV(e) {
const t = document.createElement("div");
t.className = "mjr-mfv-progress", t.setAttribute("role", "status"), t.setAttribute("aria-live", "polite");
const n = document.createElement("div");
@@ -8696,32 +8696,32 @@ function hY(e) {
o.className = "mjr-mfv-progress-overlay", o.setAttribute("aria-hidden", "true");
const r = document.createElement("span");
return r.className = "mjr-mfv-progress-text", r.textContent = "Idle", t.appendChild(n), t.appendChild(i), t.appendChild(o), t.appendChild(r), t.addEventListener("pointerdown", (l) => {
- l.button === 0 && _C(e, e._progressCurrentNodeId) && (l.preventDefault(), l.stopPropagation());
+ l.button === 0 && _h(e, e._progressCurrentNodeId) && (l.preventDefault(), l.stopPropagation());
}), e._progressEl = t, e._progressNodesEl = n, e._progressStepsEl = i, e._progressTextEl = r, e._progressUpdateHandler && Ao.removeEventListener(
- La,
+ Ya,
e._progressUpdateHandler
), e._progressUpdateHandler = (l) => {
- rs(e, (l == null ? void 0 : l.detail) || Ao.getSnapshot());
+ ls(e, (l == null ? void 0 : l.detail) || Ao.getSnapshot());
}, Ao.addEventListener(
- La,
+ Ya,
e._progressUpdateHandler
- ), SI({ timeoutMs: 4e3 }).catch((l) => {
+ ), GI({ timeoutMs: 4e3 }).catch((l) => {
var a;
(a = console.debug) == null || a.call(console, l);
- }), rs(e, Ao.getSnapshot()), t;
+ }), ls(e, Ao.getSnapshot()), t;
}
-function CY(e) {
+function hV(e) {
const t = document.createElement("div");
t.className = "mjr-mfv-media-progress", t.setAttribute("aria-hidden", "true");
const n = document.createElement("span");
- return n.className = "mjr-mfv-media-progress-text", t.appendChild(n), e._mediaProgressEl = t, e._mediaProgressTextEl = n, rs(e, Ao.getSnapshot()), t;
+ return n.className = "mjr-mfv-media-progress-text", t.appendChild(n), e._mediaProgressEl = t, e._mediaProgressTextEl = n, ls(e, Ao.getSnapshot()), t;
}
-function ZY(e) {
+function ZV(e) {
var t;
if (e != null && e._progressUpdateHandler)
try {
Ao.removeEventListener(
- La,
+ Ya,
e._progressUpdateHandler
);
} catch (n) {
@@ -8729,7 +8729,7 @@ function ZY(e) {
}
e._progressUpdateHandler = null, e._progressCurrentNodeId = null, e._progressEl = null, e._progressNodesEl = null, e._progressStepsEl = null, e._progressTextEl = null, e._mediaProgressEl = null, e._mediaProgressTextEl = null;
}
-function $C() {
+function $h() {
const e = "mjr-grid-settings-styles";
if (document.getElementById(e)) return;
const t = document.createElement("style");
@@ -8814,17 +8814,17 @@ function $C() {
}
function ol(e) {
if (!e) return;
- $C();
+ $h();
const t = (n, i) => {
i ? e.classList.add(n) : e.classList.remove(n);
};
- t("mjr-show-filename", fe.GRID_SHOW_DETAILS_FILENAME), t("mjr-show-dimensions", fe.GRID_SHOW_DETAILS_DIMENSIONS), t("mjr-show-date", fe.GRID_SHOW_DETAILS_DATE), t("mjr-show-gentime", fe.GRID_SHOW_DETAILS_GENTIME), t("mjr-show-hover-info", fe.GRID_SHOW_HOVER_INFO), t("mjr-show-dot", fe.GRID_SHOW_WORKFLOW_DOT), t("mjr-show-badges-ext", fe.GRID_SHOW_BADGES_EXTENSION), t("mjr-show-badges-rating", fe.GRID_SHOW_BADGES_RATING), t("mjr-show-badges-tags", fe.GRID_SHOW_BADGES_TAGS), t("mjr-show-details", fe.GRID_SHOW_DETAILS), e.style.setProperty("--mjr-grid-min-size", `${fe.GRID_MIN_SIZE}px`), e.style.setProperty("--mjr-grid-gap", `${fe.GRID_GAP}px`), e.style.setProperty("--mjr-star-active", fe.BADGE_STAR_COLOR), e.style.setProperty("--mjr-badge-image", fe.BADGE_IMAGE_COLOR), e.style.setProperty("--mjr-badge-video", fe.BADGE_VIDEO_COLOR), e.style.setProperty("--mjr-badge-audio", fe.BADGE_AUDIO_COLOR), e.style.setProperty("--mjr-badge-model3d", fe.BADGE_MODEL3D_COLOR), e.style.setProperty(
+ t("mjr-show-filename", he.GRID_SHOW_DETAILS_FILENAME), t("mjr-show-dimensions", he.GRID_SHOW_DETAILS_DIMENSIONS), t("mjr-show-date", he.GRID_SHOW_DETAILS_DATE), t("mjr-show-gentime", he.GRID_SHOW_DETAILS_GENTIME), t("mjr-show-hover-info", he.GRID_SHOW_HOVER_INFO), t("mjr-show-dot", he.GRID_SHOW_WORKFLOW_DOT), t("mjr-show-badges-ext", he.GRID_SHOW_BADGES_EXTENSION), t("mjr-show-badges-rating", he.GRID_SHOW_BADGES_RATING), t("mjr-show-badges-tags", he.GRID_SHOW_BADGES_TAGS), t("mjr-show-details", he.GRID_SHOW_DETAILS), e.style.setProperty("--mjr-grid-min-size", `${he.GRID_MIN_SIZE}px`), e.style.setProperty("--mjr-grid-gap", `${he.GRID_GAP}px`), e.style.setProperty("--mjr-star-active", he.BADGE_STAR_COLOR), e.style.setProperty("--mjr-badge-image", he.BADGE_IMAGE_COLOR), e.style.setProperty("--mjr-badge-video", he.BADGE_VIDEO_COLOR), e.style.setProperty("--mjr-badge-audio", he.BADGE_AUDIO_COLOR), e.style.setProperty("--mjr-badge-model3d", he.BADGE_MODEL3D_COLOR), e.style.setProperty(
"--mjr-badge-duplicate-alert",
- fe.BADGE_DUPLICATE_ALERT_COLOR
- ), e.style.setProperty("--mjr-card-hover-color", fe.UI_CARD_HOVER_COLOR), e.style.setProperty(
+ he.BADGE_DUPLICATE_ALERT_COLOR
+ ), e.style.setProperty("--mjr-card-hover-color", he.UI_CARD_HOVER_COLOR), e.style.setProperty(
"--mjr-card-selection-color",
- fe.UI_CARD_SELECTION_COLOR
- ), e.style.setProperty("--mjr-rating-color", fe.UI_RATING_COLOR), e.style.setProperty("--mjr-tag-color", fe.UI_TAG_COLOR);
+ he.UI_CARD_SELECTION_COLOR
+ ), e.style.setProperty("--mjr-rating-color", he.UI_RATING_COLOR), e.style.setProperty("--mjr-tag-color", he.UI_TAG_COLOR);
}
function eZ(e, { applySettingsClasses: t = !0 } = {}) {
var n, i;
@@ -8874,7 +8874,7 @@ function td(e, t, n = {}) {
function nZ(e) {
return zi(e, "_mjrPrepareForScopeSwitch");
}
-function GI(e) {
+function SI(e) {
var t, n;
try {
(t = e == null ? void 0 : e._mjrSettingsChangedCleanup) == null || t.call(e);
@@ -8892,7 +8892,7 @@ function oZ(e) {
function rZ(e, t) {
return zi(e, "_mjrRestoreAnchor", t);
}
-function ls(e, t, n = {}) {
+function as(e, t, n = {}) {
return zi(e, "_mjrRemoveAssets", t, n) ?? {
ok: !1,
removed: 0,
@@ -8927,27 +8927,27 @@ function sZ(e, t = {}) {
return cZ(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)";
}
const dZ = rg("mjr-runtime", () => {
- const e = Ae(null), t = Ae(null), n = Ae(!1), i = Ae(0), o = Ae(null), r = Ae(null), l = Ae(null), a = Ae(null), c = Ae(null), s = Ae([]), d = ze(() => !!o.value), u = ze(() => {
- const A = a.value, p = c.value;
- return !p || p <= 0 ? 0 : Math.round(A / p * 100);
+ const e = We(null), t = We(null), n = We(!1), i = We(0), o = We(null), r = We(null), l = We(null), a = We(null), c = We(null), s = We([]), d = ze(() => !!o.value), u = ze(() => {
+ const y = a.value, p = c.value;
+ return !p || p <= 0 ? 0 : Math.round(y / p * 100);
});
- function I(A) {
- e.value = A;
+ function I(y) {
+ e.value = y;
}
- function y(A) {
- t.value = A;
+ function A(y) {
+ t.value = y;
}
- function S(A, p) {
- n.value = !!A, i.value = Math.max(0, Number(p || 0) || 0);
+ function h(y, p) {
+ n.value = !!y, i.value = Math.max(0, Number(p || 0) || 0);
}
- function Z() {
+ function S() {
return {
active: n.value,
queueLength: i.value
};
}
- function C(A = {}) {
- A.active_prompt_id !== void 0 && (o.value = A.active_prompt_id), A.queue_remaining !== void 0 && (r.value = A.queue_remaining), A.progress_node !== void 0 && (l.value = A.progress_node), A.progress_value !== void 0 && (a.value = A.progress_value), A.progress_max !== void 0 && (c.value = A.progress_max), A.cached_nodes !== void 0 && (s.value = A.cached_nodes ?? []);
+ function W(y = {}) {
+ y.active_prompt_id !== void 0 && (o.value = y.active_prompt_id), y.queue_remaining !== void 0 && (r.value = y.queue_remaining), y.progress_node !== void 0 && (l.value = y.progress_node), y.progress_value !== void 0 && (a.value = y.progress_value), y.progress_max !== void 0 && (c.value = y.progress_max), y.cached_nodes !== void 0 && (s.value = y.cached_nodes ?? []);
}
function g() {
o.value = null, r.value = null, l.value = null, a.value = null, c.value = null, s.value = [];
@@ -8969,10 +8969,10 @@ const dZ = rg("mjr-runtime", () => {
progressPercent: u,
// actions
setComfyApp: I,
- setComfyApi: y,
- setEnrichmentState: S,
- getEnrichmentState: Z,
- applyExecutionStatus: C,
+ setComfyApi: A,
+ setEnrichmentState: h,
+ getEnrichmentState: S,
+ applyExecutionStatus: W,
resetExecution: g
};
});
@@ -8983,16 +8983,16 @@ function xI() {
return null;
}
}
-const Ol = Symbol.for("majoor.assets_manager.runtime_state");
+const Fl = Symbol.for("majoor.assets_manager.runtime_state");
function jI() {
try {
const e = typeof globalThis < "u" ? globalThis : {};
- return (!e[Ol] || typeof e[Ol] != "object") && (e[Ol] = {
+ return (!e[Fl] || typeof e[Fl] != "object") && (e[Fl] = {
api: null,
assetsDeletedHandler: null,
enrichmentActive: !1,
enrichmentQueueLength: 0
- }), e[Ol];
+ }), e[Fl];
} catch {
return {
api: null,
@@ -9011,7 +9011,7 @@ function vI(e, t) {
const i = jI();
i.enrichmentActive = !!e, i.enrichmentQueueLength = Math.max(0, Number(t || 0) || 0);
}
-function $a() {
+function ec() {
const e = xI();
if (e)
return e.getEnrichmentState();
@@ -9070,7 +9070,7 @@ function mZ(e, t) {
}
return 0;
}
-function VI(e) {
+function YI(e) {
if (!Array.isArray(e) || e.length === 0) return null;
if (e.length === 1) return e[0];
let t = e[0], n = Zu(t);
@@ -9080,7 +9080,7 @@ function VI(e) {
}
return t;
}
-function YI(e, t) {
+function VI(e, t) {
var r, l;
if (!e || !Array.isArray(t) || t.length === 0 || (Number((e == null ? void 0 : e.generation_time_ms) ?? ((r = e == null ? void 0 : e.metadata) == null ? void 0 : r.generation_time_ms) ?? 0) || 0) > 0) return e;
const i = t.find(
@@ -9099,7 +9099,7 @@ function nd(e, t) {
const i = /* @__PURE__ */ new Set(["PNG", "JPG", "JPEG", "WEBP", "GIF", "BMP", "TIF", "TIFF"]), o = /* @__PURE__ */ new Set(["MP4", "WEBM", "MOV", "AVI", "MKV"]), r = /* @__PURE__ */ new Set(["MP3", "WAV", "OGG", "FLAC"]), l = /* @__PURE__ */ new Set(["OBJ", "FBX", "GLB", "GLTF", "STL", "PLY", "SPLAT", "KSPLAT", "SPZ"]);
return i.has(t) ? "image" : o.has(t) ? "video" : r.has(t) ? "audio" : l.has(t) ? "model3d" : "unknown";
}
-function kI(e) {
+function XI(e) {
var t;
try {
const n = e();
@@ -9108,14 +9108,14 @@ function kI(e) {
return !1;
}
}
-function XI(e) {
+function NI(e) {
const t = String((e == null ? void 0 : e.source) || (e == null ? void 0 : e.type) || "").trim().toLowerCase(), n = String((e == null ? void 0 : e.root_id) || (e == null ? void 0 : e.custom_root_id) || "").trim().toLowerCase(), i = String((e == null ? void 0 : e.subfolder) || "").trim().toLowerCase();
return `${t}|${n}|${i}`;
}
-function NI(e, t = Va((e == null ? void 0 : e.filename) || "")) {
+function kI(e, t = Va((e == null ? void 0 : e.filename) || "")) {
const n = nd(e, t), i = String((e == null ? void 0 : e.filename) || "").trim();
if (!i) return "";
- const o = XI(e);
+ const o = NI(e);
if (n === "model3d")
return `${o}|model3d|${i.toLowerCase()}`;
const r = LI(i);
@@ -9131,7 +9131,7 @@ function RI(e) {
const o = e.seenKeys || /* @__PURE__ */ new Set();
return e.seenKeys = o, e.hiddenPngSiblings == null && (e.hiddenPngSiblings = 0), { nonImageSiblingKeys: t, stemMap: n, assetIdSet: i, seenKeys: o };
}
-function as(e, t, n) {
+function cs(e, t, n) {
var i, o, r;
try {
(t == null ? void 0 : t.id) != null && n.assetIdSet.delete(String(t.id));
@@ -9153,9 +9153,9 @@ function gZ(e, t, n, i) {
i(o[l]) && (r.push(o[l]), o.splice(l, 1));
return o.length || n.stemMap.delete(t), r;
}
-function FI(e, t, n) {
- if (!kI(n)) return { hidden: !1, hideEnabled: !1, removed: [] };
- const o = RI(t), r = String((e == null ? void 0 : e.filename) || ""), l = Va(r), a = nd(e, l), c = NI(e, l);
+function OI(e, t, n) {
+ if (!XI(n)) return { hidden: !1, hideEnabled: !1, removed: [] };
+ const o = RI(t), r = String((e == null ? void 0 : e.filename) || ""), l = Va(r), a = nd(e, l), c = kI(e, l);
if (!c) return { hidden: !1, hideEnabled: !0, removed: [] };
if (a === "video" || a === "audio" || a === "model3d")
return o.nonImageSiblingKeys.add(c), { hidden: !1, hideEnabled: !0, removed: gZ(
@@ -9165,77 +9165,77 @@ function FI(e, t, n) {
(d) => Va((d == null ? void 0 : d.filename) || "") === "PNG"
) };
if (l === "PNG") {
- const s = `${XI(e)}|model3d|${LI(r)}`;
+ const s = `${NI(e)}|model3d|${LI(r)}`;
if (o.nonImageSiblingKeys.has(c) || o.nonImageSiblingKeys.has(s))
return { hidden: !0, hideEnabled: !0, removed: [] };
}
return { hidden: !1, hideEnabled: !0, removed: [] };
}
function IZ(e, t, n, i) {
- var S, Z, C;
- const o = kI(i.loadMajoorSettings), r = n.filenameCounts || /* @__PURE__ */ new Map();
+ var h, S, W;
+ const o = XI(i.loadMajoorSettings), r = n.filenameCounts || /* @__PURE__ */ new Map();
n.filenameCounts = r, i.clearGridMessage(e);
const l = i.ensureVirtualGrid(e, n);
if (!l) return 0;
o || (n.hiddenPngSiblings = 0), n.assetKeyFn = i.assetKey;
const a = RI(n), c = /* @__PURE__ */ new Map();
for (const g of n.assets || []) {
- const A = fr(g == null ? void 0 : g.filename);
- if (!A) continue;
- let p = c.get(A);
- p || (p = [], c.set(A, p)), p.push(g);
+ const y = fr(g == null ? void 0 : g.filename);
+ if (!y) continue;
+ let p = c.get(y);
+ p || (p = [], c.set(y, p)), p.push(g);
}
let s = 0, d = !1;
- const u = [], I = /* @__PURE__ */ new Set(), y = () => {
- var g, A, p, b, L, h, G, W, f;
+ const u = [], I = /* @__PURE__ */ new Set(), A = () => {
+ var g, y, p, b, L, C, G, Z, f;
try {
const X = new Set(
(Array.isArray(n.assets) ? n.assets : []).map((x) => String((x == null ? void 0 : x.id) || "")).filter(Boolean)
);
- for (const [x, T] of c.entries()) {
- const v = (Array.isArray(T) ? T : []).filter((z) => {
- const B = String((z == null ? void 0 : z.id) || "");
- return B ? X.has(B) : !1;
- }), w = v.length;
+ for (const [x, K] of c.entries()) {
+ const j = (Array.isArray(K) ? K : []).filter((z) => {
+ const T = String((z == null ? void 0 : z.id) || "");
+ return T ? X.has(T) : !1;
+ }), w = j.length;
if (r.set(x, w), w < 2) {
- for (const B of v)
- B._mjrNameCollision = !1, delete B._mjrNameCollisionCount, delete B._mjrNameCollisionPaths, B._mjrDupStack && (B._mjrDupStack = !1, B._mjrDupMembers = null, B._mjrDupCount = 0);
+ for (const T of j)
+ T._mjrNameCollision = !1, delete T._mjrNameCollisionCount, delete T._mjrNameCollisionPaths, T._mjrDupStack && (T._mjrDupStack = !1, T._mjrDupMembers = null, T._mjrDupCount = 0);
const z = (g = n.renderedFilenameMap) == null ? void 0 : g.get(x);
if (z)
- for (const B of z) {
- const J = (A = B.querySelector) == null ? void 0 : A.call(B, ".mjr-file-badge");
+ for (const T of z) {
+ const J = (y = T.querySelector) == null ? void 0 : y.call(T, ".mjr-file-badge");
i.setFileBadgeCollision(J, !1);
try {
- (p = i.ensureDupStackCard) == null || p.call(i, e, B, B._mjrAsset);
+ (p = i.ensureDupStackCard) == null || p.call(i, e, T, T._mjrAsset);
} catch (P) {
(b = console.debug) == null || b.call(console, P);
}
}
continue;
}
- const R = YI(
- VI(v),
- v
- ), Y = v.filter((z) => z !== R);
- for (const z of v)
+ const R = VI(
+ YI(j),
+ j
+ ), V = j.filter((z) => z !== R);
+ for (const z of j)
z._mjrNameCollision = !1, delete z._mjrNameCollisionCount, delete z._mjrNameCollisionPaths, z !== R && (z._mjrDupStack = !1, z._mjrDupMembers = null, z._mjrDupCount = 0);
- const F = Array.isArray(R._mjrDupMembers) ? R._mjrDupMembers : [], N = new Set(F.map((z) => String((z == null ? void 0 : z.id) || ""))), V = [
- ...F,
- ...v.filter((z) => !N.has(String((z == null ? void 0 : z.id) || "")))
+ const O = Array.isArray(R._mjrDupMembers) ? R._mjrDupMembers : [], k = new Set(O.map((z) => String((z == null ? void 0 : z.id) || ""))), Y = [
+ ...O,
+ ...j.filter((z) => !k.has(String((z == null ? void 0 : z.id) || "")))
];
- R._mjrDupStack = !0, R._mjrDupMembers = V, R._mjrDupCount = V.length, R._mjrNameCollision = !1;
- const k = new Set(Y.map((z) => String((z == null ? void 0 : z.id) || "")));
- k.size > 0 && (n.assets = n.assets.filter((z) => !k.has(String((z == null ? void 0 : z.id) || ""))));
- const K = (L = n.renderedFilenameMap) == null ? void 0 : L.get(x);
- if (K)
- for (const z of K) {
- const B = z._mjrAsset, J = (h = z.querySelector) == null ? void 0 : h.call(z, ".mjr-file-badge");
- if (B === R || String((B == null ? void 0 : B.id) || "") === String((R == null ? void 0 : R.id) || "")) {
+ R._mjrDupStack = !0, R._mjrDupMembers = Y, R._mjrDupCount = Y.length, R._mjrNameCollision = !1;
+ const N = new Set(V.map((z) => String((z == null ? void 0 : z.id) || "")));
+ N.size > 0 && (n.assets = n.assets.filter((z) => !N.has(String((z == null ? void 0 : z.id) || ""))));
+ const U = (L = n.renderedFilenameMap) == null ? void 0 : L.get(x);
+ if (U)
+ for (const z of U) {
+ const T = z._mjrAsset, J = (C = z.querySelector) == null ? void 0 : C.call(z, ".mjr-file-badge");
+ if (T === R || String((T == null ? void 0 : T.id) || "") === String((R == null ? void 0 : R.id) || "")) {
i.setFileBadgeCollision(J, !1);
try {
(G = i.ensureDupStackCard) == null || G.call(i, e, z, R);
} catch (P) {
- (W = console.debug) == null || W.call(console, P);
+ (Z = console.debug) == null || Z.call(console, P);
}
}
}
@@ -9247,62 +9247,62 @@ function IZ(e, t, n, i) {
for (const g of t || []) {
try {
if ((g == null ? void 0 : g.id) == null || String(g.id).trim() === "") {
- const W = String((g == null ? void 0 : g.kind) || "").toLowerCase(), f = String((g == null ? void 0 : g.filepath) || "").trim(), X = String((g == null ? void 0 : g.subfolder) || "").trim(), x = String((g == null ? void 0 : g.filename) || "").trim(), v = `${String((g == null ? void 0 : g.type) || "").trim().toLowerCase()}|${W}|${f}|${X}|${x}`;
- g.id = `asset:${v || "unknown"}`;
+ const Z = String((g == null ? void 0 : g.kind) || "").toLowerCase(), f = String((g == null ? void 0 : g.filepath) || "").trim(), X = String((g == null ? void 0 : g.subfolder) || "").trim(), x = String((g == null ? void 0 : g.filename) || "").trim(), j = `${String((g == null ? void 0 : g.type) || "").trim().toLowerCase()}|${Z}|${f}|${X}|${x}`;
+ g.id = `asset:${j || "unknown"}`;
}
- } catch (W) {
- (S = console.debug) == null || S.call(console, W);
+ } catch (Z) {
+ (h = console.debug) == null || h.call(console, Z);
}
- const A = String((g == null ? void 0 : g.filename) || ""), p = Va(A), b = FI(g, n, i.loadMajoorSettings);
- for (const W of b.removed || []) I.add(W);
+ const y = String((g == null ? void 0 : g.filename) || ""), p = Va(y), b = OI(g, n, i.loadMajoorSettings);
+ for (const Z of b.removed || []) I.add(Z);
if (b.hidden) {
n.hiddenPngSiblings += 1;
continue;
}
- const L = fr(A);
+ const L = fr(y);
if (L) {
- let W = c.get(L);
- W || (W = [], c.set(L, W)), W.push(g);
+ let Z = c.get(L);
+ Z || (Z = [], c.set(L, Z)), Z.push(g);
}
- const h = i.assetKey(g);
- if (!h || a.seenKeys.has(h) || g.id != null && a.assetIdSet.has(String(g.id))) continue;
- a.seenKeys.add(h), g.id != null && a.assetIdSet.add(String(g.id)), u.push(g);
- const G = NI(g, p);
+ const C = i.assetKey(g);
+ if (!C || a.seenKeys.has(C) || g.id != null && a.assetIdSet.has(String(g.id))) continue;
+ a.seenKeys.add(C), g.id != null && a.assetIdSet.add(String(g.id)), u.push(g);
+ const G = kI(g, p);
if (G) {
- let W = a.stemMap.get(G);
- W || (W = [], a.stemMap.set(G, W)), W.push(g);
+ let Z = a.stemMap.get(G);
+ Z || (Z = [], a.stemMap.set(G, Z)), Z.push(g);
}
s++;
}
if (I.size > 0) {
n.hiddenPngSiblings += I.size, n.assets = n.assets.filter((g) => !I.has(g));
for (const g of I)
- as(n, g, a);
+ cs(n, g, a);
try {
for (const g of I) {
- const A = fr(g == null ? void 0 : g.filename);
- if (!A) continue;
- const p = c.get(A);
+ const y = fr(g == null ? void 0 : g.filename);
+ if (!y) continue;
+ const p = c.get(y);
if (!p) continue;
const b = p.indexOf(g);
- b > -1 && p.splice(b, 1), p.length || c.delete(A);
+ b > -1 && p.splice(b, 1), p.length || c.delete(y);
}
} catch (g) {
- (Z = console.debug) == null || Z.call(console, g);
+ (S = console.debug) == null || S.call(console, g);
}
d = !0;
}
- u.length > 0 && (n.assets.push(...u), d = !0), d && (y(), l.setItems(n.assets), n.sentinel && e.appendChild(n.sentinel));
+ u.length > 0 && (n.assets.push(...u), d = !0), d && (A(), l.setItems(n.assets), n.sentinel && e.appendChild(n.sentinel));
try {
e.dataset.mjrHidePngSiblingsEnabled = o ? "1" : "0", e.dataset.mjrHiddenPngSiblings = String(
Number(n.hiddenPngSiblings || 0) || 0
);
} catch (g) {
- (C = console.debug) == null || C.call(console, g);
+ (W = console.debug) == null || W.call(console, g);
}
return s;
}
-function OI({ ext: e = "", filename: t = "", count: n = 0, paths: i = [] } = {}) {
+function FI({ ext: e = "", filename: t = "", count: n = 0, paths: i = [] } = {}) {
const o = String(e || "").trim(), r = String(t || "").trim(), l = Math.max(0, Number(n) || 0), a = Array.isArray(i) ? i.map((s) => String(s || "").trim()).filter(Boolean) : [];
if (l < 2) return `${o} file`;
const c = [`${o}+ name collision in current view (${l})`];
@@ -9315,14 +9315,14 @@ function OI({ ext: e = "", filename: t = "", count: n = 0, paths: i = [] } = {})
`);
}
function bZ(e, t, n = !1, i = null) {
- var y, S, Z, C;
+ var A, h, S, W;
const o = document.createElement("div");
o.className = "mjr-file-badge";
- const r = ((S = (y = String(e || "").split(".").pop()) == null ? void 0 : y.toUpperCase) == null ? void 0 : S.call(y)) || "";
+ const r = ((h = (A = String(e || "").split(".").pop()) == null ? void 0 : A.toUpperCase) == null ? void 0 : h.call(A)) || "";
try {
o.dataset.mjrExt = r;
} catch (g) {
- (Z = console.debug) == null || Z.call(console, g);
+ (S = console.debug) == null || S.call(console, g);
}
const l = nd({ kind: t }, r), c = {
image: "--mjr-badge-image",
@@ -9330,7 +9330,7 @@ function bZ(e, t, n = !1, i = null) {
audio: "--mjr-badge-audio",
model3d: "--mjr-badge-model3d"
}[l], s = c ? `var(${c}, #607D8B)` : "#607D8B", d = "var(--mjr-badge-duplicate-alert, #ff1744)", u = s, I = n ? d : u;
- o.textContent = r + (n ? "+" : ""), o.title = n ? OI({
+ o.textContent = r + (n ? "+" : ""), o.title = n ? FI({
ext: r,
filename: e,
count: i == null ? void 0 : i.count,
@@ -9356,7 +9356,7 @@ function bZ(e, t, n = !1, i = null) {
try {
o.dataset.mjrBadgeBg = u;
} catch (g) {
- (C = console.debug) == null || C.call(console, g);
+ (W = console.debug) == null || W.call(console, g);
}
return o;
}
@@ -9365,7 +9365,7 @@ function pZ(e, t, n = null) {
if (e)
try {
const l = ((i = e.dataset) == null ? void 0 : i.mjrExt) || "", a = ((o = e.dataset) == null ? void 0 : o.mjrBadgeBg) || "var(--mjr-badge-image, #607D8B)", c = "var(--mjr-badge-duplicate-alert, #ff1744)";
- e.textContent = String(l || "") + (t ? "+" : ""), e.title = t ? OI({
+ e.textContent = String(l || "") + (t ? "+" : ""), e.title = t ? FI({
ext: l,
filename: (n == null ? void 0 : n.filename) || "",
count: n == null ? void 0 : n.count,
@@ -9403,7 +9403,7 @@ function fZ(e) {
}
return !0;
}
-function hZ(e) {
+function CZ(e) {
const t = qo(e, [
"auto_tags",
"autoTags",
@@ -9446,35 +9446,35 @@ function hZ(e) {
), a = i === !0 || i === null && fZ(t), c = o === !0 || o === null && yZ(n), s = r === !0 || l === !0;
return { hasAiInfo: l === !0 || a || c || s, hasAutoTags: a, hasEnhancedPrompt: c, hasVectorIndexed: s };
}
-function ec(e) {
- var y, S;
+function tc(e) {
+ var A, h;
const t = document.createElement("span");
t.className = "mjr-workflow-dot mjr-asset-status-dot";
- const n = mr((e == null ? void 0 : e.has_workflow) ?? (e == null ? void 0 : e.hasWorkflow)), i = mr((e == null ? void 0 : e.has_generation_data) ?? (e == null ? void 0 : e.hasGenerationData)), o = $a(), r = o.queueLength, l = o.active || r > 0;
+ const n = mr((e == null ? void 0 : e.has_workflow) ?? (e == null ? void 0 : e.hasWorkflow)), i = mr((e == null ? void 0 : e.has_generation_data) ?? (e == null ? void 0 : e.hasGenerationData)), o = ec(), r = o.queueLength, l = o.active || r > 0;
let a = "Pending: parsing metadata…";
const c = n === !0 || i === !0, s = n === !1 || i === !1, d = n === null || i === null;
n === !0 && i === !0 ? a = "Complete: workflow + generation data detected" : c ? a = n === !0 ? "Partial: workflow only (generation data missing)" : "Partial: generation data only (workflow missing)" : s && !c && !d ? a = "None: no workflow or generation data found" : d && (a = "Pending: metadata not parsed yet");
let u = d ? "pending" : n === !0 && i === !0 ? "success" : c ? "warning" : "error";
l && u !== "success" && (u = "pending", a = r > 0 ? `Pending: database metadata enrichment in progress (${r} queued)` : "Pending: database metadata enrichment in progress"), aa(t, u, a, { asset: e });
- const I = hZ(e);
+ const I = CZ(e);
if (I.hasAiInfo) {
- const Z = [];
- I.hasVectorIndexed && Z.push("vector indexed"), I.hasAutoTags && Z.push("AI tag suggestions"), I.hasEnhancedPrompt && Z.push("enhanced prompt"), t.textContent = "";
- const C = document.createElement("i");
- C.className = "pi pi-sparkles", C.setAttribute("aria-hidden", "true"), C.style.fontSize = "11px", C.style.lineHeight = "1", t.appendChild(C);
+ const S = [];
+ I.hasVectorIndexed && S.push("vector indexed"), I.hasAutoTags && S.push("AI tag suggestions"), I.hasEnhancedPrompt && S.push("enhanced prompt"), t.textContent = "";
+ const W = document.createElement("i");
+ W.className = "pi pi-sparkles", W.setAttribute("aria-hidden", "true"), W.style.fontSize = "11px", W.style.lineHeight = "1", t.appendChild(W);
try {
t.dataset.mjrAi = "1";
} catch (g) {
- (y = console.debug) == null || y.call(console, g);
+ (A = console.debug) == null || A.call(console, g);
}
t.title = `${a}
-AI: ${Z.length ? Z.join(", ") : "indexed"}
+AI: ${S.length ? S.join(", ") : "indexed"}
Click to rescan this file`;
} else {
try {
t.dataset.mjrAi = "0";
- } catch (Z) {
- (S = console.debug) == null || S.call(console, Z);
+ } catch (S) {
+ (h = console.debug) == null || h.call(console, S);
}
t.textContent = "●", t.title = `${a}
Click to rescan this file`;
@@ -9507,7 +9507,7 @@ function aa(e, t, n = "", i = {}) {
(a = console.debug) == null || a.call(console, c);
}
}
-function Ya(e) {
+function Xa(e) {
const t = Math.max(0, Math.min(5, Number(e) || 0));
if (t <= 0) return null;
const n = document.createElement("div");
@@ -9535,7 +9535,7 @@ function Ya(e) {
}
return n;
}
-function CZ(e) {
+function hZ(e) {
if (Array.isArray(e))
return e.map((t) => String(t ?? "").trim()).filter(Boolean);
if (typeof e == "string") {
@@ -9592,7 +9592,7 @@ function od(e, { maxMs: t = 864e5 } = {}) {
function JI(e) {
const t = document.createElement("div");
t.className = "mjr-tags-badge";
- const n = CZ(e);
+ const n = hZ(e);
return n.length === 0 ? (t.style.display = "none", t) : (t.textContent = n.join(", "), t.title = `Tags: ${n.join(", ")}`, t.style.cssText = `
position: absolute;
bottom: 6px;
@@ -9647,7 +9647,7 @@ function WZ(e) {
async function rd({ x: e, y: t, assets: n }) {
const i = Array.isArray(n) ? n.map(WZ).filter(Boolean) : [];
if (!i.length) {
- Ze(m("toast.noValidAssetsSelected", "No valid assets selected."), "warning");
+ Ae(m("toast.noValidAssetsSelected", "No valid assets selected."), "warning");
return;
}
AZ({
@@ -9656,8 +9656,8 @@ async function rd({ x: e, y: t, assets: n }) {
assets: i
});
}
-async function cs(e, t) {
- if (!fe.DELETE_CONFIRMATION) return !0;
+async function ss(e, t) {
+ if (!he.DELETE_CONFIRMATION) return !0;
const n = e > 1 ? m("dialog.deleteSelectedFiles", "Delete {count} selected files?", { count: e }) : m("dialog.deleteSingleFile", 'Delete "{label}"?', {
label: String(t || m("label.thisFile", "this file"))
});
@@ -9734,7 +9734,7 @@ function ad(e, t) {
return !Wu(n).ext && i.ext ? `${n}${i.ext}` : n;
}
const MZ = 350, yl = /* @__PURE__ */ new Map();
-function SZ(e) {
+function GZ(e) {
var n, i, o, r;
const t = yl.get(e);
if (t) {
@@ -9751,14 +9751,14 @@ function SZ(e) {
yl.delete(e);
}
}
-function BI(e) {
- e && SZ(String(e));
+function KI(e) {
+ e && GZ(String(e));
}
-function UI() {
+function BI() {
for (const e of Array.from(yl.keys()))
- BI(e);
+ KI(e);
}
-function KI(e, t, {
+function UI(e, t, {
onSuccess: n,
onFailure: i,
successMessage: o = null,
@@ -9766,16 +9766,16 @@ function KI(e, t, {
warnPrefix: l = "[RatingUpdater]"
} = {}) {
if (!e) return;
- BI(e);
+ KI(e);
const a = new AbortController(), c = setTimeout(async () => {
yl.delete(String(e));
try {
- const s = await Ho(e, t, { signal: a.signal });
+ const s = await Eo(e, t, { signal: a.signal });
if (!(s != null && s.ok)) {
- Ze((s == null ? void 0 : s.error) || r || "Failed to update rating", "error"), i == null || i(s);
+ Ae((s == null ? void 0 : s.error) || r || "Failed to update rating", "error"), i == null || i(s);
return;
}
- o && Ze(o, "success", 1500), n == null || n(s);
+ o && Ae(o, "success", 1500), n == null || n(s);
} catch (s) {
ai(s, l, { showToast: !0 }), i == null || i(s);
}
@@ -9791,7 +9791,7 @@ function wu() {
title: ""
};
}
-const Kt = Vs({
+const Bt = Vs({
portalOwnerId: "",
mountedPortalIds: [],
main: wu(),
@@ -9804,7 +9804,7 @@ const Kt = Vs({
onChanged: null
}
});
-let GZ = 1;
+let SZ = 1;
function DI(e) {
e && (e.open = !1, e.x = 0, e.y = 0, e.items = [], e.title = "");
}
@@ -9819,40 +9819,40 @@ function xZ(e = "") {
}
}
function jZ() {
- const e = `mjr-viewer-context-menu-portal-${GZ++}`;
- return Kt.mountedPortalIds.push(e), Kt.portalOwnerId || (Kt.portalOwnerId = e), e;
+ const e = `mjr-viewer-context-menu-portal-${SZ++}`;
+ return Bt.mountedPortalIds.push(e), Bt.portalOwnerId || (Bt.portalOwnerId = e), e;
}
function vZ(e) {
- const t = Kt.mountedPortalIds.filter((n) => n !== e);
- Kt.mountedPortalIds.splice(
+ const t = Bt.mountedPortalIds.filter((n) => n !== e);
+ Bt.mountedPortalIds.splice(
0,
- Kt.mountedPortalIds.length,
+ Bt.mountedPortalIds.length,
...t
- ), Kt.portalOwnerId === e && (Kt.portalOwnerId = Kt.mountedPortalIds[0] || "");
+ ), Bt.portalOwnerId === e && (Bt.portalOwnerId = Bt.mountedPortalIds[0] || "");
}
function LZ(e) {
- return String(Kt.portalOwnerId || "") === String(e || "");
-}
-function VZ({ x: e = 0, y: t = 0, items: n = [], title: i = "" } = {}) {
- xZ("viewer"), HI(), gr(), Kt.main.open = !0, Kt.main.x = Number(e) || 0, Kt.main.y = Number(t) || 0, Kt.main.items = Array.isArray(n) ? n.filter(Boolean) : [], Kt.main.title = String(i || "");
-}
-function EI() {
- DI(Kt.main), gr();
+ return String(Bt.portalOwnerId || "") === String(e || "");
}
function YZ({ x: e = 0, y: t = 0, items: n = [], title: i = "" } = {}) {
- Kt.submenu.open = !0, Kt.submenu.x = Number(e) || 0, Kt.submenu.y = Number(t) || 0, Kt.submenu.items = Array.isArray(n) ? n.filter(Boolean) : [], Kt.submenu.title = String(i || "");
-}
-function gr() {
- DI(Kt.submenu);
-}
-function kZ({ x: e = 0, y: t = 0, asset: n = null, onChanged: i = null } = {}) {
- EI(), Kt.tags.open = !!n, Kt.tags.x = Number(e) || 0, Kt.tags.y = Number(t) || 0, Kt.tags.asset = n || null, Kt.tags.onChanged = typeof i == "function" ? i : null;
+ xZ("viewer"), EI(), gr(), Bt.main.open = !0, Bt.main.x = Number(e) || 0, Bt.main.y = Number(t) || 0, Bt.main.items = Array.isArray(n) ? n.filter(Boolean) : [], Bt.main.title = String(i || "");
}
function HI() {
- Kt.tags.open = !1, Kt.tags.x = 0, Kt.tags.y = 0, Kt.tags.asset = null, Kt.tags.onChanged = null;
+ DI(Bt.main), gr();
+}
+function VZ({ x: e = 0, y: t = 0, items: n = [], title: i = "" } = {}) {
+ Bt.submenu.open = !0, Bt.submenu.x = Number(e) || 0, Bt.submenu.y = Number(t) || 0, Bt.submenu.items = Array.isArray(n) ? n.filter(Boolean) : [], Bt.submenu.title = String(i || "");
+}
+function gr() {
+ DI(Bt.submenu);
+}
+function XZ({ x: e = 0, y: t = 0, asset: n = null, onChanged: i = null } = {}) {
+ HI(), Bt.tags.open = !!n, Bt.tags.x = Number(e) || 0, Bt.tags.y = Number(t) || 0, Bt.tags.asset = n || null, Bt.tags.onChanged = typeof i == "function" ? i : null;
+}
+function EI() {
+ Bt.tags.open = !1, Bt.tags.x = 0, Bt.tags.y = 0, Bt.tags.asset = null, Bt.tags.onChanged = null;
}
function Lo() {
- EI(), HI();
+ HI(), EI();
}
const mo = {
COPY_PATH: "Ctrl+Shift+C",
@@ -9864,9 +9864,9 @@ const mo = {
RENAME: "F2",
DELETE: "Del"
}, Mu = ["B", "KB", "MB", "GB", "TB"], ca = /* @__PURE__ */ new WeakMap();
-let XZ = 1;
+let NZ = 1;
function qI(e = "viewer-menu-item") {
- return `${e}-${XZ++}`;
+ return `${e}-${NZ++}`;
}
function ji(e, t, n, i, o = {}) {
return {
@@ -9887,7 +9887,7 @@ function sa() {
type: "separator"
};
}
-function NZ(e) {
+function kZ(e) {
const t = String(e || "").trim();
if (!t) return !1;
if (t.startsWith("/")) return !0;
@@ -9898,7 +9898,7 @@ function NZ(e) {
return !1;
}
}
-function Su(e, t, n) {
+function Gu(e, t, n) {
var o, r;
const i = e == null ? void 0 : e.id;
try {
@@ -9912,13 +9912,13 @@ function Su(e, t, n) {
(r = console.debug) == null || r.call(console, l);
}
if (i) {
- KI(String(i), t, {
+ UI(String(i), t, {
successMessage: t > 0 ? `Rating set to ${t} stars` : "Rating cleared",
errorMessage: "Failed to update rating",
warnPrefix: "[ViewerContextMenu]",
onSuccess: () => {
oi(
- Fi,
+ Oi,
{ assetId: String(i), rating: t },
{ warnPrefix: "[ViewerContextMenu]" }
);
@@ -9929,7 +9929,7 @@ function Su(e, t, n) {
});
return;
}
- Ho(e, t).catch((l) => {
+ Eo(e, t).catch((l) => {
ai(l, "[ViewerContextMenu] Rating update", { showToast: !0 });
});
}
@@ -9941,14 +9941,14 @@ function RZ(e) {
t /= 1024, n += 1;
return `${n === 0 ? `${Math.round(t)}` : t.toFixed(2)} ${Mu[n]}`;
}
-function FZ(e, t, n) {
+function OZ(e, t, n) {
const i = [5, 4, 3, 2, 1].map(
(o) => ji(
`${o} Stars`,
"pi pi-star",
null,
async () => {
- Su(e, o, t);
+ Gu(e, o, t);
},
{ disabled: !n }
)
@@ -9959,26 +9959,26 @@ function FZ(e, t, n) {
"pi pi-star",
"0",
async () => {
- Su(e, 0, t);
+ Gu(e, 0, t);
},
{ disabled: !n }
)
), i;
}
-function OZ({
+function FZ({
asset: e,
event: t,
getCurrentViewUrl: n,
onAssetChanged: i
}) {
- const o = typeof n == "function" ? n(e) : Ki(e), r = !!(e != null && e.id || e != null && e.filepath);
+ const o = typeof n == "function" ? n(e) : Ui(e), r = !!(e != null && e.id || e != null && e.filepath);
return [
ji(
m("ctx.openInNewTab", "Open in New Tab"),
"pi pi-external-link",
null,
async () => {
- NZ(o) && window.open(o, "_blank", "noopener,noreferrer");
+ kZ(o) && window.open(o, "_blank", "noopener,noreferrer");
}
),
ji(
@@ -9988,13 +9988,13 @@ function OZ({
async () => {
const a = e != null && e.filepath ? String(e.filepath) : "";
if (!a) {
- Ze(m("toast.noFilePath"), "error");
+ Ae(m("toast.noFilePath"), "error");
return;
}
try {
- await navigator.clipboard.writeText(a), Ze(m("toast.pathCopied"), "success", 2e3);
+ await navigator.clipboard.writeText(a), Ae(m("toast.pathCopied"), "success", 2e3);
} catch (c) {
- console.error("[ViewerContextMenu] Copy failed:", c), Ze(m("toast.pathCopyFailed"), "error");
+ console.error("[ViewerContextMenu] Copy failed:", c), Ae(m("toast.pathCopyFailed"), "error");
}
}
),
@@ -10005,7 +10005,7 @@ function OZ({
async () => {
if (!e || !e.filepath) return;
const a = Ea(e.filepath), c = document.createElement("a");
- c.href = a, c.download = e.filename, document.body.appendChild(c), c.click(), document.body.removeChild(c), Ze(
+ c.href = a, c.download = e.filename, document.body.appendChild(c), c.click(), document.body.removeChild(c), Ae(
m("toast.downloadingFile", "Downloading {filename}...", {
filename: e.filename
}),
@@ -10020,8 +10020,8 @@ function OZ({
"pi pi-folder-open",
mo.OPEN_IN_FOLDER,
async () => {
- const a = await zs(e);
- a != null && a.ok ? Ze(m("toast.openedInFolder"), "info", 2e3) : Ze((a == null ? void 0 : a.error) || m("toast.openFolderFailed"), "error");
+ const a = await Js(e);
+ a != null && a.ok ? Ae(m("toast.openedInFolder"), "info", 2e3) : Ae((a == null ? void 0 : a.error) || m("toast.openFolderFailed"), "error");
},
{ disabled: !(e != null && e.id || e != null && e.filepath) }
),
@@ -10047,7 +10047,7 @@ function OZ({
"pi pi-tags",
mo.EDIT_TAGS,
async () => {
- kZ({
+ XZ({
x: (Number(t == null ? void 0 : t.clientX) || 0) + 6,
y: (Number(t == null ? void 0 : t.clientY) || 0) + 6,
asset: e,
@@ -10077,7 +10077,7 @@ function OZ({
{
disabled: !r,
closeOnSelect: !1,
- submenu: FZ(e, i, r)
+ submenu: OZ(e, i, r)
}
),
ji(
@@ -10090,7 +10090,7 @@ function OZ({
try {
const c = await Dg(e.id, { refresh: !0 });
if (!(c != null && c.ok) || !(c != null && c.data)) {
- Ze(
+ Ae(
(c == null ? void 0 : c.error) || m("toast.metadataRefreshFailed", "Failed to refresh metadata."),
"error"
);
@@ -10103,13 +10103,13 @@ function OZ({
{ assetId: String(e.id), info: s },
{ warnPrefix: "[ViewerContextMenu]" }
);
- } catch (y) {
- (a = console.debug) == null || a.call(console, y);
+ } catch (A) {
+ (a = console.debug) == null || a.call(console, A);
}
const d = [], u = RZ(s == null ? void 0 : s.size_bytes);
u && d.push(u), s != null && s.mime && d.push(s.mime);
const I = d.length ? ` (${d.join(", ")})` : "";
- Ze(
+ Ae(
m("toast.metadataRefreshed", "Metadata refreshed{suffix}", { suffix: I }),
"success",
3e3
@@ -10130,42 +10130,42 @@ function OZ({
async () => {
var u, I;
if (!(e != null && e.id || e != null && e.filepath)) return;
- const a = e.filename || "", c = await Vi(
+ const a = e.filename || "", c = await Yi(
m("dialog.rename.title", "Rename file"),
a
), s = ad(c, a);
if (!s || s === a) return;
const d = ld(s);
if (!d.valid) {
- Ze(d.reason, "error");
+ Ae(d.reason, "error");
return;
}
try {
- const y = await Js(e, s);
- if (y != null && y.ok) {
- const S = (u = y == null ? void 0 : y.data) == null ? void 0 : u.asset;
- S && typeof S == "object" ? Object.assign(e, S) : (e.filename = s, e.filepath = e.filepath.replace(/[^\\/]+$/, s), e.path && (e.path = String(e.path).replace(/[^\\/]+$/, s)), e.file_info && typeof e.file_info == "object" && (e.file_info.filename = s, e.file_info.filepath && (e.file_info.filepath = String(
+ const A = await Ts(e, s);
+ if (A != null && A.ok) {
+ const h = (u = A == null ? void 0 : A.data) == null ? void 0 : u.asset;
+ h && typeof h == "object" ? Object.assign(e, h) : (e.filename = s, e.filepath = e.filepath.replace(/[^\\/]+$/, s), e.path && (e.path = String(e.path).replace(/[^\\/]+$/, s)), e.file_info && typeof e.file_info == "object" && (e.file_info.filename = s, e.file_info.filepath && (e.file_info.filepath = String(
e.file_info.filepath
).replace(/[^\\/]+$/, s)), e.file_info.path && (e.file_info.path = String(e.file_info.path).replace(
/[^\\/]+$/,
s
- )))), Ze(m("toast.fileRenamedSuccess"), "success");
+ )))), Ae(m("toast.fileRenamedSuccess"), "success");
try {
window.dispatchEvent(
new CustomEvent("mjr:reload-grid", {
detail: { reason: "viewer-rename" }
})
);
- } catch (Z) {
- (I = console.debug) == null || I.call(console, Z);
+ } catch (S) {
+ (I = console.debug) == null || I.call(console, S);
}
i == null || i();
} else
- Ze((y == null ? void 0 : y.error) || m("toast.fileRenameFailed"), "error");
- } catch (y) {
- Ze(
+ Ae((A == null ? void 0 : A.error) || m("toast.fileRenameFailed"), "error");
+ } catch (A) {
+ Ae(
m("toast.errorRenaming", "Error renaming file: {error}", {
- error: (y == null ? void 0 : y.message) || String(y || "")
+ error: (A == null ? void 0 : A.message) || String(A || "")
}),
"error"
);
@@ -10178,12 +10178,12 @@ function OZ({
"pi pi-trash",
mo.DELETE,
async () => {
- if (!(!(e != null && e.id || e != null && e.filepath) || !await cs(1, e == null ? void 0 : e.filename)))
+ if (!(!(e != null && e.id || e != null && e.filepath) || !await ss(1, e == null ? void 0 : e.filename)))
try {
- const c = await Sa(e);
- c != null && c.ok ? (Ze(m("toast.fileDeletedSuccess"), "success"), i == null || i()) : Ze((c == null ? void 0 : c.error) || m("toast.fileDeleteFailed"), "error");
+ const c = await Ga(e);
+ c != null && c.ok ? (Ae(m("toast.fileDeletedSuccess"), "success"), i == null || i()) : Ae((c == null ? void 0 : c.error) || m("toast.fileDeleteFailed"), "error");
} catch (c) {
- Ze(
+ Ae(
m("toast.errorDeleting", "Error deleting file: {error}", {
error: (c == null ? void 0 : c.message) || String(c || "")
}),
@@ -10209,10 +10209,10 @@ function zZ({
if (!e.contains(a.target)) return;
a.preventDefault(), a.stopPropagation();
const c = t();
- c && VZ({
+ c && YZ({
x: a.clientX,
y: a.clientY,
- items: OZ({
+ items: FZ({
asset: c,
event: a,
getCurrentViewUrl: n,
@@ -10233,7 +10233,7 @@ function zZ({
(a = console.debug) == null || a.call(console, d);
}
try {
- UI();
+ BI();
const d = globalThis == null ? void 0 : globalThis._ratingDebounceTimers;
d && typeof d.clear == "function" && d.clear();
} catch (d) {
@@ -10259,14 +10259,14 @@ function JZ(e) {
}
const eo = () => {
};
-function ss(e) {
+function ds(e) {
try {
- return !!(fe != null && fe[e]);
+ return !!(he != null && he[e]);
} catch {
return !1;
}
}
-function ds(e, t) {
+function us(e, t) {
var n;
try {
console.warn(`[Majoor] ${e}`, t);
@@ -10274,15 +10274,15 @@ function ds(e, t) {
(n = console.debug) == null || n.call(console, i);
}
}
-function bt(e, t = "safeCall") {
+function It(e, t = "safeCall") {
try {
return e == null ? void 0 : e();
} catch (n) {
- ss("DEBUG_SAFE_CALL") && ds(t, n);
+ ds("DEBUG_SAFE_CALL") && us(t, n);
return;
}
}
-function Qe(e, t, n, i, o = "safeAddListener") {
+function $e(e, t, n, i, o = "safeAddListener") {
var r;
try {
return (r = e == null ? void 0 : e.addEventListener) == null || r.call(e, t, n, i), () => {
@@ -10290,14 +10290,14 @@ function Qe(e, t, n, i, o = "safeAddListener") {
try {
(l = e == null ? void 0 : e.removeEventListener) == null || l.call(e, t, n, i);
} catch (a) {
- ss("DEBUG_SAFE_LISTENERS") && ds(`${o}:remove:${String(t || "")}`, a);
+ ds("DEBUG_SAFE_LISTENERS") && us(`${o}:remove:${String(t || "")}`, a);
}
};
} catch (l) {
- return ss("DEBUG_SAFE_LISTENERS") && ds(`${o}:add:${String(t || "")}`, l), eo;
+ return ds("DEBUG_SAFE_LISTENERS") && us(`${o}:add:${String(t || "")}`, l), eo;
}
}
-function In(e) {
+function pn(e) {
const t = Number(e);
return Number.isFinite(t) ? Math.max(0, Math.min(1, t)) : 0;
}
@@ -10402,7 +10402,7 @@ function QI(e, t) {
}
return null;
}
-function BZ(e) {
+function KZ(e) {
const t = Number(e);
return !Number.isFinite(t) || t <= 0 ? "" : Math.abs(t - Math.round(t)) < 1e-3 ? `${Math.round(t)} fps` : `${t.toFixed(3).replace(/\.?0+$/, "")} fps`;
}
@@ -10412,8 +10412,8 @@ function Qi(e, t = 30) {
const i = yo(t);
return i != null ? Math.max(1, Math.round(i * 1e3) / 1e3) : 30;
}
-const UZ = 400, KZ = 1e3, DZ = 220;
-function EZ(e, t, n) {
+const BZ = 400, UZ = 1e3, DZ = 220;
+function HZ(e, t, n) {
var i, o;
try {
if (e != null && e.aborted) return eo;
@@ -10462,7 +10462,7 @@ function hc(e) {
const t = Math.floor(Number(e) || 0);
return t < 10 ? `0${t}` : String(t);
}
-function Gu(e) {
+function Su(e) {
const t = Number(e);
if (!Number.isFinite(t) || t < 0) return "0:00";
const n = Math.floor(t), i = Math.floor(n / 3600), o = Math.floor(n % 3600 / 60), r = n % 60;
@@ -10495,7 +10495,7 @@ function zl(e, { min: t, max: n, step: i, value: o, title: r, ariaLabel: l, widt
const c = document.createElement("input");
return c.type = "number", c.className = `mjr-video-num ${e || ""}`.trim(), r && (c.title = r), l && c.setAttribute("aria-label", l), t != null && (c.min = String(t)), n != null && (c.max = String(n)), i != null && (c.step = String(i)), o != null && (c.value = String(o)), a != null && (c.style.width = `${a}px`), c;
}
-function HZ(e) {
+function EZ(e) {
try {
return (e == null ? void 0 : e.variant) === "preview" ? "preview" : (e == null ? void 0 : e.variant) === "viewerbar" ? "viewerbar" : "viewer";
} catch {
@@ -10511,58 +10511,58 @@ function qZ(e) {
}
}
function PZ(e, t) {
- var s, d, u, I, y, S, Z;
+ var s, d, u, I, A, h, S;
const n = [];
try {
e.controls = !1, e.loop = !0, e.muted = !0, e.playsInline = !0, e.autoplay = !0;
- } catch (C) {
- (s = console.debug) == null || s.call(console, C);
+ } catch (W) {
+ (s = console.debug) == null || s.call(console, W);
}
const i = document.createElement("div");
i.className = "mjr-video-controls mjr-video-controls--preview";
try {
i.setAttribute("role", "group"), i.setAttribute("aria-label", m("video.previewControls", "Video preview controls"));
- } catch (C) {
- (d = console.debug) == null || d.call(console, C);
+ } catch (W) {
+ (d = console.debug) == null || d.call(console, W);
}
const o = document.createElement("button");
o.type = "button", o.className = "mjr-video-preview-btn", o.title = m("video.playPause", "Play/Pause");
try {
o.setAttribute("aria-label", m("video.playPause", "Play/Pause"));
- } catch (C) {
- (u = console.debug) == null || u.call(console, C);
+ } catch (W) {
+ (u = console.debug) == null || u.call(console, W);
}
const r = document.createElement("span");
r.className = "pi pi-play";
try {
r.setAttribute("aria-hidden", "true");
- } catch (C) {
- (I = console.debug) == null || I.call(console, C);
+ } catch (W) {
+ (I = console.debug) == null || I.call(console, W);
}
o.appendChild(r), i.appendChild(o);
const l = () => {
- var C;
+ var W;
try {
const g = !!(e != null && e.paused);
r.className = `pi ${g ? "pi-play" : "pi-pause"}`;
} catch (g) {
- (C = console.debug) == null || C.call(console, g);
+ (W = console.debug) == null || W.call(console, g);
}
}, a = () => {
- var C, g;
+ var W, g;
try {
- const A = (C = e.play) == null ? void 0 : C.call(e);
- A && typeof A.catch == "function" && A.catch(() => {
+ const y = (W = e.play) == null ? void 0 : W.call(e);
+ y && typeof y.catch == "function" && y.catch(() => {
});
- } catch (A) {
- (g = console.debug) == null || g.call(console, A);
+ } catch (y) {
+ (g = console.debug) == null || g.call(console, y);
}
- }, c = (C) => {
- var g, A, p, b;
+ }, c = (W) => {
+ var g, y, p, b;
try {
- (g = C == null ? void 0 : C.stopPropagation) == null || g.call(C);
+ (g = W == null ? void 0 : W.stopPropagation) == null || g.call(W);
} catch (L) {
- (A = console.debug) == null || A.call(console, L);
+ (y = console.debug) == null || y.call(console, L);
}
try {
e.paused ? a() : (p = e.pause) == null || p.call(e);
@@ -10573,239 +10573,239 @@ function PZ(e, t) {
};
try {
t.appendChild(i);
- } catch (C) {
- (y = console.debug) == null || y.call(console, C);
+ } catch (W) {
+ (A = console.debug) == null || A.call(console, W);
}
try {
a();
- } catch (C) {
- (S = console.debug) == null || S.call(console, C);
+ } catch (W) {
+ (h = console.debug) == null || h.call(console, W);
}
- n.push(Qe(e, "loadedmetadata", () => a(), { passive: !0 })), n.push(Qe(e, "canplay", () => a(), { passive: !0 })), n.push(Qe(o, "click", c)), n.push(Qe(e, "play", l, { passive: !0 })), n.push(Qe(e, "pause", l, { passive: !0 })), n.push(Qe(e, "ended", () => a(), { passive: !0 }));
+ n.push($e(e, "loadedmetadata", () => a(), { passive: !0 })), n.push($e(e, "canplay", () => a(), { passive: !0 })), n.push($e(o, "click", c)), n.push($e(e, "play", l, { passive: !0 })), n.push($e(e, "pause", l, { passive: !0 })), n.push($e(e, "ended", () => a(), { passive: !0 }));
try {
l();
- } catch (C) {
- (Z = console.debug) == null || Z.call(console, C);
+ } catch (W) {
+ (S = console.debug) == null || S.call(console, W);
}
return {
controlsEl: i,
destroy: () => {
- var C, g, A;
+ var W, g, y;
try {
- for (const p of n) bt(() => p == null ? void 0 : p());
+ for (const p of n) It(() => p == null ? void 0 : p());
} catch (p) {
- (C = console.debug) == null || C.call(console, p);
+ (W = console.debug) == null || W.call(console, p);
}
try {
(g = i.remove) == null || g.call(i);
} catch (p) {
- (A = console.debug) == null || A.call(console, p);
+ (y = console.debug) == null || y.call(console, p);
}
}
};
}
function _I(e, t = {}) {
- var n, i, o, r, l, a, c;
+ var n, i, o, r, l, a, c, s;
try {
- const s = HZ(t), u = String((t == null ? void 0 : t.mediaKind) || "video").toLowerCase() === "audio", I = s === "viewerbar", y = s !== "preview" && !u, S = !0, Z = qZ(t), C = (t == null ? void 0 : t.hostEl) || (e == null ? void 0 : e.parentElement);
- if (!e || !C) return { controlsEl: null, destroy: eo };
- if (s === "preview")
- return PZ(e, C);
+ const d = EZ(t), I = String((t == null ? void 0 : t.mediaKind) || "video").toLowerCase() === "audio", A = d === "viewerbar", h = d !== "preview" && !I, S = !0, W = qZ(t), g = (t == null ? void 0 : t.hostEl) || (e == null ? void 0 : e.parentElement);
+ if (!e || !g) return { controlsEl: null, destroy: eo };
+ if (d === "preview")
+ return PZ(e, g);
try {
e.loop = !1;
- } catch (re) {
- (n = console.debug) == null || n.call(console, re);
+ } catch (oe) {
+ (n = console.debug) == null || n.call(console, oe);
}
- bt(() => {
- var re;
- return (re = C.classList) == null ? void 0 : re.add("mjr-video-host");
- }), bt(() => {
- var re;
- return (re = e.classList) == null ? void 0 : re.add("mjr-video-el");
- }), bt(() => {
- var ne;
- const re = (ne = window.getComputedStyle) == null ? void 0 : ne.call(window, C);
- (re == null ? void 0 : re.position) === "static" && (C.style.position = "relative");
+ It(() => {
+ var oe;
+ return (oe = g.classList) == null ? void 0 : oe.add("mjr-video-host");
+ }), It(() => {
+ var oe;
+ return (oe = e.classList) == null ? void 0 : oe.add("mjr-video-el");
+ }), It(() => {
+ var se;
+ const oe = (se = window.getComputedStyle) == null ? void 0 : se.call(window, g);
+ (oe == null ? void 0 : oe.position) === "static" && (g.style.position = "relative");
});
- const g = document.createElement("div");
- g.className = `mjr-video-controls mjr-video-controls--${s}`, I && g.classList.add("mjr-video-controls--modern"), g.setAttribute("role", "group"), g.setAttribute(
+ const y = document.createElement("div");
+ y.className = `mjr-video-controls mjr-video-controls--${d}`, A && y.classList.add("mjr-video-controls--modern"), y.dataset.mjrLayout = "regular", y.setAttribute("role", "group"), y.setAttribute(
"aria-label",
- u ? m("video.audioControls", "Audio controls") : m("video.controls", "Video controls")
+ I ? m("video.audioControls", "Audio controls") : m("video.controls", "Video controls")
);
- const A = document.createElement("div");
- A.className = "mjr-video-row mjr-video-row--top";
const p = document.createElement("div");
- p.className = "mjr-video-row mjr-video-row--bottom", g.appendChild(A), g.appendChild(p);
+ p.className = "mjr-video-row mjr-video-row--top";
const b = document.createElement("div");
- b.className = "mjr-video-seek-wrap";
- const L = document.createElement("input");
- L.className = "mjr-video-range mjr-video-range--seek", L.type = "range", L.min = "0", L.max = String(KZ), L.step = "1", L.value = "0", L.setAttribute("aria-label", m("video.seek", "Seek")), L.title = u ? m("video.seekThroughAudio", "Seek through audio") : m("video.seekThrough", "Seek through video");
- const h = document.createElement("div");
- h.className = "mjr-video-seek-overlay";
- let G = null, W = null, f = null, X = null;
- y && (G = document.createElement("div"), G.className = "mjr-video-seek-zones", W = document.createElement("div"), W.className = "mjr-video-seek-zone mjr-video-seek-zone--leftTrim", f = document.createElement("div"), f.className = "mjr-video-seek-zone mjr-video-seek-zone--selected", X = document.createElement("div"), X.className = "mjr-video-seek-zone mjr-video-seek-zone--rightTrim", G.appendChild(W), G.appendChild(f), G.appendChild(X));
- const x = document.createElement("div");
- x.className = "mjr-video-seek-ticks";
- const T = document.createElement("div");
- T.className = "mjr-video-seek-labels";
- const v = document.createElement("div");
- v.className = "mjr-video-seek-mark mjr-video-seek-mark--in";
- const w = document.createElement("div");
- w.className = "mjr-video-seek-mark mjr-video-seek-mark--out";
- const R = document.createElement("div");
- R.className = "mjr-video-seek-playhead";
- const Y = document.createElement("div");
- Y.className = "mjr-video-seek-playhead-label", h.appendChild(x), h.appendChild(T), h.appendChild(R), h.appendChild(Y);
- const F = document.createElement("div");
- F.className = "mjr-video-seek-handle mjr-video-seek-handle--in", F.title = m("video.dragSetIn", "Drag to set In"), F.setAttribute("aria-label", m("video.dragSetIn", "Drag to set In"));
- const N = document.createElement("div");
- N.className = "mjr-video-seek-handle mjr-video-seek-handle--out", N.title = m("video.dragSetOut", "Drag to set Out"), N.setAttribute("aria-label", m("video.dragSetOut", "Drag to set Out")), b.appendChild(L), G && b.appendChild(G), b.appendChild(h), b.appendChild(v), b.appendChild(w), b.appendChild(F), b.appendChild(N);
- const V = document.createElement("span");
- V.className = "mjr-video-time", V.textContent = "0:00 / 0:00", V.title = m("video.currentTimeTotal", "Current time / Total duration");
- const k = document.createElement("span");
- k.className = "mjr-video-range-count", k.textContent = "";
- try {
- k.style.display = "none";
- } catch (re) {
- (i = console.debug) == null || i.call(console, re);
- }
+ b.className = "mjr-video-row mjr-video-row--bottom", y.appendChild(p), y.appendChild(b);
+ const L = document.createElement("div");
+ L.className = "mjr-video-seek-wrap";
+ const C = document.createElement("input");
+ C.className = "mjr-video-range mjr-video-range--seek", C.type = "range", C.min = "0", C.max = String(UZ), C.step = "1", C.value = "0", C.setAttribute("aria-label", m("video.seek", "Seek")), C.title = I ? m("video.seekThroughAudio", "Seek through audio") : m("video.seekThrough", "Seek through video");
+ const G = document.createElement("div");
+ G.className = "mjr-video-seek-overlay";
+ let Z = null, f = null, X = null, x = null;
+ h && (Z = document.createElement("div"), Z.className = "mjr-video-seek-zones", f = document.createElement("div"), f.className = "mjr-video-seek-zone mjr-video-seek-zone--leftTrim", X = document.createElement("div"), X.className = "mjr-video-seek-zone mjr-video-seek-zone--selected", x = document.createElement("div"), x.className = "mjr-video-seek-zone mjr-video-seek-zone--rightTrim", Z.appendChild(f), Z.appendChild(X), Z.appendChild(x));
const K = document.createElement("div");
- K.className = "mjr-video-timegroup", K.appendChild(V), y && K.appendChild(k);
- const z = document.createElement("span");
- z.className = "mjr-video-frame", z.textContent = "F: 0", z.title = m("video.currentFrame", "Current frame number");
- const B = xo(
+ K.className = "mjr-video-seek-ticks";
+ const j = document.createElement("div");
+ j.className = "mjr-video-seek-labels";
+ const w = document.createElement("div");
+ w.className = "mjr-video-seek-mark mjr-video-seek-mark--in";
+ const R = document.createElement("div");
+ R.className = "mjr-video-seek-mark mjr-video-seek-mark--out";
+ const V = document.createElement("div");
+ V.className = "mjr-video-seek-playhead";
+ const O = document.createElement("div");
+ O.className = "mjr-video-seek-playhead-label", G.appendChild(K), G.appendChild(j), G.appendChild(V), G.appendChild(O);
+ const k = document.createElement("div");
+ k.className = "mjr-video-seek-handle mjr-video-seek-handle--in", k.title = m("video.dragSetIn", "Drag to set In"), k.setAttribute("aria-label", m("video.dragSetIn", "Drag to set In"));
+ const Y = document.createElement("div");
+ Y.className = "mjr-video-seek-handle mjr-video-seek-handle--out", Y.title = m("video.dragSetOut", "Drag to set Out"), Y.setAttribute("aria-label", m("video.dragSetOut", "Drag to set Out")), L.appendChild(C), Z && L.appendChild(Z), L.appendChild(G), L.appendChild(w), L.appendChild(R), L.appendChild(k), L.appendChild(Y);
+ const N = document.createElement("span");
+ N.className = "mjr-video-time", N.textContent = "0:00 / 0:00", N.title = m("video.currentTimeTotal", "Current time / Total duration");
+ const U = document.createElement("span");
+ U.className = "mjr-video-range-count", U.textContent = "";
+ try {
+ U.style.display = "none";
+ } catch (oe) {
+ (i = console.debug) == null || i.call(console, oe);
+ }
+ const z = document.createElement("div");
+ z.className = "mjr-video-timegroup", z.appendChild(N), h && z.appendChild(U);
+ const T = document.createElement("span");
+ T.className = "mjr-video-frame", T.textContent = "F: 0", T.title = m("video.currentFrame", "Current frame number");
+ const J = xo(
"mjr-video-btn--play",
m("btn.play", "Play"),
m("video.playPauseSpace", "Play/Pause (Space)")
- ), J = xo(
+ ), P = xo(
"mjr-video-btn--step",
"<",
m("video.stepBack", "Step back")
- ), P = xo(
+ ), E = xo(
"mjr-video-btn--step",
">",
m("video.stepForward", "Step forward")
- ), H = xo(
+ ), $ = xo(
"mjr-video-btn--jump mjr-video-btn--in",
"|<",
m("video.goToIn", "Go to In")
- ), $ = xo(
+ ), H = xo(
"mjr-video-btn--jump mjr-video-btn--out",
">|",
m("video.goToOut", "Go to Out")
- ), E = xo(
+ ), ne = xo(
"mjr-video-btn--mark mjr-video-btn--in",
"I",
m("video.setInFromCurrent", "Set In from current frame")
- ), oe = xo(
+ ), M = xo(
"mjr-video-btn--mark mjr-video-btn--out",
"O",
m("video.setOutFromCurrent", "Set Out from current frame")
- ), M = xu(
+ ), v = xu(
"mjr-video-btn--toggle",
"pi-refresh",
m("video.loopPlaybackInRange", "Loop playback in range"),
m("video.loop", "Loop")
- ), j = M.btn, O = zl("mjr-video-num--in", {
+ ), F = v.btn, D = zl("mjr-video-num--in", {
min: 0,
step: 1,
value: 0,
title: m("video.inFrame", "In frame"),
ariaLabel: m("video.inFrame", "In frame"),
widthPx: 72
- }), D = zl("mjr-video-num--out", {
+ }), q = zl("mjr-video-num--out", {
min: 0,
step: 1,
value: 0,
title: m("video.outFrame", "Out frame"),
ariaLabel: m("video.outFrame", "Out frame"),
widthPx: 72
- }), q = zl("mjr-video-num--step", {
+ }), ee = zl("mjr-video-num--step", {
min: 1,
step: 1,
value: 1,
title: m("video.frameIncrement", "Frame increment"),
ariaLabel: m("video.frameIncrement", "Frame increment"),
widthPx: 56
- }), ee = zl("mjr-video-num--fps", {
+ }), ae = zl("mjr-video-num--fps", {
min: 1,
step: 1e-3,
- value: Qi(Z || 30),
+ value: Qi(W || 30),
title: m("video.fpsStepping", "FPS (used for frame stepping)"),
ariaLabel: m("video.fps", "FPS"),
widthPx: 56
- }), ce = document.createElement("select");
- ce.className = "mjr-video-num mjr-video-num--speed", ce.title = m("video.playbackSpeed", "Playback speed"), ce.setAttribute("aria-label", m("video.playbackSpeed", "Playback speed")), ce.style.width = "74px";
- const ue = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 2];
- for (const re of ue) {
- const ne = document.createElement("option");
- ne.value = String(re), ne.textContent = `${re}x`, ce.appendChild(ne);
+ }), ue = document.createElement("select");
+ ue.className = "mjr-video-num mjr-video-num--speed", ue.title = m("video.playbackSpeed", "Playback speed"), ue.setAttribute("aria-label", m("video.playbackSpeed", "Playback speed")), ue.style.width = "74px";
+ const B = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 2];
+ for (const oe of B) {
+ const se = document.createElement("option");
+ se.value = String(oe), se.textContent = `${oe}x`, ue.appendChild(se);
}
- const U = xu(
+ const Q = xu(
"mjr-video-btn--mute",
"pi-volume-up",
m("video.mute", "Mute"),
m("video.mute", "Mute")
- ), Q = U.btn, _ = document.createElement("div");
- _.className = "mjr-video-volume-wrap", _.style.cssText = "display:none; align-items:center; position:relative;";
- let le = null;
+ ), _ = Q.btn, le = document.createElement("div");
+ le.className = "mjr-video-volume-wrap", le.style.cssText = "display:none; align-items:center; position:relative;";
+ let ce = null;
if (S) {
- le = document.createElement("input"), le.className = "mjr-video-range mjr-video-range--volume", le.type = "range", le.min = "0", le.max = "1", le.step = "0.02", le.value = String(In(Number(e.volume) || 0)), le.setAttribute("aria-label", m("video.volume", "Volume")), le.title = m("video.volume", "Volume");
+ ce = document.createElement("input"), ce.className = "mjr-video-range mjr-video-range--volume", ce.type = "range", ce.min = "0", ce.max = "1", ce.step = "0.02", ce.value = String(pn(Number(e.volume) || 0)), ce.setAttribute("aria-label", m("video.volume", "Volume")), ce.title = m("video.volume", "Volume");
try {
- le.style.width = "120px";
- } catch (re) {
- (o = console.debug) == null || o.call(console, re);
+ ce.style.width = "120px";
+ } catch (oe) {
+ (o = console.debug) == null || o.call(console, oe);
}
- _.appendChild(le);
+ le.appendChild(ce);
}
const de = document.createElement("div");
de.className = "mjr-video-group mjr-video-group--in";
- const se = document.createElement("span");
- se.textContent = "In", se.title = m("video.resetInToStart", "Reset In to start"), se.style.cssText = "cursor:pointer; user-select:none;", y && (de.appendChild(se), de.appendChild(O));
- const ge = document.createElement("div");
- ge.className = "mjr-video-group mjr-video-group--out";
- const je = document.createElement("span");
- je.textContent = "Out", je.title = m("video.resetOutToEnd", "Reset Out to end"), je.style.cssText = "cursor:pointer; user-select:none;", y && (ge.appendChild(je), ge.appendChild(D));
- const Se = document.createElement("div");
- Se.className = "mjr-video-group mjr-video-group--adjust-left", y && (Se.appendChild(E), Se.appendChild(document.createTextNode(m("video.step", "Step"))), Se.appendChild(q), Se.appendChild(document.createTextNode(m("video.fps", "FPS"))), Se.appendChild(ee), Se.appendChild(z));
- const ke = document.createElement("div");
- ke.className = "mjr-video-group mjr-video-group--adjust-right", y && (ke.appendChild(K), ke.appendChild(j));
- const we = document.createElement("div");
- we.className = "mjr-video-group mjr-video-group--speed", we.appendChild(document.createTextNode(m("video.speed", "Speed"))), we.appendChild(ce);
- const Je = document.createElement("div");
- Je.className = "mjr-video-bottom mjr-video-bottom--left";
- const $e = document.createElement("div");
- $e.className = "mjr-video-transport";
+ const ge = document.createElement("span");
+ ge.textContent = "In", ge.title = m("video.resetInToStart", "Reset In to start"), ge.style.cssText = "cursor:pointer; user-select:none;", h && (de.appendChild(ge), de.appendChild(D));
+ const Le = document.createElement("div");
+ Le.className = "mjr-video-group mjr-video-group--out";
+ const xe = document.createElement("span");
+ xe.textContent = "Out", xe.title = m("video.resetOutToEnd", "Reset Out to end"), xe.style.cssText = "cursor:pointer; user-select:none;", h && (Le.appendChild(xe), Le.appendChild(q));
+ const Xe = document.createElement("div");
+ Xe.className = "mjr-video-group mjr-video-group--adjust-left", h && (Xe.appendChild(ne), Xe.appendChild(document.createTextNode(m("video.step", "Step"))), Xe.appendChild(ee), Xe.appendChild(document.createTextNode(m("video.fps", "FPS"))), Xe.appendChild(ae), Xe.appendChild(T));
+ const Me = document.createElement("div");
+ Me.className = "mjr-video-group mjr-video-group--adjust-right", h && (Me.appendChild(z), Me.appendChild(F));
+ const Fe = document.createElement("div");
+ Fe.className = "mjr-video-group mjr-video-group--speed", Fe.appendChild(document.createTextNode(m("video.speed", "Speed"))), Fe.appendChild(ue);
+ const it = document.createElement("div");
+ it.className = "mjr-video-bottom mjr-video-bottom--left";
const qe = document.createElement("div");
- if (qe.className = "mjr-video-bottom mjr-video-bottom--right", u || ($e.appendChild(H), $e.appendChild(J)), $e.appendChild(B), u || ($e.appendChild(P), $e.appendChild($)), y && Je.appendChild(Se), y && qe.appendChild(ke), qe.appendChild(we), qe.appendChild(Q), y && qe.appendChild(oe), le && qe.appendChild(_), I) {
- const re = document.createElement("div");
- re.className = "mjr-video-bar-timeline", y && re.appendChild(de), re.appendChild(b), y && re.appendChild(ge);
- const ne = document.createElement("div");
- ne.className = "mjr-video-bar-actions";
- const Ie = document.createElement("div");
- Ie.className = "mjr-video-bar-side mjr-video-bar-side--left", y && Ie.appendChild(Se);
- const Ne = document.createElement("div");
- Ne.className = "mjr-video-bar-center", Ne.appendChild($e);
- const He = document.createElement("div");
- He.className = "mjr-video-bar-side mjr-video-bar-side--right", y && He.appendChild(ke), He.appendChild(we), He.appendChild(Q), y && He.appendChild(oe), le && He.appendChild(_), ne.appendChild(Ie), ne.appendChild(Ne), ne.appendChild(He), g.replaceChildren(re, ne);
+ qe.className = "mjr-video-transport";
+ const Pe = document.createElement("div");
+ if (Pe.className = "mjr-video-bottom mjr-video-bottom--right", I || (qe.appendChild($), qe.appendChild(P)), qe.appendChild(J), I || (qe.appendChild(E), qe.appendChild(H)), h && it.appendChild(Xe), h && Pe.appendChild(Me), Pe.appendChild(Fe), Pe.appendChild(_), h && Pe.appendChild(M), ce && Pe.appendChild(le), A) {
+ const oe = document.createElement("div");
+ oe.className = "mjr-video-bar-timeline", h && oe.appendChild(de), oe.appendChild(L), h && oe.appendChild(Le);
+ const se = document.createElement("div");
+ se.className = "mjr-video-bar-actions";
+ const fe = document.createElement("div");
+ fe.className = "mjr-video-bar-side mjr-video-bar-side--left", h && fe.appendChild(Xe);
+ const Be = document.createElement("div");
+ Be.className = "mjr-video-bar-center", Be.appendChild(qe);
+ const gt = document.createElement("div");
+ gt.className = "mjr-video-bar-side mjr-video-bar-side--right", h && gt.appendChild(Me), gt.appendChild(Fe), gt.appendChild(_), h && gt.appendChild(M), ce && gt.appendChild(le), se.appendChild(fe), se.appendChild(Be), se.appendChild(gt), y.replaceChildren(oe, se);
} else
- y && A.appendChild(z), y && A.appendChild(de), A.appendChild(b), y && A.appendChild(ge), A.appendChild(K), p.appendChild(Je), p.appendChild($e), p.appendChild(qe);
- const Ue = (re) => {
- var ne, Ie;
+ h && p.appendChild(T), h && p.appendChild(de), p.appendChild(L), h && p.appendChild(Le), p.appendChild(z), b.appendChild(it), b.appendChild(qe), b.appendChild(Pe);
+ const Re = (oe) => {
+ var se, fe;
try {
- (ne = re.stopPropagation) == null || ne.call(re);
- } catch (Ne) {
- (Ie = console.debug) == null || Ie.call(console, Ne);
+ (se = oe.stopPropagation) == null || se.call(oe);
+ } catch (Be) {
+ (fe = console.debug) == null || fe.call(console, Be);
}
- }, Te = (re) => {
- var ne, Ie;
+ }, rt = (oe) => {
+ var se, fe;
try {
- (ne = re.preventDefault) == null || ne.call(re);
- } catch (Ne) {
- (Ie = console.debug) == null || Ie.call(console, Ne);
+ (se = oe.preventDefault) == null || se.call(oe);
+ } catch (Be) {
+ (fe = console.debug) == null || fe.call(console, Be);
}
- Ue(re);
- }, Oe = [], pt = (() => {
+ Re(oe);
+ }, Te = [], qt = (() => {
try {
return new AbortController();
} catch {
@@ -10815,51 +10815,78 @@ function _I(e, t = {}) {
};
}
})();
- Oe.push(() => {
- var re;
+ Te.push(() => {
+ var oe;
try {
- pt.abort();
- } catch (ne) {
- (re = console.debug) == null || re.call(console, ne);
+ qt.abort();
+ } catch (se) {
+ (oe = console.debug) == null || oe.call(console, se);
}
- }), Oe.push(Qe(g, "pointerdown", Ue)), Oe.push(Qe(g, "dblclick", Te, { capture: !0 })), Oe.push(
- Qe(g, "wheel", Te, { capture: !0, passive: !1 })
- ), Oe.push(
- Qe(
+ });
+ const kt = () => {
+ var oe;
+ try {
+ const se = Number(g == null ? void 0 : g.clientWidth) || Number(y == null ? void 0 : y.clientWidth) || 0;
+ let fe = "regular";
+ se > 0 && se < 560 ? fe = "stacked" : se > 0 && se < 860 && (fe = "compact"), y.dataset.mjrLayout = fe;
+ } catch (se) {
+ (oe = console.debug) == null || oe.call(console, se);
+ }
+ };
+ kt();
+ try {
+ if (typeof ResizeObserver == "function" && g) {
+ const oe = new ResizeObserver(() => kt());
+ oe.observe(g), Te.push(() => {
+ var se;
+ try {
+ oe.disconnect();
+ } catch (fe) {
+ (se = console.debug) == null || se.call(console, fe);
+ }
+ });
+ }
+ } catch (oe) {
+ (r = console.debug) == null || r.call(console, oe);
+ }
+ Te.push($e(y, "pointerdown", Re)), Te.push($e(y, "dblclick", rt, { capture: !0 })), Te.push(
+ $e(y, "wheel", rt, { capture: !0, passive: !1 })
+ ), Te.push(
+ $e(
window,
"dblclick",
- (re) => {
- var ne, Ie;
+ (oe) => {
+ var se, fe;
try {
- (ne = g.contains) != null && ne.call(g, re == null ? void 0 : re.target) && Te(re);
- } catch (Ne) {
- (Ie = console.debug) == null || Ie.call(console, Ne);
+ (se = y.contains) != null && se.call(y, oe == null ? void 0 : oe.target) && rt(oe);
+ } catch (Be) {
+ (fe = console.debug) == null || fe.call(console, Be);
}
},
{ capture: !0 }
)
- ), Oe.push(
- Qe(
+ ), Te.push(
+ $e(
window,
"wheel",
- (re) => {
- var ne, Ie;
+ (oe) => {
+ var se, fe;
try {
- (ne = g.contains) != null && ne.call(g, re == null ? void 0 : re.target) && Te(re);
- } catch (Ne) {
- (Ie = console.debug) == null || Ie.call(console, Ne);
+ (se = y.contains) != null && se.call(y, oe == null ? void 0 : oe.target) && rt(oe);
+ } catch (Be) {
+ (fe = console.debug) == null || fe.call(console, Be);
}
},
{ capture: !0, passive: !1 }
)
);
- const Me = {
- fps: Qi(Z || 30),
+ const we = {
+ fps: Qi(W || 30),
step: 1,
inFrame: null,
outFrame: null,
frameCount: null,
- loop: y,
+ loop: h,
pingpong: !1,
once: !1,
playbackRate: Math.max(0.25, Math.min(2, Number(t == null ? void 0 : t.initialPlaybackRate) || 1)),
@@ -10867,1040 +10894,1040 @@ function _I(e, t = {}) {
_ppReverse: !1,
_ppRafId: null,
_userInteracted: !1
- }, Xt = () => {
- var re;
- if (!Me._userInteracted) {
- Me._userInteracted = !0;
+ }, me = () => {
+ var oe;
+ if (!we._userInteracted) {
+ we._userInteracted = !0;
try {
- e.muted && (e.muted = !1, Tt == null || Tt());
- } catch (ne) {
- (re = console.debug) == null || re.call(console, ne);
+ e.muted && (e.muted = !1, pe == null || pe());
+ } catch (se) {
+ (oe = console.debug) == null || oe.call(console, se);
}
}
};
- let Mt = null;
- const me = () => {
- var re, ne;
- if (y)
+ let He = null;
+ const Ye = () => {
+ var oe, se;
+ if (h)
try {
- z.classList.add("is-step");
+ T.classList.add("is-step");
try {
- Mt == null || Mt();
- } catch (Ie) {
- (re = console.debug) == null || re.call(console, Ie);
+ He == null || He();
+ } catch (fe) {
+ (oe = console.debug) == null || oe.call(console, fe);
}
- Mt = EZ(pt.signal, DZ, () => {
- var Ie;
+ He = HZ(qt.signal, DZ, () => {
+ var fe;
try {
- z.classList.remove("is-step");
- } catch (Ne) {
- (Ie = console.debug) == null || Ie.call(console, Ne);
+ T.classList.remove("is-step");
+ } catch (Be) {
+ (fe = console.debug) == null || fe.call(console, Be);
}
});
- } catch (Ie) {
- (ne = console.debug) == null || ne.call(console, Ie);
+ } catch (fe) {
+ (se = console.debug) == null || se.call(console, fe);
}
};
- Oe.push(() => {
- var re, ne, Ie, Ne;
+ Te.push(() => {
+ var oe, se, fe, Be;
try {
- Mt == null || Mt();
- } catch (He) {
- (re = console.debug) == null || re.call(console, He);
+ He == null || He();
+ } catch (gt) {
+ (oe = console.debug) == null || oe.call(console, gt);
}
- Mt = null;
+ He = null;
try {
- (Ie = (ne = z == null ? void 0 : z.classList) == null ? void 0 : ne.remove) == null || Ie.call(ne, "is-step");
- } catch (He) {
- (Ne = console.debug) == null || Ne.call(console, He);
+ (fe = (se = T == null ? void 0 : T.classList) == null ? void 0 : se.remove) == null || fe.call(se, "is-step");
+ } catch (gt) {
+ (Be = console.debug) == null || Be.call(console, gt);
}
});
- const Pe = (re, ne) => {
- var Ie;
+ const Pt = (oe, se) => {
+ var fe;
try {
- if (!re) return;
- ne ? re.classList.add("is-on") : re.classList.remove("is-on");
- } catch (Ne) {
- (Ie = console.debug) == null || Ie.call(console, Ne);
+ if (!oe) return;
+ se ? oe.classList.add("is-on") : oe.classList.remove("is-on");
+ } catch (Be) {
+ (fe = console.debug) == null || fe.call(console, Be);
}
- }, Le = (re) => {
- var ne, Ie, Ne;
+ }, ke = (oe) => {
+ var se, fe, Be;
try {
- const He = Number(re);
- if (!Number.isFinite(He) || He <= 0) return Me.playbackRate;
- const rt = Math.max(0.25, Math.min(2, Math.round(He * 100) / 100));
- Me.playbackRate = rt;
+ const gt = Number(oe);
+ if (!Number.isFinite(gt) || gt <= 0) return we.playbackRate;
+ const Wt = Math.max(0.25, Math.min(2, Math.round(gt * 100) / 100));
+ we.playbackRate = Wt;
try {
- e.playbackRate = rt;
- } catch (St) {
- (ne = console.debug) == null || ne.call(console, St);
+ e.playbackRate = Wt;
+ } catch (Vt) {
+ (se = console.debug) == null || se.call(console, Vt);
}
try {
- (Ie = ce.matches) != null && Ie.call(ce, ":focus") || (ce.value = String(rt));
- } catch (St) {
- (Ne = console.debug) == null || Ne.call(console, St);
+ (fe = ue.matches) != null && fe.call(ue, ":focus") || (ue.value = String(Wt));
+ } catch (Vt) {
+ (Be = console.debug) == null || Be.call(console, Vt);
}
- return rt;
+ return Wt;
} catch {
- return Me.playbackRate;
+ return we.playbackRate;
}
- }, Ot = () => {
- var re, ne;
+ }, Ee = () => {
+ var oe, se;
try {
- Pe(j, !!(Me.loop || Me.pingpong));
+ Pt(F, !!(we.loop || we.pingpong));
try {
- M != null && M.icon && (Me.pingpong ? (M.icon.className = "pi pi-sort-alt", j.title = m(
+ v != null && v.icon && (we.pingpong ? (v.icon.className = "pi pi-sort-alt", F.title = m(
"video.pingpongPlayback",
"Ping-pong playback (forward then reverse)"
- )) : (M.icon.className = "pi pi-refresh", j.title = m(
+ )) : (v.icon.className = "pi pi-refresh", F.title = m(
"video.loopPlaybackInRange",
"Loop playback in range"
)));
- } catch (Ie) {
- (re = console.debug) == null || re.call(console, Ie);
+ } catch (fe) {
+ (oe = console.debug) == null || oe.call(console, fe);
}
- } catch (Ie) {
- (ne = console.debug) == null || ne.call(console, Ie);
+ } catch (fe) {
+ (se = console.debug) == null || se.call(console, fe);
}
- }, Xe = () => {
+ }, Ke = () => {
try {
- const re = Number(Me.frameCount);
- if (Number.isFinite(re) && re > 0)
- return Math.max(1, Math.floor(re));
- const ne = Number(e == null ? void 0 : e.duration), Ie = Qi(Me.fps, 30);
- return !Number.isFinite(ne) || ne <= 0 ? 0 : Math.max(0, Math.floor(ne * Ie));
+ const oe = Number(we.frameCount);
+ if (Number.isFinite(oe) && oe > 0)
+ return Math.max(1, Math.floor(oe));
+ const se = Number(e == null ? void 0 : e.duration), fe = Qi(we.fps, 30);
+ return !Number.isFinite(se) || se <= 0 ? 0 : Math.max(0, Math.floor(se * fe));
} catch {
return 0;
}
- }, Ee = (re = null) => {
+ }, lt = (oe = null) => {
try {
- const ne = re ?? (e == null ? void 0 : e.currentTime), Ie = Number(ne), Ne = Qi(Me.fps, 30);
- return !Number.isFinite(Ie) || Ie < 0 ? 0 : Math.max(0, Math.floor(Ie * Ne + 1e-6));
+ const se = oe ?? (e == null ? void 0 : e.currentTime), fe = Number(se), Be = Qi(we.fps, 30);
+ return !Number.isFinite(fe) || fe < 0 ? 0 : Math.max(0, Math.floor(fe * Be + 1e-6));
} catch {
return 0;
}
- }, Ke = (re) => {
- const ne = Qi(Me.fps, 30);
- return Math.max(0, Number(re) || 0) / ne;
- }, nt = () => {
- var re;
+ }, wt = (oe) => {
+ const se = Qi(we.fps, 30);
+ return Math.max(0, Number(oe) || 0) / se;
+ }, at = () => {
+ var oe;
try {
- const ne = Xe();
- if (ne <= 0) return;
- const Ie = Me.inFrame == null ? 0 : go(Me.inFrame, 0, ne), Ne = Me.outFrame == null ? ne : go(Me.outFrame, 0, ne);
- Ne < Ie ? (Me.inFrame = Ne, Me.outFrame = Ie) : (Me.inFrame = Ie, Me.outFrame = Ne);
- } catch (ne) {
- (re = console.debug) == null || re.call(console, ne);
+ const se = Ke();
+ if (se <= 0) return;
+ const fe = we.inFrame == null ? 0 : go(we.inFrame, 0, se), Be = we.outFrame == null ? se : go(we.outFrame, 0, se);
+ Be < fe ? (we.inFrame = Be, we.outFrame = fe) : (we.inFrame = fe, we.outFrame = Be);
+ } catch (se) {
+ (oe = console.debug) == null || oe.call(console, se);
}
- }, ut = () => {
+ }, tt = () => {
try {
- const re = Xe(), ne = Me.inFrame == null ? 0 : go(Me.inFrame, 0, re), Ie = Me.outFrame == null ? re : go(Me.outFrame, 0, re);
- return { inF: ne, outF: Ie, maxF: re };
+ const oe = Ke(), se = we.inFrame == null ? 0 : go(we.inFrame, 0, oe), fe = we.outFrame == null ? oe : go(we.outFrame, 0, oe);
+ return { inF: se, outF: fe, maxF: oe };
} catch {
return { inF: 0, outF: 0, maxF: 0 };
}
- }, It = () => {
- var re;
+ }, Oe = () => {
+ var oe;
try {
- const ne = !(e != null && e.paused) || Me._ppReverse;
- B.textContent = ne ? m("video.pause", "Pause") : m("video.play", "Play");
- } catch (ne) {
- (re = console.debug) == null || re.call(console, ne);
+ const se = !(e != null && e.paused) || we._ppReverse;
+ J.textContent = se ? m("video.pause", "Pause") : m("video.play", "Play");
+ } catch (se) {
+ (oe = console.debug) == null || oe.call(console, se);
}
- }, dt = () => {
- var re, ne;
+ }, Rt = () => {
+ var oe, se;
try {
- const Ie = !!(e != null && e.muted) || (Number(e == null ? void 0 : e.volume) || 0) <= 1e-3;
+ const fe = !!(e != null && e.muted) || (Number(e == null ? void 0 : e.volume) || 0) <= 1e-3;
try {
- U.icon.className = `pi ${Ie ? "pi-volume-off" : "pi-volume-up"}`;
- } catch (He) {
- (re = console.debug) == null || re.call(console, He);
+ Q.icon.className = `pi ${fe ? "pi-volume-off" : "pi-volume-up"}`;
+ } catch (gt) {
+ (oe = console.debug) == null || oe.call(console, gt);
}
- const Ne = Ie ? m("video.unmute", "Unmute") : m("video.mute", "Mute");
- Q.title = Ne, Q.setAttribute("aria-label", Ne);
- } catch (Ie) {
- (ne = console.debug) == null || ne.call(console, Ie);
+ const Be = fe ? m("video.unmute", "Unmute") : m("video.mute", "Mute");
+ _.title = Be, _.setAttribute("aria-label", Be);
+ } catch (fe) {
+ (se = console.debug) == null || se.call(console, fe);
}
- }, Re = (re = null) => {
- var ne, Ie, Ne, He, rt, St, Yt, Gt;
+ }, nt = (oe = null) => {
+ var se, fe, Be, gt, Wt, Vt, _t, Xt;
try {
- const Qt = Number(e == null ? void 0 : e.duration), Yn = re ?? (e == null ? void 0 : e.currentTime), wn = Number(Yn), xn = Number.isFinite(Qt) && Qt > 0;
- if (V.textContent = `${Gu(wn)} / ${xn ? Gu(Qt) : "0:00"}`, L.disabled = !xn, xn) {
- const en = In((wn || 0) / Qt), Vn = Math.round(en * 1e3);
- !Number.isNaN(Vn) && !((ne = L.matches) != null && ne.call(L, ":active")) && (L.value = String(Vn));
+ const tn = Number(e == null ? void 0 : e.duration), Ln = oe ?? (e == null ? void 0 : e.currentTime), Mn = Number(Ln), Xn = Number.isFinite(tn) && tn > 0;
+ if (N.textContent = `${Su(Mn)} / ${Xn ? Su(tn) : "0:00"}`, C.disabled = !Xn, Xn) {
+ const rn = pn((Mn || 0) / tn), vn = Math.round(rn * 1e3);
+ !Number.isNaN(vn) && !((se = C.matches) != null && se.call(C, ":active")) && (C.value = String(vn));
try {
- R.style.left = `${en * 100}%`;
- } catch (pn) {
- (Ie = console.debug) == null || Ie.call(console, pn);
+ V.style.left = `${rn * 100}%`;
+ } catch (re) {
+ (fe = console.debug) == null || fe.call(console, re);
}
} else {
- L.value = "0";
+ C.value = "0";
try {
- R.style.left = "0%";
- } catch (en) {
- (Ne = console.debug) == null || Ne.call(console, en);
+ V.style.left = "0%";
+ } catch (rn) {
+ (Be = console.debug) == null || Be.call(console, rn);
}
}
- if (y) {
- const en = Xe(), Vn = Ee(wn);
- z.textContent = `F: ${Vn} / ${en}`;
+ if (h) {
+ const rn = Ke(), vn = lt(Mn);
+ T.textContent = `F: ${vn} / ${rn}`;
try {
- if (Number.isFinite(Qt) && Qt > 0) {
- const Nn = In((wn || 0) / Qt);
- Y.style.left = `${Nn * 100}%`, Y.textContent = String(Vn), Y.style.display = "";
+ if (Number.isFinite(tn) && tn > 0) {
+ const Ie = pn((Mn || 0) / tn);
+ O.style.left = `${Ie * 100}%`, O.textContent = String(vn), O.style.display = "";
} else
- Y.style.display = "none";
- } catch (pn) {
- (He = console.debug) == null || He.call(console, pn);
+ O.style.display = "none";
+ } catch (re) {
+ (gt = console.debug) == null || gt.call(console, re);
}
- (rt = O.matches) != null && rt.call(O, ":focus") || (O.value = String(Me.inFrame ?? 0)), (St = D.matches) != null && St.call(D, ":focus") || (D.value = String(Me.outFrame ?? en));
+ (Wt = D.matches) != null && Wt.call(D, ":focus") || (D.value = String(we.inFrame ?? 0)), (Vt = q.matches) != null && Vt.call(q, ":focus") || (q.value = String(we.outFrame ?? rn));
try {
- const { inF: pn, outF: Nn, maxF: ae } = ut(), he = pn <= 0 && Nn >= ae, ve = Math.max(0, Math.floor(Nn) - Math.floor(pn) + 1);
- !he && ae > 0 ? (k.textContent = `R: ${ve}f`, k.style.display = "") : k.style.display = "none";
- } catch (pn) {
- (Yt = console.debug) == null || Yt.call(console, pn);
+ const { inF: re, outF: Ie, maxF: Ge } = tt(), Je = re <= 0 && Ie >= Ge, _e = Math.max(0, Math.floor(Ie) - Math.floor(re) + 1);
+ !Je && Ge > 0 ? (U.textContent = `R: ${_e}f`, U.style.display = "") : U.style.display = "none";
+ } catch (re) {
+ (_t = console.debug) == null || _t.call(console, re);
}
}
- } catch (Qt) {
- (Gt = console.debug) == null || Gt.call(console, Qt);
+ } catch (tn) {
+ (Xt = console.debug) == null || Xt.call(console, tn);
}
- }, Wt = () => {
- var re, ne, Ie, Ne, He, rt, St;
- if (y)
+ }, Mt = () => {
+ var oe, se, fe, Be, gt, Wt, Vt;
+ if (h)
try {
- const { inF: Yt, outF: Gt, maxF: Qt } = ut();
- if (!Number.isFinite(Qt) || Qt <= 0) return;
- const Yn = In(Yt / Qt) * 100, wn = In(Gt / Qt) * 100, xn = Yt <= 0 && Gt >= Qt;
+ const { inF: _t, outF: Xt, maxF: tn } = tt();
+ if (!Number.isFinite(tn) || tn <= 0) return;
+ const Ln = pn(_t / tn) * 100, Mn = pn(Xt / tn) * 100, Xn = _t <= 0 && Xt >= tn;
try {
- L.style.background = "";
- } catch (en) {
- (re = console.debug) == null || re.call(console, en);
+ C.style.background = "";
+ } catch (rn) {
+ (oe = console.debug) == null || oe.call(console, rn);
}
try {
- const en = In(Yn / 100) * 100, Vn = In(wn / 100) * 100, pn = Math.min(en, Vn), Nn = Math.max(en, Vn);
- if (G && W && f && X) {
- W.style.left = "0%", W.style.width = `${pn}%`, f.style.left = `${pn}%`, f.style.width = `${Math.max(0, Nn - pn)}%`, X.style.left = `${Nn}%`, X.style.width = `${Math.max(0, 100 - Nn)}%`;
+ const rn = pn(Ln / 100) * 100, vn = pn(Mn / 100) * 100, re = Math.min(rn, vn), Ie = Math.max(rn, vn);
+ if (Z && f && X && x) {
+ f.style.left = "0%", f.style.width = `${re}%`, X.style.left = `${re}%`, X.style.width = `${Math.max(0, Ie - re)}%`, x.style.left = `${Ie}%`, x.style.width = `${Math.max(0, 100 - Ie)}%`;
try {
- G.classList.toggle("is-trimmed", !xn), G.classList.toggle("is-fullrange", xn);
- } catch (ae) {
- (ne = console.debug) == null || ne.call(console, ae);
+ Z.classList.toggle("is-trimmed", !Xn), Z.classList.toggle("is-fullrange", Xn);
+ } catch (Ge) {
+ (se = console.debug) == null || se.call(console, Ge);
}
}
- } catch (en) {
- (Ie = console.debug) == null || Ie.call(console, en);
+ } catch (rn) {
+ (fe = console.debug) == null || fe.call(console, rn);
}
try {
- v.style.left = `${Yn}%`, w.style.left = `${wn}%`;
- } catch (en) {
- (Ne = console.debug) == null || Ne.call(console, en);
+ w.style.left = `${Ln}%`, R.style.left = `${Mn}%`;
+ } catch (rn) {
+ (Be = console.debug) == null || Be.call(console, rn);
}
try {
- F.style.left = `${Yn}%`, N.style.left = `${wn}%`;
- } catch (en) {
- (He = console.debug) == null || He.call(console, en);
+ k.style.left = `${Ln}%`, Y.style.left = `${Mn}%`;
+ } catch (rn) {
+ (gt = console.debug) == null || gt.call(console, rn);
}
try {
- const Vn = Math.max(1, Math.floor(Qt / UZ)), pn = Math.max(
- Vn,
- Math.floor(Number(Me.step) || 1)
- ), Nn = pn / Qt * 100, ae = Nn * 10;
- if (Number.isFinite(Nn) && Nn > 0.02) {
- const ve = `repeating-linear-gradient(to right, rgba(255,255,255,0.16) 0, rgba(255,255,255,0.16) 1px, transparent 1px, transparent ${Nn}%)`, Fe = `repeating-linear-gradient(to right, rgba(255,255,255,0.28) 0, rgba(255,255,255,0.28) 1px, transparent 1px, transparent ${ae}%)`;
- x.style.backgroundImage = `${Fe}, ${ve}`;
+ const vn = Math.max(1, Math.floor(tn / BZ)), re = Math.max(
+ vn,
+ Math.floor(Number(we.step) || 1)
+ ), Ie = re / tn * 100, Ge = Ie * 10;
+ if (Number.isFinite(Ie) && Ie > 0.02) {
+ const _e = `repeating-linear-gradient(to right, rgba(255,255,255,0.16) 0, rgba(255,255,255,0.16) 1px, transparent 1px, transparent ${Ie}%)`, Qe = `repeating-linear-gradient(to right, rgba(255,255,255,0.28) 0, rgba(255,255,255,0.28) 1px, transparent 1px, transparent ${Ge}%)`;
+ K.style.backgroundImage = `${Qe}, ${_e}`;
} else
- x.style.backgroundImage = "";
+ K.style.backgroundImage = "";
(() => {
- var et, tt, st, Vt, Bt, Rt, Ct;
+ var mt, Lt, Tt, Ot, Ct, gn, pt;
try {
- const zt = `${Qt}|${pn}`;
- if (((et = T == null ? void 0 : T.dataset) == null ? void 0 : et.mjrLabelKey) === zt) return;
- T.dataset.mjrLabelKey = zt;
+ const zt = `${tn}|${re}`;
+ if (((mt = j == null ? void 0 : j.dataset) == null ? void 0 : mt.mjrLabelKey) === zt) return;
+ j.dataset.mjrLabelKey = zt;
} catch (zt) {
- (tt = console.debug) == null || tt.call(console, zt);
+ (Lt = console.debug) == null || Lt.call(console, zt);
}
try {
- T.replaceChildren();
+ j.replaceChildren();
} catch (zt) {
- (st = console.debug) == null || st.call(console, zt);
+ (Tt = console.debug) == null || Tt.call(console, zt);
}
- const ve = 22;
- let Fe = Math.max(1, pn * 10);
+ const _e = 22;
+ let Qe = Math.max(1, re * 10);
try {
- for (; Fe > 0 && Math.ceil(Qt / Fe) > ve; )
- Fe *= 2;
+ for (; Qe > 0 && Math.ceil(tn / Qe) > _e; )
+ Qe *= 2;
} catch (zt) {
- (Vt = console.debug) == null || Vt.call(console, zt);
+ (Ot = console.debug) == null || Ot.call(console, zt);
}
- const _e = (zt) => {
- const gt = document.createElement("span");
- gt.className = "mjr-video-seek-label";
- const mn = In(zt / Qt) * 100;
- return gt.style.left = `${mn}%`, gt.textContent = String(Math.floor(zt)), gt;
+ const et = (zt) => {
+ const ht = document.createElement("span");
+ ht.className = "mjr-video-seek-label";
+ const on = pn(zt / tn) * 100;
+ return ht.style.left = `${on}%`, ht.textContent = String(Math.floor(zt)), ht;
};
try {
- T.appendChild(_e(0));
- } catch (zt) {
- (Bt = console.debug) == null || Bt.call(console, zt);
- }
- for (let zt = Fe; zt < Qt; zt += Fe)
- try {
- T.appendChild(_e(zt));
- } catch (gt) {
- (Rt = console.debug) == null || Rt.call(console, gt);
- }
- try {
- T.appendChild(_e(Qt));
+ j.appendChild(et(0));
} catch (zt) {
(Ct = console.debug) == null || Ct.call(console, zt);
}
- })();
- } catch (en) {
- (rt = console.debug) == null || rt.call(console, en);
- }
- } catch (Yt) {
- (St = console.debug) == null || St.call(console, Yt);
- }
- }, lt = ({ prefer: re = null } = {}) => {
- var ne;
- if (y)
- try {
- nt();
- const { inF: Ie, outF: Ne } = ut(), He = Ee();
- re === "in" ? te(Ie) : re === "out" ? He > Ne && te(Ne) : He < Ie ? te(Ie) : He > Ne && te(Ne);
- } catch (Ie) {
- (ne = console.debug) == null || ne.call(console, Ie);
- }
- }, qt = () => {
- var re;
- try {
- Me.inFrame = 0, nt(), Re(), Wt(), lt({ prefer: "in" });
- } catch (ne) {
- (re = console.debug) == null || re.call(console, ne);
- }
- }, yt = () => {
- var re;
- try {
- const { maxF: ne } = ut();
- Me.outFrame = Math.max(0, Number(ne) || 0), nt(), Re(), Wt(), lt({ prefer: "out" });
- } catch (ne) {
- (re = console.debug) == null || re.call(console, ne);
- }
- }, mt = () => {
- var re;
- try {
- Me._ppRafId != null && (cancelAnimationFrame(Me._ppRafId), Me._ppRafId = null);
- } catch (ne) {
- (re = console.debug) == null || re.call(console, ne);
- }
- };
- Oe.push(mt);
- const kt = () => {
- var re, ne;
- try {
- mt(), Me._ppReverse = !0, (re = e.pause) == null || re.call(e), It();
- const Ie = Qi(Me.fps, 30), Ne = Math.max(0.25, Number(Me.playbackRate) || 1), He = 1e3 / (Ie * Ne);
- let rt = performance.now();
- const St = (Yt) => {
- var Gt, Qt;
- try {
- if (!Me._ppReverse || !Me.pingpong) {
- Me._ppReverse = !1, It();
- return;
- }
- const Yn = Yt - rt;
- if (Yn >= He) {
- rt = Yt - Yn % He;
- const { inF: wn } = ut(), xn = Ee();
- if (xn <= wn) {
- Me._ppReverse = !1, te(wn);
- const Vn = (Gt = e.play) == null ? void 0 : Gt.call(e);
- Vn && typeof Vn.catch == "function" && Vn.catch(() => {
- }), It(), Re();
- return;
+ for (let zt = Qe; zt < tn; zt += Qe)
+ try {
+ j.appendChild(et(zt));
+ } catch (ht) {
+ (gn = console.debug) == null || gn.call(console, ht);
+ }
+ try {
+ j.appendChild(et(tn));
+ } catch (zt) {
+ (pt = console.debug) == null || pt.call(console, zt);
}
- const en = Math.max(1, Math.floor(Number(Me.step) || 1));
- te(xn - en), Re();
- }
- Me._ppRafId = requestAnimationFrame(St);
- } catch (Yn) {
- (Qt = console.debug) == null || Qt.call(console, Yn), Me._ppReverse = !1, It();
+ })();
+ } catch (rn) {
+ (Wt = console.debug) == null || Wt.call(console, rn);
}
- };
- Me._ppRafId = requestAnimationFrame(St);
- } catch (Ie) {
- (ne = console.debug) == null || ne.call(console, Ie), Me._ppReverse = !1;
+ } catch (_t) {
+ (Vt = console.debug) == null || Vt.call(console, _t);
+ }
+ }, dt = ({ prefer: oe = null } = {}) => {
+ var se;
+ if (h)
+ try {
+ at();
+ const { inF: fe, outF: Be } = tt(), gt = lt();
+ oe === "in" ? Ce(fe) : oe === "out" ? gt > Be && Ce(Be) : gt < fe ? Ce(fe) : gt > Be && Ce(Be);
+ } catch (fe) {
+ (se = console.debug) == null || se.call(console, fe);
+ }
+ }, bt = () => {
+ var oe;
+ try {
+ we.inFrame = 0, at(), nt(), Mt(), dt({ prefer: "in" });
+ } catch (se) {
+ (oe = console.debug) == null || oe.call(console, se);
+ }
+ }, Yt = () => {
+ var oe;
+ try {
+ const { maxF: se } = tt();
+ we.outFrame = Math.max(0, Number(se) || 0), at(), nt(), Mt(), dt({ prefer: "out" });
+ } catch (se) {
+ (oe = console.debug) == null || oe.call(console, se);
}
}, $t = () => {
- var re, ne, Ie, Ne;
+ var oe;
try {
- const He = Xe();
- Me.inFrame = 0, Me.outFrame = He > 0 ? He : null, Me.step = 1, Me.loop = !!y, Me.pingpong = !1, Me._ppReverse = !1, mt(), Me.once = !1, Le(1);
- try {
- q.value = "1";
- } catch (rt) {
- (re = console.debug) == null || re.call(console, rt);
- }
- try {
- (ne = ce.matches) != null && ne.call(ce, ":focus") || (ce.value = "1");
- } catch (rt) {
- (Ie = console.debug) == null || Ie.call(console, rt);
- }
- nt(), Ot(), Re(), Wt(), lt({ prefer: "in" });
- } catch (He) {
- (Ne = console.debug) == null || Ne.call(console, He);
+ we._ppRafId != null && (cancelAnimationFrame(we._ppRafId), we._ppRafId = null);
+ } catch (se) {
+ (oe = console.debug) == null || oe.call(console, se);
}
- }, Tt = () => {
- var re, ne, Ie;
+ };
+ Te.push($t);
+ const nn = () => {
+ var oe, se;
try {
- const Ne = In(Number(e == null ? void 0 : e.volume) || 0);
- try {
- le && !((re = le.matches) != null && re.call(le, ":active")) && (le.value = String(Ne));
- } catch (He) {
- (ne = console.debug) == null || ne.call(console, He);
- }
- dt();
- } catch (Ne) {
- (Ie = console.debug) == null || Ie.call(console, Ne);
+ $t(), we._ppReverse = !0, (oe = e.pause) == null || oe.call(e), Oe();
+ const fe = Qi(we.fps, 30), Be = Math.max(0.25, Number(we.playbackRate) || 1), gt = 1e3 / (fe * Be);
+ let Wt = performance.now();
+ const Vt = (_t) => {
+ var Xt, tn;
+ try {
+ if (!we._ppReverse || !we.pingpong) {
+ we._ppReverse = !1, Oe();
+ return;
+ }
+ const Ln = _t - Wt;
+ if (Ln >= gt) {
+ Wt = _t - Ln % gt;
+ const { inF: Mn } = tt(), Xn = lt();
+ if (Xn <= Mn) {
+ we._ppReverse = !1, Ce(Mn);
+ const vn = (Xt = e.play) == null ? void 0 : Xt.call(e);
+ vn && typeof vn.catch == "function" && vn.catch(() => {
+ }), Oe(), nt();
+ return;
+ }
+ const rn = Math.max(1, Math.floor(Number(we.step) || 1));
+ Ce(Xn - rn), nt();
+ }
+ we._ppRafId = requestAnimationFrame(Vt);
+ } catch (Ln) {
+ (tn = console.debug) == null || tn.call(console, Ln), we._ppReverse = !1, Oe();
+ }
+ };
+ we._ppRafId = requestAnimationFrame(Vt);
+ } catch (fe) {
+ (se = console.debug) == null || se.call(console, fe), we._ppReverse = !1;
}
- }, te = (re) => {
- var ne;
+ }, ie = () => {
+ var oe, se, fe, Be;
try {
- const { maxF: Ie } = ut(), Ne = go(re, 0, Ie > 0 ? Ie : 1 / 0);
- e.currentTime = Ke(Ne);
- } catch (Ie) {
- (ne = console.debug) == null || ne.call(console, Ie);
- }
- Re();
- }, ye = (re) => {
- var ne, Ie, Ne;
- Xt();
- try {
- const He = Math.max(1, Math.floor(Number(Me.step) || 1)), { inF: rt, outF: St } = ut();
- let Gt = Ee() + re * He;
- Me.loop ? (Gt < rt && (Gt = St), Gt > St && (Gt = rt)) : Gt = go(Gt, rt, St);
+ const gt = Ke();
+ we.inFrame = 0, we.outFrame = gt > 0 ? gt : null, we.step = 1, we.loop = !!h, we.pingpong = !1, we._ppReverse = !1, $t(), we.once = !1, ke(1);
try {
- (ne = e.pause) == null || ne.call(e);
- } catch (Qt) {
- (Ie = console.debug) == null || Ie.call(console, Qt);
+ ee.value = "1";
+ } catch (Wt) {
+ (oe = console.debug) == null || oe.call(console, Wt);
}
- te(Gt), me();
- } catch (He) {
- (Ne = console.debug) == null || Ne.call(console, He);
- }
- }, We = () => {
- var re;
- if (y)
try {
- nt();
- const { inF: ne, outF: Ie } = ut(), Ne = Ee();
- (Ne < ne || Ne > Ie) && te(ne);
- } catch (ne) {
- (re = console.debug) == null || re.call(console, ne);
+ (se = ue.matches) != null && se.call(ue, ":focus") || (ue.value = "1");
+ } catch (Wt) {
+ (fe = console.debug) == null || fe.call(console, Wt);
}
+ at(), Ee(), nt(), Mt(), dt({ prefer: "in" });
+ } catch (gt) {
+ (Be = console.debug) == null || Be.call(console, gt);
+ }
}, pe = () => {
- var re, ne, Ie;
- Xt();
+ var oe, se, fe;
try {
- if (Me._ppReverse) {
- Me._ppReverse = !1, mt(), It();
+ const Be = pn(Number(e == null ? void 0 : e.volume) || 0);
+ try {
+ ce && !((oe = ce.matches) != null && oe.call(ce, ":active")) && (ce.value = String(Be));
+ } catch (gt) {
+ (se = console.debug) == null || se.call(console, gt);
+ }
+ Rt();
+ } catch (Be) {
+ (fe = console.debug) == null || fe.call(console, Be);
+ }
+ }, Ce = (oe) => {
+ var se;
+ try {
+ const { maxF: fe } = tt(), Be = go(oe, 0, fe > 0 ? fe : 1 / 0);
+ e.currentTime = wt(Be);
+ } catch (fe) {
+ (se = console.debug) == null || se.call(console, fe);
+ }
+ nt();
+ }, ye = (oe) => {
+ var se, fe, Be;
+ me();
+ try {
+ const gt = Math.max(1, Math.floor(Number(we.step) || 1)), { inF: Wt, outF: Vt } = tt();
+ let Xt = lt() + oe * gt;
+ we.loop ? (Xt < Wt && (Xt = Vt), Xt > Vt && (Xt = Wt)) : Xt = go(Xt, Wt, Vt);
+ try {
+ (se = e.pause) == null || se.call(e);
+ } catch (tn) {
+ (fe = console.debug) == null || fe.call(console, tn);
+ }
+ Ce(Xt), Ye();
+ } catch (gt) {
+ (Be = console.debug) == null || Be.call(console, gt);
+ }
+ }, De = () => {
+ var oe;
+ if (h)
+ try {
+ at();
+ const { inF: se, outF: fe } = tt(), Be = lt();
+ (Be < se || Be > fe) && Ce(se);
+ } catch (se) {
+ (oe = console.debug) == null || oe.call(console, se);
+ }
+ }, ut = () => {
+ var oe, se, fe;
+ me();
+ try {
+ if (we._ppReverse) {
+ we._ppReverse = !1, $t(), Oe();
return;
}
if (e.paused) {
- We();
- const Ne = (re = e.play) == null ? void 0 : re.call(e);
- Ne && typeof Ne.catch == "function" && Ne.catch(() => {
+ De();
+ const Be = (oe = e.play) == null ? void 0 : oe.call(e);
+ Be && typeof Be.catch == "function" && Be.catch(() => {
});
} else
- (ne = e.pause) == null || ne.call(e);
- } catch (Ne) {
- (Ie = console.debug) == null || Ie.call(console, Ne);
+ (se = e.pause) == null || se.call(e);
+ } catch (Be) {
+ (fe = console.debug) == null || fe.call(console, Be);
}
- It();
+ Oe();
};
- if (Oe.push(
- Qe(e, "click", (re) => {
- var ne;
+ if (Te.push(
+ $e(e, "click", (oe) => {
+ var se;
try {
- if ((re == null ? void 0 : re.target) !== e) return;
- } catch (Ie) {
- (ne = console.debug) == null || ne.call(console, Ie);
+ if ((oe == null ? void 0 : oe.target) !== e) return;
+ } catch (fe) {
+ (se = console.debug) == null || se.call(console, fe);
}
- pe();
+ ut();
})
- ), Oe.push(
- Qe(B, "click", (re) => {
- Ue(re), pe();
+ ), Te.push(
+ $e(J, "click", (oe) => {
+ Re(oe), ut();
})
- ), Oe.push(
- Qe(J, "click", (re) => {
- Ue(re), ye(-1);
+ ), Te.push(
+ $e(P, "click", (oe) => {
+ Re(oe), ye(-1);
})
- ), Oe.push(
- Qe(P, "click", (re) => {
- Ue(re), ye(1);
+ ), Te.push(
+ $e(E, "click", (oe) => {
+ Re(oe), ye(1);
})
- ), Oe.push(
- Qe(H, "click", (re) => {
- Ue(re);
- const { inF: ne } = ut();
- te(ne), me();
+ ), Te.push(
+ $e($, "click", (oe) => {
+ Re(oe);
+ const { inF: se } = tt();
+ Ce(se), Ye();
})
- ), Oe.push(
- Qe($, "click", (re) => {
- Ue(re);
- const { outF: ne } = ut();
- te(ne), me();
+ ), Te.push(
+ $e(H, "click", (oe) => {
+ Re(oe);
+ const { outF: se } = tt();
+ Ce(se), Ye();
})
- ), Oe.push(
- Qe(L, "pointerdown", () => {
- Me._seeking = !0;
+ ), Te.push(
+ $e(C, "pointerdown", () => {
+ we._seeking = !0;
})
- ), Oe.push(
- Qe(L, "pointerup", () => {
- Me._seeking = !1;
+ ), Te.push(
+ $e(C, "pointerup", () => {
+ we._seeking = !1;
})
- ), Oe.push(
- Qe(L, "input", (re) => {
- var ne;
- Ue(re), Xt();
+ ), Te.push(
+ $e(C, "input", (oe) => {
+ var se;
+ Re(oe), me();
try {
- const Ie = Number(e == null ? void 0 : e.duration);
- if (!Number.isFinite(Ie) || Ie <= 0) return;
- const Ne = Number(L.value), He = In((Number.isFinite(Ne) ? Ne : 0) / 1e3);
- e.currentTime = He * Ie;
- } catch (Ie) {
- (ne = console.debug) == null || ne.call(console, Ie);
+ const fe = Number(e == null ? void 0 : e.duration);
+ if (!Number.isFinite(fe) || fe <= 0) return;
+ const Be = Number(C.value), gt = pn((Number.isFinite(Be) ? Be : 0) / 1e3);
+ e.currentTime = gt * fe;
+ } catch (fe) {
+ (se = console.debug) == null || se.call(console, fe);
}
- Re();
+ nt();
})
- ), y) {
- Oe.push(
- Qe(E, "click", (re) => {
- Ue(re), Me.inFrame = Ee(), nt(), Re(), Wt(), lt({ prefer: "in" });
+ ), h) {
+ Te.push(
+ $e(ne, "click", (oe) => {
+ Re(oe), we.inFrame = lt(), at(), nt(), Mt(), dt({ prefer: "in" });
})
- ), Oe.push(
- Qe(oe, "click", (re) => {
- Ue(re), Me.outFrame = Ee(), nt(), Re(), Wt(), lt({ prefer: "out" });
+ ), Te.push(
+ $e(M, "click", (oe) => {
+ Re(oe), we.outFrame = lt(), at(), nt(), Mt(), dt({ prefer: "out" });
})
- ), Oe.push(
- Qe(O, "change", (re) => {
- var ne;
- Ue(re);
+ ), Te.push(
+ $e(D, "change", (oe) => {
+ var se;
+ Re(oe);
try {
- const Ie = Number(O.value);
- Me.inFrame = Number.isFinite(Ie) ? Math.max(0, Math.floor(Ie)) : null, nt();
- } catch (Ie) {
- (ne = console.debug) == null || ne.call(console, Ie);
+ const fe = Number(D.value);
+ we.inFrame = Number.isFinite(fe) ? Math.max(0, Math.floor(fe)) : null, at();
+ } catch (fe) {
+ (se = console.debug) == null || se.call(console, fe);
}
- Re(), Wt(), lt({ prefer: "in" });
+ nt(), Mt(), dt({ prefer: "in" });
})
- ), Oe.push(
- Qe(D, "change", (re) => {
- var ne;
- Ue(re);
+ ), Te.push(
+ $e(q, "change", (oe) => {
+ var se;
+ Re(oe);
try {
- const Ie = Number(D.value);
- Me.outFrame = Number.isFinite(Ie) ? Math.max(0, Math.floor(Ie)) : null, nt();
- } catch (Ie) {
- (ne = console.debug) == null || ne.call(console, Ie);
+ const fe = Number(q.value);
+ we.outFrame = Number.isFinite(fe) ? Math.max(0, Math.floor(fe)) : null, at();
+ } catch (fe) {
+ (se = console.debug) == null || se.call(console, fe);
}
- Re(), Wt(), lt({ prefer: "out" });
+ nt(), Mt(), dt({ prefer: "out" });
})
- ), Oe.push(
- Qe(q, "change", (re) => {
- var ne;
- Ue(re);
+ ), Te.push(
+ $e(ee, "change", (oe) => {
+ var se;
+ Re(oe);
try {
- Me.step = Math.max(1, Math.floor(Number(q.value) || 1)), q.value = String(Me.step);
- } catch (Ie) {
- (ne = console.debug) == null || ne.call(console, Ie);
+ we.step = Math.max(1, Math.floor(Number(ee.value) || 1)), ee.value = String(we.step);
+ } catch (fe) {
+ (se = console.debug) == null || se.call(console, fe);
}
})
- ), Oe.push(
- Qe(ee, "change", (re) => {
- var ne;
- Ue(re);
+ ), Te.push(
+ $e(ae, "change", (oe) => {
+ var se;
+ Re(oe);
try {
- Me.fps = Qi(ee.value, 30), ee.value = String(Me.fps), nt();
- } catch (Ie) {
- (ne = console.debug) == null || ne.call(console, Ie);
+ we.fps = Qi(ae.value, 30), ae.value = String(we.fps), at();
+ } catch (fe) {
+ (se = console.debug) == null || se.call(console, fe);
}
- Re(), Wt();
+ nt(), Mt();
})
- ), Oe.push(
- Qe(j, "click", (re) => {
- Ue(re), !Me.loop && !Me.pingpong ? (Me.loop = !0, Me.pingpong = !1) : Me.loop && !Me.pingpong ? (Me.loop = !1, Me.pingpong = !0) : (Me.loop = !1, Me.pingpong = !1), (Me.loop || Me.pingpong) && (Me.once = !1), Me.pingpong || (Me._ppReverse = !1, mt()), Ot();
+ ), Te.push(
+ $e(F, "click", (oe) => {
+ Re(oe), !we.loop && !we.pingpong ? (we.loop = !0, we.pingpong = !1) : we.loop && !we.pingpong ? (we.loop = !1, we.pingpong = !0) : (we.loop = !1, we.pingpong = !1), (we.loop || we.pingpong) && (we.once = !1), we.pingpong || (we._ppReverse = !1, $t()), Ee();
})
- ), Oe.push(
- Qe(se, "click", (re) => {
- Ue(re), qt();
+ ), Te.push(
+ $e(ge, "click", (oe) => {
+ Re(oe), bt();
})
- ), Oe.push(
- Qe(je, "click", (re) => {
- Ue(re), yt();
+ ), Te.push(
+ $e(xe, "click", (oe) => {
+ Re(oe), Yt();
})
- ), Oe.push(
- Qe(k, "click", (re) => {
- Ue(re), $t();
+ ), Te.push(
+ $e(U, "click", (oe) => {
+ Re(oe), ie();
})
);
try {
- k.title = m("video.resetPlayerControls", "Reset player controls"), k.style.cursor = "pointer", k.style.userSelect = "none";
- } catch (re) {
- (r = console.debug) == null || r.call(console, re);
+ U.title = m("video.resetPlayerControls", "Reset player controls"), U.style.cursor = "pointer", U.style.userSelect = "none";
+ } catch (oe) {
+ (l = console.debug) == null || l.call(console, oe);
}
}
- Oe.push(
- Qe(Q, "click", (re) => {
- var ne;
- Ue(re);
+ Te.push(
+ $e(_, "click", (oe) => {
+ var se;
+ Re(oe);
try {
- e.muted = !e.muted, _ && (_.style.display = e.muted ? "none" : "inline-flex");
- } catch (Ie) {
- (ne = console.debug) == null || ne.call(console, Ie);
+ e.muted = !e.muted, le && (le.style.display = e.muted ? "none" : "inline-flex");
+ } catch (fe) {
+ (se = console.debug) == null || se.call(console, fe);
}
- Tt();
+ pe();
})
- ), Oe.push(
- Qe(Q, "contextmenu", (re) => {
- var ne;
- Te(re);
+ ), Te.push(
+ $e(_, "contextmenu", (oe) => {
+ var se;
+ rt(oe);
try {
- if (!_) return;
- const Ie = _.style.display !== "none";
- _.style.display = Ie ? "none" : "inline-flex";
- } catch (Ie) {
- (ne = console.debug) == null || ne.call(console, Ie);
+ if (!le) return;
+ const fe = le.style.display !== "none";
+ le.style.display = fe ? "none" : "inline-flex";
+ } catch (fe) {
+ (se = console.debug) == null || se.call(console, fe);
}
- Tt();
+ pe();
})
- ), Oe.push(
- Qe(
+ ), Te.push(
+ $e(
window,
"pointerdown",
- (re) => {
- var ne, Ie, Ne;
+ (oe) => {
+ var se, fe, Be;
try {
- if (!_ || _.style.display === "none" || (ne = Q.contains) != null && ne.call(Q, re == null ? void 0 : re.target) || (Ie = _.contains) != null && Ie.call(_, re == null ? void 0 : re.target))
+ if (!le || le.style.display === "none" || (se = _.contains) != null && se.call(_, oe == null ? void 0 : oe.target) || (fe = le.contains) != null && fe.call(le, oe == null ? void 0 : oe.target))
return;
- _.style.display = "none";
- } catch (He) {
- (Ne = console.debug) == null || Ne.call(console, He);
+ le.style.display = "none";
+ } catch (gt) {
+ (Be = console.debug) == null || Be.call(console, gt);
}
},
{ capture: !0 }
)
- ), le && Oe.push(
- Qe(le, "input", (re) => {
- var ne;
- Ue(re);
+ ), ce && Te.push(
+ $e(ce, "input", (oe) => {
+ var se;
+ Re(oe);
try {
- const Ie = In(Number(le.value) || 0);
- e.volume = Ie, Ie > 1e-3 && (e.muted = !1);
- } catch (Ie) {
- (ne = console.debug) == null || ne.call(console, Ie);
+ const fe = pn(Number(ce.value) || 0);
+ e.volume = fe, fe > 1e-3 && (e.muted = !1);
+ } catch (fe) {
+ (se = console.debug) == null || se.call(console, fe);
}
- Tt();
+ pe();
})
- ), Oe.push(
- Qe(ce, "change", (re) => {
- var ne;
- Ue(re);
+ ), Te.push(
+ $e(ue, "change", (oe) => {
+ var se;
+ Re(oe);
try {
- Le(Number(ce.value) || 1);
- } catch (Ie) {
- (ne = console.debug) == null || ne.call(console, Ie);
+ ke(Number(ue.value) || 1);
+ } catch (fe) {
+ (se = console.debug) == null || se.call(console, fe);
}
})
- ), Oe.push(
- Qe(e, "ratechange", () => {
- var re;
+ ), Te.push(
+ $e(e, "ratechange", () => {
+ var oe;
try {
- Le(Number(e.playbackRate) || Me.playbackRate || 1);
- } catch (ne) {
- (re = console.debug) == null || re.call(console, ne);
+ ke(Number(e.playbackRate) || we.playbackRate || 1);
+ } catch (se) {
+ (oe = console.debug) == null || oe.call(console, se);
}
})
);
- const De = () => {
- var re, ne, Ie, Ne, He, rt, St;
- if (y)
+ const At = () => {
+ var oe, se, fe, Be, gt, Wt, Vt;
+ if (h)
try {
- if (Me._seeking || e != null && e.paused) return;
- const { inF: Yt, outF: Gt, maxF: Qt } = ut();
- if (Qt <= 0 || Yt <= 0 && Gt >= Qt && !Me.loop && !Me.pingpong && !Me.once || Me._ppReverse) return;
- const wn = Ee(), xn = Math.max(1, Math.floor(Number(Me.step) || 1));
- if (wn >= Gt - xn)
- if (Me.pingpong) {
- kt();
+ if (we._seeking || e != null && e.paused) return;
+ const { inF: _t, outF: Xt, maxF: tn } = tt();
+ if (tn <= 0 || _t <= 0 && Xt >= tn && !we.loop && !we.pingpong && !we.once || we._ppReverse) return;
+ const Mn = lt(), Xn = Math.max(1, Math.floor(Number(we.step) || 1));
+ if (Mn >= Xt - Xn)
+ if (we.pingpong) {
+ nn();
return;
- } else if (Me.loop) {
- te(Yt);
+ } else if (we.loop) {
+ Ce(_t);
try {
- const en = (re = e.play) == null ? void 0 : re.call(e);
- en && typeof en.catch == "function" && en.catch(() => {
+ const rn = (oe = e.play) == null ? void 0 : oe.call(e);
+ rn && typeof rn.catch == "function" && rn.catch(() => {
});
- } catch (en) {
- (ne = console.debug) == null || ne.call(console, en);
+ } catch (rn) {
+ (se = console.debug) == null || se.call(console, rn);
}
- } else if (Me.once) {
+ } else if (we.once) {
try {
- (Ie = e.pause) == null || Ie.call(e);
- } catch (en) {
- (Ne = console.debug) == null || Ne.call(console, en);
+ (fe = e.pause) == null || fe.call(e);
+ } catch (rn) {
+ (Be = console.debug) == null || Be.call(console, rn);
}
- te(Gt);
+ Ce(Xt);
} else {
try {
- (He = e.pause) == null || He.call(e);
- } catch (en) {
- (rt = console.debug) == null || rt.call(console, en);
+ (gt = e.pause) == null || gt.call(e);
+ } catch (rn) {
+ (Wt = console.debug) == null || Wt.call(console, rn);
}
- te(Gt);
+ Ce(Xt);
}
- else wn < Yt && te(Yt);
- } catch (Yt) {
- (St = console.debug) == null || St.call(console, Yt);
+ else Mn < _t && Ce(_t);
+ } catch (_t) {
+ (Vt = console.debug) == null || Vt.call(console, _t);
}
- }, ot = {
+ }, Ht = {
rafId: null,
rvfcId: null
- }, Zt = () => {
- var re, ne;
+ }, Qt = () => {
+ var oe, se;
try {
- ot.rvfcId != null && typeof (e == null ? void 0 : e.cancelVideoFrameCallback) == "function" && e.cancelVideoFrameCallback(ot.rvfcId);
- } catch (Ie) {
- (re = console.debug) == null || re.call(console, Ie);
+ Ht.rvfcId != null && typeof (e == null ? void 0 : e.cancelVideoFrameCallback) == "function" && e.cancelVideoFrameCallback(Ht.rvfcId);
+ } catch (fe) {
+ (oe = console.debug) == null || oe.call(console, fe);
}
- ot.rvfcId = null;
+ Ht.rvfcId = null;
try {
- ot.rafId != null && typeof cancelAnimationFrame == "function" && cancelAnimationFrame(ot.rafId);
- } catch (Ie) {
- (ne = console.debug) == null || ne.call(console, Ie);
+ Ht.rafId != null && typeof cancelAnimationFrame == "function" && cancelAnimationFrame(Ht.rafId);
+ } catch (fe) {
+ (se = console.debug) == null || se.call(console, fe);
}
- ot.rafId = null;
- }, tn = (re = 0, ne = null) => {
- var Ne, He, rt, St;
- ot.rafId = null, ot.rvfcId = null;
+ Ht.rafId = null;
+ }, xt = (oe = 0, se = null) => {
+ var Be, gt, Wt, Vt;
+ Ht.rafId = null, Ht.rvfcId = null;
try {
- bt(Re, ne == null ? void 0 : ne.mediaTime), bt(De);
- } catch (Yt) {
- (Ne = console.debug) == null || Ne.call(console, Yt);
+ It(nt, se == null ? void 0 : se.mediaTime), It(At);
+ } catch (_t) {
+ (Be = console.debug) == null || Be.call(console, _t);
}
- if (!(!(Me._ppReverse || !(e != null && e.paused)) || (He = pt.signal) != null && He.aborted)) {
+ if (!(!(we._ppReverse || !(e != null && e.paused)) || (gt = qt.signal) != null && gt.aborted)) {
try {
- if (typeof (e == null ? void 0 : e.requestVideoFrameCallback) == "function" && !Me._ppReverse) {
- ot.rvfcId = e.requestVideoFrameCallback(tn);
+ if (typeof (e == null ? void 0 : e.requestVideoFrameCallback) == "function" && !we._ppReverse) {
+ Ht.rvfcId = e.requestVideoFrameCallback(xt);
return;
}
- } catch (Yt) {
- (rt = console.debug) == null || rt.call(console, Yt);
+ } catch (_t) {
+ (Wt = console.debug) == null || Wt.call(console, _t);
}
try {
- typeof requestAnimationFrame == "function" && (ot.rafId = requestAnimationFrame((Yt) => {
- tn(Yt, { mediaTime: Number(e == null ? void 0 : e.currentTime) || 0 });
+ typeof requestAnimationFrame == "function" && (Ht.rafId = requestAnimationFrame((_t) => {
+ xt(_t, { mediaTime: Number(e == null ? void 0 : e.currentTime) || 0 });
}));
- } catch (Yt) {
- (St = console.debug) == null || St.call(console, Yt);
+ } catch (_t) {
+ (Vt = console.debug) == null || Vt.call(console, _t);
}
}
- }, Pt = () => {
- var ne;
- Zt(), !(!(Me._ppReverse || !(e != null && e.paused)) || (ne = pt.signal) != null && ne.aborted) && tn(0, { mediaTime: Number(e == null ? void 0 : e.currentTime) || 0 });
+ }, Gt = () => {
+ var se;
+ Qt(), !(!(we._ppReverse || !(e != null && e.paused)) || (se = qt.signal) != null && se.aborted) && xt(0, { mediaTime: Number(e == null ? void 0 : e.currentTime) || 0 });
};
- Oe.push(Zt), Oe.push(
- Qe(e, "play", () => {
- bt(It), Pt();
+ Te.push(Qt), Te.push(
+ $e(e, "play", () => {
+ It(Oe), Gt();
})
);
- for (const re of ["pause", "ended"])
- Oe.push(
- Qe(e, re, () => {
- Zt(), bt(It), bt(Re);
+ for (const oe of ["pause", "ended"])
+ Te.push(
+ $e(e, oe, () => {
+ Qt(), It(Oe), It(nt);
})
);
- for (const re of ["timeupdate", "loadedmetadata", "durationchange", "seeked"])
- Oe.push(Qe(e, re, () => bt(Re)));
- Oe.push(Qe(e, "timeupdate", De)), Oe.push(
- Qe(
+ for (const oe of ["timeupdate", "loadedmetadata", "durationchange", "seeked"])
+ Te.push($e(e, oe, () => It(nt)));
+ Te.push($e(e, "timeupdate", At)), Te.push(
+ $e(
e,
"ended",
() => {
- var re, ne, Ie;
- if (y)
+ var oe, se, fe;
+ if (h)
try {
- const { inF: Ne, outF: He, maxF: rt } = ut(), St = Ne <= 0 && He >= rt;
- if (Me.pingpong && !Me._ppReverse) {
- kt();
+ const { inF: Be, outF: gt, maxF: Wt } = tt(), Vt = Be <= 0 && gt >= Wt;
+ if (we.pingpong && !we._ppReverse) {
+ nn();
return;
}
- if (!Me.loop && !St) return;
- te(Ne);
+ if (!we.loop && !Vt) return;
+ Ce(Be);
try {
- const Yt = (re = e.play) == null ? void 0 : re.call(e);
- Yt && typeof Yt.catch == "function" && Yt.catch(() => {
+ const _t = (oe = e.play) == null ? void 0 : oe.call(e);
+ _t && typeof _t.catch == "function" && _t.catch(() => {
});
- } catch (Yt) {
- (ne = console.debug) == null || ne.call(console, Yt);
+ } catch (_t) {
+ (se = console.debug) == null || se.call(console, _t);
}
- } catch (Ne) {
- (Ie = console.debug) == null || Ie.call(console, Ne);
+ } catch (Be) {
+ (fe = console.debug) == null || fe.call(console, Be);
}
},
{ passive: !0 }
)
- ), y && Oe.push(
- Qe(e, "mjr:frameStep", () => {
- bt(me);
+ ), h && Te.push(
+ $e(e, "mjr:frameStep", () => {
+ It(Ye);
})
- ), y && (Oe.push(
- Qe(e, "loadedmetadata", () => {
- var re;
+ ), h && (Te.push(
+ $e(e, "loadedmetadata", () => {
+ var oe;
try {
- const ne = Xe();
- ne > 0 && Me.inFrame == null && Me.outFrame == null && (Me.inFrame = 0, Me.outFrame = ne, nt());
- } catch (ne) {
- (re = console.debug) == null || re.call(console, ne);
+ const se = Ke();
+ se > 0 && we.inFrame == null && we.outFrame == null && (we.inFrame = 0, we.outFrame = se, at());
+ } catch (se) {
+ (oe = console.debug) == null || oe.call(console, se);
}
- Wt();
+ Mt();
})
- ), Oe.push(
- Qe(e, "durationchange", () => bt(Wt))
+ ), Te.push(
+ $e(e, "durationchange", () => It(Mt))
));
- for (const re of ["volumechange"])
- Oe.push(Qe(e, re, () => bt(Tt)));
+ for (const oe of ["volumechange"])
+ Te.push($e(e, oe, () => It(pe)));
try {
- Me.fps = Qi(ee.value, 30), Me.step = Math.max(1, Math.floor(Number(q.value) || 1)), nt(), Ot(), Le(Me.playbackRate);
- } catch (re) {
- (l = console.debug) == null || l.call(console, re);
+ we.fps = Qi(ae.value, 30), we.step = Math.max(1, Math.floor(Number(ee.value) || 1)), at(), Ee(), ke(we.playbackRate);
+ } catch (oe) {
+ (a = console.debug) == null || a.call(console, oe);
}
- bt(It), bt(Re), bt(Wt), bt(Tt);
+ It(Oe), It(nt), It(Mt), It(pe);
try {
- (!(e != null && e.paused) || Me._ppReverse) && Pt();
- } catch (re) {
- (a = console.debug) == null || a.call(console, re);
+ (!(e != null && e.paused) || we._ppReverse) && Gt();
+ } catch (oe) {
+ (c = console.debug) == null || c.call(console, oe);
}
- const vt = (re = {}) => {
- var Ne, He, rt, St, Yt;
- let ne = 0, Ie = !1;
+ const je = (oe = {}) => {
+ var Be, gt, Wt, Vt, _t;
+ let se = 0, fe = !1;
try {
- ne = Math.max(0, Xe()), Ie = ne > 0 && Me.outFrame != null && Me.outFrame >= ne - 1;
- } catch (Gt) {
- (Ne = console.debug) == null || Ne.call(console, Gt);
+ se = Math.max(0, Ke()), fe = se > 0 && we.outFrame != null && we.outFrame >= se - 1;
+ } catch (Xt) {
+ (Be = console.debug) == null || Be.call(console, Xt);
}
try {
- const Gt = Number(re == null ? void 0 : re.fps);
- if (Number.isFinite(Gt) && Gt > 0) {
- Me.fps = Qi(Gt, Me.fps || 30);
+ const Xt = Number(oe == null ? void 0 : oe.fps);
+ if (Number.isFinite(Xt) && Xt > 0) {
+ we.fps = Qi(Xt, we.fps || 30);
try {
- (He = ee == null ? void 0 : ee.matches) != null && He.call(ee, ":focus") || (ee.value = String(Me.fps));
- } catch (Qt) {
- (rt = console.debug) == null || rt.call(console, Qt);
+ (gt = ae == null ? void 0 : ae.matches) != null && gt.call(ae, ":focus") || (ae.value = String(we.fps));
+ } catch (tn) {
+ (Wt = console.debug) == null || Wt.call(console, tn);
}
}
- } catch (Gt) {
- (St = console.debug) == null || St.call(console, Gt);
+ } catch (Xt) {
+ (Vt = console.debug) == null || Vt.call(console, Xt);
}
try {
- const Gt = Number(re == null ? void 0 : re.frameCount);
- Me.frameCount = Number.isFinite(Gt) && Gt > 0 ? Math.floor(Gt) : null;
+ const Xt = Number(oe == null ? void 0 : oe.frameCount);
+ we.frameCount = Number.isFinite(Xt) && Xt > 0 ? Math.floor(Xt) : null;
} catch {
- Me.frameCount = null;
+ we.frameCount = null;
}
try {
- const Gt = Math.max(0, Xe());
- Ie && Gt > ne + 0.5 && (Me.outFrame = null), nt(), Ot(), Re(), Wt();
- } catch (Gt) {
- (Yt = console.debug) == null || Yt.call(console, Gt);
+ const Xt = Math.max(0, Ke());
+ fe && Xt > se + 0.5 && (we.outFrame = null), at(), Ee(), nt(), Mt();
+ } catch (Xt) {
+ (_t = console.debug) == null || _t.call(console, Xt);
}
};
try {
- if (y) {
- const re = Number(t == null ? void 0 : t.initialFps), ne = Number(t == null ? void 0 : t.initialFrameCount);
- (Number.isFinite(re) || Number.isFinite(ne)) && vt({ fps: re, frameCount: ne });
+ if (h) {
+ const oe = Number(t == null ? void 0 : t.initialFps), se = Number(t == null ? void 0 : t.initialFrameCount);
+ (Number.isFinite(oe) || Number.isFinite(se)) && je({ fps: oe, frameCount: se });
}
- } catch (re) {
- (c = console.debug) == null || c.call(console, re);
+ } catch (oe) {
+ (s = console.debug) == null || s.call(console, oe);
}
- if (y) {
- const re = { active: !1, which: null, pointerId: null, ac: null, captureEl: null }, ne = (rt) => {
+ if (h) {
+ const oe = { active: !1, which: null, pointerId: null, ac: null, captureEl: null }, se = (Wt) => {
try {
- const St = b.getBoundingClientRect(), Yt = go((Number(rt) || 0) - St.left, 0, St.width || 1), Gt = St.width > 0 ? Yt / St.width : 0, { maxF: Qt } = ut();
- return go(Math.round(Gt * Qt), 0, Qt);
+ const Vt = L.getBoundingClientRect(), _t = go((Number(Wt) || 0) - Vt.left, 0, Vt.width || 1), Xt = Vt.width > 0 ? _t / Vt.width : 0, { maxF: tn } = tt();
+ return go(Math.round(Xt * tn), 0, tn);
} catch {
return 0;
}
- }, Ie = (rt, St) => {
- var Gt, Qt, Yn, wn, xn, en, Vn, pn, Nn;
- Te(rt);
+ }, fe = (Wt, Vt) => {
+ var Xt, tn, Ln, Mn, Xn, rn, vn, re, Ie;
+ rt(Wt);
try {
- (Qt = (Gt = re.ac) == null ? void 0 : Gt.abort) == null || Qt.call(Gt);
- } catch (ae) {
- (Yn = console.debug) == null || Yn.call(console, ae);
+ (tn = (Xt = oe.ac) == null ? void 0 : Xt.abort) == null || tn.call(Xt);
+ } catch (Ge) {
+ (Ln = console.debug) == null || Ln.call(console, Ge);
}
- re.ac = null, re.active = !0, re.which = St, re.pointerId = rt.pointerId;
+ oe.ac = null, oe.active = !0, oe.which = Vt, oe.pointerId = Wt.pointerId;
try {
- re.captureEl = rt.currentTarget || null;
+ oe.captureEl = Wt.currentTarget || null;
} catch {
- re.captureEl = null;
+ oe.captureEl = null;
}
try {
- (xn = (wn = re.captureEl) == null ? void 0 : wn.setPointerCapture) == null || xn.call(wn, rt.pointerId);
- } catch (ae) {
- (en = console.debug) == null || en.call(console, ae);
+ (Xn = (Mn = oe.captureEl) == null ? void 0 : Mn.setPointerCapture) == null || Xn.call(Mn, Wt.pointerId);
+ } catch (Ge) {
+ (rn = console.debug) == null || rn.call(console, Ge);
}
try {
- (Vn = b.setPointerCapture) == null || Vn.call(b, rt.pointerId);
- } catch (ae) {
- (pn = console.debug) == null || pn.call(console, ae);
+ (vn = L.setPointerCapture) == null || vn.call(L, Wt.pointerId);
+ } catch (Ge) {
+ (re = console.debug) == null || re.call(console, Ge);
}
try {
- const ae = new AbortController();
- re.ac = ae, window.addEventListener("pointermove", Ne, {
+ const Ge = new AbortController();
+ oe.ac = Ge, window.addEventListener("pointermove", Be, {
passive: !1,
capture: !0,
- signal: ae.signal
- }), window.addEventListener("pointerup", He, {
+ signal: Ge.signal
+ }), window.addEventListener("pointerup", gt, {
passive: !1,
capture: !0,
- signal: ae.signal
- }), window.addEventListener("pointercancel", He, {
+ signal: Ge.signal
+ }), window.addEventListener("pointercancel", gt, {
passive: !1,
capture: !0,
- signal: ae.signal
+ signal: Ge.signal
});
- } catch (ae) {
- (Nn = console.debug) == null || Nn.call(console, ae);
+ } catch (Ge) {
+ (Ie = console.debug) == null || Ie.call(console, Ge);
}
- const Yt = ne(rt.clientX);
- St === "in" ? Me.inFrame = Yt : Me.outFrame = Yt, nt(), Re(), Wt(), lt({ prefer: St });
- }, Ne = (rt) => {
- if (!re.active) return;
- Te(rt);
- const St = ne(rt.clientX);
- re.which === "in" ? Me.inFrame = St : Me.outFrame = St, nt(), Re(), Wt();
- }, He = (rt) => {
- var St, Yt, Gt, Qt, Yn, wn, xn, en, Vn;
- if (re.active) {
- Te(rt), re.active = !1;
+ const _t = se(Wt.clientX);
+ Vt === "in" ? we.inFrame = _t : we.outFrame = _t, at(), nt(), Mt(), dt({ prefer: Vt });
+ }, Be = (Wt) => {
+ if (!oe.active) return;
+ rt(Wt);
+ const Vt = se(Wt.clientX);
+ oe.which === "in" ? we.inFrame = Vt : we.outFrame = Vt, at(), nt(), Mt();
+ }, gt = (Wt) => {
+ var Vt, _t, Xt, tn, Ln, Mn, Xn, rn, vn;
+ if (oe.active) {
+ rt(Wt), oe.active = !1;
try {
- (St = b.releasePointerCapture) == null || St.call(b, re.pointerId);
- } catch (pn) {
- (Yt = console.debug) == null || Yt.call(console, pn);
+ (Vt = L.releasePointerCapture) == null || Vt.call(L, oe.pointerId);
+ } catch (re) {
+ (_t = console.debug) == null || _t.call(console, re);
}
try {
- (Qt = (Gt = re.captureEl) == null ? void 0 : Gt.releasePointerCapture) == null || Qt.call(Gt, re.pointerId);
- } catch (pn) {
- (Yn = console.debug) == null || Yn.call(console, pn);
+ (tn = (Xt = oe.captureEl) == null ? void 0 : Xt.releasePointerCapture) == null || tn.call(Xt, oe.pointerId);
+ } catch (re) {
+ (Ln = console.debug) == null || Ln.call(console, re);
}
- re.captureEl = null, re.pointerId = null;
+ oe.captureEl = null, oe.pointerId = null;
try {
- lt({ prefer: re.which });
- } catch (pn) {
- (wn = console.debug) == null || wn.call(console, pn);
+ dt({ prefer: oe.which });
+ } catch (re) {
+ (Mn = console.debug) == null || Mn.call(console, re);
}
try {
- (en = (xn = re.ac) == null ? void 0 : xn.abort) == null || en.call(xn);
- } catch (pn) {
- (Vn = console.debug) == null || Vn.call(console, pn);
+ (rn = (Xn = oe.ac) == null ? void 0 : Xn.abort) == null || rn.call(Xn);
+ } catch (re) {
+ (vn = console.debug) == null || vn.call(console, re);
}
- re.ac = null;
+ oe.ac = null;
}
};
- Oe.push(
- Qe(F, "pointerdown", (rt) => Ie(rt, "in"), {
+ Te.push(
+ $e(k, "pointerdown", (Wt) => fe(Wt, "in"), {
passive: !1
})
- ), Oe.push(
- Qe(N, "pointerdown", (rt) => Ie(rt, "out"), {
+ ), Te.push(
+ $e(Y, "pointerdown", (Wt) => fe(Wt, "out"), {
passive: !1
})
- ), Oe.push(
- Qe(v, "pointerdown", (rt) => Ie(rt, "in"), {
+ ), Te.push(
+ $e(w, "pointerdown", (Wt) => fe(Wt, "in"), {
passive: !1
})
- ), Oe.push(
- Qe(w, "pointerdown", (rt) => Ie(rt, "out"), {
+ ), Te.push(
+ $e(R, "pointerdown", (Wt) => fe(Wt, "out"), {
passive: !1
})
- ), Oe.push(Qe(b, "pointermove", Ne, { passive: !1 })), Oe.push(Qe(b, "pointerup", He, { passive: !1 })), Oe.push(Qe(b, "pointercancel", He, { passive: !1 }));
+ ), Te.push($e(L, "pointermove", Be, { passive: !1 })), Te.push($e(L, "pointerup", gt, { passive: !1 })), Te.push($e(L, "pointercancel", gt, { passive: !1 }));
}
- return bt(() => C.appendChild(g)), {
- controlsEl: g,
- setMediaInfo: vt,
- setPlaybackRate: (re) => {
+ return It(() => g.appendChild(y)), {
+ controlsEl: y,
+ setMediaInfo: je,
+ setPlaybackRate: (oe) => {
try {
- return Le(re);
+ return ke(oe);
} catch {
- return Me.playbackRate || 1;
+ return we.playbackRate || 1;
}
},
getPlaybackRate: () => {
try {
- return Number(Me.playbackRate) || 1;
+ return Number(we.playbackRate) || 1;
} catch {
return 1;
}
},
- adjustPlaybackRate: (re) => {
+ adjustPlaybackRate: (oe) => {
try {
- const ne = Number(re);
- return Number.isFinite(ne) ? Le((Number(Me.playbackRate) || 1) + ne) : Me.playbackRate || 1;
+ const se = Number(oe);
+ return Number.isFinite(se) ? ke((Number(we.playbackRate) || 1) + se) : we.playbackRate || 1;
} catch {
- return Me.playbackRate || 1;
+ return we.playbackRate || 1;
}
},
togglePlay: () => {
try {
- return pe(), !0;
+ return ut(), !0;
} catch {
return !1;
}
},
- stepFrames: (re) => {
+ stepFrames: (oe) => {
try {
- return ye(re), !0;
+ return ye(oe), !0;
} catch {
return !1;
}
},
setInPoint: () => {
- if (!y) return !1;
+ if (!h) return !1;
try {
- return Me.inFrame = Ee(), nt(), Re(), Wt(), lt({ prefer: "in" }), !0;
+ return we.inFrame = lt(), at(), nt(), Mt(), dt({ prefer: "in" }), !0;
} catch {
return !1;
}
},
setOutPoint: () => {
- if (!y) return !1;
+ if (!h) return !1;
try {
- return Me.outFrame = Ee(), nt(), Re(), Wt(), lt({ prefer: "out" }), !0;
+ return we.outFrame = lt(), at(), nt(), Mt(), dt({ prefer: "out" }), !0;
} catch {
return !1;
}
},
goToIn: () => {
- if (!y) return !1;
+ if (!h) return !1;
try {
- const { inF: re } = ut();
- return te(re), me(), !0;
+ const { inF: oe } = tt();
+ return Ce(oe), Ye(), !0;
} catch {
return !1;
}
},
goToOut: () => {
- if (!y) return !1;
+ if (!h) return !1;
try {
- const { outF: re } = ut();
- return te(re), me(), !0;
+ const { outF: oe } = tt();
+ return Ce(oe), Ye(), !0;
} catch {
return !1;
}
},
destroy: () => {
- for (const re of Oe) bt(re);
- bt(() => g.remove());
+ for (const oe of Te) It(oe);
+ It(() => y.remove());
}
};
} catch {
@@ -11978,7 +12005,7 @@ function nA(e) {
}
}
function di(e) {
- var t, n, i, o, r, l, a, c, s, d, u, I, y, S, Z, C, g, A, p, b, L, h, G, W;
+ var t, n, i, o, r, l, a, c, s, d, u, I, A, h, S, W, g, y, p, b, L, C, G, Z;
if (e) {
try {
(n = (t = e._mjrSyncAbort) == null ? void 0 : t.abort) == null || n.call(t);
@@ -12015,21 +12042,21 @@ function di(e) {
(I = console.debug) == null || I.call(console, x);
}
try {
- (y = X.removeAttribute) == null || y.call(X, "src");
+ (A = X.removeAttribute) == null || A.call(X, "src");
} catch (x) {
- (S = console.debug) == null || S.call(console, x);
+ (h = console.debug) == null || h.call(console, x);
}
try {
- (Z = X.load) == null || Z.call(X);
+ (S = X.load) == null || S.call(X);
} catch (x) {
- (C = console.debug) == null || C.call(console, x);
+ (W = console.debug) == null || W.call(console, x);
}
}
} catch (f) {
(g = console.debug) == null || g.call(console, f);
}
try {
- const f = (A = e.querySelectorAll) == null ? void 0 : A.call(e, ".mjr-viewer-media, .mjr-viewer-audio-viz");
+ const f = (y = e.querySelectorAll) == null ? void 0 : y.call(e, ".mjr-viewer-media, .mjr-viewer-audio-viz");
if (f && f.length)
for (const X of f) {
try {
@@ -12040,7 +12067,7 @@ function di(e) {
try {
X._mjrProc = null;
} catch (x) {
- (h = console.debug) == null || h.call(console, x);
+ (C = console.debug) == null || C.call(console, x);
}
try {
X.width = 0, X.height = 0;
@@ -12049,7 +12076,7 @@ function di(e) {
}
}
} catch (f) {
- (W = console.debug) == null || W.call(console, f);
+ (Z = console.debug) == null || Z.call(console, f);
}
}
}
@@ -12063,8 +12090,8 @@ function iA(e) {
}
const n = {
unsubs: t,
- safeAddListener: Qe,
- safeCall: bt,
+ safeAddListener: $e,
+ safeCall: It,
destroyMediaProcessorsIn: di,
_observer: null,
disposeAll: () => {
@@ -12075,7 +12102,7 @@ function iA(e) {
(c = console.debug) == null || c.call(console, u);
}
try {
- for (const u of t) bt(u);
+ for (const u of t) It(u);
} catch (u) {
(s = console.debug) == null || s.call(console, u);
}
@@ -12097,7 +12124,7 @@ function iA(e) {
} catch (d) {
(c = console.debug) == null || c.call(console, d);
}
- bt(() => {
+ It(() => {
var d;
return (d = n.disposeAll) == null ? void 0 : d.call(n);
}, "lifecycle:autoDispose");
@@ -12145,7 +12172,7 @@ function fl(e, t) {
n.disabled || (n.style.background = "transparent");
}, n;
}
-function Cc(e, t) {
+function Zc(e, t) {
var i;
const n = document.createElement("button");
n.textContent = e, n.dataset.mode = t;
@@ -12165,7 +12192,7 @@ function Cc(e, t) {
transition: all 0.16s;
`, n;
}
-function Sr(e, t) {
+function Gr(e, t) {
const n = String(e || "").trim(), i = String(t || "").trim();
if (!i) return n;
if (!n) return i;
@@ -12179,10 +12206,10 @@ function Sr(e, t) {
}
function eb(e, t, n, { setAriaLabel: i = !0, ariaLabel: o = null } = {}) {
if (!e) return "";
- const r = Sr(t, n);
+ const r = Gr(t, n);
if (e.title = r, i) {
const l = o ?? t;
- e.setAttribute("aria-label", Sr(l, n));
+ e.setAttribute("aria-label", Gr(l, n));
}
return r;
}
@@ -12196,7 +12223,7 @@ function oA({
onAudioVizModeChanged: l,
getCanAB: a
} = {}) {
- var Te, Oe, pt, Me, Xt, Mt, me, Pe, Le, Ot, Xe, Ee, Ke, nt, ut, It, dt;
+ var Re, rt, Te, qt, kt, we, me, He, Ye, Pt, ke, Ee, Ke, lt, wt, at, tt;
const c = {
channel: "rgb",
exposureEV: 0,
@@ -12223,33 +12250,33 @@ function oA({
`;
const d = document.createElement("div");
d.className = "mjr-viewer-tools-deck", d.style.cssText = "display:flex; flex-wrap:nowrap; gap:8px; align-items:center; min-width:0; overflow-x:auto; overflow-y:hidden;";
- const u = ({ key: Re, eyebrow: Wt, title: lt } = {}) => {
- const qt = document.createElement("section");
- qt.className = "mjr-viewer-tools-panel", Re && (qt.dataset.panel = String(Re)), qt.style.cssText = "display:flex; flex-direction:column; gap:4px; min-width:0; padding:5px 6px; border-radius:10px; border:1px solid rgba(255,255,255,0.08); background:linear-gradient(180deg, rgba(255,255,255,0.045), rgba(255,255,255,0.02)); box-shadow:inset 0 1px 0 rgba(255,255,255,0.04); flex:0 0 auto;";
- const yt = document.createElement("div");
- yt.className = "mjr-viewer-tools-panel-head", yt.style.cssText = "display:none; align-items:flex-start; justify-content:space-between; gap:6px; min-width:0;";
- const mt = document.createElement("div");
- mt.className = "mjr-viewer-tools-panel-heading", mt.style.cssText = "display:flex; flex-direction:column; gap:1px; min-width:0;";
- const kt = document.createElement("span");
- kt.className = "mjr-viewer-tools-panel-eyebrow", kt.textContent = Wt || "";
+ const u = ({ key: Oe, eyebrow: Rt, title: nt } = {}) => {
+ const Mt = document.createElement("section");
+ Mt.className = "mjr-viewer-tools-panel", Oe && (Mt.dataset.panel = String(Oe)), Mt.style.cssText = "display:flex; flex-direction:column; gap:4px; min-width:0; padding:5px 6px; border-radius:10px; border:1px solid rgba(255,255,255,0.08); background:linear-gradient(180deg, rgba(255,255,255,0.045), rgba(255,255,255,0.02)); box-shadow:inset 0 1px 0 rgba(255,255,255,0.04); flex:0 0 auto;";
+ const dt = document.createElement("div");
+ dt.className = "mjr-viewer-tools-panel-head", dt.style.cssText = "display:none; align-items:flex-start; justify-content:space-between; gap:6px; min-width:0;";
+ const bt = document.createElement("div");
+ bt.className = "mjr-viewer-tools-panel-heading", bt.style.cssText = "display:flex; flex-direction:column; gap:1px; min-width:0;";
+ const Yt = document.createElement("span");
+ Yt.className = "mjr-viewer-tools-panel-eyebrow", Yt.textContent = Rt || "";
const $t = document.createElement("span");
- $t.className = "mjr-viewer-tools-panel-title", $t.textContent = lt || "";
- const Tt = document.createElement("div");
- return Tt.className = "mjr-viewer-tools-panel-body", Tt.style.cssText = "display:flex; align-items:center; flex-wrap:nowrap; gap:6px; min-width:0;", mt.appendChild(kt), mt.appendChild($t), yt.appendChild(mt), qt.appendChild(yt), qt.appendChild(Tt), { panel: qt, body: Tt, head: yt, heading: mt, eyebrowEl: kt, titleEl: $t };
- }, I = u({ key: "grade", eyebrow: "Image", title: "Adjustments" }), y = u({ key: "overlay", eyebrow: "Viewer", title: "Guides & Compare" }), S = u({ key: "inspect", eyebrow: "Inspect", title: "Probe" }), Z = u({ key: "actions", eyebrow: "Actions", title: "Reset & Export" }), C = u({ key: "info", eyebrow: "Infos", title: "Help" }), g = document.createElement("div");
+ $t.className = "mjr-viewer-tools-panel-title", $t.textContent = nt || "";
+ const nn = document.createElement("div");
+ return nn.className = "mjr-viewer-tools-panel-body", nn.style.cssText = "display:flex; align-items:center; flex-wrap:nowrap; gap:6px; min-width:0;", bt.appendChild(Yt), bt.appendChild($t), dt.appendChild(bt), Mt.appendChild(dt), Mt.appendChild(nn), { panel: Mt, body: nn, head: dt, heading: bt, eyebrowEl: Yt, titleEl: $t };
+ }, I = u({ key: "grade", eyebrow: "Image", title: "Adjustments" }), A = u({ key: "overlay", eyebrow: "Viewer", title: "Guides & Compare" }), h = u({ key: "inspect", eyebrow: "Inspect", title: "Probe" }), S = u({ key: "actions", eyebrow: "Actions", title: "Reset & Export" }), W = u({ key: "info", eyebrow: "Infos", title: "Help" }), g = document.createElement("div");
g.className = "mjr-viewer-tools-actions", g.style.cssText = "display:flex; align-items:center; justify-content:flex-start; gap:6px; flex-wrap:wrap; min-width:0;";
- const A = document.createElement("div");
- A.className = "mjr-viewer-tools-meta", A.style.cssText = "display:flex; align-items:center; justify-content:flex-start; gap:6px; flex-wrap:nowrap; min-width:0;";
- const p = ({ key: Re, label: Wt, accentRgb: lt } = {}) => {
- const qt = document.createElement("div");
- if (qt.className = "mjr-viewer-tools-group", Re && (qt.dataset.group = String(Re)), lt && qt.style.setProperty("--mjr-group-accent", String(lt)), qt.style.cssText = "display:flex; align-items:center; gap:6px; padding:2px 6px; border-radius:8px; border:1px solid rgba(196,202,210,0.14); background:rgba(10,12,16,0.22);", Wt) {
- const yt = document.createElement("span");
- yt.className = "mjr-viewer-tools-group-label", yt.textContent = Wt, yt.style.cssText = "font-size: 10px; color: rgba(255,255,255,0.7);", qt.appendChild(yt);
+ const y = document.createElement("div");
+ y.className = "mjr-viewer-tools-meta", y.style.cssText = "display:flex; align-items:center; justify-content:flex-start; gap:6px; flex-wrap:nowrap; min-width:0;";
+ const p = ({ key: Oe, label: Rt, accentRgb: nt } = {}) => {
+ const Mt = document.createElement("div");
+ if (Mt.className = "mjr-viewer-tools-group", Oe && (Mt.dataset.group = String(Oe)), nt && Mt.style.setProperty("--mjr-group-accent", String(nt)), Mt.style.cssText = "display:flex; align-items:center; gap:6px; padding:2px 6px; border-radius:8px; border:1px solid rgba(196,202,210,0.14); background:rgba(10,12,16,0.22);", Rt) {
+ const dt = document.createElement("span");
+ dt.className = "mjr-viewer-tools-group-label", dt.textContent = Rt, dt.style.cssText = "font-size: 10px; color: rgba(255,255,255,0.7);", Mt.appendChild(dt);
}
- return qt;
- }, b = (Re, Wt) => {
- const lt = document.createElement("select");
- lt.title = Re || "", lt.className = "mjr-viewer-tools-select", lt.style.cssText = `
+ return Mt;
+ }, b = (Oe, Rt) => {
+ const nt = document.createElement("select");
+ nt.title = Oe || "", nt.className = "mjr-viewer-tools-select", nt.style.cssText = `
height: 24px;
padding: 0 6px;
border-radius: 6px;
@@ -12259,38 +12286,38 @@ function oA({
font-size: 11px;
outline: none;
`;
- for (const qt of Wt || []) {
- const yt = document.createElement("option");
- yt.value = String(qt.value), yt.textContent = String(qt.label), lt.appendChild(yt);
+ for (const Mt of Rt || []) {
+ const dt = document.createElement("option");
+ dt.value = String(Mt.value), dt.textContent = String(Mt.label), nt.appendChild(dt);
}
- return lt;
- }, L = (Re, { min: Wt, max: lt, step: qt, value: yt }) => {
- const mt = document.createElement("div");
- mt.className = "mjr-viewer-tools-range", mt.style.cssText = "display:flex; align-items:center; gap:6px;";
- const kt = document.createElement("input");
- kt.type = "range", kt.className = "mjr-viewer-tools-range-input", kt.min = String(Wt), kt.max = String(lt), kt.step = String(qt), kt.value = String(yt), kt.title = Re || "", kt.style.cssText = `
+ return nt;
+ }, L = (Oe, { min: Rt, max: nt, step: Mt, value: dt }) => {
+ const bt = document.createElement("div");
+ bt.className = "mjr-viewer-tools-range", bt.style.cssText = "display:flex; align-items:center; gap:6px;";
+ const Yt = document.createElement("input");
+ Yt.type = "range", Yt.className = "mjr-viewer-tools-range-input", Yt.min = String(Rt), Yt.max = String(nt), Yt.step = String(Mt), Yt.value = String(dt), Yt.title = Oe || "", Yt.style.cssText = `
width: 92px;
accent-color: rgba(255,255,255,0.85);
`;
const $t = document.createElement("span");
- return $t.style.cssText = "font-size: 11px; color: rgba(255,255,255,0.9); min-width: 38px; text-align: right;", $t.textContent = String(yt), mt.appendChild(kt), mt.appendChild($t), { wrap: mt, input: kt, out: $t };
- }, h = (Re, Wt, { iconClass: lt = null, accentRgb: qt = null } = {}) => {
- var kt;
- const yt = document.createElement("button");
- if (yt.type = "button", yt.className = "mjr-viewer-tool-btn", yt.setAttribute("aria-label", Wt || Re || "Toggle"), yt.setAttribute("aria-pressed", "false"), qt)
+ return $t.style.cssText = "font-size: 11px; color: rgba(255,255,255,0.9); min-width: 38px; text-align: right;", $t.textContent = String(dt), bt.appendChild(Yt), bt.appendChild($t), { wrap: bt, input: Yt, out: $t };
+ }, C = (Oe, Rt, { iconClass: nt = null, accentRgb: Mt = null } = {}) => {
+ var Yt;
+ const dt = document.createElement("button");
+ if (dt.type = "button", dt.className = "mjr-viewer-tool-btn", dt.setAttribute("aria-label", Rt || Oe || "Toggle"), dt.setAttribute("aria-pressed", "false"), Mt)
try {
- yt.dataset.accentRgb = String(qt);
+ dt.dataset.accentRgb = String(Mt);
} catch ($t) {
- (kt = console.debug) == null || kt.call(console, $t);
+ (Yt = console.debug) == null || Yt.call(console, $t);
}
- if (lt) {
+ if (nt) {
const $t = document.createElement("span");
- $t.className = `pi ${lt}`.trim(), $t.setAttribute("aria-hidden", "true"), $t.style.fontSize = "14px", yt.appendChild($t);
- const Tt = document.createElement("span");
- Tt.textContent = Re || "", Tt.style.cssText = "position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0;", yt.appendChild(Tt);
+ $t.className = `pi ${nt}`.trim(), $t.setAttribute("aria-hidden", "true"), $t.style.fontSize = "14px", dt.appendChild($t);
+ const nn = document.createElement("span");
+ nn.textContent = Oe || "", nn.style.cssText = "position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0;", dt.appendChild(nn);
} else
- yt.textContent = Re;
- yt.title = Wt || "", yt.style.cssText = `
+ dt.textContent = Oe;
+ dt.title = Rt || "", dt.style.cssText = `
height: 24px;
padding: 0 8px;
border-radius: 6px;
@@ -12305,20 +12332,20 @@ function oA({
justify-content: center;
gap: 6px;
position: relative;
- `, yt.dataset.active = "0";
- const mt = ($t) => {
- var ye, We;
- const Tt = !!$t;
- yt.dataset.active = Tt ? "1" : "0";
+ `, dt.dataset.active = "0";
+ const bt = ($t) => {
+ var pe, Ce;
+ const nn = !!$t;
+ dt.dataset.active = nn ? "1" : "0";
try {
- yt.setAttribute("aria-pressed", Tt ? "true" : "false");
- } catch (pe) {
- (ye = console.debug) == null || ye.call(console, pe);
+ dt.setAttribute("aria-pressed", nn ? "true" : "false");
+ } catch (ye) {
+ (pe = console.debug) == null || pe.call(console, ye);
}
- const te = String(((We = yt.dataset) == null ? void 0 : We.accentRgb) || "").trim();
- Tt && te ? (yt.style.background = `rgba(${te}, 0.12)`, yt.style.borderColor = `rgba(${te}, 0.38)`, yt.style.boxShadow = `0 0 0 0.8px rgba(${te}, 0.12) inset`) : (yt.style.background = Tt ? "rgba(214,218,224,0.12)" : "rgba(210,214,220,0.06)", yt.style.borderColor = Tt ? "rgba(214,218,224,0.38)" : "rgba(196,202,210,0.24)", yt.style.boxShadow = "");
+ const ie = String(((Ce = dt.dataset) == null ? void 0 : Ce.accentRgb) || "").trim();
+ nn && ie ? (dt.style.background = `rgba(${ie}, 0.12)`, dt.style.borderColor = `rgba(${ie}, 0.38)`, dt.style.boxShadow = `0 0 0 0.8px rgba(${ie}, 0.12) inset`) : (dt.style.background = nn ? "rgba(214,218,224,0.12)" : "rgba(210,214,220,0.06)", dt.style.borderColor = nn ? "rgba(214,218,224,0.38)" : "rgba(196,202,210,0.24)", dt.style.boxShadow = "");
};
- return mt(!1), { b: yt, setActive: mt };
+ return bt(!1), { b: dt, setActive: bt };
}, G = b("Channel View", [
{ value: "rgb", label: "RGB" },
{ value: "r", label: "R" },
@@ -12328,7 +12355,7 @@ function oA({
{ value: "l", label: "Luma" }
]);
G.title = m("tooltip.colorChannels", "View color channels or luminance");
- const W = L("Exposure (EV)", { min: -10, max: 10, step: 0.1, value: 0 }), f = L("Gamma", { min: 0.1, max: 3, step: 0.01, value: 1 }), X = Object.freeze({
+ const Z = L("Exposure (EV)", { min: -10, max: 10, step: 0.1, value: 0 }), f = L("Gamma", { min: 0.1, max: 3, step: 0.01, value: 1 }), X = Object.freeze({
channel: "120, 180, 255",
exposure: "255, 200, 70",
gamma: "190, 150, 255",
@@ -12344,108 +12371,108 @@ function oA({
borderColor: "rgba(255,255,255,0.14)",
background: "rgba(255,255,255,0.08)",
boxShadow: ""
- }), T = (Re, { accentRgb: Wt, active: lt, title: qt } = {}) => {
- var yt;
+ }), K = (Oe, { accentRgb: Rt, active: nt, title: Mt } = {}) => {
+ var dt;
try {
- if (!Re) return;
- if (qt && (Re.title = String(qt)), !!!lt) {
- Re.style.borderColor = x.borderColor, Re.style.background = x.background, Re.style.boxShadow = x.boxShadow;
+ if (!Oe) return;
+ if (Mt && (Oe.title = String(Mt)), !!!nt) {
+ Oe.style.borderColor = x.borderColor, Oe.style.background = x.background, Oe.style.boxShadow = x.boxShadow;
return;
}
- const kt = String(Wt || "").trim();
- if (!kt) return;
- Re.style.borderColor = `rgba(${kt},0.55)`, Re.style.background = `rgba(${kt},0.14)`, Re.style.boxShadow = `0 0 0 1px rgba(${kt},0.14) inset`;
- } catch (mt) {
- (yt = console.debug) == null || yt.call(console, mt);
+ const Yt = String(Rt || "").trim();
+ if (!Yt) return;
+ Oe.style.borderColor = `rgba(${Yt},0.55)`, Oe.style.background = `rgba(${Yt},0.14)`, Oe.style.boxShadow = `0 0 0 1px rgba(${Yt},0.14) inset`;
+ } catch (bt) {
+ (dt = console.debug) == null || dt.call(console, bt);
}
- }, v = (Re) => {
- var Wt;
+ }, j = (Oe) => {
+ var Rt;
try {
- const lt = String(Re || "rgb"), qt = "rgba(255,255,255,0.14)", yt = "rgba(255,255,255,0.08)";
- if (G.style.boxShadow = "", lt === "r") {
+ const nt = String(Oe || "rgb"), Mt = "rgba(255,255,255,0.14)", dt = "rgba(255,255,255,0.08)";
+ if (G.style.boxShadow = "", nt === "r") {
G.style.borderColor = "rgba(255,90,90,0.60)", G.style.background = "rgba(255,90,90,0.14)", G.style.boxShadow = "0 0 0 1px rgba(255,90,90,0.14) inset";
return;
}
- if (lt === "g") {
+ if (nt === "g") {
G.style.borderColor = "rgba(90,255,140,0.55)", G.style.background = "rgba(90,255,140,0.12)", G.style.boxShadow = "0 0 0 1px rgba(90,255,140,0.12) inset";
return;
}
- if (lt === "b") {
+ if (nt === "b") {
G.style.borderColor = "rgba(90,160,255,0.60)", G.style.background = "rgba(90,160,255,0.12)", G.style.boxShadow = "0 0 0 1px rgba(90,160,255,0.12) inset";
return;
}
- if (lt === "l") {
+ if (nt === "l") {
G.style.borderColor = "rgba(255,210,90,0.60)", G.style.background = "rgba(255,210,90,0.12)", G.style.boxShadow = "0 0 0 1px rgba(255,210,90,0.12) inset";
return;
}
- if (lt === "a") {
+ if (nt === "a") {
G.style.borderColor = "rgba(220,220,220,0.35)", G.style.background = "rgba(255,255,255,0.10)", G.style.boxShadow = "0 0 0 1px rgba(255,255,255,0.08) inset";
return;
}
- if (lt === "rgb") {
+ if (nt === "rgb") {
G.style.borderColor = "rgba(255,255,255,0.22)", G.style.background = "linear-gradient(90deg, rgba(255,90,90,0.16), rgba(90,255,140,0.14), rgba(90,160,255,0.16))", G.style.boxShadow = "0 0 0 1px rgba(255,255,255,0.10) inset";
return;
}
- G.style.borderColor = qt, G.style.background = yt;
- } catch (lt) {
- (Wt = console.debug) == null || Wt.call(console, lt);
+ G.style.borderColor = Mt, G.style.background = dt;
+ } catch (nt) {
+ (Rt = console.debug) == null || Rt.call(console, nt);
}
- }, w = (Re, { accentRgb: Wt, active: lt } = {}) => {
- var qt;
+ }, w = (Oe, { accentRgb: Rt, active: nt } = {}) => {
+ var Mt;
try {
- if (!Re) return;
- if (!!!lt) {
- Re.style.color = "rgba(255,255,255,0.9)";
+ if (!Oe) return;
+ if (!!!nt) {
+ Oe.style.color = "rgba(255,255,255,0.9)";
return;
}
- const mt = String(Wt || "").trim();
- if (!mt) return;
- Re.style.color = `rgb(${mt})`;
- } catch (yt) {
- (qt = console.debug) == null || qt.call(console, yt);
+ const bt = String(Rt || "").trim();
+ if (!bt) return;
+ Oe.style.color = `rgb(${bt})`;
+ } catch (dt) {
+ (Mt = console.debug) == null || Mt.call(console, dt);
}
- }, R = (Re, { accentRgb: Wt, active: lt } = {}) => {
- var qt;
+ }, R = (Oe, { accentRgb: Rt, active: nt } = {}) => {
+ var Mt;
try {
- if (!Re) return;
- if (!!!lt) {
- Re.style.background = "", Re.style.borderColor = "transparent", Re.style.boxShadow = "";
+ if (!Oe) return;
+ if (!!!nt) {
+ Oe.style.background = "", Oe.style.borderColor = "transparent", Oe.style.boxShadow = "";
return;
}
- const mt = String(Wt || "").trim();
- if (!mt) return;
- Re.style.background = `rgba(${mt},0.10)`, Re.style.borderColor = `rgba(${mt},0.38)`, Re.style.boxShadow = `0 0 0 1px rgba(${mt},0.12) inset`;
- } catch (yt) {
- (qt = console.debug) == null || qt.call(console, yt);
+ const bt = String(Rt || "").trim();
+ if (!bt) return;
+ Oe.style.background = `rgba(${bt},0.10)`, Oe.style.borderColor = `rgba(${bt},0.38)`, Oe.style.boxShadow = `0 0 0 1px rgba(${bt},0.12) inset`;
+ } catch (dt) {
+ (Mt = console.debug) == null || Mt.call(console, dt);
}
- }, Y = h("Zebra", "Zebra Highlights (Z)", {
+ }, V = C("Zebra", "Zebra Highlights (Z)", {
iconClass: "pi-bars",
accentRgb: X.zebra
- }), F = h("Scopes", "Scopes overlay", {
+ }), O = C("Scopes", "Scopes overlay", {
iconClass: "pi-chart-bar",
accentRgb: X.analysis
- }), N = b("Scopes", [
+ }), k = b("Scopes", [
{ value: "off", label: "Off" },
{ value: "hist", label: "Histogram" },
{ value: "wave", label: "Waveform" },
{ value: "both", label: "Both" }
]);
- N.title = m("tooltip.scopesHistogram", "Show histogram/waveform scopes");
- const V = h("Grid", "Grid (G)", {
+ k.title = m("tooltip.scopesHistogram", "Show histogram/waveform scopes");
+ const Y = C("Grid", "Grid (G)", {
iconClass: "pi-th-large",
accentRgb: X.overlay
- }), k = b("Grid Overlay", [
+ }), N = b("Grid Overlay", [
{ value: 0, label: "Off" },
{ value: 1, label: "Thirds" },
{ value: 2, label: "Center" },
{ value: 3, label: "Safe" },
{ value: 4, label: "Golden" }
]);
- k.title = Sr(
+ N.title = Gr(
m("tooltip.gridOverlay", "Grid overlay (rule of thirds, center)"),
"G"
);
- const K = h("Mask", "Format mask (dim outside)", {
+ const U = C("Mask", "Format mask (dim outside)", {
iconClass: "pi-stop",
accentRgb: X.overlay
}), z = b("Format", [
@@ -12457,31 +12484,31 @@ function oA({
{ value: "9:16", label: "9:16" }
]);
z.title = m("tooltip.aspectRatioMask", "Aspect ratio overlay mask");
- const B = L("Mask Opacity", {
+ const T = L("Mask Opacity", {
min: 0,
max: 0.9,
step: 0.05,
value: 0.65
- }), J = h("Probe", "Pixel Probe (I)", {
+ }), J = C("Probe", "Pixel Probe (I)", {
iconClass: "pi-eye",
accentRgb: X.probe
- }), P = h("Loupe", "Loupe (L)", {
+ }), P = C("Loupe", "Loupe (L)", {
iconClass: "pi-search-plus",
accentRgb: X.loupe
- }), H = h("HUD", "Viewer HUD", {
+ }), E = C("HUD", "Viewer HUD", {
iconClass: "pi-info-circle",
accentRgb: X.overlay
- }), $ = h("Focus", "Distraction-free mode (X)", {
+ }), $ = C("Focus", "Distraction-free mode (X)", {
iconClass: "pi-window-maximize",
accentRgb: X.overlay
- }), E = h(
+ }), H = C(
"Gen",
- Sr("Generation info (prompt/model)", "D"),
+ Gr("Generation info (prompt/model)", "D"),
{
iconClass: "pi-book",
accentRgb: X.geninfo
}
- ), oe = b("A/B Compare Mode", [
+ ), ne = b("A/B Compare Mode", [
{ value: "wipe", label: "Wipe (H)" },
{ value: "wipeV", label: "Wipe (V)" },
{ value: "difference", label: "Difference" },
@@ -12491,124 +12518,124 @@ function oA({
{ value: "multiply", label: "Multiply" },
{ value: "screen", label: "Screen" }
]);
- oe.title = m("tooltip.compareBlendMode", "Compare blend mode");
+ ne.title = m("tooltip.compareBlendMode", "Compare blend mode");
const M = b("Audio Visualizer", [
{ value: "simple", label: "Simple" },
{ value: "artistic", label: "Artistic" }
]);
M.title = m("tooltip.audioVisualizer", "Audio visualizer mode");
- const j = fl(
+ const v = fl(
"Reset",
m("tooltip.resetPlayerControls", "Reset all viewer controls")
);
- j.style.height = "26px", j.style.fontSize = "11px", j.style.padding = "0 8px", (Oe = (Te = j.classList) == null ? void 0 : Te.add) == null || Oe.call(Te, "mjr-viewer-tool-btn", "mjr-viewer-tool-btn--reset"), (Me = (pt = j.classList) == null ? void 0 : pt.add) == null || Me.call(pt, "mjr-viewer-tools-action", "mjr-viewer-tools-action--primary"), j.style.marginLeft = "auto";
- const O = document.createElement("button");
- O.type = "button", O.title = m("tooltip.exportFrame", "Save current frame as PNG"), O.setAttribute("aria-label", m("tooltip.exportFrame", "Save frame as PNG")), O.className = "mjr-viewer-tool-btn mjr-viewer-tool-btn--reset", O.style.cssText = "height:24px; padding:0 8px; display:inline-flex; align-items:center; justify-content:center;";
+ v.style.height = "26px", v.style.fontSize = "11px", v.style.padding = "0 8px", (rt = (Re = v.classList) == null ? void 0 : Re.add) == null || rt.call(Re, "mjr-viewer-tool-btn", "mjr-viewer-tool-btn--reset"), (qt = (Te = v.classList) == null ? void 0 : Te.add) == null || qt.call(Te, "mjr-viewer-tools-action", "mjr-viewer-tools-action--primary"), v.style.marginLeft = "auto";
+ const F = document.createElement("button");
+ F.type = "button", F.title = m("tooltip.exportFrame", "Save current frame as PNG"), F.setAttribute("aria-label", m("tooltip.exportFrame", "Save frame as PNG")), F.className = "mjr-viewer-tool-btn mjr-viewer-tool-btn--reset", F.style.cssText = "height:24px; padding:0 8px; display:inline-flex; align-items:center; justify-content:center;";
const D = document.createElement("span");
- D.className = "pi pi-download", D.setAttribute("aria-hidden", "true"), D.style.fontSize = "14px", O.appendChild(D), (Mt = (Xt = O.classList) == null ? void 0 : Xt.add) == null || Mt.call(Xt, "mjr-viewer-tools-action");
+ D.className = "pi pi-download", D.setAttribute("aria-hidden", "true"), D.style.fontSize = "14px", F.appendChild(D), (we = (kt = F.classList) == null ? void 0 : kt.add) == null || we.call(kt, "mjr-viewer-tools-action");
try {
- O.style.display = "none";
- } catch (Re) {
- (me = console.debug) == null || me.call(console, Re);
+ F.style.display = "none";
+ } catch (Oe) {
+ (me = console.debug) == null || me.call(console, Oe);
}
const q = document.createElement("button");
q.type = "button", q.title = m("tooltip.copyFrame", "Copy current frame to clipboard"), q.setAttribute("aria-label", m("tooltip.copyFrame", "Copy frame to clipboard")), q.className = "mjr-viewer-tool-btn mjr-viewer-tool-btn--reset", q.style.cssText = "height:24px; padding:0 8px; display:inline-flex; align-items:center; justify-content:center;";
const ee = document.createElement("span");
- ee.className = "pi pi-copy", ee.setAttribute("aria-hidden", "true"), ee.style.fontSize = "14px", q.appendChild(ee), (Le = (Pe = q.classList) == null ? void 0 : Pe.add) == null || Le.call(Pe, "mjr-viewer-tools-action");
+ ee.className = "pi pi-copy", ee.setAttribute("aria-hidden", "true"), ee.style.fontSize = "14px", q.appendChild(ee), (Ye = (He = q.classList) == null ? void 0 : He.add) == null || Ye.call(He, "mjr-viewer-tools-action");
try {
q.style.display = "none";
- } catch (Re) {
- (Ot = console.debug) == null || Ot.call(console, Re);
+ } catch (Oe) {
+ (Pt = console.debug) == null || Pt.call(console, Oe);
}
- const ce = p({ key: "channel", label: "Channel", accentRgb: X.channel });
- ce.appendChild(G), I.body.appendChild(ce);
+ const ae = p({ key: "channel", label: "Channel", accentRgb: X.channel });
+ ae.appendChild(G), I.body.appendChild(ae);
const ue = p({ key: "exposure", label: "EV", accentRgb: X.exposure });
- ue.appendChild(W.wrap), I.body.appendChild(ue);
- const U = p({ key: "gamma", label: "Gamma", accentRgb: X.gamma });
- U.appendChild(f.wrap), I.body.appendChild(U);
+ ue.appendChild(Z.wrap), I.body.appendChild(ue);
+ const B = p({ key: "gamma", label: "Gamma", accentRgb: X.gamma });
+ B.appendChild(f.wrap), I.body.appendChild(B);
const Q = () => {
- var Re, Wt;
+ var Oe, Rt;
try {
t.exposureEV = 0;
- } catch (lt) {
- (Re = console.debug) == null || Re.call(console, lt);
+ } catch (nt) {
+ (Oe = console.debug) == null || Oe.call(console, nt);
}
try {
- W.input.value = "0", W.out.textContent = "0.0EV";
- } catch (lt) {
- (Wt = console.debug) == null || Wt.call(console, lt);
+ Z.input.value = "0", Z.out.textContent = "0.0EV";
+ } catch (nt) {
+ (Rt = console.debug) == null || Rt.call(console, nt);
}
- bt(n);
+ It(n);
}, _ = () => {
- var Re, Wt;
+ var Oe, Rt;
try {
t.gamma = 1;
- } catch (lt) {
- (Re = console.debug) == null || Re.call(console, lt);
+ } catch (nt) {
+ (Oe = console.debug) == null || Oe.call(console, nt);
}
try {
f.input.value = "1", f.out.textContent = "1.00";
- } catch (lt) {
- (Wt = console.debug) == null || Wt.call(console, lt);
+ } catch (nt) {
+ (Rt = console.debug) == null || Rt.call(console, nt);
}
- bt(n);
+ It(n);
}, le = () => {
- var Re;
+ var Oe;
try {
Object.assign(t, c);
- } catch (Wt) {
- (Re = console.debug) == null || Re.call(console, Wt);
+ } catch (Rt) {
+ (Oe = console.debug) == null || Oe.call(console, Rt);
}
- bt(i), bt(l), bt(n);
+ It(i), It(l), It(n);
};
try {
- const Re = (Xe = ue.querySelector) == null ? void 0 : Xe.call(ue, ".mjr-viewer-tools-group-label");
- Re && (Re.title = m("tooltip.resetExposure", "Reset EV to 0"), Re.style.cursor = "pointer", Re.style.userSelect = "none");
- } catch (Re) {
- (Ee = console.debug) == null || Ee.call(console, Re);
+ const Oe = (ke = ue.querySelector) == null ? void 0 : ke.call(ue, ".mjr-viewer-tools-group-label");
+ Oe && (Oe.title = m("tooltip.resetExposure", "Reset EV to 0"), Oe.style.cursor = "pointer", Oe.style.userSelect = "none");
+ } catch (Oe) {
+ (Ee = console.debug) == null || Ee.call(console, Oe);
}
try {
- W.out.title = m("tooltip.resetExposure", "Reset EV to 0"), W.out.style.cursor = "pointer", W.out.style.userSelect = "none";
- } catch (Re) {
- (Ke = console.debug) == null || Ke.call(console, Re);
+ Z.out.title = m("tooltip.resetExposure", "Reset EV to 0"), Z.out.style.cursor = "pointer", Z.out.style.userSelect = "none";
+ } catch (Oe) {
+ (Ke = console.debug) == null || Ke.call(console, Oe);
}
try {
- const Re = (nt = U.querySelector) == null ? void 0 : nt.call(U, ".mjr-viewer-tools-group-label");
- Re && (Re.title = m("tooltip.resetGamma", "Reset Gamma to 1.00"), Re.style.cursor = "pointer", Re.style.userSelect = "none");
- } catch (Re) {
- (ut = console.debug) == null || ut.call(console, Re);
+ const Oe = (lt = B.querySelector) == null ? void 0 : lt.call(B, ".mjr-viewer-tools-group-label");
+ Oe && (Oe.title = m("tooltip.resetGamma", "Reset Gamma to 1.00"), Oe.style.cursor = "pointer", Oe.style.userSelect = "none");
+ } catch (Oe) {
+ (wt = console.debug) == null || wt.call(console, Oe);
}
try {
f.out.title = m("tooltip.resetGamma", "Reset Gamma to 1.00"), f.out.style.cursor = "pointer", f.out.style.userSelect = "none";
- } catch (Re) {
- (It = console.debug) == null || It.call(console, Re);
+ } catch (Oe) {
+ (at = console.debug) == null || at.call(console, Oe);
}
- const de = p({ key: "analysis", label: "Analysis", accentRgb: X.analysis });
- de.appendChild(Y.b), de.appendChild(F.b), de.appendChild(N), I.body.appendChild(de);
- const se = p({
+ const ce = p({ key: "analysis", label: "Analysis", accentRgb: X.analysis });
+ ce.appendChild(V.b), ce.appendChild(O.b), ce.appendChild(k), I.body.appendChild(ce);
+ const de = p({
key: "overlay-guides",
label: "Guides",
accentRgb: X.overlay
});
- se.appendChild(V.b), se.appendChild(k), se.appendChild(K.b), se.appendChild(z), se.appendChild(B.wrap), y.body.appendChild(se);
+ de.appendChild(Y.b), de.appendChild(N), de.appendChild(U.b), de.appendChild(z), de.appendChild(T.wrap), A.body.appendChild(de);
const ge = p({
key: "overlay-inspect",
label: "Inspect",
accentRgb: X.overlay
});
- [J.b, P.b, H.b, $.b, E.b].forEach((Re, Wt) => {
- Wt > 0 && (Re.style.marginLeft = "4px"), ge.appendChild(Re);
- }), S.body.appendChild(ge);
- const Se = p({ key: "compare", label: "Compare", accentRgb: X.compare });
- Se.style.borderRadius = "8px", Se.style.padding = "4px 6px", Se.style.border = "1px solid transparent", Se.style.transition = "background 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease", Se.appendChild(oe), y.body.appendChild(Se);
- const ke = p({
+ [J.b, P.b, E.b, $.b, H.b].forEach((Oe, Rt) => {
+ Rt > 0 && (Oe.style.marginLeft = "4px"), ge.appendChild(Oe);
+ }), h.body.appendChild(ge);
+ const xe = p({ key: "compare", label: "Compare", accentRgb: X.compare });
+ xe.style.borderRadius = "8px", xe.style.padding = "4px 6px", xe.style.border = "1px solid transparent", xe.style.transition = "background 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease", xe.appendChild(ne), A.body.appendChild(xe);
+ const Xe = p({
key: "audio-viz",
label: "Audio Viz",
accentRgb: X.audioviz
});
- ke.appendChild(M), y.body.appendChild(ke), g.appendChild(j), g.appendChild(O), g.appendChild(q);
- const we = document.createElement("div");
- we.className = "mjr-viewer-tools-group mjr-viewer-tools-group--3d", we.textContent = "LMB rotate · RMB pan · Scroll zoom", we.style.cssText = [
+ Xe.appendChild(M), A.body.appendChild(Xe), g.appendChild(v), g.appendChild(F), g.appendChild(q);
+ const Me = document.createElement("div");
+ Me.className = "mjr-viewer-tools-group mjr-viewer-tools-group--3d", Me.textContent = "LMB rotate · RMB pan · Scroll zoom", Me.style.cssText = [
"display:none",
"align-items:center",
"padding:2px 8px",
@@ -12619,11 +12646,11 @@ function oA({
"font-size:10px",
"font-weight:400",
"letter-spacing:0.01em"
- ].join(";"), A.appendChild(we);
- const Je = document.createElement("div");
- Je.style.cssText = "position: relative; display:inline-flex; align-items:center;", Je.className = "mjr-viewer-tools-action", Je.style.marginLeft = "4px";
- const $e = document.createElement("button");
- $e.type = "button", $e.title = m("tooltip.viewerShortcuts", "Viewer shortcuts"), $e.setAttribute("aria-label", m("tooltip.viewerShortcuts", "Viewer shortcuts")), $e.style.cssText = `
+ ].join(";"), y.appendChild(Me);
+ const Fe = document.createElement("div");
+ Fe.style.cssText = "position: relative; display:inline-flex; align-items:center;", Fe.className = "mjr-viewer-tools-action", Fe.style.marginLeft = "4px";
+ const it = document.createElement("button");
+ it.type = "button", it.title = m("tooltip.viewerShortcuts", "Viewer shortcuts"), it.setAttribute("aria-label", m("tooltip.viewerShortcuts", "Viewer shortcuts")), it.style.cssText = `
height: 24px;
padding: 0 8px;
border-radius: 6px;
@@ -12636,9 +12663,9 @@ function oA({
justify-content: center;
`;
const qe = document.createElement("span");
- qe.className = "pi pi-question-circle", qe.setAttribute("aria-hidden", "true"), qe.style.fontSize = "14px", $e.appendChild(qe);
- const Ue = document.createElement("div");
- Ue.className = "mjr-viewer-help", Ue.style.cssText = `
+ qe.className = "pi pi-question-circle", qe.setAttribute("aria-hidden", "true"), qe.style.fontSize = "14px", it.appendChild(qe);
+ const Pe = document.createElement("div");
+ Pe.className = "mjr-viewer-help", Pe.style.cssText = `
position: absolute;
right: 0;
top: 32px;
@@ -12656,66 +12683,66 @@ function oA({
z-index: 10002;
`;
try {
- const Re = document.createElement("div");
- Re.textContent = "Shortcuts", Re.style.cssText = "font-weight:600; margin-bottom:6px;";
- const Wt = document.createElement("div");
- Wt.style.cssText = "display:grid; grid-template-columns: 1fr 1fr; gap: 4px 10px;";
- const lt = (qt, yt) => {
- const mt = document.createElement("div"), kt = document.createElement("span");
- kt.style.cssText = "opacity:.75;", kt.textContent = String(qt || ""), mt.appendChild(kt), mt.appendChild(document.createTextNode(` ${String(yt || "")}`)), Wt.appendChild(mt);
+ const Oe = document.createElement("div");
+ Oe.textContent = "Shortcuts", Oe.style.cssText = "font-weight:600; margin-bottom:6px;";
+ const Rt = document.createElement("div");
+ Rt.style.cssText = "display:grid; grid-template-columns: 1fr 1fr; gap: 4px 10px;";
+ const nt = (Mt, dt) => {
+ const bt = document.createElement("div"), Yt = document.createElement("span");
+ Yt.style.cssText = "opacity:.75;", Yt.textContent = String(Mt || ""), bt.appendChild(Yt), bt.appendChild(document.createTextNode(` ${String(dt || "")}`)), Rt.appendChild(bt);
};
- lt("Esc", "Close"), lt("Space", "Play/Pause"), lt("+", "Zoom In"), lt("-", "Zoom Out"), lt("Alt+1", "1:1 Zoom"), lt("G", "Grid"), lt("D", "Gen Info"), lt("Z", "Zebra"), lt("I", "Probe"), lt("L", "Loupe"), lt("X", "Focus Mode"), lt("C", "Copy Color"), lt("[ / ]", "Speed -/+"), lt("\\", "Speed 1x"), lt("←/→", "Prev/Next"), lt("0-5", "Rating"), Ue.appendChild(Re), Ue.appendChild(Wt);
- } catch (Re) {
- (dt = console.debug) == null || dt.call(console, Re);
+ nt("Esc", "Close"), nt("Space", "Play/Pause"), nt("+", "Zoom In"), nt("-", "Zoom Out"), nt("Alt+1", "1:1 Zoom"), nt("G", "Grid"), nt("D", "Gen Info"), nt("Z", "Zebra"), nt("I", "Probe"), nt("L", "Loupe"), nt("X", "Focus Mode"), nt("C", "Copy Color"), nt("[ / ]", "Speed -/+"), nt("\\", "Speed 1x"), nt("←/→", "Prev/Next"), nt("0-5", "Rating"), Pe.appendChild(Oe), Pe.appendChild(Rt);
+ } catch (Oe) {
+ (tt = console.debug) == null || tt.call(console, Oe);
}
- return Je.appendChild($e), Je.appendChild(Ue), A.appendChild(Je), Z.body.appendChild(g), C.body.appendChild(A), d.appendChild(I.panel), d.appendChild(y.panel), d.appendChild(S.panel), d.appendChild(Z.panel), d.appendChild(C.panel), s.appendChild(d), {
+ return Fe.appendChild(it), Fe.appendChild(Pe), y.appendChild(Fe), S.body.appendChild(g), W.body.appendChild(y), d.appendChild(I.panel), d.appendChild(A.panel), d.appendChild(h.panel), d.appendChild(S.panel), d.appendChild(W.panel), s.appendChild(d), {
toolsRow: s,
gradePanel: I,
- overlayPanel: y,
- inspectPanel: S,
- actionPanel: Z,
- infoPanel: C,
+ overlayPanel: A,
+ inspectPanel: h,
+ actionPanel: S,
+ infoPanel: W,
toolsActions: g,
- toolsMeta: A,
- chGroup: ce,
+ toolsMeta: y,
+ chGroup: ae,
expGroup: ue,
- gamGroup: U,
- anaGroup: de,
- ovGuidesGroup: se,
+ gamGroup: B,
+ anaGroup: ce,
+ ovGuidesGroup: de,
ovInspectGroup: ge,
- cmpGroup: Se,
- audGroup: ke,
- model3dHint: we,
- helpWrap: Je,
- helpBtn: $e,
- helpPop: Ue,
+ cmpGroup: xe,
+ audGroup: Xe,
+ model3dHint: Me,
+ helpWrap: Fe,
+ helpBtn: it,
+ helpPop: Pe,
channelsSelect: G,
- exposureCtl: W,
+ exposureCtl: Z,
gammaCtl: f,
- zebraToggle: Y,
- scopesToggle: F,
- scopesSelect: N,
- gridToggle: V,
- gridModeSelect: k,
- maskToggle: K,
+ zebraToggle: V,
+ scopesToggle: O,
+ scopesSelect: k,
+ gridToggle: Y,
+ gridModeSelect: N,
+ maskToggle: U,
formatSelect: z,
- maskOpacityCtl: B,
+ maskOpacityCtl: T,
probeToggle: J,
loupeToggle: P,
- hudToggle: H,
+ hudToggle: E,
focusToggle: $,
- genInfoToggle: E,
- compareModeSelect: oe,
+ genInfoToggle: H,
+ compareModeSelect: ne,
audioVizModeSelect: M,
- resetGradeBtn: j,
- exportBtn: O,
+ resetGradeBtn: v,
+ exportBtn: F,
copyBtn: q,
resetExposure: Q,
resetGamma: _,
resetViewerTools: le,
ACCENT: X,
- setSelectHighlighted: T,
- setChannelSelectStyle: v,
+ setSelectHighlighted: K,
+ setChannelSelectStyle: j,
setValueHighlighted: w,
setGroupHighlighted: R,
DEFAULT_TOOL_STATE: c
@@ -12735,124 +12762,124 @@ function rA({
singleBtn: d,
abBtn: u,
sideBtn: I,
- closeBtn: y,
- channelsSelect: S,
- compareModeSelect: Z,
- audioVizModeSelect: C,
+ closeBtn: A,
+ channelsSelect: h,
+ compareModeSelect: S,
+ audioVizModeSelect: W,
exposureCtl: g,
- gammaCtl: A,
+ gammaCtl: y,
zebraToggle: p,
scopesToggle: b,
scopesSelect: L,
- gridToggle: h,
+ gridToggle: C,
gridModeSelect: G,
- maskToggle: W,
+ maskToggle: Z,
formatSelect: f,
maskOpacityCtl: X,
probeToggle: x,
- loupeToggle: T,
- hudToggle: v,
+ loupeToggle: K,
+ hudToggle: j,
focusToggle: w,
genInfoToggle: R,
- resetGradeBtn: Y,
- exportBtn: F,
- copyBtn: N,
- resetExposure: V,
- resetGamma: k,
- resetViewerTools: K,
+ resetGradeBtn: V,
+ exportBtn: O,
+ copyBtn: k,
+ resetExposure: Y,
+ resetGamma: N,
+ resetViewerTools: U,
expGroup: z,
- gamGroup: B
+ gamGroup: T
}) {
var J, P;
- e.push(Qe(d, "click", () => i == null ? void 0 : i(n.SINGLE))), e.push(Qe(u, "click", () => i == null ? void 0 : i(n.AB_COMPARE))), e.push(Qe(I, "click", () => i == null ? void 0 : i(n.SIDE_BY_SIDE))), e.push(Qe(y, "click", () => o == null ? void 0 : o())), e.push(
- Qe(S, "change", () => {
- var H;
+ e.push($e(d, "click", () => i == null ? void 0 : i(n.SINGLE))), e.push($e(u, "click", () => i == null ? void 0 : i(n.AB_COMPARE))), e.push($e(I, "click", () => i == null ? void 0 : i(n.SIDE_BY_SIDE))), e.push($e(A, "click", () => o == null ? void 0 : o())), e.push(
+ $e(h, "change", () => {
+ var E;
try {
- t.channel = String(S.value || "rgb");
+ t.channel = String(h.value || "rgb");
} catch ($) {
- (H = console.debug) == null || H.call(console, $);
+ (E = console.debug) == null || E.call(console, $);
}
- bt(r);
+ It(r);
})
), e.push(
- Qe(Z, "change", () => {
- var H;
+ $e(S, "change", () => {
+ var E;
try {
- t.abCompareMode = String(Z.value || "wipe");
+ t.abCompareMode = String(S.value || "wipe");
} catch ($) {
- (H = console.debug) == null || H.call(console, $);
+ (E = console.debug) == null || E.call(console, $);
}
- bt(l), bt(r);
+ It(l), It(r);
})
), e.push(
- Qe(C, "change", () => {
- var H;
+ $e(W, "change", () => {
+ var E;
try {
- t.audioVisualizerMode = String(C.value || "artistic");
+ t.audioVisualizerMode = String(W.value || "artistic");
} catch ($) {
- (H = console.debug) == null || H.call(console, $);
+ (E = console.debug) == null || E.call(console, $);
}
- bt(a), bt(r);
+ It(a), It(r);
})
), e.push(
- Qe(g.input, "input", () => {
+ $e(g.input, "input", () => {
var $;
- const H = Math.max(-10, Math.min(10, Number(g.input.value) || 0));
- t.exposureEV = Math.round(H * 10) / 10;
+ const E = Math.max(-10, Math.min(10, Number(g.input.value) || 0));
+ t.exposureEV = Math.round(E * 10) / 10;
try {
g.out.textContent = `${t.exposureEV.toFixed(1)}EV`;
- } catch (E) {
- ($ = console.debug) == null || $.call(console, E);
+ } catch (H) {
+ ($ = console.debug) == null || $.call(console, H);
}
- bt(r);
+ It(r);
})
- ), e.push(Qe(g.input, "dblclick", V)), e.push(Qe(g.out, "click", V)), e.push(
- Qe(
+ ), e.push($e(g.input, "dblclick", Y)), e.push($e(g.out, "click", Y)), e.push(
+ $e(
(J = z.querySelector) == null ? void 0 : J.call(z, ".mjr-viewer-tools-group-label"),
"click",
- V
+ Y
)
), e.push(
- Qe(A.input, "input", () => {
+ $e(y.input, "input", () => {
var $;
- const H = Math.max(0.1, Math.min(3, Number(A.input.value) || 1));
- t.gamma = Math.round(H * 100) / 100;
+ const E = Math.max(0.1, Math.min(3, Number(y.input.value) || 1));
+ t.gamma = Math.round(E * 100) / 100;
try {
- A.out.textContent = t.gamma.toFixed(2);
- } catch (E) {
- ($ = console.debug) == null || $.call(console, E);
+ y.out.textContent = t.gamma.toFixed(2);
+ } catch (H) {
+ ($ = console.debug) == null || $.call(console, H);
}
- bt(r);
+ It(r);
})
- ), e.push(Qe(A.input, "dblclick", k)), e.push(Qe(A.out, "click", k)), e.push(
- Qe(
- (P = B.querySelector) == null ? void 0 : P.call(B, ".mjr-viewer-tools-group-label"),
+ ), e.push($e(y.input, "dblclick", N)), e.push($e(y.out, "click", N)), e.push(
+ $e(
+ (P = T.querySelector) == null ? void 0 : P.call(T, ".mjr-viewer-tools-group-label"),
"click",
- k
+ N
)
), e.push(
- Qe(p.b, "click", () => {
- t.analysisMode = t.analysisMode === "zebra" ? "none" : "zebra", bt(r);
+ $e(p.b, "click", () => {
+ t.analysisMode = t.analysisMode === "zebra" ? "none" : "zebra", It(r);
})
), e.push(
- Qe(b.b, "click", () => {
- var H, $;
+ $e(b.b, "click", () => {
+ var E, $;
try {
- const oe = String(t.scopesMode || "off") === "off" ? "both" : "off";
- t.scopesMode = oe;
+ const ne = String(t.scopesMode || "off") === "off" ? "both" : "off";
+ t.scopesMode = ne;
try {
- L.value = String(oe);
+ L.value = String(ne);
} catch (M) {
- (H = console.debug) == null || H.call(console, M);
+ (E = console.debug) == null || E.call(console, M);
}
- } catch (E) {
- ($ = console.debug) == null || $.call(console, E);
+ } catch (H) {
+ ($ = console.debug) == null || $.call(console, H);
}
- bt(r);
+ It(r);
})
), e.push(
- Qe(L, "change", () => {
- var H;
+ $e(L, "change", () => {
+ var E;
try {
const $ = String(L.value || "off");
t.scopesMode = $;
@@ -12860,18 +12887,18 @@ function rA({
try {
t.scopesMode = "off";
} catch ($) {
- (H = console.debug) == null || H.call(console, $);
+ (E = console.debug) == null || E.call(console, $);
}
}
- bt(r);
+ It(r);
})
), e.push(
- Qe(h.b, "click", () => {
- t.gridMode = Number(t.gridMode) ? 0 : 1, bt(r);
+ $e(C.b, "click", () => {
+ t.gridMode = Number(t.gridMode) ? 0 : 1, It(r);
})
), e.push(
- Qe(G, "change", () => {
- var H;
+ $e(G, "change", () => {
+ var E;
try {
const $ = Number(G.value);
t.gridMode = Number.isFinite($) ? $ : 0;
@@ -12879,92 +12906,92 @@ function rA({
try {
t.gridMode = 0;
} catch ($) {
- (H = console.debug) == null || H.call(console, $);
+ (E = console.debug) == null || E.call(console, $);
}
}
- bt(r);
+ It(r);
})
), e.push(
- Qe(W.b, "click", () => {
- var H;
+ $e(Z.b, "click", () => {
+ var E;
try {
t.overlayMaskEnabled = !t.overlayMaskEnabled;
} catch ($) {
- (H = console.debug) == null || H.call(console, $);
+ (E = console.debug) == null || E.call(console, $);
}
- bt(r);
+ It(r);
})
), e.push(
- Qe(f, "change", () => {
- var H;
+ $e(f, "change", () => {
+ var E;
try {
t.overlayFormat = String(f.value || "image");
} catch {
try {
t.overlayFormat = "image";
} catch ($) {
- (H = console.debug) == null || H.call(console, $);
+ (E = console.debug) == null || E.call(console, $);
}
}
- bt(r);
+ It(r);
})
), e.push(
- Qe(X.input, "input", () => {
- var H;
+ $e(X.input, "input", () => {
+ var E;
try {
- const $ = Number(X.input.value), E = Math.max(0, Math.min(0.9, Number.isFinite($) ? $ : 0.65));
- t.overlayMaskOpacity = Math.round(E * 100) / 100, X.out.textContent = t.overlayMaskOpacity.toFixed(2);
+ const $ = Number(X.input.value), H = Math.max(0, Math.min(0.9, Number.isFinite($) ? $ : 0.65));
+ t.overlayMaskOpacity = Math.round(H * 100) / 100, X.out.textContent = t.overlayMaskOpacity.toFixed(2);
} catch ($) {
- (H = console.debug) == null || H.call(console, $);
+ (E = console.debug) == null || E.call(console, $);
}
- bt(r);
+ It(r);
})
), e.push(
- Qe(x.b, "click", () => {
- t.probeEnabled = !t.probeEnabled, bt(r);
+ $e(x.b, "click", () => {
+ t.probeEnabled = !t.probeEnabled, It(r);
})
), e.push(
- Qe(T.b, "click", () => {
- t.loupeEnabled = !t.loupeEnabled, bt(r);
+ $e(K.b, "click", () => {
+ t.loupeEnabled = !t.loupeEnabled, It(r);
})
), e.push(
- Qe(v.b, "click", () => {
- t.hudEnabled = !t.hudEnabled, bt(r);
+ $e(j.b, "click", () => {
+ t.hudEnabled = !t.hudEnabled, It(r);
})
), e.push(
- Qe(w.b, "click", () => {
- t.distractionFree = !t.distractionFree, bt(r);
+ $e(w.b, "click", () => {
+ t.distractionFree = !t.distractionFree, It(r);
})
), e.push(
- Qe(R.b, "click", () => {
- var H;
+ $e(R.b, "click", () => {
+ var E;
try {
t.genInfoOpen = !t.genInfoOpen;
} catch ($) {
- (H = console.debug) == null || H.call(console, $);
+ (E = console.debug) == null || E.call(console, $);
}
- bt(r);
+ It(r);
})
), e.push(
- Qe(Y, "click", () => {
- K();
+ $e(V, "click", () => {
+ U();
})
), e.push(
- Qe(F, "click", () => {
- var H;
+ $e(O, "click", () => {
+ var E;
try {
c == null || c();
} catch ($) {
- (H = console.debug) == null || H.call(console, $);
+ (E = console.debug) == null || E.call(console, $);
}
})
), e.push(
- Qe(N, "click", () => {
- var H;
+ $e(k, "click", () => {
+ var E;
try {
s == null || s();
} catch ($) {
- (H = console.debug) == null || H.call(console, $);
+ (E = console.debug) == null || E.call(console, $);
}
})
);
@@ -12983,250 +13010,250 @@ function lA({
overlayPanel: d,
inspectPanel: u,
infoPanel: I,
- actionPanel: y,
- ovGuidesGroup: S,
- ovInspectGroup: Z,
- model3dHint: C,
+ actionPanel: A,
+ ovGuidesGroup: h,
+ ovInspectGroup: S,
+ model3dHint: W,
helpWrap: g,
- channelsSelect: A,
+ channelsSelect: y,
compareModeSelect: p,
audioVizModeSelect: b,
exposureCtl: L,
- gammaCtl: h,
+ gammaCtl: C,
zebraToggle: G,
- scopesToggle: W,
+ scopesToggle: Z,
scopesSelect: f,
gridToggle: X,
gridModeSelect: x,
- maskToggle: T,
- formatSelect: v,
+ maskToggle: K,
+ formatSelect: j,
maskOpacityCtl: w,
probeToggle: R,
- loupeToggle: Y,
- hudToggle: F,
- focusToggle: N,
- genInfoToggle: V,
- exportBtn: k,
- copyBtn: K,
+ loupeToggle: V,
+ hudToggle: O,
+ focusToggle: k,
+ genInfoToggle: Y,
+ exportBtn: N,
+ copyBtn: U,
resetGradeBtn: z,
- cmpGroup: B,
+ cmpGroup: T,
audGroup: J,
ACCENT: P,
- setSelectHighlighted: H,
+ setSelectHighlighted: E,
setChannelSelectStyle: $,
- setValueHighlighted: E,
- setGroupHighlighted: oe
+ setValueHighlighted: H,
+ setGroupHighlighted: ne
}) {
- var O, D, q, ee, ce, ue, U, Q, _, le, de, se, ge, je, Se, ke, we, Je, $e, qe, Ue, Te, Oe, pt, Me, Xt, Mt, me, Pe;
- const M = ((O = e == null ? void 0 : e.assets) == null ? void 0 : O[e == null ? void 0 : e.currentIndex]) || null, j = String((M == null ? void 0 : M.kind) || "").toLowerCase() === "model3d";
+ var F, D, q, ee, ae, ue, B, Q, _, le, ce, de, ge, Le, xe, Xe, Me, Fe, it, qe, Pe, Re, rt, Te, qt, kt, we, me, He;
+ const M = ((F = e == null ? void 0 : e.assets) == null ? void 0 : F[e == null ? void 0 : e.currentIndex]) || null, v = String((M == null ? void 0 : M.kind) || "").toLowerCase() === "model3d";
try {
- const Le = j ? "none" : "";
- r.style.display = Le, l.style.display = Le, a.style.display = Le, c.style.display = Le, z.style.display = Le, C.style.display = j ? "inline-flex" : "none", s.panel.style.display = j ? "none" : "", d.panel.style.display = j ? "none" : "", I.panel.style.display = "", y.panel.style.display = "";
- const Ot = (D = Z.querySelector) == null ? void 0 : D.call(Z, ".mjr-viewer-tools-group-label");
- if (j) {
- S.style.display = "none", Z.style.display = "", Ot && (Ot.style.display = "none"), g.style.display = "none", i.style.padding = "10px 16px", i.style.gap = "6px", o.style.padding = "6px 8px 6px";
- for (const Xe of [
+ const Ye = v ? "none" : "";
+ r.style.display = Ye, l.style.display = Ye, a.style.display = Ye, c.style.display = Ye, z.style.display = Ye, W.style.display = v ? "inline-flex" : "none", s.panel.style.display = v ? "none" : "", d.panel.style.display = v ? "none" : "", I.panel.style.display = "", A.panel.style.display = "";
+ const Pt = (D = S.querySelector) == null ? void 0 : D.call(S, ".mjr-viewer-tools-group-label");
+ if (v) {
+ h.style.display = "none", S.style.display = "", Pt && (Pt.style.display = "none"), g.style.display = "none", i.style.padding = "10px 16px", i.style.gap = "6px", o.style.padding = "6px 8px 6px";
+ for (const ke of [
X.b,
x,
- T.b,
- v,
+ K.b,
+ j,
w.wrap,
R.b,
- Y.b,
- F.b
+ V.b,
+ O.b
])
try {
- Xe.style.display = "none";
+ ke.style.display = "none";
} catch {
}
} else {
- S.style.display = "", Z.style.display = "", Ot && (Ot.style.display = ""), g.style.display = "", s.panel.style.display = "", d.panel.style.display = "", I.panel.style.display = "", y.panel.style.display = "", i.style.padding = "8px 16px", i.style.gap = "6px", o.style.padding = "8px 8px 6px";
- for (const Xe of [
+ h.style.display = "", S.style.display = "", Pt && (Pt.style.display = ""), g.style.display = "", s.panel.style.display = "", d.panel.style.display = "", I.panel.style.display = "", A.panel.style.display = "", i.style.padding = "8px 16px", i.style.gap = "6px", o.style.padding = "8px 8px 6px";
+ for (const ke of [
X.b,
x,
- T.b,
- v,
+ K.b,
+ j,
w.wrap,
R.b,
- Y.b,
- F.b
+ V.b,
+ O.b
])
try {
- Xe.style.display = "";
+ ke.style.display = "";
} catch {
}
}
- } catch (Le) {
- (q = console.debug) == null || q.call(console, Le);
+ } catch (Ye) {
+ (q = console.debug) == null || q.call(console, Ye);
}
try {
- A.value = String(e.channel || "rgb");
- } catch (Le) {
- (ee = console.debug) == null || ee.call(console, Le);
+ y.value = String(e.channel || "rgb");
+ } catch (Ye) {
+ (ee = console.debug) == null || ee.call(console, Ye);
}
try {
p.value = String(e.abCompareMode || "wipe");
- const Le = typeof n == "function" ? !!n() : !1, Ot = e.mode === t.AB_COMPARE && Le, Xe = e.mode === t.SIDE_BY_SIDE, Ee = Ot || Xe;
- p.disabled = !Ot;
+ const Ye = typeof n == "function" ? !!n() : !1, Pt = e.mode === t.AB_COMPARE && Ye, ke = e.mode === t.SIDE_BY_SIDE, Ee = Pt || ke;
+ p.disabled = !Pt;
try {
- B.dataset.active = Ee ? "1" : "0", B.style.display = Ee ? "" : "none", oe(B, { accentRgb: P.compare, active: Ee }), B.title = Ee ? "Compare tools (active)" : "Compare tools";
+ T.dataset.active = Ee ? "1" : "0", T.style.display = Ee ? "" : "none", ne(T, { accentRgb: P.compare, active: Ee }), T.title = Ee ? "Compare tools (active)" : "Compare tools";
} catch (Ke) {
- (ce = console.debug) == null || ce.call(console, Ke);
+ (ae = console.debug) == null || ae.call(console, Ke);
}
- } catch (Le) {
- (ue = console.debug) == null || ue.call(console, Le);
+ } catch (Ye) {
+ (ue = console.debug) == null || ue.call(console, Ye);
}
try {
- const Le = String((M == null ? void 0 : M.kind) || "") === "audio";
- J.style.display = Le ? "" : "none", b.disabled = !Le, b.value = String(e.audioVisualizerMode || "artistic");
- } catch (Le) {
- (U = console.debug) == null || U.call(console, Le);
+ const Ye = String((M == null ? void 0 : M.kind) || "") === "audio";
+ J.style.display = Ye ? "" : "none", b.disabled = !Ye, b.value = String(e.audioVisualizerMode || "artistic");
+ } catch (Ye) {
+ (B = console.debug) == null || B.call(console, Ye);
}
try {
- const Le = Math.round((Number(e.exposureEV) || 0) * 10) / 10;
- L.input.value = String(Le), L.out.textContent = `${Le.toFixed(1)}EV`;
- } catch (Le) {
- (Q = console.debug) == null || Q.call(console, Le);
+ const Ye = Math.round((Number(e.exposureEV) || 0) * 10) / 10;
+ L.input.value = String(Ye), L.out.textContent = `${Ye.toFixed(1)}EV`;
+ } catch (Ye) {
+ (Q = console.debug) == null || Q.call(console, Ye);
}
try {
- const Le = Math.max(0.1, Math.min(3, Number(e.gamma) || 1));
- h.input.value = String(Le), h.out.textContent = Le.toFixed(2);
- } catch (Le) {
- (_ = console.debug) == null || _.call(console, Le);
+ const Ye = Math.max(0.1, Math.min(3, Number(e.gamma) || 1));
+ C.input.value = String(Ye), C.out.textContent = Ye.toFixed(2);
+ } catch (Ye) {
+ (_ = console.debug) == null || _.call(console, Ye);
}
try {
G.setActive(e.analysisMode === "zebra");
- } catch (Le) {
- (le = console.debug) == null || le.call(console, Le);
+ } catch (Ye) {
+ (le = console.debug) == null || le.call(console, Ye);
}
try {
- const Le = String(e.scopesMode || "off");
- W.setActive(Le !== "off"), f.value = Le;
- } catch (Le) {
- (de = console.debug) == null || de.call(console, Le);
+ const Ye = String(e.scopesMode || "off");
+ Z.setActive(Ye !== "off"), f.value = Ye;
+ } catch (Ye) {
+ (ce = console.debug) == null || ce.call(console, Ye);
}
try {
- const Le = String((M == null ? void 0 : M.kind) || ""), Ot = Le === "video" || Le === "model3d";
- k.style.display = Ot ? "" : "none", K.style.display = Ot ? "" : "none";
- const Xe = !!(globalThis != null && globalThis.ClipboardItem && ((se = navigator == null ? void 0 : navigator.clipboard) != null && se.write));
- K.style.display = Ot && Xe ? "" : "none";
- } catch (Le) {
- (ge = console.debug) == null || ge.call(console, Le);
+ const Ye = String((M == null ? void 0 : M.kind) || ""), Pt = Ye === "video" || Ye === "model3d";
+ N.style.display = Pt ? "" : "none", U.style.display = Pt ? "" : "none";
+ const ke = !!(globalThis != null && globalThis.ClipboardItem && ((de = navigator == null ? void 0 : navigator.clipboard) != null && de.write));
+ U.style.display = Pt && ke ? "" : "none";
+ } catch (Ye) {
+ (ge = console.debug) == null || ge.call(console, Ye);
}
try {
X.setActive((Number(e.gridMode) || 0) !== 0);
- } catch (Le) {
- (je = console.debug) == null || je.call(console, Le);
+ } catch (Ye) {
+ (Le = console.debug) == null || Le.call(console, Ye);
}
try {
x.value = String(Number(e.gridMode) || 0);
- } catch (Le) {
- (Se = console.debug) == null || Se.call(console, Le);
+ } catch (Ye) {
+ (xe = console.debug) == null || xe.call(console, Ye);
}
try {
- T.setActive(!!e.overlayMaskEnabled), v.value = String(e.overlayFormat || "image"), w.input.value = String(Number(e.overlayMaskOpacity ?? 0.65)), w.out.textContent = Number(e.overlayMaskOpacity ?? 0.65).toFixed(2);
- } catch (Le) {
- (ke = console.debug) == null || ke.call(console, Le);
+ K.setActive(!!e.overlayMaskEnabled), j.value = String(e.overlayFormat || "image"), w.input.value = String(Number(e.overlayMaskOpacity ?? 0.65)), w.out.textContent = Number(e.overlayMaskOpacity ?? 0.65).toFixed(2);
+ } catch (Ye) {
+ (Xe = console.debug) == null || Xe.call(console, Ye);
}
try {
- R.setActive(!!e.probeEnabled), Y.setActive(!!e.loupeEnabled);
- } catch (Le) {
- (we = console.debug) == null || we.call(console, Le);
+ R.setActive(!!e.probeEnabled), V.setActive(!!e.loupeEnabled);
+ } catch (Ye) {
+ (Me = console.debug) == null || Me.call(console, Ye);
}
try {
- F.setActive(!!e.hudEnabled);
- } catch (Le) {
- (Je = console.debug) == null || Je.call(console, Le);
+ O.setActive(!!e.hudEnabled);
+ } catch (Ye) {
+ (Fe = console.debug) == null || Fe.call(console, Ye);
}
try {
- N.setActive(!!e.distractionFree);
- } catch (Le) {
- ($e = console.debug) == null || $e.call(console, Le);
+ k.setActive(!!e.distractionFree);
+ } catch (Ye) {
+ (it = console.debug) == null || it.call(console, Ye);
}
try {
- V.setActive(!!e.genInfoOpen);
- } catch (Le) {
- (qe = console.debug) == null || qe.call(console, Le);
+ Y.setActive(!!e.genInfoOpen);
+ } catch (Ye) {
+ (qe = console.debug) == null || qe.call(console, Ye);
}
try {
- const Le = String(e.channel || "rgb");
- $(Le);
- } catch (Le) {
- (Ue = console.debug) == null || Ue.call(console, Le);
+ const Ye = String(e.channel || "rgb");
+ $(Ye);
+ } catch (Ye) {
+ (Pe = console.debug) == null || Pe.call(console, Ye);
}
try {
- const Le = Math.round((Number(e.exposureEV) || 0) * 10) / 10;
- E(L.out, {
+ const Ye = Math.round((Number(e.exposureEV) || 0) * 10) / 10;
+ H(L.out, {
accentRgb: P.exposure,
- active: Math.abs(Le) > 1e-4
+ active: Math.abs(Ye) > 1e-4
});
- } catch (Le) {
- (Te = console.debug) == null || Te.call(console, Le);
+ } catch (Ye) {
+ (Re = console.debug) == null || Re.call(console, Ye);
}
try {
- const Le = Math.round((Number(e.gamma) || 1) * 100) / 100;
- E(h.out, {
+ const Ye = Math.round((Number(e.gamma) || 1) * 100) / 100;
+ H(C.out, {
accentRgb: P.gamma,
- active: Math.abs(Le - 1) > 1e-4
+ active: Math.abs(Ye - 1) > 1e-4
});
- } catch (Le) {
- (Oe = console.debug) == null || Oe.call(console, Le);
+ } catch (Ye) {
+ (rt = console.debug) == null || rt.call(console, Ye);
}
try {
- const Le = String(e.scopesMode || "off");
- H(f, {
+ const Ye = String(e.scopesMode || "off");
+ E(f, {
accentRgb: P.analysis,
- active: Le !== "off",
- title: Le !== "off" ? "Scopes (active)" : "Scopes"
+ active: Ye !== "off",
+ title: Ye !== "off" ? "Scopes (active)" : "Scopes"
});
- } catch (Le) {
- (pt = console.debug) == null || pt.call(console, Le);
+ } catch (Ye) {
+ (Te = console.debug) == null || Te.call(console, Ye);
}
try {
- const Le = Number(e.gridMode) || 0;
- H(x, {
+ const Ye = Number(e.gridMode) || 0;
+ E(x, {
accentRgb: P.overlay,
- active: Le !== 0,
- title: Le !== 0 ? "Grid Overlay (active)" : "Grid Overlay"
+ active: Ye !== 0,
+ title: Ye !== 0 ? "Grid Overlay (active)" : "Grid Overlay"
});
- } catch (Le) {
- (Me = console.debug) == null || Me.call(console, Le);
+ } catch (Ye) {
+ (qt = console.debug) == null || qt.call(console, Ye);
}
try {
- const Le = String(e.overlayFormat || "image");
- H(v, {
+ const Ye = String(e.overlayFormat || "image");
+ E(j, {
accentRgb: P.overlay,
- active: Le !== "image",
- title: Le !== "image" ? "Format (active)" : "Format"
+ active: Ye !== "image",
+ title: Ye !== "image" ? "Format (active)" : "Format"
});
- } catch (Le) {
- (Xt = console.debug) == null || Xt.call(console, Le);
+ } catch (Ye) {
+ (kt = console.debug) == null || kt.call(console, Ye);
}
try {
- const Le = typeof n == "function" ? !!n() : !1, Ot = e.mode === t.AB_COMPARE && Le, Xe = String(e.abCompareMode || "wipe");
- H(p, {
+ const Ye = typeof n == "function" ? !!n() : !1, Pt = e.mode === t.AB_COMPARE && Ye, ke = String(e.abCompareMode || "wipe");
+ E(p, {
accentRgb: P.compare,
- active: Ot && Xe !== "wipe",
- title: Ot && Xe !== "wipe" ? "Compare Mode (modified)" : "A/B Compare Mode"
+ active: Pt && ke !== "wipe",
+ title: Pt && ke !== "wipe" ? "Compare Mode (modified)" : "A/B Compare Mode"
});
- } catch (Le) {
- (Mt = console.debug) == null || Mt.call(console, Le);
+ } catch (Ye) {
+ (we = console.debug) == null || we.call(console, Ye);
}
try {
- const Le = String((M == null ? void 0 : M.kind) || "") === "audio", Ot = String(e.audioVisualizerMode || "artistic");
- H(b, {
+ const Ye = String((M == null ? void 0 : M.kind) || "") === "audio", Pt = String(e.audioVisualizerMode || "artistic");
+ E(b, {
accentRgb: P.audioviz,
- active: Le && Ot !== "simple",
+ active: Ye && Pt !== "simple",
title: "Audio visualizer mode"
});
- } catch (Le) {
- (me = console.debug) == null || me.call(console, Le);
+ } catch (Ye) {
+ (me = console.debug) == null || me.call(console, Ye);
}
try {
- const Le = !!e.genInfoOpen, Ot = V == null ? void 0 : V.b;
- Ot && Le && (Ot.style.borderColor = `rgba(${P.geninfo},0.55)`, Ot.style.background = `rgba(${P.geninfo},0.14)`);
- } catch (Le) {
- (Pe = console.debug) == null || Pe.call(console, Le);
+ const Ye = !!e.genInfoOpen, Pt = Y == null ? void 0 : Y.b;
+ Pt && Ye && (Pt.style.borderColor = `rgba(${P.geninfo},0.55)`, Pt.style.background = `rgba(${P.geninfo},0.14)`);
+ } catch (Ye) {
+ (He = console.debug) == null || He.call(console, Ye);
}
}
function aA({
@@ -13274,12 +13301,12 @@ function cA({
onCompareModeChanged: d,
onExportFrame: u,
onCopyFrame: I,
- onAudioVizModeChanged: y,
- onToggleFullscreen: S,
- getCanAB: Z
+ onAudioVizModeChanged: A,
+ onToggleFullscreen: h,
+ getCanAB: S
} = {}) {
- var dt, Re, Wt, lt, qt, yt;
- const C = (n == null ? void 0 : n.unsubs) || [], g = document.createElement("div");
+ var tt, Oe, Rt, nt, Mt, dt;
+ const W = (n == null ? void 0 : n.unsubs) || [], g = document.createElement("div");
g.className = "mjr-viewer-header", g.style.cssText = `
display: flex;
flex-direction: column;
@@ -13290,8 +13317,8 @@ function cA({
color: white;
box-sizing: border-box;
`;
- const A = document.createElement("div");
- A.className = "mjr-viewer-header-top", A.style.cssText = `
+ const y = document.createElement("div");
+ y.className = "mjr-viewer-header-top", y.style.cssText = `
display: flex;
align-items: center;
justify-content: center;
@@ -13308,136 +13335,136 @@ function cA({
b.className = "mjr-viewer-title-line", b.style.cssText = "display:flex; align-items:center; justify-content:center; gap:8px; min-width:0; flex-wrap:nowrap; overflow:hidden;";
const L = document.createElement("div");
L.className = "mjr-viewer-title-wrap", L.style.cssText = "display:flex; align-items:center; justify-content:center; gap:12px; min-width:0; max-width:min(100%, calc(100vw - 220px)); text-align:center;";
- const h = document.createElement("span");
- h.className = "mjr-viewer-filename", h.style.cssText = "font-size: 13px; font-weight: 600; min-width:0; max-width:min(60vw, 820px); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; text-align:center;";
+ const C = document.createElement("span");
+ C.className = "mjr-viewer-filename", C.style.cssText = "font-size: 13px; font-weight: 600; min-width:0; max-width:min(60vw, 820px); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; text-align:center;";
const G = document.createElement("div");
G.className = "mjr-viewer-badges", G.style.cssText = "display:flex; gap:6px; align-items:center; flex-wrap:nowrap; min-width:0;";
- const W = document.createElement("div");
- W.className = "mjr-viewer-header-meta mjr-viewer-header-meta--right", W.style.cssText = "display:none; align-items:center; gap:10px; min-width:0; justify-content:flex-end; overflow:hidden;";
+ const Z = document.createElement("div");
+ Z.className = "mjr-viewer-header-meta mjr-viewer-header-meta--right", Z.style.cssText = "display:none; align-items:center; gap:10px; min-width:0; justify-content:flex-end; overflow:hidden;";
const f = document.createElement("span");
f.className = "mjr-viewer-filename mjr-viewer-filename--right", f.style.cssText = "font-size: 14px; font-weight: 500; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; text-align:right;";
const X = document.createElement("div");
- X.className = "mjr-viewer-badges mjr-viewer-badges--right", X.style.cssText = "display:flex; gap:8px; align-items:center; flex-wrap:wrap; justify-content:flex-end;", b.appendChild(h), b.appendChild(G), L.appendChild(b), W.appendChild(X), W.appendChild(f);
+ X.className = "mjr-viewer-badges mjr-viewer-badges--right", X.style.cssText = "display:flex; gap:8px; align-items:center; flex-wrap:wrap; justify-content:flex-end;", b.appendChild(C), b.appendChild(G), L.appendChild(b), Z.appendChild(X), Z.appendChild(f);
const x = document.createElement("div");
x.className = "mjr-viewer-mode-buttons", x.style.cssText = "display: flex; gap: 4px;";
- const T = Cc("Single", e.SINGLE);
- T.title = m("tooltip.singleViewMode", "Single view mode (one image)");
- const v = Cc("A/B", e.AB_COMPARE);
- v.title = m("tooltip.compareOverlayMode", "A/B compare mode (overlay)");
- const w = Cc("Side", e.SIDE_BY_SIDE);
- w.title = m("tooltip.compareSideBySide", "Side-by-side comparison mode"), x.appendChild(T), x.appendChild(v), x.appendChild(w);
+ const K = Zc("Single", e.SINGLE);
+ K.title = m("tooltip.singleViewMode", "Single view mode (one image)");
+ const j = Zc("A/B", e.AB_COMPARE);
+ j.title = m("tooltip.compareOverlayMode", "A/B compare mode (overlay)");
+ const w = Zc("Side", e.SIDE_BY_SIDE);
+ w.title = m("tooltip.compareSideBySide", "Side-by-side comparison mode"), x.appendChild(K), x.appendChild(j), x.appendChild(w);
const R = fl("✕", "Close (Esc)");
R.style.fontSize = "18px";
try {
R.classList.add("mjr-viewer-close"), R.textContent = "";
- const mt = document.createElement("span");
- mt.className = "pi pi-times", mt.setAttribute("aria-hidden", "true"), R.appendChild(mt);
- } catch (mt) {
- (dt = console.debug) == null || dt.call(console, mt);
+ const bt = document.createElement("span");
+ bt.className = "pi pi-times", bt.setAttribute("aria-hidden", "true"), R.appendChild(bt);
+ } catch (bt) {
+ (tt = console.debug) == null || tt.call(console, bt);
}
- const Y = fl("⛶", "Toggle Fullscreen (F)");
+ const V = fl("⛶", "Toggle Fullscreen (F)");
try {
- Y.classList.add("mjr-viewer-fs");
- } catch (mt) {
- (Re = console.debug) == null || Re.call(console, mt);
+ V.classList.add("mjr-viewer-fs");
+ } catch (bt) {
+ (Oe = console.debug) == null || Oe.call(console, bt);
}
- Y.style.fontSize = "16px";
+ V.style.fontSize = "16px";
try {
- Y.style.position = "absolute", Y.style.top = "8px", Y.style.left = "", Y.style.right = "48px", Y.style.zIndex = "10002", Y.style.width = "34px", Y.style.height = "34px", Y.style.padding = "0", Y.style.display = "inline-flex", Y.style.alignItems = "center", Y.style.justifyContent = "center", Y.style.borderRadius = "8px";
- const mt = document.createElement("span");
- mt.className = "pi pi-window-maximize", mt.setAttribute("aria-hidden", "true"), Y.textContent = "", Y.appendChild(mt);
- const kt = () => {
+ V.style.position = "absolute", V.style.top = "8px", V.style.left = "", V.style.right = "48px", V.style.zIndex = "10002", V.style.width = "34px", V.style.height = "34px", V.style.padding = "0", V.style.display = "inline-flex", V.style.alignItems = "center", V.style.justifyContent = "center", V.style.borderRadius = "8px";
+ const bt = document.createElement("span");
+ bt.className = "pi pi-window-maximize", bt.setAttribute("aria-hidden", "true"), V.textContent = "", V.appendChild(bt);
+ const Yt = () => {
var $t;
try {
- const Tt = document.fullscreenElement != null;
- mt.className = Tt ? "pi pi-window-minimize" : "pi pi-window-maximize", Y.title = Tt ? "Exit Fullscreen (F)" : "Enter Fullscreen (F)";
- } catch (Tt) {
- ($t = console.debug) == null || $t.call(console, Tt);
+ const nn = document.fullscreenElement != null;
+ bt.className = nn ? "pi pi-window-minimize" : "pi pi-window-maximize", V.title = nn ? "Exit Fullscreen (F)" : "Enter Fullscreen (F)";
+ } catch (nn) {
+ ($t = console.debug) == null || $t.call(console, nn);
}
};
- if (Y.onclick = ($t) => {
- $t.stopPropagation(), S == null || S();
+ if (V.onclick = ($t) => {
+ $t.stopPropagation(), h == null || h();
}, n != null && n.safeAddListener)
- n.safeAddListener(document, "fullscreenchange", kt);
+ n.safeAddListener(document, "fullscreenchange", Yt);
else
try {
- document.addEventListener("fullscreenchange", kt);
+ document.addEventListener("fullscreenchange", Yt);
const $t = () => {
- var Tt;
+ var nn;
try {
- document.removeEventListener("fullscreenchange", kt);
- } catch (te) {
- (Tt = console.debug) == null || Tt.call(console, te);
+ document.removeEventListener("fullscreenchange", Yt);
+ } catch (ie) {
+ (nn = console.debug) == null || nn.call(console, ie);
}
};
g._mjrCleanup ? g._mjrCleanup.push($t) : g._mjrCleanup = [$t];
} catch ($t) {
- (Wt = console.debug) == null || Wt.call(console, $t);
+ (Rt = console.debug) == null || Rt.call(console, $t);
}
- kt();
- } catch (mt) {
- (lt = console.debug) == null || lt.call(console, mt);
+ Yt();
+ } catch (bt) {
+ (nt = console.debug) == null || nt.call(console, bt);
}
- const F = document.createElement("div");
- F.className = "mjr-viewer-header-area mjr-viewer-header-area--left", F.style.cssText = "display:none; align-items:center; gap:12px; min-width:0; flex:1 1 0; overflow:hidden;", F.appendChild(p);
- const N = document.createElement("div");
- N.className = "mjr-viewer-header-area mjr-viewer-header-area--center", N.style.cssText = "display:flex; align-items:center; justify-content:center; gap:12px; flex:1 1 auto; min-width:0;", L.appendChild(x), N.appendChild(L);
- const V = document.createElement("div");
- V.className = "mjr-viewer-header-area mjr-viewer-header-area--right", V.style.cssText = "display:none; align-items:center; justify-content:flex-end; gap:12px; min-width:0; flex:1 1 0; overflow:hidden;", V.appendChild(W), A.appendChild(F), A.appendChild(N), A.appendChild(V);
+ const O = document.createElement("div");
+ O.className = "mjr-viewer-header-area mjr-viewer-header-area--left", O.style.cssText = "display:none; align-items:center; gap:12px; min-width:0; flex:1 1 0; overflow:hidden;", O.appendChild(p);
+ const k = document.createElement("div");
+ k.className = "mjr-viewer-header-area mjr-viewer-header-area--center", k.style.cssText = "display:flex; align-items:center; justify-content:center; gap:12px; flex:1 1 auto; min-width:0;", L.appendChild(x), k.appendChild(L);
+ const Y = document.createElement("div");
+ Y.className = "mjr-viewer-header-area mjr-viewer-header-area--right", Y.style.cssText = "display:none; align-items:center; justify-content:flex-end; gap:12px; min-width:0; flex:1 1 0; overflow:hidden;", Y.appendChild(Z), y.appendChild(O), y.appendChild(k), y.appendChild(Y);
try {
R.style.position = "absolute", R.style.top = "8px", R.style.left = "", R.style.right = "8px", R.style.transform = "", R.style.zIndex = "10002", R.style.width = "34px", R.style.height = "34px", R.style.padding = "0", R.style.display = "inline-flex", R.style.alignItems = "center", R.style.justifyContent = "center", R.style.borderRadius = "8px";
- } catch (mt) {
- (qt = console.debug) == null || qt.call(console, mt);
+ } catch (bt) {
+ (Mt = console.debug) == null || Mt.call(console, bt);
}
- g.appendChild(A), g.appendChild(Y), g.appendChild(R);
+ g.appendChild(y), g.appendChild(V), g.appendChild(R);
const {
- toolsRow: k,
- gradePanel: K,
+ toolsRow: N,
+ gradePanel: U,
overlayPanel: z,
- inspectPanel: B,
+ inspectPanel: T,
actionPanel: J,
infoPanel: P,
- chGroup: H,
+ chGroup: E,
expGroup: $,
- gamGroup: E,
- anaGroup: oe,
+ gamGroup: H,
+ anaGroup: ne,
ovGuidesGroup: M,
- ovInspectGroup: j,
- cmpGroup: O,
+ ovInspectGroup: v,
+ cmpGroup: F,
audGroup: D,
model3dHint: q,
helpWrap: ee,
- helpBtn: ce,
+ helpBtn: ae,
helpPop: ue,
- channelsSelect: U,
+ channelsSelect: B,
exposureCtl: Q,
gammaCtl: _,
zebraToggle: le,
- scopesToggle: de,
- scopesSelect: se,
+ scopesToggle: ce,
+ scopesSelect: de,
gridToggle: ge,
- gridModeSelect: je,
- maskToggle: Se,
- formatSelect: ke,
- maskOpacityCtl: we,
- probeToggle: Je,
- loupeToggle: $e,
+ gridModeSelect: Le,
+ maskToggle: xe,
+ formatSelect: Xe,
+ maskOpacityCtl: Me,
+ probeToggle: Fe,
+ loupeToggle: it,
hudToggle: qe,
- focusToggle: Ue,
- genInfoToggle: Te,
- compareModeSelect: Oe,
- audioVizModeSelect: pt,
- resetGradeBtn: Me,
- exportBtn: Xt,
- copyBtn: Mt,
+ focusToggle: Pe,
+ genInfoToggle: Re,
+ compareModeSelect: rt,
+ audioVizModeSelect: Te,
+ resetGradeBtn: qt,
+ exportBtn: kt,
+ copyBtn: we,
resetExposure: me,
- resetGamma: Pe,
- resetViewerTools: Le,
- ACCENT: Ot,
- setSelectHighlighted: Xe,
+ resetGamma: He,
+ resetViewerTools: Ye,
+ ACCENT: Pt,
+ setSelectHighlighted: ke,
setChannelSelectStyle: Ee,
setValueHighlighted: Ke,
- setGroupHighlighted: nt
+ setGroupHighlighted: lt
} = oA({
VIEWER_MODES: e,
state: t,
@@ -13445,177 +13472,177 @@ function cA({
onCompareModeChanged: d,
onExportFrame: u,
onCopyFrame: I,
- onAudioVizModeChanged: y,
- getCanAB: Z
+ onAudioVizModeChanged: A,
+ getCanAB: S
});
- g.appendChild(k), rA({
- unsubs: C,
+ g.appendChild(N), rA({
+ unsubs: W,
state: t,
VIEWER_MODES: e,
onMode: c,
onClose: i,
onToolsChanged: s,
onCompareModeChanged: d,
- onAudioVizModeChanged: y,
+ onAudioVizModeChanged: A,
onExportFrame: u,
onCopyFrame: I,
- singleBtn: T,
- abBtn: v,
+ singleBtn: K,
+ abBtn: j,
sideBtn: w,
closeBtn: R,
- channelsSelect: U,
- compareModeSelect: Oe,
- audioVizModeSelect: pt,
+ channelsSelect: B,
+ compareModeSelect: rt,
+ audioVizModeSelect: Te,
exposureCtl: Q,
gammaCtl: _,
zebraToggle: le,
- scopesToggle: de,
- scopesSelect: se,
+ scopesToggle: ce,
+ scopesSelect: de,
gridToggle: ge,
- gridModeSelect: je,
- maskToggle: Se,
- formatSelect: ke,
- maskOpacityCtl: we,
- probeToggle: Je,
- loupeToggle: $e,
+ gridModeSelect: Le,
+ maskToggle: xe,
+ formatSelect: Xe,
+ maskOpacityCtl: Me,
+ probeToggle: Fe,
+ loupeToggle: it,
hudToggle: qe,
- focusToggle: Ue,
- genInfoToggle: Te,
- resetGradeBtn: Me,
- exportBtn: Xt,
- copyBtn: Mt,
+ focusToggle: Pe,
+ genInfoToggle: Re,
+ resetGradeBtn: qt,
+ exportBtn: kt,
+ copyBtn: we,
resetExposure: me,
- resetGamma: Pe,
- resetViewerTools: Le,
+ resetGamma: He,
+ resetViewerTools: Ye,
expGroup: $,
- gamGroup: E
+ gamGroup: H
});
- const ut = () => lA({
+ const wt = () => lA({
state: t,
VIEWER_MODES: e,
- getCanAB: Z,
+ getCanAB: S,
header: g,
- toolsRow: k,
- chGroup: H,
+ toolsRow: N,
+ chGroup: E,
expGroup: $,
- gamGroup: E,
- anaGroup: oe,
- gradePanel: K,
+ gamGroup: H,
+ anaGroup: ne,
+ gradePanel: U,
overlayPanel: z,
- inspectPanel: B,
+ inspectPanel: T,
infoPanel: P,
actionPanel: J,
ovGuidesGroup: M,
- ovInspectGroup: j,
+ ovInspectGroup: v,
model3dHint: q,
helpWrap: ee,
- channelsSelect: U,
- compareModeSelect: Oe,
- audioVizModeSelect: pt,
+ channelsSelect: B,
+ compareModeSelect: rt,
+ audioVizModeSelect: Te,
exposureCtl: Q,
gammaCtl: _,
zebraToggle: le,
- scopesToggle: de,
- scopesSelect: se,
+ scopesToggle: ce,
+ scopesSelect: de,
gridToggle: ge,
- gridModeSelect: je,
- maskToggle: Se,
- formatSelect: ke,
- maskOpacityCtl: we,
- probeToggle: Je,
- loupeToggle: $e,
+ gridModeSelect: Le,
+ maskToggle: xe,
+ formatSelect: Xe,
+ maskOpacityCtl: Me,
+ probeToggle: Fe,
+ loupeToggle: it,
hudToggle: qe,
- focusToggle: Ue,
- genInfoToggle: Te,
- exportBtn: Xt,
- copyBtn: Mt,
- resetGradeBtn: Me,
- cmpGroup: O,
+ focusToggle: Pe,
+ genInfoToggle: Re,
+ exportBtn: kt,
+ copyBtn: we,
+ resetGradeBtn: qt,
+ cmpGroup: F,
audGroup: D,
- ACCENT: Ot,
- setSelectHighlighted: Xe,
+ ACCENT: Pt,
+ setSelectHighlighted: ke,
setChannelSelectStyle: Ee,
setValueHighlighted: Ke,
- setGroupHighlighted: nt
- }), It = ({ canAB: mt, canSide: kt } = {}) => aA({
+ setGroupHighlighted: lt
+ }), at = ({ canAB: bt, canSide: Yt } = {}) => aA({
state: t,
VIEWER_MODES: e,
- singleBtn: T,
- abBtn: v,
+ singleBtn: K,
+ abBtn: j,
sideBtn: w,
- canAB: mt,
- canSide: kt
+ canAB: bt,
+ canSide: Yt
});
try {
- let mt = null;
- const kt = () => {
- var Tt, te, ye;
+ let bt = null;
+ const Yt = () => {
+ var nn, ie, pe;
try {
- (Tt = mt == null ? void 0 : mt.abort) == null || Tt.call(mt);
- } catch (We) {
- (te = console.debug) == null || te.call(console, We);
+ (nn = bt == null ? void 0 : bt.abort) == null || nn.call(bt);
+ } catch (Ce) {
+ (ie = console.debug) == null || ie.call(console, Ce);
}
- mt = null;
+ bt = null;
try {
ue.style.display = "none";
- } catch (We) {
- (ye = console.debug) == null || ye.call(console, We);
+ } catch (Ce) {
+ (pe = console.debug) == null || pe.call(console, Ce);
}
}, $t = () => {
- var Tt, te;
- kt(), mt = new AbortController();
+ var nn, ie;
+ Yt(), bt = new AbortController();
try {
ue.style.display = "";
- } catch (ye) {
- (Tt = console.debug) == null || Tt.call(console, ye);
+ } catch (pe) {
+ (nn = console.debug) == null || nn.call(console, pe);
}
try {
document.addEventListener(
"mousedown",
- (ye) => {
- ee.contains(ye.target) || kt();
+ (pe) => {
+ ee.contains(pe.target) || Yt();
},
- { capture: !0, signal: mt.signal }
+ { capture: !0, signal: bt.signal }
), document.addEventListener(
"keydown",
- (ye) => {
- ye.key === "Escape" && kt();
+ (pe) => {
+ pe.key === "Escape" && Yt();
},
- { capture: !0, signal: mt.signal }
- ), document.addEventListener("scroll", kt, {
+ { capture: !0, signal: bt.signal }
+ ), document.addEventListener("scroll", Yt, {
capture: !0,
passive: !0,
- signal: mt.signal
+ signal: bt.signal
});
- } catch (ye) {
- (te = console.debug) == null || te.call(console, ye);
+ } catch (pe) {
+ (ie = console.debug) == null || ie.call(console, pe);
}
};
- C.push(() => kt()), C.push(
- Qe(ce, "click", () => {
- ue.style.display !== "none" ? kt() : $t();
+ W.push(() => Yt()), W.push(
+ $e(ae, "click", () => {
+ ue.style.display !== "none" ? Yt() : $t();
})
);
- } catch (mt) {
- (yt = console.debug) == null || yt.call(console, mt);
+ } catch (bt) {
+ (dt = console.debug) == null || dt.call(console, bt);
}
return {
headerEl: g,
- headerTopEl: A,
- filenameEl: h,
+ headerTopEl: y,
+ filenameEl: C,
badgesBarEl: G,
filenameRightEl: f,
badgesBarRightEl: X,
- leftAreaEl: F,
+ leftAreaEl: O,
leftMetaEl: p,
- centerAreaEl: N,
- rightMetaEl: W,
- rightAreaEl: V,
+ centerAreaEl: k,
+ rightMetaEl: Z,
+ rightAreaEl: Y,
titleLineEl: b,
titleWrapEl: L,
modeButtonsEl: x,
- syncToolsUIFromState: ut,
- syncModeButtons: It
+ syncToolsUIFromState: wt,
+ syncModeButtons: at
};
}
function sA(e) {
@@ -13669,60 +13696,60 @@ function dA({
applyDistractionFreeUI: d,
navigateViewerAssets: u,
closeViewer: I,
- renderBadges: y,
- updateAssetRating: S,
- safeDispatchCustomEvent: Z,
- ASSET_RATING_CHANGED_EVENT: C,
+ renderBadges: A,
+ updateAssetRating: h,
+ safeDispatchCustomEvent: S,
+ ASSET_RATING_CHANGED_EVENT: W,
probeTooltip: g,
- loupeWrap: A,
+ loupeWrap: y,
getVideoControls: p,
lifecycle: b,
renderGenInfoPanel: L
} = {}) {
- const h = (b == null ? void 0 : b.unsubs) || [];
- let G = null, W = null;
+ const C = (b == null ? void 0 : b.unsubs) || [];
+ let G = null, Z = null;
const f = () => {
- var Y;
+ var V;
try {
G && clearTimeout(G);
- } catch (F) {
- (Y = console.debug) == null || Y.call(console, F);
+ } catch (O) {
+ (V = console.debug) == null || V.call(console, O);
}
- G = null, W = null;
- }, X = (Y, F) => {
- f(), W = { assetId: Y, rating: F }, G = setTimeout(async () => {
- const N = W;
- if (G = null, W = null, !!(N != null && N.assetId))
+ G = null, Z = null;
+ }, X = (V, O) => {
+ f(), Z = { assetId: V, rating: O }, G = setTimeout(async () => {
+ const k = Z;
+ if (G = null, Z = null, !!(k != null && k.assetId))
try {
- const V = await (S == null ? void 0 : S(N.assetId, N.rating));
- if (!(V != null && V.ok)) {
- Ze((V == null ? void 0 : V.error) || m("toast.ratingUpdateFailed"), "error");
+ const Y = await (h == null ? void 0 : h(k.assetId, k.rating));
+ if (!(Y != null && Y.ok)) {
+ Ae((Y == null ? void 0 : Y.error) || m("toast.ratingUpdateFailed"), "error");
return;
}
- Ze(m("toast.ratingSetN", { n: N.rating }), "success", 1500), Z == null || Z(
- C,
- { assetId: String(N.assetId), rating: N.rating },
+ Ae(m("toast.ratingSetN", { n: k.rating }), "success", 1500), S == null || S(
+ W,
+ { assetId: String(k.assetId), rating: k.rating },
{ warnPrefix: "[Viewer]" }
);
} catch {
- Ze(m("toast.ratingUpdateError"), "error");
+ Ae(m("toast.ratingUpdateError"), "error");
}
}, 300);
}, x = () => {
- var Y, F, N;
+ var V, O, k;
try {
- document.fullscreenElement ? (F = document == null ? void 0 : document.exitFullscreen) == null || F.call(document) : (Y = e == null ? void 0 : e.requestFullscreen) == null || Y.call(e);
- } catch (V) {
- (N = console.debug) == null || N.call(console, V);
+ document.fullscreenElement ? (O = document == null ? void 0 : document.exitFullscreen) == null || O.call(document) : (V = e == null ? void 0 : e.requestFullscreen) == null || V.call(e);
+ } catch (Y) {
+ (k = console.debug) == null || k.call(console, Y);
}
- }, T = (Y) => {
- var J, P, H, $, E, oe, M, j, O, D, q, ee, ce, ue, U, Q, _, le, de, se, ge, je, Se, ke, we, Je, $e, qe, Ue, Te, Oe, pt, Me, Xt, Mt;
- const F = () => {
- var me, Pe;
+ }, K = (V) => {
+ var J, P, E, $, H, ne, M, v, F, D, q, ee, ae, ue, B, Q, _, le, ce, de, ge, Le, xe, Xe, Me, Fe, it, qe, Pe, Re, rt, Te, qt, kt, we;
+ const O = () => {
+ var me, He;
try {
- Y.preventDefault(), Y.stopPropagation(), (me = Y.stopImmediatePropagation) == null || me.call(Y);
- } catch (Le) {
- (Pe = console.debug) == null || Pe.call(console, Le);
+ V.preventDefault(), V.stopPropagation(), (me = V.stopImmediatePropagation) == null || me.call(V);
+ } catch (Ye) {
+ (He = console.debug) == null || He.call(console, Ye);
}
};
try {
@@ -13731,81 +13758,81 @@ function dA({
(P = console.debug) == null || P.call(console, me);
}
try {
- const me = Y == null ? void 0 : Y.target;
+ const me = V == null ? void 0 : V.target;
if (me && (me.tagName === "INPUT" || me.tagName === "TEXTAREA" || me.isContentEditable)) {
- if (Y.key === "f" || Y.key === "F") {
- F(), x();
+ if (V.key === "f" || V.key === "F") {
+ O(), x();
return;
}
- Y.key === "Escape" && (F(), bt(I));
+ V.key === "Escape" && (O(), It(I));
return;
}
} catch (me) {
- (H = console.debug) == null || H.call(console, me);
+ (E = console.debug) == null || E.call(console, me);
}
- const N = (i == null ? void 0 : i.mode) === (o == null ? void 0 : o.SINGLE), V = ($ = i == null ? void 0 : i.assets) == null ? void 0 : $[i == null ? void 0 : i.currentIndex], k = async (me) => {
- if (!N || !(V != null && V.id) || me !== "0" && me !== "1" && me !== "2" && me !== "3" && me !== "4" && me !== "5")
+ const k = (i == null ? void 0 : i.mode) === (o == null ? void 0 : o.SINGLE), Y = ($ = i == null ? void 0 : i.assets) == null ? void 0 : $[i == null ? void 0 : i.currentIndex], N = async (me) => {
+ if (!k || !(Y != null && Y.id) || me !== "0" && me !== "1" && me !== "2" && me !== "3" && me !== "4" && me !== "5")
return !1;
- const Pe = me === "0" ? 0 : Number(me);
- if (!Number.isFinite(Pe)) return !1;
+ const He = me === "0" ? 0 : Number(me);
+ if (!Number.isFinite(He)) return !1;
try {
- return V.rating = Pe, bt(y), X(V.id, Pe), !0;
+ return Y.rating = He, It(A), X(Y.id, He), !0;
} catch {
return !0;
}
- }, K = () => {
+ }, U = () => {
try {
return (p == null ? void 0 : p()) || null;
} catch {
return null;
}
}, z = async (me) => {
- var Ee, Ke, nt, ut, It, dt;
- if (!N || (V == null ? void 0 : V.kind) !== "video") return !1;
+ var Ee, Ke, lt, wt, at, tt;
+ if (!k || (Y == null ? void 0 : Y.kind) !== "video") return !1;
try {
- const Re = K();
- if (Re != null && Re.stepFrames)
- return Re.stepFrames(me), !0;
- } catch (Re) {
- (Ee = console.debug) == null || Ee.call(console, Re);
+ const Oe = U();
+ if (Oe != null && Oe.stepFrames)
+ return Oe.stepFrames(me), !0;
+ } catch (Oe) {
+ (Ee = console.debug) == null || Ee.call(console, Oe);
}
- const Pe = (Ke = n == null ? void 0 : n.querySelector) == null ? void 0 : Ke.call(n, "video");
- if (!Pe) return !1;
+ const He = (Ke = n == null ? void 0 : n.querySelector) == null ? void 0 : Ke.call(n, "video");
+ if (!He) return !1;
try {
- (nt = Pe.pause) == null || nt.call(Pe);
- } catch (Re) {
- (ut = console.debug) == null || ut.call(console, Re);
+ (lt = He.pause) == null || lt.call(He);
+ } catch (Oe) {
+ (wt = console.debug) == null || wt.call(console, Oe);
}
- const Ot = 1 / 30, Xe = me * Ot;
+ const Pt = 1 / 30, ke = me * Pt;
try {
- const Re = Number(Pe.duration), Wt = Math.max(
+ const Oe = Number(He.duration), Rt = Math.max(
0,
Math.min(
- Number.isFinite(Re) ? Re : 1 / 0,
- (Pe.currentTime || 0) + Xe
+ Number.isFinite(Oe) ? Oe : 1 / 0,
+ (He.currentTime || 0) + ke
)
);
- Pe.currentTime = Wt;
+ He.currentTime = Rt;
try {
- (It = Pe.dispatchEvent) == null || It.call(
- Pe,
- new CustomEvent("mjr:frameStep", { detail: { direction: me, time: Wt } })
+ (at = He.dispatchEvent) == null || at.call(
+ He,
+ new CustomEvent("mjr:frameStep", { detail: { direction: me, time: Rt } })
);
- } catch (lt) {
- (dt = console.debug) == null || dt.call(console, lt);
+ } catch (nt) {
+ (tt = console.debug) == null || tt.call(console, nt);
}
return !0;
} catch {
return !0;
}
- }, B = (me, { absolute: Pe = !1 } = {}) => {
- var Le, Ot;
+ }, T = (me, { absolute: He = !1 } = {}) => {
+ var Ye, Pt;
try {
- const Xe = K();
- if (!Xe) return !1;
- if (Pe) {
- const Ke = (Le = Xe.setPlaybackRate) == null ? void 0 : Le.call(Xe, me);
- return Number.isFinite(Number(Ke)) ? (i.playbackRate = Number(Ke), Ze(
+ const ke = U();
+ if (!ke) return !1;
+ if (He) {
+ const Ke = (Ye = ke.setPlaybackRate) == null ? void 0 : Ye.call(ke, me);
+ return Number.isFinite(Number(Ke)) ? (i.playbackRate = Number(Ke), Ae(
m("toast.playbackRate", "Playback {rate}x", {
rate: Number(Ke).toFixed(2)
}),
@@ -13813,8 +13840,8 @@ function dA({
1200
), !0) : !1;
}
- const Ee = (Ot = Xe.adjustPlaybackRate) == null ? void 0 : Ot.call(Xe, me);
- return Number.isFinite(Number(Ee)) ? (i.playbackRate = Number(Ee), Ze(
+ const Ee = (Pt = ke.adjustPlaybackRate) == null ? void 0 : Pt.call(ke, me);
+ return Number.isFinite(Number(Ee)) ? (i.playbackRate = Number(Ee), Ae(
m("toast.playbackRate", "Playback {rate}x", {
rate: Number(Ee).toFixed(2)
}),
@@ -13825,124 +13852,124 @@ function dA({
return !1;
}
};
- if ((Y.ctrlKey || Y.metaKey) && (Y.key === "c" || Y.key === "C"))
+ if ((V.ctrlKey || V.metaKey) && (V.key === "c" || V.key === "C"))
try {
- const me = sA(V);
+ const me = sA(Y);
if (me) {
- F(), (oe = (E = navigator.clipboard) == null ? void 0 : E.writeText) == null || oe.call(E, me).then(() => Ze(m("toast.promptCopied", "Prompt copied to clipboard"), "success", 1500)).catch(() => Ze(m("toast.copyFailed", "Copy failed"), "error", 1500));
+ O(), (ne = (H = navigator.clipboard) == null ? void 0 : H.writeText) == null || ne.call(H, me).then(() => Ae(m("toast.promptCopied", "Prompt copied to clipboard"), "success", 1500)).catch(() => Ae(m("toast.copyFailed", "Copy failed"), "error", 1500));
return;
}
} catch (me) {
(M = console.debug) == null || M.call(console, me);
}
- if (N && !Y.altKey && !Y.ctrlKey && !Y.metaKey && (Y.key === "0" || Y.key === "1" || Y.key === "2" || Y.key === "3" || Y.key === "4" || Y.key === "5")) {
- F(), k(Y.key);
+ if (k && !V.altKey && !V.ctrlKey && !V.metaKey && (V.key === "0" || V.key === "1" || V.key === "2" || V.key === "3" || V.key === "4" || V.key === "5")) {
+ O(), N(V.key);
return;
}
- switch (Y.key) {
+ switch (V.key) {
case "1": {
- if (!Y.altKey) break;
- const me = bt(r);
+ if (!V.altKey) break;
+ const me = It(r);
if (me == null) break;
- F();
+ O();
try {
- const Pe = Math.abs((Number(i == null ? void 0 : i.zoom) || 1) - me) < 0.01;
- l == null || l(Pe ? 1 : me, {
+ const He = Math.abs((Number(i == null ? void 0 : i.zoom) || 1) - me) < 0.01;
+ l == null || l(He ? 1 : me, {
clientX: i == null ? void 0 : i._lastPointerX,
clientY: i == null ? void 0 : i._lastPointerY
});
- } catch (Pe) {
- (j = console.debug) == null || j.call(console, Pe);
+ } catch (He) {
+ (v = console.debug) == null || v.call(console, He);
}
break;
}
case "g":
case "G": {
- F();
+ O();
try {
i.gridMode = ((Number(i.gridMode) || 0) + 1) % 5;
} catch (me) {
- (O = console.debug) == null || O.call(console, me);
+ (F = console.debug) == null || F.call(console, me);
}
- bt(a), bt(s);
+ It(a), It(s);
break;
}
case "f":
case "F": {
- F(), x();
+ O(), x();
break;
}
case "d":
case "D": {
- F();
+ O();
try {
i.genInfoOpen = !i.genInfoOpen;
} catch (me) {
(D = console.debug) == null || D.call(console, me);
}
- bt(s), bt(L);
+ It(s), It(L);
break;
}
case "z":
case "Z": {
- F();
+ O();
try {
i.analysisMode = i.analysisMode === "zebra" ? "none" : "zebra";
} catch (me) {
(q = console.debug) == null || q.call(console, me);
}
- bt(s), bt(c);
+ It(s), It(c);
break;
}
case "i":
case "I": {
- if (N && (V == null ? void 0 : V.kind) === "video") {
- const me = K();
+ if (k && (Y == null ? void 0 : Y.kind) === "video") {
+ const me = U();
if ((ee = me == null ? void 0 : me.setInPoint) != null && ee.call(me)) {
- F(), Ze(m("toast.inPointSet", "In point set"), "info", 1200);
+ O(), Ae(m("toast.inPointSet", "In point set"), "info", 1200);
break;
}
}
- F();
+ O();
try {
i.probeEnabled = !i.probeEnabled;
} catch (me) {
- (ce = console.debug) == null || ce.call(console, me);
+ (ae = console.debug) == null || ae.call(console, me);
}
try {
i.probeEnabled || (g.style.display = "none");
} catch (me) {
(ue = console.debug) == null || ue.call(console, me);
}
- bt(s);
+ It(s);
break;
}
case "o":
case "O": {
- if (N && (V == null ? void 0 : V.kind) === "video") {
- const me = K();
- if ((U = me == null ? void 0 : me.setOutPoint) != null && U.call(me)) {
- F(), Ze(m("toast.outPointSet", "Out point set"), "info", 1200);
+ if (k && (Y == null ? void 0 : Y.kind) === "video") {
+ const me = U();
+ if ((B = me == null ? void 0 : me.setOutPoint) != null && B.call(me)) {
+ O(), Ae(m("toast.outPointSet", "Out point set"), "info", 1200);
break;
}
}
break;
}
case "Home": {
- if (N && (V == null ? void 0 : V.kind) === "video") {
- const me = K();
+ if (k && (Y == null ? void 0 : Y.kind) === "video") {
+ const me = U();
if ((Q = me == null ? void 0 : me.goToIn) != null && Q.call(me)) {
- F();
+ O();
break;
}
}
break;
}
case "End": {
- if (N && (V == null ? void 0 : V.kind) === "video") {
- const me = K();
+ if (k && (Y == null ? void 0 : Y.kind) === "video") {
+ const me = U();
if ((_ = me == null ? void 0 : me.goToOut) != null && _.call(me)) {
- F();
+ O();
break;
}
}
@@ -13950,69 +13977,69 @@ function dA({
}
case "l":
case "L": {
- F();
+ O();
try {
i.loupeEnabled = !i.loupeEnabled;
} catch (me) {
(le = console.debug) == null || le.call(console, me);
}
try {
- i.loupeEnabled || (A.style.display = "none");
+ i.loupeEnabled || (y.style.display = "none");
} catch (me) {
- (de = console.debug) == null || de.call(console, me);
+ (ce = console.debug) == null || ce.call(console, me);
}
- bt(s);
+ It(s);
break;
}
case "x":
case "X": {
- F();
+ O();
try {
i.distractionFree = !i.distractionFree;
} catch (me) {
- (se = console.debug) == null || se.call(console, me);
+ (de = console.debug) == null || de.call(console, me);
}
- bt(s), bt(d), bt(L);
+ It(s), It(d), It(L);
break;
}
case "c":
case "C": {
const me = i == null ? void 0 : i._probe;
if (!me || me.r == null || me.g == null || me.b == null) break;
- const Pe = `#${[me.r, me.g, me.b].map((Le) => Math.max(0, Math.min(255, Number(Le) || 0)).toString(16).padStart(2, "0")).join("")}`;
+ const He = `#${[me.r, me.g, me.b].map((Ye) => Math.max(0, Math.min(255, Number(Ye) || 0)).toString(16).padStart(2, "0")).join("")}`;
try {
- const Le = navigator == null ? void 0 : navigator.clipboard;
- Le != null && Le.writeText && (F(), Le.writeText(Pe).catch(() => {
+ const Ye = navigator == null ? void 0 : navigator.clipboard;
+ Ye != null && Ye.writeText && (O(), Ye.writeText(He).catch(() => {
}));
- } catch (Le) {
- (ge = console.debug) == null || ge.call(console, Le);
+ } catch (Ye) {
+ (ge = console.debug) == null || ge.call(console, Ye);
}
break;
}
case " ":
case "Spacebar": {
- if (N && (V == null ? void 0 : V.kind) === "video") {
- const me = (je = n == null ? void 0 : n.querySelector) == null ? void 0 : je.call(n, "video");
+ if (k && (Y == null ? void 0 : Y.kind) === "video") {
+ const me = (Le = n == null ? void 0 : n.querySelector) == null ? void 0 : Le.call(n, "video");
if (me) {
- F();
+ O();
try {
- const Pe = K();
- if (Pe != null && Pe.togglePlay) {
- Pe.togglePlay();
+ const He = U();
+ if (He != null && He.togglePlay) {
+ He.togglePlay();
break;
}
- } catch (Pe) {
- (Se = console.debug) == null || Se.call(console, Pe);
+ } catch (He) {
+ (xe = console.debug) == null || xe.call(console, He);
}
try {
if (me.paused) {
- const Pe = (ke = me.play) == null ? void 0 : ke.call(me);
- Pe && typeof Pe.catch == "function" && Pe.catch(() => {
+ const He = (Xe = me.play) == null ? void 0 : Xe.call(me);
+ He && typeof He.catch == "function" && He.catch(() => {
});
} else
- (we = me.pause) == null || we.call(me);
- } catch (Pe) {
- (Je = console.debug) == null || Je.call(console, Pe);
+ (Me = me.pause) == null || Me.call(me);
+ } catch (He) {
+ (Fe = console.debug) == null || Fe.call(console, He);
}
break;
}
@@ -14020,91 +14047,91 @@ function dA({
break;
}
case "Tab": {
- F();
+ O();
try {
- ($e = e == null ? void 0 : e.contains) != null && $e.call(e, document.activeElement) || (qe = e == null ? void 0 : e.focus) == null || qe.call(e);
+ (it = e == null ? void 0 : e.contains) != null && it.call(e, document.activeElement) || (qe = e == null ? void 0 : e.focus) == null || qe.call(e);
} catch (me) {
- (Ue = console.debug) == null || Ue.call(console, me);
+ (Pe = console.debug) == null || Pe.call(console, me);
}
break;
}
case "Escape":
- F(), bt(I);
+ O(), It(I);
break;
case "ArrowLeft":
- if (N && ((Oe = (Te = Y.target) == null ? void 0 : Te.closest) != null && Oe.call(Te, ".mjr-viewer-playerbar"))) {
- F(), z(-1);
+ if (k && ((rt = (Re = V.target) == null ? void 0 : Re.closest) != null && rt.call(Re, ".mjr-viewer-playerbar"))) {
+ O(), z(-1);
break;
}
- F(), bt(() => u == null ? void 0 : u(-1));
+ O(), It(() => u == null ? void 0 : u(-1));
break;
case "ArrowRight":
- if (N && ((Me = (pt = Y.target) == null ? void 0 : pt.closest) != null && Me.call(pt, ".mjr-viewer-playerbar"))) {
- F(), z(1);
+ if (k && ((qt = (Te = V.target) == null ? void 0 : Te.closest) != null && qt.call(Te, ".mjr-viewer-playerbar"))) {
+ O(), z(1);
break;
}
- F(), bt(() => u == null ? void 0 : u(1));
+ O(), It(() => u == null ? void 0 : u(1));
break;
case "[":
case "{": {
- F(), B(-0.25) || Ze(m("toast.playbackVideoOnly"), "warning", 1400);
+ O(), T(-0.25) || Ae(m("toast.playbackVideoOnly"), "warning", 1400);
break;
}
case "]":
case "}": {
- F(), B(0.25) || Ze(m("toast.playbackVideoOnly"), "warning", 1400);
+ O(), T(0.25) || Ae(m("toast.playbackVideoOnly"), "warning", 1400);
break;
}
case "\\":
case "|": {
- F(), B(1, { absolute: !0 }) || Ze(m("toast.playbackVideoOnly"), "warning", 1400);
+ O(), T(1, { absolute: !0 }) || Ae(m("toast.playbackVideoOnly"), "warning", 1400);
break;
}
case "+":
case "=":
- F();
+ O();
try {
l == null || l((Number(i == null ? void 0 : i.zoom) || 1) + 0.25, {
clientX: i == null ? void 0 : i._lastPointerX,
clientY: i == null ? void 0 : i._lastPointerY
});
} catch (me) {
- (Xt = console.debug) == null || Xt.call(console, me);
+ (kt = console.debug) == null || kt.call(console, me);
}
break;
case "-":
case "_":
- F();
+ O();
try {
l == null || l((Number(i == null ? void 0 : i.zoom) || 1) - 0.25, {
clientX: i == null ? void 0 : i._lastPointerX,
clientY: i == null ? void 0 : i._lastPointerY
});
} catch (me) {
- (Mt = console.debug) == null || Mt.call(console, me);
+ (we = console.debug) == null || we.call(console, me);
}
break;
}
};
- let v = null;
+ let j = null;
const w = () => {
- var Y;
+ var V;
try {
- if (v) return;
- v = Qe(window, "keydown", T, !0);
- } catch (F) {
- (Y = console.debug) == null || Y.call(console, F);
+ if (j) return;
+ j = $e(window, "keydown", K, !0);
+ } catch (O) {
+ (V = console.debug) == null || V.call(console, O);
}
}, R = () => {
- var Y;
+ var V;
try {
- bt(v);
- } catch (F) {
- (Y = console.debug) == null || Y.call(console, F);
+ It(j);
+ } catch (O) {
+ (V = console.debug) == null || V.call(console, O);
}
- v = null;
+ j = null;
};
- return h.push(() => f()), h.push(() => R()), {
+ return C.push(() => f()), C.push(() => R()), {
bind: w,
unbind: R,
dispose: () => {
@@ -14114,7 +14141,7 @@ function dA({
}
const uA = () => {
try {
- return !!(fe != null && fe.DEBUG_VIEWER);
+ return !!(he != null && he.DEBUG_VIEWER);
} catch {
return !1;
}
@@ -14124,61 +14151,61 @@ function mA(e, t, { threshold: n = 0.15 } = {}) {
const i = new AbortController();
try {
if (!e) return i;
- const y = Array.isArray(t) ? t.filter((b) => b && b !== e) : [];
- if (!y.length) return i;
- let S = !1;
- const Z = (b) => {
- var L, h;
+ const A = Array.isArray(t) ? t.filter((b) => b && b !== e) : [];
+ if (!A.length) return i;
+ let h = !1;
+ const S = (b) => {
+ var L, C;
try {
const G = (L = b.play) == null ? void 0 : L.call(b);
G && typeof G.catch == "function" && G.catch(() => {
});
} catch (G) {
- (h = console.debug) == null || h.call(console, G);
+ (C = console.debug) == null || C.call(console, G);
}
- }, C = () => {
- if (!S)
+ }, W = () => {
+ if (!h)
try {
const b = Number(e.currentTime) || 0;
- for (const L of y)
+ for (const L of A)
try {
- Math.abs((Number(L.currentTime) || 0) - b) > n && (S = !0, L.currentTime = b, S = !1);
+ Math.abs((Number(L.currentTime) || 0) - b) > n && (h = !0, L.currentTime = b, h = !1);
} catch {
- S = !1;
+ h = !1;
}
} catch {
- S = !1;
+ h = !1;
}
}, g = (b) => {
- var L, h;
- if (!S)
- for (const G of y)
+ var L, C;
+ if (!h)
+ for (const G of A)
try {
- b ? Z(G) : (L = G.pause) == null || L.call(G);
- } catch (W) {
- (h = console.debug) == null || h.call(console, W);
+ b ? S(G) : (L = G.pause) == null || L.call(G);
+ } catch (Z) {
+ (C = console.debug) == null || C.call(console, Z);
}
- }, A = () => {
+ }, y = () => {
var b;
- if (!S)
- for (const L of y)
+ if (!h)
+ for (const L of A)
try {
L.muted = !!e.muted, L.volume = Number(e.volume) || 0;
- } catch (h) {
- (b = console.debug) == null || b.call(console, h);
+ } catch (C) {
+ (b = console.debug) == null || b.call(console, C);
}
}, p = () => {
var b;
- if (!S)
- for (const L of y)
+ if (!h)
+ for (const L of A)
try {
L.playbackRate = Number(e.playbackRate) || 1;
- } catch (h) {
- (b = console.debug) == null || b.call(console, h);
+ } catch (C) {
+ (b = console.debug) == null || b.call(console, C);
}
};
try {
- for (const b of y) {
+ for (const b of A) {
try {
b.muted = !0;
} catch (L) {
@@ -14194,7 +14221,7 @@ function mA(e, t, { threshold: n = 0.15 } = {}) {
(l = console.debug) == null || l.call(console, b);
}
try {
- A(), p(), C(), e.paused || g(!0);
+ y(), p(), W(), e.paused || g(!0);
} catch (b) {
(a = console.debug) == null || a.call(console, b);
}
@@ -14204,29 +14231,29 @@ function mA(e, t, { threshold: n = 0.15 } = {}) {
}), e.addEventListener("pause", () => g(!1), {
signal: i.signal,
passive: !0
- }), e.addEventListener("timeupdate", C, {
+ }), e.addEventListener("timeupdate", W, {
signal: i.signal,
passive: !0
- }), e.addEventListener("seeking", C, { signal: i.signal, passive: !0 }), e.addEventListener("seeked", C, { signal: i.signal, passive: !0 }), e.addEventListener("ended", C, { signal: i.signal, passive: !0 }), e.addEventListener("volumechange", A, { signal: i.signal, passive: !0 }), e.addEventListener("ratechange", p, { signal: i.signal, passive: !0 });
+ }), e.addEventListener("seeking", W, { signal: i.signal, passive: !0 }), e.addEventListener("seeked", W, { signal: i.signal, passive: !0 }), e.addEventListener("ended", W, { signal: i.signal, passive: !0 }), e.addEventListener("volumechange", y, { signal: i.signal, passive: !0 }), e.addEventListener("ratechange", p, { signal: i.signal, passive: !0 });
try {
- for (const b of y)
+ for (const b of A)
try {
b.addEventListener(
"ended",
() => {
- var L, h;
- if (!S) {
+ var L, C;
+ if (!h) {
try {
- S = !0, b.currentTime = Number(e.currentTime) || 0;
+ h = !0, b.currentTime = Number(e.currentTime) || 0;
} catch (G) {
(L = console.debug) == null || L.call(console, G);
} finally {
- S = !1;
+ h = !1;
}
try {
- e.paused || Z(b);
+ e.paused || S(b);
} catch (G) {
- (h = console.debug) == null || h.call(console, G);
+ (C = console.debug) == null || C.call(console, G);
}
}
},
@@ -14239,9 +14266,9 @@ function mA(e, t, { threshold: n = 0.15 } = {}) {
(s = console.debug) == null || s.call(console, b);
}
try {
- for (const b of y)
+ for (const b of A)
try {
- b.addEventListener("loadedmetadata", C, {
+ b.addEventListener("loadedmetadata", W, {
signal: i.signal,
passive: !0,
once: !0
@@ -14252,12 +14279,12 @@ function mA(e, t, { threshold: n = 0.15 } = {}) {
} catch (b) {
(u = console.debug) == null || u.call(console, b);
}
- } catch (y) {
+ } catch (A) {
if (uA())
try {
- console.warn("[Viewer] follower video sync setup failed", y);
- } catch (S) {
- (I = console.debug) == null || I.call(console, S);
+ console.warn("[Viewer] follower video sync setup failed", A);
+ } catch (h) {
+ (I = console.debug) == null || I.call(console, h);
}
}
return i;
@@ -14272,18 +14299,18 @@ function gA({
clearCanvas: l
} = {}) {
const a = () => {
- var b, L, h;
+ var b, L, C;
try {
const G = n == null ? void 0 : n.mode;
- return G === (i == null ? void 0 : i.AB_COMPARE) ? ((b = t == null ? void 0 : t.querySelector) == null ? void 0 : b.call(t, ".mjr-viewer-ab")) || t || null : G === (i == null ? void 0 : i.SIDE_BY_SIDE) ? ((L = t == null ? void 0 : t.querySelector) == null ? void 0 : L.call(t, ".mjr-viewer-sidebyside")) || t || null : ((h = t == null ? void 0 : t.querySelector) == null ? void 0 : h.call(t, ".mjr-viewer-single")) || t || null;
+ return G === (i == null ? void 0 : i.AB_COMPARE) ? ((b = t == null ? void 0 : t.querySelector) == null ? void 0 : b.call(t, ".mjr-viewer-ab")) || t || null : G === (i == null ? void 0 : i.SIDE_BY_SIDE) ? ((L = t == null ? void 0 : t.querySelector) == null ? void 0 : L.call(t, ".mjr-viewer-sidebyside")) || t || null : ((C = t == null ? void 0 : t.querySelector) == null ? void 0 : C.call(t, ".mjr-viewer-single")) || t || null;
} catch {
return t || null;
}
}, c = (b, L) => {
try {
if (!b) return L || null;
- const h = n == null ? void 0 : n.mode;
- if (h === (i == null ? void 0 : i.SIDE_BY_SIDE) || h === (i == null ? void 0 : i.AB_COMPARE)) {
+ const C = n == null ? void 0 : n.mode;
+ if (C === (i == null ? void 0 : i.SIDE_BY_SIDE) || C === (i == null ? void 0 : i.AB_COMPARE)) {
let G = b;
for (; G && G !== L && G.parentElement; ) {
if (G.parentElement === L) return G;
@@ -14296,166 +14323,166 @@ function gA({
return L || t || null;
}
}, s = (b) => {
- var L, h, G, W, f;
+ var L, C, G, Z, f;
try {
const X = (L = b == null ? void 0 : b.dataset) == null ? void 0 : L.mjrAssetId;
- if (X == null || X === "") return ((h = n == null ? void 0 : n.assets) == null ? void 0 : h[n == null ? void 0 : n.currentIndex]) || null;
+ if (X == null || X === "") return ((C = n == null ? void 0 : n.assets) == null ? void 0 : C[n == null ? void 0 : n.currentIndex]) || null;
const x = Array.isArray(n == null ? void 0 : n.assets) ? n.assets : [];
- for (const T of x)
+ for (const K of x)
try {
- if ((T == null ? void 0 : T.id) != null && String(T.id) === String(X)) return T;
- } catch (v) {
- (G = console.debug) == null || G.call(console, v);
+ if ((K == null ? void 0 : K.id) != null && String(K.id) === String(X)) return K;
+ } catch (j) {
+ (G = console.debug) == null || G.call(console, j);
}
- return ((W = n == null ? void 0 : n.assets) == null ? void 0 : W[n == null ? void 0 : n.currentIndex]) || null;
+ return ((Z = n == null ? void 0 : n.assets) == null ? void 0 : Z[n == null ? void 0 : n.currentIndex]) || null;
} catch {
return ((f = n == null ? void 0 : n.assets) == null ? void 0 : f[n == null ? void 0 : n.currentIndex]) || null;
}
}, d = (b, L = null) => {
- var h, G, W, f;
+ var C, G, Z, f;
try {
if (!b) return { w: 0, h: 0 };
if (b instanceof HTMLCanvasElement) {
- const T = Number(b._mjrNaturalW) || Number(b.width) || 0, v = Number(b._mjrNaturalH) || Number(b.height) || 0;
- if (T > 0 && v > 0) return { w: T, h: v };
+ const K = Number(b._mjrNaturalW) || Number(b.width) || 0, j = Number(b._mjrNaturalH) || Number(b.height) || 0;
+ if (K > 0 && j > 0) return { w: K, h: j };
}
const X = Number(b.videoWidth) || Number(b.naturalWidth) || 0, x = Number(b.videoHeight) || Number(b.naturalHeight) || 0;
if (X > 0 && x > 0) return { w: X, h: x };
try {
- const T = Number(L == null ? void 0 : L.width) || 0, v = Number(L == null ? void 0 : L.height) || 0;
- if (T > 0 && v > 0) return { w: T, h: v };
- } catch (T) {
- (h = console.debug) == null || h.call(console, T);
+ const K = Number(L == null ? void 0 : L.width) || 0, j = Number(L == null ? void 0 : L.height) || 0;
+ if (K > 0 && j > 0) return { w: K, h: j };
+ } catch (K) {
+ (C = console.debug) == null || C.call(console, K);
}
try {
- const T = Number(n == null ? void 0 : n._mediaW) || 0, v = Number(n == null ? void 0 : n._mediaH) || 0;
- if (T > 0 && v > 0) return { w: T, h: v };
- } catch (T) {
- (G = console.debug) == null || G.call(console, T);
+ const K = Number(n == null ? void 0 : n._mediaW) || 0, j = Number(n == null ? void 0 : n._mediaH) || 0;
+ if (K > 0 && j > 0) return { w: K, h: j };
+ } catch (K) {
+ (G = console.debug) == null || G.call(console, K);
}
try {
- const T = ((W = n == null ? void 0 : n.assets) == null ? void 0 : W[n == null ? void 0 : n.currentIndex]) || null, v = Number(T == null ? void 0 : T.width) || 0, w = Number(T == null ? void 0 : T.height) || 0;
- if (v > 0 && w > 0) return { w: v, h: w };
- } catch (T) {
- (f = console.debug) == null || f.call(console, T);
+ const K = ((Z = n == null ? void 0 : n.assets) == null ? void 0 : Z[n == null ? void 0 : n.currentIndex]) || null, j = Number(K == null ? void 0 : K.width) || 0, w = Number(K == null ? void 0 : K.height) || 0;
+ if (j > 0 && w > 0) return { w: j, h: w };
+ } catch (K) {
+ (f = console.debug) == null || f.call(console, K);
}
return { w: 0, h: 0 };
} catch {
return { w: 0, h: 0 };
}
- }, u = (b, L, h, G) => {
+ }, u = (b, L, C, G) => {
try {
- const W = Number(b) || 0, f = Number(L) || 0, X = Number(h) || 0, x = Number(G) || 0;
- if (!(W > 0 && f > 0 && X > 0 && x > 0)) return { x: 0, y: 0, w: W, h: f };
- const T = X / x;
- if (!Number.isFinite(T) || T <= 0) return { x: 0, y: 0, w: W, h: f };
- const v = f, w = f * T;
- return { x: (W - w) / 2, y: 0, w, h: v };
+ const Z = Number(b) || 0, f = Number(L) || 0, X = Number(C) || 0, x = Number(G) || 0;
+ if (!(Z > 0 && f > 0 && X > 0 && x > 0)) return { x: 0, y: 0, w: Z, h: f };
+ const K = X / x;
+ if (!Number.isFinite(K) || K <= 0) return { x: 0, y: 0, w: Z, h: f };
+ const j = f, w = f * K;
+ return { x: (Z - w) / 2, y: 0, w, h: j };
} catch {
return { x: 0, y: 0, w: Number(b) || 0, h: Number(L) || 0 };
}
- }, I = (b, L, h, G, W) => {
+ }, I = (b, L, C, G, Z) => {
try {
- const f = Math.max(0.1, Math.min(16, Number(h) || 1)), X = Number(L == null ? void 0 : L.x) || 0, x = Number(L == null ? void 0 : L.y) || 0, T = Number(b == null ? void 0 : b.x) || 0, v = Number(b == null ? void 0 : b.y) || 0, w = Number(b == null ? void 0 : b.w) || 0, R = Number(b == null ? void 0 : b.h) || 0, Y = Number(G) || 0, F = Number(W) || 0;
+ const f = Math.max(0.1, Math.min(16, Number(C) || 1)), X = Number(L == null ? void 0 : L.x) || 0, x = Number(L == null ? void 0 : L.y) || 0, K = Number(b == null ? void 0 : b.x) || 0, j = Number(b == null ? void 0 : b.y) || 0, w = Number(b == null ? void 0 : b.w) || 0, R = Number(b == null ? void 0 : b.h) || 0, V = Number(G) || 0, O = Number(Z) || 0;
return {
- x: X + (T - X) * f + Y,
- y: x + (v - x) * f + F,
+ x: X + (K - X) * f + V,
+ y: x + (j - x) * f + O,
w: w * f,
h: R * f
};
} catch {
return { x: 0, y: 0, w: 0, h: 0 };
}
- }, y = (b, L, h, G) => {
- var W;
+ }, A = (b, L, C, G) => {
+ var Z;
try {
- const f = L || {}, X = Number(f.x) || 0, x = Number(f.y) || 0, T = Number(f.w) || 0, v = Number(f.h) || 0;
- if (!(T > 8 && v > 8)) return;
- const w = String(h || "");
+ const f = L || {}, X = Number(f.x) || 0, x = Number(f.y) || 0, K = Number(f.w) || 0, j = Number(f.h) || 0;
+ if (!(K > 8 && j > 8)) return;
+ const w = String(C || "");
if (!w) return;
- const R = Math.max(6, Math.round(6 * G)), Y = Math.max(3, Math.round(3 * G)), F = Math.max(11, Math.round(11 * G));
- b.save(), b.font = `${F}px var(--comfy-font, ui-sans-serif, system-ui)`, b.textAlign = "left", b.textBaseline = "top";
- const V = Math.ceil(b.measureText(w).width) + R * 2, k = F + Y * 2, K = X + Math.max(2, Math.round(8 * G)), z = x + Math.max(2, Math.round(8 * G));
+ const R = Math.max(6, Math.round(6 * G)), V = Math.max(3, Math.round(3 * G)), O = Math.max(11, Math.round(11 * G));
+ b.save(), b.font = `${O}px var(--comfy-font, ui-sans-serif, system-ui)`, b.textAlign = "left", b.textBaseline = "top";
+ const Y = Math.ceil(b.measureText(w).width) + R * 2, N = O + V * 2, U = X + Math.max(2, Math.round(8 * G)), z = x + Math.max(2, Math.round(8 * G));
b.fillStyle = "rgba(0,0,0,0.55)", b.strokeStyle = "rgba(255,255,255,0.18)", b.lineWidth = Math.max(1, Math.round(1 * G)), b.beginPath();
- const B = Math.max(6, Math.round(8 * G));
- b.moveTo(K + B, z), b.arcTo(K + V, z, K + V, z + k, B), b.arcTo(K + V, z + k, K, z + k, B), b.arcTo(K, z + k, K, z, B), b.arcTo(K, z, K + V, z, B), b.closePath(), b.fill(), b.stroke(), b.fillStyle = "rgba(255,255,255,0.92)", b.fillText(w, K + R, z + Y), b.restore();
+ const T = Math.max(6, Math.round(8 * G));
+ b.moveTo(U + T, z), b.arcTo(U + Y, z, U + Y, z + N, T), b.arcTo(U + Y, z + N, U, z + N, T), b.arcTo(U, z + N, U, z, T), b.arcTo(U, z, U + Y, z, T), b.closePath(), b.fill(), b.stroke(), b.fillStyle = "rgba(255,255,255,0.92)", b.fillText(w, U + R, z + V), b.restore();
} catch {
try {
b.restore();
} catch (f) {
- (W = console.debug) == null || W.call(console, f);
+ (Z = console.debug) == null || Z.call(console, f);
}
}
- }, S = () => {
+ }, h = () => {
var b;
try {
const L = r == null ? void 0 : r();
if (!L) return { w: 0, h: 0, dpr: 1 };
- const h = Math.max(1, Math.min(3, Number(window.devicePixelRatio) || 1)), G = Math.max(1, Math.floor(L.width * h)), W = Math.max(1, Math.floor(L.height * h));
+ const C = Math.max(1, Math.min(3, Number(window.devicePixelRatio) || 1)), G = Math.max(1, Math.floor(L.width * C)), Z = Math.max(1, Math.floor(L.height * C));
try {
- (e == null ? void 0 : e.width) !== G && (e.width = G), (e == null ? void 0 : e.height) !== W && (e.height = W);
+ (e == null ? void 0 : e.width) !== G && (e.width = G), (e == null ? void 0 : e.height) !== Z && (e.height = Z);
} catch (f) {
(b = console.debug) == null || b.call(console, f);
}
- return { w: G, h: W, dpr: h };
+ return { w: G, h: Z, dpr: C };
} catch {
return { w: 0, h: 0, dpr: 1 };
}
- }, Z = (b, L, h) => {
+ }, S = (b, L, C) => {
try {
const G = String(b || "image");
if (G === "image") {
- const W = d(L), f = (Number(W.w) || 0) / (Number(W.h) || 1);
+ const Z = d(L), f = (Number(Z.w) || 0) / (Number(Z.h) || 1);
if (Number.isFinite(f) && f > 0) return f;
- const X = (Number(h == null ? void 0 : h.width) || 0) / (Number(h == null ? void 0 : h.height) || 1);
+ const X = (Number(C == null ? void 0 : C.width) || 0) / (Number(C == null ? void 0 : C.height) || 1);
return Number.isFinite(X) && X > 0 ? X : 1;
}
return G === "16:9" ? 1.7777777777777777 : G === "9:16" ? 0.5625 : G === "1:1" ? 1 : G === "4:3" ? 1.3333333333333333 : G === "2.39" ? 2.39 : 1;
} catch {
return 1;
}
- }, C = (b, L, h) => {
+ }, W = (b, L, C) => {
try {
- const G = Number(b) || 0, W = Number(L) || 0, f = Number(h) || 1;
- if (!(G > 0 && W > 0 && f > 0)) return { x: 0, y: 0, w: G, h: W };
- const X = G / W;
- let x = G, T = W;
- f >= X ? (x = G, T = G / f) : (T = W, x = W * f);
- const v = (G - x) / 2, w = (W - T) / 2;
- return { x: v, y: w, w: x, h: T };
+ const G = Number(b) || 0, Z = Number(L) || 0, f = Number(C) || 1;
+ if (!(G > 0 && Z > 0 && f > 0)) return { x: 0, y: 0, w: G, h: Z };
+ const X = G / Z;
+ let x = G, K = Z;
+ f >= X ? (x = G, K = G / f) : (K = Z, x = Z * f);
+ const j = (G - x) / 2, w = (Z - K) / 2;
+ return { x: j, y: w, w: x, h: K };
} catch {
return { x: 0, y: 0, w: Number(b) || 0, h: Number(L) || 0 };
}
- }, g = (b, L, h) => {
+ }, g = (b, L, C) => {
var G;
try {
- const W = Math.max(0, Math.min(0.92, Number(h)));
- if (!(W > 0)) return;
- b.save(), b.globalCompositeOperation = "source-over", b.fillStyle = `rgba(0,0,0,${W})`, b.fillRect(0, 0, e.width, e.height), b.globalCompositeOperation = "destination-out", b.fillStyle = "rgba(0,0,0,1)";
+ const Z = Math.max(0, Math.min(0.92, Number(C)));
+ if (!(Z > 0)) return;
+ b.save(), b.globalCompositeOperation = "source-over", b.fillStyle = `rgba(0,0,0,${Z})`, b.fillRect(0, 0, e.width, e.height), b.globalCompositeOperation = "destination-out", b.fillStyle = "rgba(0,0,0,1)";
const f = Array.isArray(L) ? L : [L];
for (const X of f) {
if (!X) continue;
- const x = Number(X.x) || 0, T = Number(X.y) || 0, v = Number(X.w) || 0, w = Number(X.h) || 0;
- v > 1 && w > 1 && b.fillRect(x, T, v, w);
+ const x = Number(X.x) || 0, K = Number(X.y) || 0, j = Number(X.w) || 0, w = Number(X.h) || 0;
+ j > 1 && w > 1 && b.fillRect(x, K, j, w);
}
b.restore();
} catch {
try {
b.restore();
- } catch (W) {
- (G = console.debug) == null || G.call(console, W);
+ } catch (Z) {
+ (G = console.debug) == null || G.call(console, Z);
}
}
- }, A = (b, L, h) => {
- var G, W, f;
+ }, y = (b, L, C) => {
+ var G, Z, f;
try {
b.save();
try {
- (G = b.setLineDash) == null || G.call(b, [Math.max(2, 4 * h), Math.max(2, 3 * h)]);
+ (G = b.setLineDash) == null || G.call(b, [Math.max(2, 4 * C), Math.max(2, 3 * C)]);
} catch (X) {
- (W = console.debug) == null || W.call(console, X);
+ (Z = console.debug) == null || Z.call(console, X);
}
- b.strokeStyle = "rgba(255,255,255,0.22)", b.lineWidth = Math.max(1, Math.floor(1 * h)), b.strokeRect(L.x + 0.5, L.y + 0.5, L.w - 1, L.h - 1), b.restore();
+ b.strokeStyle = "rgba(255,255,255,0.22)", b.lineWidth = Math.max(1, Math.floor(1 * C)), b.strokeRect(L.x + 0.5, L.y + 0.5, L.w - 1, L.h - 1), b.restore();
} catch {
try {
b.restore();
@@ -14464,163 +14491,163 @@ function gA({
}
}
};
- return { ensureCanvasSize: S, redrawGrid: ({ w: b, h: L, dpr: h } = {}) => {
- var G, W, f, X, x, T, v, w, R, Y, F, N;
+ return { ensureCanvasSize: h, redrawGrid: ({ w: b, h: L, dpr: C } = {}) => {
+ var G, Z, f, X, x, K, j, w, R, V, O, k;
try {
- const V = (G = e == null ? void 0 : e.getContext) == null ? void 0 : G.call(e, "2d");
- if (!V) return;
+ const Y = (G = e == null ? void 0 : e.getContext) == null ? void 0 : G.call(e, "2d");
+ if (!Y) return;
try {
- l == null || l(V, b, L);
+ l == null || l(Y, b, L);
} catch (M) {
- (W = console.debug) == null || W.call(console, M);
+ (Z = console.debug) == null || Z.call(console, M);
}
- const k = r == null ? void 0 : r();
- if (!k) return;
- const K = Number(k.width) || 0, z = Number(k.height) || 0;
- if (!(K > 1 && z > 1)) return;
- const B = a(), J = n == null ? void 0 : n.mode, P = (() => {
+ const N = r == null ? void 0 : r();
+ if (!N) return;
+ const U = Number(N.width) || 0, z = Number(N.height) || 0;
+ if (!(U > 1 && z > 1)) return;
+ const T = a(), J = n == null ? void 0 : n.mode, P = (() => {
var M;
try {
if (J === (i == null ? void 0 : i.SINGLE)) return [o == null ? void 0 : o()].filter(Boolean);
- const j = ((M = B == null ? void 0 : B.querySelectorAll) == null ? void 0 : M.call(B, ".mjr-viewer-media")) || [];
- return Array.from(j || []).filter(Boolean);
+ const v = ((M = T == null ? void 0 : T.querySelectorAll) == null ? void 0 : M.call(T, ".mjr-viewer-media")) || [];
+ return Array.from(v || []).filter(Boolean);
} catch {
return [o == null ? void 0 : o()].filter(Boolean);
}
})();
if (!P.length) return;
- const H = [], $ = [];
+ const E = [], $ = [];
for (const M of P)
try {
- const j = c(M, B), O = ((f = j == null ? void 0 : j.getBoundingClientRect) == null ? void 0 : f.call(j)) || null;
- if (!O) continue;
- const D = Number(O.width) || 0, q = Number(O.height) || 0;
+ const v = c(M, T), F = ((f = v == null ? void 0 : v.getBoundingClientRect) == null ? void 0 : f.call(v)) || null;
+ if (!F) continue;
+ const D = Number(F.width) || 0, q = Number(F.height) || 0;
if (!(D > 1 && q > 1)) continue;
- const ee = s(M), ce = d(M, ee), ue = u(D, q, ce.w, ce.h), U = Z(n == null ? void 0 : n.overlayFormat, M, {
+ const ee = s(M), ae = d(M, ee), ue = u(D, q, ae.w, ae.h), B = S(n == null ? void 0 : n.overlayFormat, M, {
width: ue.w,
height: ue.h
- }), Q = C(ue.w, ue.h, U), _ = (Number(O.left) || 0) - (Number(k.left) || 0), le = (Number(O.top) || 0) - (Number(k.top) || 0), de = {
+ }), Q = W(ue.w, ue.h, B), _ = (Number(F.left) || 0) - (Number(N.left) || 0), le = (Number(F.top) || 0) - (Number(N.top) || 0), ce = {
x: _ + (ue.x || 0),
y: le + (ue.y || 0),
w: ue.w || D,
h: ue.h || q
- }, se = {
- x: de.x + (Q.x || 0),
- y: de.y + (Q.y || 0),
- w: Q.w || de.w,
- h: Q.h || de.h
- }, ge = { x: _ + D / 2, y: le + q / 2 }, je = Number(n == null ? void 0 : n.zoom) || 1, Se = (Number(n == null ? void 0 : n.panX) || 0) / je, ke = (Number(n == null ? void 0 : n.panY) || 0) / je, we = I(
- de,
+ }, de = {
+ x: ce.x + (Q.x || 0),
+ y: ce.y + (Q.y || 0),
+ w: Q.w || ce.w,
+ h: Q.h || ce.h
+ }, ge = { x: _ + D / 2, y: le + q / 2 }, Le = Number(n == null ? void 0 : n.zoom) || 1, xe = (Number(n == null ? void 0 : n.panX) || 0) / Le, Xe = (Number(n == null ? void 0 : n.panY) || 0) / Le, Me = I(
+ ce,
ge,
- je,
- Se,
- ke
- ), Je = I(se, ge, je, Se, ke), $e = {
- x: we.x * h,
- y: we.y * h,
- w: we.w * h,
- h: we.h * h,
+ Le,
+ xe,
+ Xe
+ ), Fe = I(de, ge, Le, xe, Xe), it = {
+ x: Me.x * C,
+ y: Me.y * C,
+ w: Me.w * C,
+ h: Me.h * C,
_sizeLabel: (() => {
- var Ue;
+ var Pe;
try {
- const Te = Number(ee == null ? void 0 : ee.width) || Number(ce.w) || 0, Oe = Number(ee == null ? void 0 : ee.height) || Number(ce.h) || 0;
- if (Te > 0 && Oe > 0) return `${Te}x${Oe}`;
- } catch (Te) {
- (Ue = console.debug) == null || Ue.call(console, Te);
+ const Re = Number(ee == null ? void 0 : ee.width) || Number(ae.w) || 0, rt = Number(ee == null ? void 0 : ee.height) || Number(ae.h) || 0;
+ if (Re > 0 && rt > 0) return `${Re}x${rt}`;
+ } catch (Re) {
+ (Pe = console.debug) == null || Pe.call(console, Re);
}
return "";
})()
}, qe = {
- x: Je.x * h,
- y: Je.y * h,
- w: Je.w * h,
- h: Je.h * h
+ x: Fe.x * C,
+ y: Fe.y * C,
+ w: Fe.w * C,
+ h: Fe.h * C
};
- $e.w > 1 && $e.h > 1 && $.push($e), qe.w > 1 && qe.h > 1 && H.push(qe);
- } catch (j) {
- (X = console.debug) == null || X.call(console, j);
+ it.w > 1 && it.h > 1 && $.push(it), qe.w > 1 && qe.h > 1 && E.push(qe);
+ } catch (v) {
+ (X = console.debug) == null || X.call(console, v);
}
- if (!H.length && !$.length) return;
- const E = H.length ? H : $, oe = E[0] || null;
+ if (!E.length && !$.length) return;
+ const H = E.length ? E : $, ne = H[0] || null;
try {
if (n != null && n.overlayMaskEnabled) {
- g(V, E, (n == null ? void 0 : n.overlayMaskOpacity) ?? 0.65);
- for (const M of E)
+ g(Y, H, (n == null ? void 0 : n.overlayMaskOpacity) ?? 0.65);
+ for (const M of H)
try {
- A(V, M, h);
- } catch (j) {
- (x = console.debug) == null || x.call(console, j);
+ y(Y, M, C);
+ } catch (v) {
+ (x = console.debug) == null || x.call(console, v);
}
}
} catch (M) {
- (T = console.debug) == null || T.call(console, M);
+ (K = console.debug) == null || K.call(console, M);
}
try {
if (n != null && n.hudEnabled && (n == null ? void 0 : n.mode) === (i == null ? void 0 : i.SINGLE))
for (const M of $) {
try {
- V.save(), V.strokeStyle = "rgba(255,255,255,0.22)", V.lineWidth = Math.max(1, Math.floor(1 * h)), V.strokeRect(M.x + 0.5, M.y + 0.5, M.w - 1, M.h - 1), V.restore();
+ Y.save(), Y.strokeStyle = "rgba(255,255,255,0.22)", Y.lineWidth = Math.max(1, Math.floor(1 * C)), Y.strokeRect(M.x + 0.5, M.y + 0.5, M.w - 1, M.h - 1), Y.restore();
} catch {
try {
- V.restore();
- } catch (j) {
- (v = console.debug) == null || v.call(console, j);
+ Y.restore();
+ } catch (v) {
+ (j = console.debug) == null || j.call(console, v);
}
}
try {
- y(V, M, M._sizeLabel || "", h);
- } catch (j) {
- (w = console.debug) == null || w.call(console, j);
+ A(Y, M, M._sizeLabel || "", C);
+ } catch (v) {
+ (w = console.debug) == null || w.call(console, v);
}
}
} catch (M) {
(R = console.debug) == null || R.call(console, M);
}
- if ((n == null ? void 0 : n.mode) !== (i == null ? void 0 : i.SINGLE) || ((n == null ? void 0 : n.gridMode) || 0) === 0 || !oe) return;
+ if ((n == null ? void 0 : n.mode) !== (i == null ? void 0 : i.SINGLE) || ((n == null ? void 0 : n.gridMode) || 0) === 0 || !ne) return;
try {
- V.save(), V.translate(oe.x, oe.y), V.strokeStyle = "rgba(255, 255, 255, 0.22)", V.lineWidth = Math.max(2, Math.round(1.25 * h));
- const M = (j, O, D, q) => {
+ Y.save(), Y.translate(ne.x, ne.y), Y.strokeStyle = "rgba(255, 255, 255, 0.22)", Y.lineWidth = Math.max(2, Math.round(1.25 * C));
+ const M = (v, F, D, q) => {
var ee;
try {
- V.beginPath(), V.moveTo(Math.round(j) + 0.5, Math.round(O) + 0.5), V.lineTo(Math.round(D) + 0.5, Math.round(q) + 0.5), V.stroke();
- } catch (ce) {
- (ee = console.debug) == null || ee.call(console, ce);
+ Y.beginPath(), Y.moveTo(Math.round(v) + 0.5, Math.round(F) + 0.5), Y.lineTo(Math.round(D) + 0.5, Math.round(q) + 0.5), Y.stroke();
+ } catch (ae) {
+ (ee = console.debug) == null || ee.call(console, ae);
}
};
if (n.gridMode === 1)
- M(oe.w / 3, 0, oe.w / 3, oe.h), M(2 * oe.w / 3, 0, 2 * oe.w / 3, oe.h), M(0, oe.h / 3, oe.w, oe.h / 3), M(0, 2 * oe.h / 3, oe.w, 2 * oe.h / 3);
+ M(ne.w / 3, 0, ne.w / 3, ne.h), M(2 * ne.w / 3, 0, 2 * ne.w / 3, ne.h), M(0, ne.h / 3, ne.w, ne.h / 3), M(0, 2 * ne.h / 3, ne.w, 2 * ne.h / 3);
else if (n.gridMode === 2)
- M(oe.w / 2, 0, oe.w / 2, oe.h), M(0, oe.h / 2, oe.w, oe.h / 2);
+ M(ne.w / 2, 0, ne.w / 2, ne.h), M(0, ne.h / 2, ne.w, ne.h / 2);
else if (n.gridMode === 3) {
- const j = (O, D) => {
+ const v = (F, D) => {
var q, ee;
try {
- V.save(), V.strokeStyle = `rgba(255,255,255,${D})`;
- const ce = Math.round(oe.w * O), ue = Math.round(oe.h * O), U = Math.round(oe.w * (1 - O * 2)), Q = Math.round(oe.h * (1 - O * 2));
- V.strokeRect(ce + 0.5, ue + 0.5, U, Q);
- } catch (ce) {
- (q = console.debug) == null || q.call(console, ce);
+ Y.save(), Y.strokeStyle = `rgba(255,255,255,${D})`;
+ const ae = Math.round(ne.w * F), ue = Math.round(ne.h * F), B = Math.round(ne.w * (1 - F * 2)), Q = Math.round(ne.h * (1 - F * 2));
+ Y.strokeRect(ae + 0.5, ue + 0.5, B, Q);
+ } catch (ae) {
+ (q = console.debug) == null || q.call(console, ae);
} finally {
try {
- V.restore();
- } catch (ce) {
- (ee = console.debug) == null || ee.call(console, ce);
+ Y.restore();
+ } catch (ae) {
+ (ee = console.debug) == null || ee.call(console, ae);
}
}
};
- j(0.05, 0.24), j(0.1, 0.18);
- } else n.gridMode === 4 && (M(oe.w * 0.382, 0, oe.w * 0.382, oe.h), M(oe.w * 0.618, 0, oe.w * 0.618, oe.h), M(0, oe.h * 0.382, oe.w, oe.h * 0.382), M(0, oe.h * 0.618, oe.w, oe.h * 0.618));
+ v(0.05, 0.24), v(0.1, 0.18);
+ } else n.gridMode === 4 && (M(ne.w * 0.382, 0, ne.w * 0.382, ne.h), M(ne.w * 0.618, 0, ne.w * 0.618, ne.h), M(0, ne.h * 0.382, ne.w, ne.h * 0.382), M(0, ne.h * 0.618, ne.w, ne.h * 0.618));
} catch (M) {
- (Y = console.debug) == null || Y.call(console, M);
+ (V = console.debug) == null || V.call(console, M);
} finally {
try {
- V.restore();
+ Y.restore();
} catch (M) {
- (F = console.debug) == null || F.call(console, M);
+ (O = console.debug) == null || O.call(console, M);
}
}
- } catch (V) {
- (N = console.debug) == null || N.call(console, V);
+ } catch (Y) {
+ (k = console.debug) == null || k.call(console, Y);
}
} };
}
@@ -14638,106 +14665,106 @@ function IA({
onLoupeRedraw: d,
lifecycle: u
} = {}) {
- var G, W;
- const I = (u == null ? void 0 : u.unsubs) || [], y = document.createElement("canvas");
- y.width = 1, y.height = 1;
- let S = null;
+ var G, Z;
+ const I = (u == null ? void 0 : u.unsubs) || [], A = document.createElement("canvas");
+ A.width = 1, A.height = 1;
+ let h = null;
try {
- S = y.getContext("2d", { willReadFrequently: !0 });
+ h = A.getContext("2d", { willReadFrequently: !0 });
} catch (f) {
(G = console.debug) == null || G.call(console, f);
}
- let Z = null, C = null, g = null;
- const A = () => {
+ let S = null, W = null, g = null;
+ const y = () => {
var f, X, x;
try {
c.style.display = "none";
- } catch (T) {
- (f = console.debug) == null || f.call(console, T);
+ } catch (K) {
+ (f = console.debug) == null || f.call(console, K);
}
try {
s.style.display = "none";
- } catch (T) {
- (X = console.debug) == null || X.call(console, T);
+ } catch (K) {
+ (X = console.debug) == null || X.call(console, K);
}
try {
n._probe = null;
- } catch (T) {
- (x = console.debug) == null || x.call(console, T);
+ } catch (K) {
+ (x = console.debug) == null || x.call(console, K);
}
}, p = (f) => {
try {
- const X = f == null ? void 0 : f.x, x = f == null ? void 0 : f.y, T = f == null ? void 0 : f.r, v = f == null ? void 0 : f.g, w = f == null ? void 0 : f.b, R = f == null ? void 0 : f.a, Y = Array.isArray(f == null ? void 0 : f.raw) ? f.raw : null, F = Array.isArray(f == null ? void 0 : f.lin) ? f.lin : null, N = Number(f == null ? void 0 : f.scale), V = (B) => {
- const J = Number(B);
+ const X = f == null ? void 0 : f.x, x = f == null ? void 0 : f.y, K = f == null ? void 0 : f.r, j = f == null ? void 0 : f.g, w = f == null ? void 0 : f.b, R = f == null ? void 0 : f.a, V = Array.isArray(f == null ? void 0 : f.raw) ? f.raw : null, O = Array.isArray(f == null ? void 0 : f.lin) ? f.lin : null, k = Number(f == null ? void 0 : f.scale), Y = (T) => {
+ const J = Number(T);
return Number.isFinite(J) ? J.toFixed(3) : "?";
- }, k = T != null && v != null && w != null ? `#${[T, v, w].map((B) => Math.max(0, Math.min(255, Number(B) || 0)).toString(16).padStart(2, "0")).join("")}` : "", K = Number.isFinite(N) && N > 0 && N < 0.999 ? ` (proc ${(N * 100).toFixed(0)}%)` : "", z = [];
- return z.push(`X: ${X ?? "?"} Y: ${x ?? "?"}${K}`), z.push(`RGBA8: ${T ?? "?"} ${v ?? "?"} ${w ?? "?"} ${R ?? "?"}`), Y && Y.length >= 3 && z.push(`RGB: ${V(Y[0])} ${V(Y[1])} ${V(Y[2])}`), F && F.length >= 3 && z.push(`HDR: ${V(F[0])} ${V(F[1])} ${V(F[2])}`), k && z.push(k), z.join(`
+ }, N = K != null && j != null && w != null ? `#${[K, j, w].map((T) => Math.max(0, Math.min(255, Number(T) || 0)).toString(16).padStart(2, "0")).join("")}` : "", U = Number.isFinite(k) && k > 0 && k < 0.999 ? ` (proc ${(k * 100).toFixed(0)}%)` : "", z = [];
+ return z.push(`X: ${X ?? "?"} Y: ${x ?? "?"}${U}`), z.push(`RGBA8: ${K ?? "?"} ${j ?? "?"} ${w ?? "?"} ${R ?? "?"}`), V && V.length >= 3 && z.push(`RGB: ${Y(V[0])} ${Y(V[1])} ${Y(V[2])}`), O && O.length >= 3 && z.push(`HDR: ${Y(O[0])} ${Y(O[1])} ${Y(O[2])}`), N && z.push(N), z.join(`
`);
} catch {
return "";
}
}, b = (f, X, x) => {
- var T, v;
- if (!S) return null;
+ var K, j;
+ if (!h) return null;
try {
- S.clearRect(0, 0, 1, 1);
+ h.clearRect(0, 0, 1, 1);
} catch (w) {
- (T = console.debug) == null || T.call(console, w);
+ (K = console.debug) == null || K.call(console, w);
}
try {
let w = Number(X) || 0, R = Number(x) || 0;
if ((f == null ? void 0 : f.tagName) === "CANVAS") {
- const F = Number(f._mjrPixelScale) || 1;
- w = Math.floor(w * F), R = Math.floor(R * F);
+ const O = Number(f._mjrPixelScale) || 1;
+ w = Math.floor(w * O), R = Math.floor(R * O);
}
- S.drawImage(f, w, R, 1, 1, 0, 0, 1, 1);
- const Y = (v = S.getImageData(0, 0, 1, 1)) == null ? void 0 : v.data;
- return !Y || Y.length < 4 ? null : { r: Y[0], g: Y[1], b: Y[2], a: Y[3] };
+ h.drawImage(f, w, R, 1, 1, 0, 0, 1, 1);
+ const V = (j = h.getImageData(0, 0, 1, 1)) == null ? void 0 : j.data;
+ return !V || V.length < 4 ? null : { r: V[0], g: V[1], b: V[2], a: V[3] };
} catch {
return null;
}
}, L = (f, X) => {
- var x, T, v, w, R, Y, F;
+ var x, K, j, w, R, V, O;
try {
- if (((x = e == null ? void 0 : e.style) == null ? void 0 : x.display) === "none" || (n == null ? void 0 : n.mode) !== (i == null ? void 0 : i.SINGLE) || !(n != null && n.probeEnabled) && !(n != null && n.loupeEnabled)) return A();
- const N = o == null ? void 0 : o();
- if (!N) return A();
- const V = N.getBoundingClientRect();
- if (!V || !(V.width > 2 && V.height > 2)) return A();
- const k = (Number(f) || 0) - V.left, K = (Number(X) || 0) - V.top;
- if (k < 0 || K < 0 || k > V.width || K > V.height) return A();
- const { w: z, h: B } = (r == null ? void 0 : r(N)) || { w: 0, h: 0 };
- if (!(z > 0 && B > 0)) return A();
- const J = k / V.width, P = K / V.height, H = Math.max(0, Math.min(z - 1, Math.floor(J * z))), $ = Math.max(0, Math.min(B - 1, Math.floor(P * B)));
- let E = null;
+ if (((x = e == null ? void 0 : e.style) == null ? void 0 : x.display) === "none" || (n == null ? void 0 : n.mode) !== (i == null ? void 0 : i.SINGLE) || !(n != null && n.probeEnabled) && !(n != null && n.loupeEnabled)) return y();
+ const k = o == null ? void 0 : o();
+ if (!k) return y();
+ const Y = k.getBoundingClientRect();
+ if (!Y || !(Y.width > 2 && Y.height > 2)) return y();
+ const N = (Number(f) || 0) - Y.left, U = (Number(X) || 0) - Y.top;
+ if (N < 0 || U < 0 || N > Y.width || U > Y.height) return y();
+ const { w: z, h: T } = (r == null ? void 0 : r(k)) || { w: 0, h: 0 };
+ if (!(z > 0 && T > 0)) return y();
+ const J = N / Y.width, P = U / Y.height, E = Math.max(0, Math.min(z - 1, Math.floor(J * z))), $ = Math.max(0, Math.min(T - 1, Math.floor(P * T)));
+ let H = null;
if (n != null && n.probeEnabled) {
try {
- const oe = N == null ? void 0 : N._mjrProc;
- if (oe != null && oe.sampleAtOriginal) {
- const M = oe.sampleAtOriginal(H, $);
- M && (E = { x: H, y: $, ...M });
+ const ne = k == null ? void 0 : k._mjrProc;
+ if (ne != null && ne.sampleAtOriginal) {
+ const M = ne.sampleAtOriginal(E, $);
+ M && (H = { x: E, y: $, ...M });
}
- } catch (oe) {
- (T = console.debug) == null || T.call(console, oe);
+ } catch (ne) {
+ (K = console.debug) == null || K.call(console, ne);
}
- if (!E) {
- const oe = b(N, H, $);
- oe && (E = { x: H, y: $, ...oe });
+ if (!H) {
+ const ne = b(k, E, $);
+ ne && (H = { x: E, y: $, ...ne });
}
}
- E || (E = { x: H, y: $ });
+ H || (H = { x: E, y: $ });
try {
- n._probe = E;
- } catch (oe) {
- (v = console.debug) == null || v.call(console, oe);
+ n._probe = H;
+ } catch (ne) {
+ (j = console.debug) == null || j.call(console, ne);
}
if (n != null && n.probeEnabled) {
try {
- c.textContent = p(E), c.style.display = "";
- } catch (oe) {
- (w = console.debug) == null || w.call(console, oe);
+ c.textContent = p(H), c.style.display = "";
+ } catch (ne) {
+ (w = console.debug) == null || w.call(console, ne);
}
- bt(
+ It(
() => a == null ? void 0 : a(c, f, X, {
offsetX: 18,
offsetY: 18
@@ -14746,69 +14773,69 @@ function IA({
} else
try {
c.style.display = "none";
- } catch (oe) {
- (R = console.debug) == null || R.call(console, oe);
+ } catch (ne) {
+ (R = console.debug) == null || R.call(console, ne);
}
if (n != null && n.loupeEnabled)
- bt(() => d == null ? void 0 : d(N, H, $, f, X));
+ It(() => d == null ? void 0 : d(k, E, $, f, X));
else
try {
s.style.display = "none";
- } catch (oe) {
- (Y = console.debug) == null || Y.call(console, oe);
+ } catch (ne) {
+ (V = console.debug) == null || V.call(console, ne);
}
- } catch (N) {
- (F = console.debug) == null || F.call(console, N);
+ } catch (k) {
+ (O = console.debug) == null || O.call(console, k);
}
- }, h = (f, X) => {
+ }, C = (f, X) => {
var x;
- C = f, g = X;
+ W = f, g = X;
try {
- if (Z != null) return;
- Z = requestAnimationFrame(() => {
- Z = null, L(C, g);
+ if (S != null) return;
+ S = requestAnimationFrame(() => {
+ S = null, L(W, g);
});
- } catch (T) {
- (x = console.debug) == null || x.call(console, T);
+ } catch (K) {
+ (x = console.debug) == null || x.call(console, K);
}
};
try {
if (t && !t._mjrProbeBound) {
const f = (x) => {
- var T;
+ var K;
try {
- h(x.clientX, x.clientY);
- } catch (v) {
- (T = console.debug) == null || T.call(console, v);
+ C(x.clientX, x.clientY);
+ } catch (j) {
+ (K = console.debug) == null || K.call(console, j);
}
}, X = () => {
- A();
+ y();
};
I.push(
- Qe(t, "mousemove", f, {
+ $e(t, "mousemove", f, {
passive: !0,
capture: !0
})
), I.push(
- Qe(t, "mouseleave", X, {
+ $e(t, "mouseleave", X, {
passive: !0,
capture: !0
})
), t._mjrProbeBound = !0;
}
} catch (f) {
- (W = console.debug) == null || W.call(console, f);
+ (Z = console.debug) == null || Z.call(console, f);
}
return {
- hide: A,
+ hide: y,
dispose: () => {
var f;
try {
- Z != null && cancelAnimationFrame(Z);
+ S != null && cancelAnimationFrame(S);
} catch (X) {
(f = console.debug) == null || f.call(console, X);
}
- Z = null, A();
+ S = null, y();
}
};
}
@@ -14826,37 +14853,37 @@ function bA({
} catch (d) {
(s = console.debug) == null || s.call(console, d);
}
- return { redraw: (d, u, I, y, S) => {
- var Z, C, g, A;
+ return { redraw: (d, u, I, A, h) => {
+ var S, W, g, y;
try {
if (!(e != null && e.loupeEnabled) || !r || !d) return;
const { w: p, h: b } = (i == null ? void 0 : i(d)) || { w: 0, h: 0 };
if (!(p > 0 && b > 0)) return;
- const L = Math.max(48, Math.min(240, Number(e.loupeSize) || 120)), h = Math.max(2, Math.min(20, Number(e.loupeMagnification) || 8));
+ const L = Math.max(48, Math.min(240, Number(e.loupeSize) || 120)), C = Math.max(2, Math.min(20, Number(e.loupeMagnification) || 8));
try {
t.width !== L && (t.width = L), t.height !== L && (t.height = L);
- } catch (F) {
- (Z = console.debug) == null || Z.call(console, F);
+ } catch (O) {
+ (S = console.debug) == null || S.call(console, O);
}
- const G = Math.max(3, Math.floor(L / h)), W = (d == null ? void 0 : d.tagName) === "CANVAS" && Number(d._mjrPixelScale) || 1, f = (d == null ? void 0 : d.tagName) === "CANVAS" ? Number(d.width) || 0 : p, X = (d == null ? void 0 : d.tagName) === "CANVAS" ? Number(d.height) || 0 : b;
+ const G = Math.max(3, Math.floor(L / C)), Z = (d == null ? void 0 : d.tagName) === "CANVAS" && Number(d._mjrPixelScale) || 1, f = (d == null ? void 0 : d.tagName) === "CANVAS" ? Number(d.width) || 0 : p, X = (d == null ? void 0 : d.tagName) === "CANVAS" ? Number(d.height) || 0 : b;
if (!(f > 0 && X > 0)) return;
- const x = Math.max(1, Math.floor(G * W)), T = Math.floor(x / 2), v = Math.floor((Number(u) || 0) * W), w = Math.floor((Number(I) || 0) * W), R = Math.max(0, Math.min(f - x, v - T)), Y = Math.max(0, Math.min(X - x, w - T));
- r.imageSmoothingEnabled = !1, r.clearRect(0, 0, L, L), r.drawImage(d, R, Y, x, x, 0, 0, L, L), r.strokeStyle = "rgba(255,255,255,0.75)", r.lineWidth = 1, r.beginPath(), r.moveTo(L / 2 + 0.5, 0), r.lineTo(L / 2 + 0.5, L), r.moveTo(0, L / 2 + 0.5), r.lineTo(L, L / 2 + 0.5), r.stroke();
+ const x = Math.max(1, Math.floor(G * Z)), K = Math.floor(x / 2), j = Math.floor((Number(u) || 0) * Z), w = Math.floor((Number(I) || 0) * Z), R = Math.max(0, Math.min(f - x, j - K)), V = Math.max(0, Math.min(X - x, w - K));
+ r.imageSmoothingEnabled = !1, r.clearRect(0, 0, L, L), r.drawImage(d, R, V, x, x, 0, 0, L, L), r.strokeStyle = "rgba(255,255,255,0.75)", r.lineWidth = 1, r.beginPath(), r.moveTo(L / 2 + 0.5, 0), r.lineTo(L / 2 + 0.5, L), r.moveTo(0, L / 2 + 0.5), r.lineTo(L, L / 2 + 0.5), r.stroke();
try {
n.style.display = "", n.style.width = `${L}px`, n.style.height = `${L}px`;
- } catch (F) {
- (C = console.debug) == null || C.call(console, F);
+ } catch (O) {
+ (W = console.debug) == null || W.call(console, O);
}
try {
- o == null || o(n, y, S, {
+ o == null || o(n, A, h, {
offsetX: 18,
offsetY: -L - 18
});
- } catch (F) {
- (g = console.debug) == null || g.call(console, F);
+ } catch (O) {
+ (g = console.debug) == null || g.call(console, O);
}
} catch (p) {
- (A = console.debug) == null || A.call(console, p);
+ (y = console.debug) == null || y.call(console, p);
}
}, hide: () => {
var d;
@@ -14877,71 +14904,71 @@ function pA({
const r = /* @__PURE__ */ new Map(), l = (n == null ? void 0 : n.VIEWER_META_TTL_MS) ?? 3e4, a = (n == null ? void 0 : n.VIEWER_META_MAX_ENTRIES) ?? 500;
let c = 0, s = null;
const d = () => {
- var C, g, A;
+ var W, g, y;
if (r.size <= a) return;
- const Z = Date.now();
+ const S = Date.now();
try {
for (const [p, b] of r.entries())
- b && Z - (b.at || 0) > l && r.delete(p);
+ b && S - (b.at || 0) > l && r.delete(p);
} catch (p) {
- (C = console.debug) == null || C.call(console, p);
+ (W = console.debug) == null || W.call(console, p);
}
if (!(r.size <= a))
try {
const p = Array.from(r.entries()).sort(
- (L, h) => {
- var G, W;
- return (((G = L == null ? void 0 : L[1]) == null ? void 0 : G.at) || 0) - (((W = h == null ? void 0 : h[1]) == null ? void 0 : W.at) || 0);
+ (L, C) => {
+ var G, Z;
+ return (((G = L == null ? void 0 : L[1]) == null ? void 0 : G.at) || 0) - (((Z = C == null ? void 0 : C[1]) == null ? void 0 : Z.at) || 0);
}
), b = r.size - a;
for (let L = 0; L < b; L++) {
- const h = (g = p[L]) == null ? void 0 : g[0];
- h != null && r.delete(h);
+ const C = (g = p[L]) == null ? void 0 : g[0];
+ C != null && r.delete(C);
}
} catch (p) {
- (A = console.debug) == null || A.call(console, p);
+ (y = console.debug) == null || y.call(console, p);
}
- }, u = (Z, C) => {
- var g, A;
- if (!(!Z || !C || typeof C != "object")) {
+ }, u = (S, W) => {
+ var g, y;
+ if (!(!S || !W || typeof W != "object")) {
try {
- C.rating !== void 0 && (Z.rating = C.rating);
+ W.rating !== void 0 && (S.rating = W.rating);
} catch (p) {
(g = console.debug) == null || g.call(console, p);
}
try {
- C.tags !== void 0 && (Z.tags = C.tags);
+ W.tags !== void 0 && (S.tags = W.tags);
} catch (p) {
- (A = console.debug) == null || A.call(console, p);
+ (y = console.debug) == null || y.call(console, p);
}
}
- }, I = async (Z, { signal: C } = {}) => {
+ }, I = async (S, { signal: W } = {}) => {
var b;
- const g = Array.isArray(Z) ? Z : [], A = Date.now(), p = [];
+ const g = Array.isArray(S) ? S : [], y = Date.now(), p = [];
for (const L of g) {
- const h = L == null ? void 0 : L.id;
- if (h == null) continue;
- const G = String(h), W = r.get(G);
- if (W && A - (W.at || 0) < l) {
- u(L, W.data);
+ const C = L == null ? void 0 : L.id;
+ if (C == null) continue;
+ const G = String(C), Z = r.get(G);
+ if (Z && y - (Z.at || 0) < l) {
+ u(L, Z.data);
continue;
}
- p.push(h);
+ p.push(C);
}
if (p.length)
try {
- const L = await (o == null ? void 0 : o(p, C ? { signal: C } : {})), h = Array.isArray(L == null ? void 0 : L.data) ? L.data : [];
- for (const G of h) {
- const W = G == null ? void 0 : G.id;
- if (W == null) continue;
- const f = String(W);
- r.set(f, { at: A, data: G });
+ const L = await (o == null ? void 0 : o(p, W ? { signal: W } : {})), C = Array.isArray(L == null ? void 0 : L.data) ? L.data : [];
+ for (const G of C) {
+ const Z = G == null ? void 0 : G.id;
+ if (Z == null) continue;
+ const f = String(Z);
+ r.set(f, { at: y, data: G });
}
d();
for (const G of g) {
- const W = G == null ? void 0 : G.id;
- if (W == null) continue;
- const f = r.get(String(W));
+ const Z = G == null ? void 0 : G.id;
+ if (Z == null) continue;
+ const f = r.get(String(Z));
f && f.data && u(G, f.data);
}
} catch (L) {
@@ -14950,77 +14977,77 @@ function pA({
};
return {
hydrateVisibleMetadata: async () => {
- var b, L, h, G;
- const Z = (b = e == null ? void 0 : e.assets) == null ? void 0 : b[e == null ? void 0 : e.currentIndex], C = e == null ? void 0 : e.compareAsset, g = e == null ? void 0 : e.mode, A = ++c;
+ var b, L, C, G;
+ const S = (b = e == null ? void 0 : e.assets) == null ? void 0 : b[e == null ? void 0 : e.currentIndex], W = e == null ? void 0 : e.compareAsset, g = e == null ? void 0 : e.mode, y = ++c;
try {
(L = s == null ? void 0 : s.abort) == null || L.call(s);
- } catch (W) {
- (h = console.debug) == null || h.call(console, W);
+ } catch (Z) {
+ (C = console.debug) == null || C.call(console, Z);
}
s = new AbortController();
const p = s.signal;
try {
if (g === (t == null ? void 0 : t.SINGLE))
- return Z && await I([Z], { signal: p }), void 0;
+ return S && await I([S], { signal: p }), void 0;
const f = (Array.isArray(e == null ? void 0 : e.assets) ? e.assets.slice(0, 4) : []).slice();
- C && f.push(C), await I(f, { signal: p });
- } catch (W) {
- (G = console.debug) == null || G.call(console, W);
+ W && f.push(W), await I(f, { signal: p });
+ } catch (Z) {
+ (G = console.debug) == null || G.call(console, Z);
}
},
- hydrateAssetMetadata: async (Z, { signal: C } = {}) => {
+ hydrateAssetMetadata: async (S, { signal: W } = {}) => {
var L;
- const g = Z == null ? void 0 : Z.id;
+ const g = S == null ? void 0 : S.id;
if (g == null) return;
- const A = String(g), p = Date.now(), b = r.get(A);
+ const y = String(g), p = Date.now(), b = r.get(y);
if (b && p - (b.at || 0) < l) {
- u(Z, b.data);
+ u(S, b.data);
return;
}
try {
- const h = await (i == null ? void 0 : i(g, C ? { signal: C } : {}));
- h != null && h.ok && h.data && (r.set(A, { at: p, data: h.data }), d(), u(Z, h.data));
- } catch (h) {
- (L = console.debug) == null || L.call(console, h);
+ const C = await (i == null ? void 0 : i(g, W ? { signal: W } : {}));
+ C != null && C.ok && C.data && (r.set(y, { at: p, data: C.data }), d(), u(S, C.data));
+ } catch (C) {
+ (L = console.debug) == null || L.call(console, C);
}
},
hydrateAssetsMetadataBatch: I,
- getCached: (Z) => {
+ getCached: (S) => {
try {
- return r.get(String(Z));
+ return r.get(String(S));
} catch {
return null;
}
},
- setCached: (Z, C) => {
+ setCached: (S, W) => {
var g;
try {
- r.set(String(Z), { at: Date.now(), data: C }), d();
- } catch (A) {
- (g = console.debug) == null || g.call(console, A);
+ r.set(String(S), { at: Date.now(), data: W }), d();
+ } catch (y) {
+ (g = console.debug) == null || g.call(console, y);
}
},
- deleteCached: (Z) => {
- var C;
+ deleteCached: (S) => {
+ var W;
try {
- r.delete(String(Z));
+ r.delete(String(S));
} catch (g) {
- (C = console.debug) == null || C.call(console, g);
+ (W = console.debug) == null || W.call(console, g);
}
},
abort: () => {
- bt(() => {
- var Z;
- return (Z = s == null ? void 0 : s.abort) == null ? void 0 : Z.call(s);
+ It(() => {
+ var S;
+ return (S = s == null ? void 0 : s.abort) == null ? void 0 : S.call(s);
}), s = null;
},
dispose: () => {
- bt(() => {
- var Z;
- return (Z = s == null ? void 0 : s.abort) == null ? void 0 : Z.call(s);
- }), s = null, bt(() => r.clear());
+ It(() => {
+ var S;
+ return (S = s == null ? void 0 : s.abort) == null ? void 0 : S.call(s);
+ }), s = null, It(() => r.clear());
},
- cleanupCache: () => bt(d) || void 0,
+ cleanupCache: () => It(d) || void 0,
_noop: eo
};
}
@@ -15058,7 +15085,7 @@ function fA(e) {
t.set(n.uuid, n.material);
}), t;
}
-function hA(e, t, n, i, o) {
+function CA(e, t, n, i, o) {
tb(t, (r) => {
var l, a, c;
try {
@@ -15100,7 +15127,7 @@ function ju(e) {
e.clear();
}
}
-function CA(e, t) {
+function hA(e, t) {
var n;
try {
if (t === "gltf" || t === "fbx")
@@ -15191,7 +15218,7 @@ function MA(e, t, n) {
e.load(n, i, void 0, o);
});
}
-function SA() {
+function GA() {
return Jl || (Jl = Promise.all([
import(
/* @vite-ignore */
@@ -15296,17 +15323,17 @@ function Lu({
maxProcPixels: r,
onReady: l
} = {}) {
- var b, L, h, G;
+ var b, L, C, G;
const a = new Image();
try {
a.decoding = "async";
- } catch (W) {
- (b = console.debug) == null || b.call(console, W);
+ } catch (Z) {
+ (b = console.debug) == null || b.call(console, Z);
}
try {
a.crossOrigin = "anonymous";
- } catch (W) {
- (L = console.debug) == null || L.call(console, W);
+ } catch (Z) {
+ (L = console.debug) == null || L.call(console, Z);
}
const c = (() => {
try {
@@ -15335,7 +15362,7 @@ function Lu({
_pendingParams: null,
_buffer: null
}, I = () => {
- var W;
+ var Z;
if (!u._destroyed) {
try {
if (e != null && e.isConnected) {
@@ -15345,7 +15372,7 @@ function Lu({
return;
}
} catch (f) {
- (W = console.debug) == null || W.call(console, f);
+ (Z = console.debug) == null || Z.call(console, f);
}
if (u._connectRAF == null) {
if (u._connectTries = (Number(u._connectTries) || 0) + 1, u._connectTries > 20) {
@@ -15361,132 +15388,132 @@ function Lu({
}
}
}
- }, y = (W, f) => nb(r, W, f), S = () => {
+ }, A = (Z, f) => nb(r, Z, f), h = () => {
if (u.srcData) return u.srcData;
if (!d || !u.ready) return null;
try {
- const W = s.width, f = s.height;
- return W > 0 && f > 0 ? (u.srcData = d.getImageData(0, 0, W, f), u.srcData) : null;
+ const Z = s.width, f = s.height;
+ return Z > 0 && f > 0 ? (u.srcData = d.getImageData(0, 0, Z, f), u.srcData) : null;
} catch {
return null;
}
- }, Z = (W, f) => {
+ }, S = (Z, f) => {
var X;
try {
- const x = Number(W) || 0, T = Number(f) || 0;
+ const x = Number(Z) || 0, K = Number(f) || 0;
if (!(u.naturalW > 0 && u.naturalH > 0)) return null;
- const v = Math.max(0, Math.min(s.width - 1, Math.floor(x * u.scale))), w = Math.max(0, Math.min(s.height - 1, Math.floor(T * u.scale))), R = S();
+ const j = Math.max(0, Math.min(s.width - 1, Math.floor(x * u.scale))), w = Math.max(0, Math.min(s.height - 1, Math.floor(K * u.scale))), R = h();
if (!(R != null && R.data)) return null;
- const Y = (w * s.width + v) * 4, F = R.data[Y] ?? 0, N = R.data[Y + 1] ?? 0, V = R.data[Y + 2] ?? 0, k = R.data[Y + 3] ?? 255, K = [F / 255, N / 255, V / 255, k / 255], z = Number((X = u.lastParams) == null ? void 0 : X.exposureEV) || 0, B = Math.pow(2, z), J = [
- K[0] * B,
- K[1] * B,
- K[2] * B,
- K[3]
+ const V = (w * s.width + j) * 4, O = R.data[V] ?? 0, k = R.data[V + 1] ?? 0, Y = R.data[V + 2] ?? 0, N = R.data[V + 3] ?? 255, U = [O / 255, k / 255, Y / 255, N / 255], z = Number((X = u.lastParams) == null ? void 0 : X.exposureEV) || 0, T = Math.pow(2, z), J = [
+ U[0] * T,
+ U[1] * T,
+ U[2] * T,
+ U[3]
];
- return { r: F, g: N, b: V, a: k, raw: K, lin: J, scale: u.scale };
+ return { r: O, g: k, b: Y, a: N, raw: U, lin: J, scale: u.scale };
} catch {
return null;
}
- }, C = (W, f) => {
- var oe, M, j;
+ }, W = (Z, f) => {
+ var ne, M, v;
if (!c || u._destroyed) return;
if (!(e != null && e.isConnected)) {
try {
u._pendingParams = f || u.lastParams || (n == null ? void 0 : n()) || null;
- } catch (O) {
- (oe = console.debug) == null || oe.call(console, O);
+ } catch (F) {
+ (ne = console.debug) == null || ne.call(console, F);
}
I();
return;
}
- if (W !== u.jobId) return;
- const X = S();
+ if (Z !== u.jobId) return;
+ const X = h();
if (!(X != null && X.data)) return;
- const x = s.width, T = s.height;
- if (!(x > 0 && T > 0)) return;
+ const x = s.width, K = s.height;
+ if (!(x > 0 && K > 0)) return;
try {
- const O = f || (n == null ? void 0 : n()) || {};
- if (typeof i == "function" && i(O)) {
+ const F = f || (n == null ? void 0 : n()) || {};
+ if (typeof i == "function" && i(F)) {
c.clearRect(0, 0, e.width, e.height), c.drawImage(s, 0, 0);
return;
}
- } catch (O) {
- (M = console.debug) == null || M.call(console, O);
+ } catch (F) {
+ (M = console.debug) == null || M.call(console, F);
}
- let v = u._buffer;
- if (!v || v.width !== x || v.height !== T)
+ let j = u._buffer;
+ if (!j || j.width !== x || j.height !== K)
try {
- v = c.createImageData(x, T), u._buffer = v;
+ j = c.createImageData(x, K), u._buffer = j;
} catch {
try {
- v = new ImageData(x, T), u._buffer = v;
+ j = new ImageData(x, K), u._buffer = j;
} catch {
return;
}
}
- if (!v) return;
- const w = f || (n == null ? void 0 : n()) || {}, R = Number(w.exposureEV) || 0, F = 1 / Math.max(0.1, Math.min(3, Number(w.gamma) || 1)), N = String(w.channel || "rgb"), V = String(w.analysisMode || "none"), k = In(w.zebraThreshold ?? 0.95), K = Math.pow(2, R), z = new Float32Array(256);
- for (let O = 0; O < 256; O++)
- z[O] = Math.pow(O / 255, F);
- const B = v.data, J = X.data, P = x * T * 4, H = 55e3 * 4;
+ if (!j) return;
+ const w = f || (n == null ? void 0 : n()) || {}, R = Number(w.exposureEV) || 0, O = 1 / Math.max(0.1, Math.min(3, Number(w.gamma) || 1)), k = String(w.channel || "rgb"), Y = String(w.analysisMode || "none"), N = pn(w.zebraThreshold ?? 0.95), U = Math.pow(2, R), z = new Float32Array(256);
+ for (let F = 0; F < 256; F++)
+ z[F] = Math.pow(F / 255, O);
+ const T = j.data, J = X.data, P = x * K * 4, E = 55e3 * 4;
let $ = 0;
- const E = () => {
+ const H = () => {
var D, q;
- if (u._destroyed || !(e != null && e.isConnected) || W !== u.jobId) return;
- const O = Math.min(P, $ + H);
- for (; $ < O; $ += 4) {
- const ee = (J[$] ?? 0) / 255, ce = (J[$ + 1] ?? 0) / 255, ue = (J[$ + 2] ?? 0) / 255, U = (J[$ + 3] ?? 255) / 255;
- let Q = ee * K, _ = ce * K, le = ue * K;
- const de = 0.2126 * Q + 0.7152 * _ + 0.0722 * le;
- if (V === "zebra")
- if (In(de) >= k) {
+ if (u._destroyed || !(e != null && e.isConnected) || Z !== u.jobId) return;
+ const F = Math.min(P, $ + E);
+ for (; $ < F; $ += 4) {
+ const ee = (J[$] ?? 0) / 255, ae = (J[$ + 1] ?? 0) / 255, ue = (J[$ + 2] ?? 0) / 255, B = (J[$ + 3] ?? 255) / 255;
+ let Q = ee * U, _ = ae * U, le = ue * U;
+ const ce = 0.2126 * Q + 0.7152 * _ + 0.0722 * le;
+ if (Y === "zebra")
+ if (pn(ce) >= N) {
const ge = (Math.floor($ / 4) % x + Math.floor($ / 4 / x) & 7) < 3;
Q = ge ? 1 : 0, _ = ge ? 1 : 0, le = ge ? 1 : 0;
} else
- Q = z[In(Q) * 255 + 0.5 | 0], _ = z[In(_) * 255 + 0.5 | 0], le = z[In(le) * 255 + 0.5 | 0];
+ Q = z[pn(Q) * 255 + 0.5 | 0], _ = z[pn(_) * 255 + 0.5 | 0], le = z[pn(le) * 255 + 0.5 | 0];
else
- Q = z[In(Q) * 255 + 0.5 | 0], _ = z[In(_) * 255 + 0.5 | 0], le = z[In(le) * 255 + 0.5 | 0];
- if (N === "r")
+ Q = z[pn(Q) * 255 + 0.5 | 0], _ = z[pn(_) * 255 + 0.5 | 0], le = z[pn(le) * 255 + 0.5 | 0];
+ if (k === "r")
_ = Q, le = Q;
- else if (N === "g")
+ else if (k === "g")
Q = _, le = _;
- else if (N === "b")
+ else if (k === "b")
Q = le, _ = le;
- else if (N === "a")
- Q = U, _ = U, le = U;
- else if (N === "l") {
- const se = In(de), ge = z[se * 255 + 0.5 | 0];
+ else if (k === "a")
+ Q = B, _ = B, le = B;
+ else if (k === "l") {
+ const de = pn(ce), ge = z[de * 255 + 0.5 | 0];
Q = ge, _ = ge, le = ge;
}
- B[$] = Math.round(In(Q) * 255), B[$ + 1] = Math.round(In(_) * 255), B[$ + 2] = Math.round(In(le) * 255), B[$ + 3] = 255;
+ T[$] = Math.round(pn(Q) * 255), T[$ + 1] = Math.round(pn(_) * 255), T[$ + 2] = Math.round(pn(le) * 255), T[$ + 3] = 255;
}
if ($ < P) {
try {
- u._rafId = requestAnimationFrame(E);
+ u._rafId = requestAnimationFrame(H);
} catch (ee) {
(D = console.debug) == null || D.call(console, ee);
}
return;
}
try {
- c.putImageData(v, 0, 0);
+ c.putImageData(j, 0, 0);
} catch (ee) {
(q = console.debug) == null || q.call(console, ee);
}
};
try {
- u._rafId = requestAnimationFrame(E);
- } catch (O) {
- (j = console.debug) == null || j.call(console, O);
+ u._rafId = requestAnimationFrame(H);
+ } catch (F) {
+ (v = console.debug) == null || v.call(console, F);
}
- }, g = (W) => {
+ }, g = (Z) => {
var X, x;
if (u._destroyed) return;
- if (u.lastParams = W || u.lastParams || (n == null ? void 0 : n()) || null, !(e != null && e.isConnected)) {
+ if (u.lastParams = Z || u.lastParams || (n == null ? void 0 : n()) || null, !(e != null && e.isConnected)) {
try {
u._pendingParams = u.lastParams;
- } catch (T) {
- (X = console.debug) == null || X.call(console, T);
+ } catch (K) {
+ (X = console.debug) == null || X.call(console, K);
}
I();
return;
@@ -15494,24 +15521,24 @@ function Lu({
u.jobId++;
const f = u.jobId;
try {
- C(f, u.lastParams);
- } catch (T) {
- (x = console.debug) == null || x.call(console, T);
+ W(f, u.lastParams);
+ } catch (K) {
+ (x = console.debug) == null || x.call(console, K);
}
- }, A = () => {
- var W, f;
+ }, y = () => {
+ var Z, f;
if (!u._destroyed)
try {
if (u.naturalW = Number(a.naturalWidth) || 0, u.naturalH = Number(a.naturalHeight) || 0, !(u.naturalW > 0 && u.naturalH > 0)) return;
- u.scale = y(u.naturalW, u.naturalH);
+ u.scale = A(u.naturalW, u.naturalH);
const X = Math.max(1, Math.round(u.naturalW * u.scale)), x = Math.max(1, Math.round(u.naturalH * u.scale));
s.width = X, s.height = x, e.width = X, e.height = x, e._mjrNaturalW = u.naturalW, e._mjrNaturalH = u.naturalH, e._mjrPixelScale = u.scale;
try {
d == null || d.clearRect(0, 0, X, x), d == null || d.drawImage(a, 0, 0, X, x);
- } catch (T) {
- (W = console.debug) == null || W.call(console, T);
+ } catch (K) {
+ (Z = console.debug) == null || Z.call(console, K);
}
- u.ready = !0, u.srcData = null, S(), g(u.lastParams || (n == null ? void 0 : n()));
+ u.ready = !0, u.srcData = null, h(), g(u.lastParams || (n == null ? void 0 : n()));
} finally {
try {
l == null || l({
@@ -15524,35 +15551,35 @@ function Lu({
}
}
}, p = () => {
- var W;
+ var Z;
u.ready = !1;
try {
fo(e, "Failed to load image");
} catch (f) {
- (W = console.debug) == null || W.call(console, f);
+ (Z = console.debug) == null || Z.call(console, f);
}
};
try {
- a.onload = A, a.onerror = p;
- } catch (W) {
- (h = console.debug) == null || h.call(console, W);
+ a.onload = y, a.onerror = p;
+ } catch (Z) {
+ (C = console.debug) == null || C.call(console, Z);
}
try {
a.src = t;
- } catch (W) {
- (G = console.debug) == null || G.call(console, W);
+ } catch (Z) {
+ (G = console.debug) == null || G.call(console, Z);
}
return {
setParams: g,
- sampleAtOriginal: Z,
+ sampleAtOriginal: S,
getInfo: () => ({ ...u }),
destroy: () => {
- var W, f, X, x, T, v, w;
+ var Z, f, X, x, K, j, w;
u._destroyed = !0;
try {
u.jobId++;
} catch (R) {
- (W = console.debug) == null || W.call(console, R);
+ (Z = console.debug) == null || Z.call(console, R);
}
try {
u._rafId != null && cancelAnimationFrame(u._rafId);
@@ -15573,12 +15600,12 @@ function Lu({
try {
a.src = "";
} catch (R) {
- (T = console.debug) == null || T.call(console, R);
+ (K = console.debug) == null || K.call(console, R);
}
try {
s.width = 0, s.height = 0;
} catch (R) {
- (v = console.debug) == null || v.call(console, R);
+ (j = console.debug) == null || j.call(console, R);
}
try {
e.width = 0, e.height = 0;
@@ -15589,8 +15616,8 @@ function Lu({
}
};
}
-const GA = [0.25, 0.5, 1, 1.5, 2], xA = 44;
-function Ui(e, { preventDefault: t = !1, immediate: n = !1 } = {}) {
+const SA = [0.25, 0.5, 1, 1.5, 2], xA = 44;
+function Bi(e, { preventDefault: t = !1, immediate: n = !1 } = {}) {
var i, o, r, l, a;
if (e) {
try {
@@ -15609,7 +15636,7 @@ function Tl(e) {
const t = Math.max(0, Number(e) || 0), n = Math.floor(t / 60), i = Math.floor(t % 60);
return n > 0 ? `${n}:${String(i).padStart(2, "0")}` : `${Math.floor(t)}s`;
}
-function Bl(e, t) {
+function Kl(e, t) {
const n = document.createElement("button");
return n.type = "button", n.textContent = String(e || ""), n.title = String(t || e || ""), n.setAttribute("aria-label", String(t || e || "3D viewport action")), n.style.cssText = [
"height:28px",
@@ -15628,17 +15655,17 @@ function Bl(e, t) {
"box-shadow:0 4px 18px rgba(0,0,0,0.24)"
].join(";"), n;
}
-function Zc(e, t) {
+function Ac(e, t) {
if (!e) return;
const n = !!t;
e.dataset.active = n ? "1" : "0", e.style.background = n ? "rgba(76,175,80,0.18)" : "rgba(13,15,20,0.78)", e.style.borderColor = n ? "rgba(76,175,80,0.42)" : "rgba(255,255,255,0.16)", e.style.color = n ? "rgba(230,255,235,0.96)" : "rgba(255,255,255,0.92)";
}
-function Vu(e, t, n = "", i = "#4CAF50") {
+function Yu(e, t, n = "", i = "#4CAF50") {
var s, d, u;
if (!e) return;
try {
- const I = Math.max(480, Number(e.width) || 0 || 960), y = Math.max(270, Number(e.height) || 0 || 540);
- e.width = I, e.height = y;
+ const I = Math.max(480, Number(e.width) || 0 || 960), A = Math.max(270, Number(e.height) || 0 || 540);
+ e.width = I, e.height = A;
} catch (I) {
(s = console.debug) == null || s.call(console, I);
}
@@ -15658,12 +15685,12 @@ function Vu(e, t, n = "", i = "#4CAF50") {
(d = console.debug) == null || d.call(console, I);
try {
fo(e, t, n || "3D viewer unavailable");
- } catch (y) {
- (u = console.debug) == null || u.call(console, y);
+ } catch (A) {
+ (u = console.debug) == null || u.call(console, A);
}
}
}
-function Yu({
+function Vu({
defaultBgColor: e,
defaultFov: t,
defaultLightIntensity: n,
@@ -15702,13 +15729,13 @@ function Yu({
"dragstart",
"dragover",
"drop"
- ].forEach((C) => {
+ ].forEach((W) => {
o.addEventListener(
- C,
- (g) => Ui(g, { preventDefault: !1 })
+ W,
+ (g) => Bi(g, { preventDefault: !1 })
);
});
- const r = (C) => {
+ const r = (W) => {
const g = document.createElement("div");
g.style.cssText = [
"font:700 10px system-ui,sans-serif",
@@ -15716,17 +15743,17 @@ function Yu({
"color:rgba(255,255,255,0.40)",
"text-transform:uppercase",
"margin:10px 0 6px 0"
- ].join(";"), g.textContent = C, o.appendChild(g);
- const A = document.createElement("div");
- A.style.cssText = "height:1px;background:rgba(255,255,255,0.07);margin-bottom:8px;", o.appendChild(A);
- }, l = (C, g) => {
- const A = document.createElement("div");
- A.style.cssText = "display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;gap:6px;";
+ ].join(";"), g.textContent = W, o.appendChild(g);
+ const y = document.createElement("div");
+ y.style.cssText = "height:1px;background:rgba(255,255,255,0.07);margin-bottom:8px;", o.appendChild(y);
+ }, l = (W, g) => {
+ const y = document.createElement("div");
+ y.style.cssText = "display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;gap:6px;";
const p = document.createElement("span");
- return p.style.cssText = "font:500 11px system-ui,sans-serif;color:rgba(255,255,255,0.65);white-space:nowrap;flex-shrink:0;", p.textContent = C, A.appendChild(p), A.appendChild(g), o.appendChild(A), A;
- }, a = (C, g) => {
- const A = document.createElement("select");
- A.style.cssText = [
+ return p.style.cssText = "font:500 11px system-ui,sans-serif;color:rgba(255,255,255,0.65);white-space:nowrap;flex-shrink:0;", p.textContent = W, y.appendChild(p), y.appendChild(g), o.appendChild(y), y;
+ }, a = (W, g) => {
+ const y = document.createElement("select");
+ y.style.cssText = [
"background:rgba(25,30,42,0.95)",
"color:rgba(255,255,255,0.88)",
"border:1px solid rgba(255,255,255,0.14)",
@@ -15737,20 +15764,20 @@ function Yu({
"flex:1",
"min-width:0"
].join(";");
- for (const [p, b] of C) {
+ for (const [p, b] of W) {
const L = document.createElement("option");
- L.value = p, L.textContent = b, p === g && (L.selected = !0), A.appendChild(L);
+ L.value = p, L.textContent = b, p === g && (L.selected = !0), y.appendChild(L);
}
- return A;
- }, c = (C, g, A, p) => {
+ return y;
+ }, c = (W, g, y, p) => {
const b = document.createElement("div");
b.style.cssText = "display:flex;align-items:center;gap:5px;flex:1;";
const L = document.createElement("input");
- L.type = "range", L.min = String(C), L.max = String(g), L.step = String(A), L.value = String(p), L.style.cssText = "flex:1;cursor:pointer;accent-color:#4CAF50;height:3px;";
- const h = document.createElement("span");
- return h.style.cssText = "font:11px system-ui,sans-serif;color:rgba(255,255,255,0.45);min-width:26px;text-align:right;", h.textContent = String(p), L.addEventListener("input", () => {
- h.textContent = L.value;
- }), b.appendChild(L), b.appendChild(h), { wrap: b, slider: L, valLbl: h };
+ L.type = "range", L.min = String(W), L.max = String(g), L.step = String(y), L.value = String(p), L.style.cssText = "flex:1;cursor:pointer;accent-color:#4CAF50;height:3px;";
+ const C = document.createElement("span");
+ return C.style.cssText = "font:11px system-ui,sans-serif;color:rgba(255,255,255,0.45);min-width:26px;text-align:right;", C.textContent = String(p), L.addEventListener("input", () => {
+ C.textContent = L.value;
+ }), b.appendChild(L), b.appendChild(C), { wrap: b, slider: L, valLbl: C };
};
r("Scene");
const s = document.createElement("input");
@@ -15779,22 +15806,22 @@ function Yu({
"original"
);
l("Up", u);
- let I = null, y = null;
- i && (y = document.createElement("input"), y.type = "checkbox", y.checked = !1, y.style.cssText = "cursor:pointer;accent-color:#4CAF50;flex-shrink:0;", I = l("Skeleton", y)), r("Camera");
- const S = c(15, 120, 1, t ?? 75);
- l("FOV", S.wrap), r("Lights");
- const Z = c(0, 5, 0.1, n ?? 1);
- return l("Intensity", Z.wrap), {
+ let I = null, A = null;
+ i && (A = document.createElement("input"), A.type = "checkbox", A.checked = !1, A.style.cssText = "cursor:pointer;accent-color:#4CAF50;flex-shrink:0;", I = l("Skeleton", A)), r("Camera");
+ const h = c(15, 120, 1, t ?? 75);
+ l("FOV", h.wrap), r("Lights");
+ const S = c(0, 5, 0.1, n ?? 1);
+ return l("Intensity", S.wrap), {
panel: o,
bgInput: s,
materialSel: d,
upSel: u,
- skeletonToggle: y,
+ skeletonToggle: A,
skeletonRow: I,
- fovSlider: S.slider,
- fovValLbl: S.valLbl,
- lightSlider: Z.slider,
- lightValLbl: Z.valLbl
+ fovSlider: h.slider,
+ fovValLbl: h.valLbl,
+ lightSlider: S.slider,
+ lightValLbl: S.valLbl
};
}
function jA() {
@@ -15825,7 +15852,7 @@ function jA() {
].forEach((l) => {
e.addEventListener(
l,
- (a) => Ui(a, { preventDefault: !1 })
+ (a) => Bi(a, { preventDefault: !1 })
);
});
const t = document.createElement("button");
@@ -15857,7 +15884,7 @@ function jA() {
"width:52px",
"flex-shrink:0"
].join(";");
- for (const l of GA) {
+ for (const l of SA) {
const a = document.createElement("option");
a.value = String(l), a.textContent = `${l}×`, l === 1 && (a.selected = !0), n.appendChild(a);
}
@@ -15894,10 +15921,10 @@ const ib = Object.freeze({
".splat": "splat",
".ksplat": "splat",
".spz": "splat"
-}), vA = new Set(Object.keys(ib)), LA = /* @__PURE__ */ new Set(["gltf", "obj", "fbx", "stl", "ply"]), Ac = "#282828", ob = "Rotate: left drag Pan: right drag Zoom: wheel", Si = Object.freeze({
+}), vA = new Set(Object.keys(ib)), LA = /* @__PURE__ */ new Set(["gltf", "obj", "fbx", "stl", "ply"]), Wc = "#282828", ob = "Rotate: left drag Pan: right drag Zoom: wheel", Gi = Object.freeze({
PERSPECTIVE: "perspective",
ORTHOGRAPHIC: "orthographic"
-}), VA = Object.freeze({
+}), YA = Object.freeze({
original: [0, 0, 0],
"+y": [0, 0, 0],
"-y": [Math.PI, 0, 0],
@@ -15905,7 +15932,7 @@ const ib = Object.freeze({
"-z": [Math.PI / 2, 0, 0],
"+x": [0, 0, Math.PI / 2],
"-x": [0, 0, -Math.PI / 2]
-}), YA = 44, zr = 75, Wc = 1, Zi = Object.freeze({
+}), VA = 44, zr = 75, wc = 1, Zi = Object.freeze({
ambient: 0.5,
main: 0.8,
fill: 0.3,
@@ -15929,25 +15956,25 @@ function cd(e) {
}
return "";
}
-function kA(e) {
+function XA(e) {
const t = String(e || "").trim();
return t ? t.startsWith("/") || /^[a-z][\w+\-.]*:/i.test(t) : !1;
}
-function XA(e) {
+function NA(e) {
var n;
const t = String((e == null ? void 0 : e.loader) || ((n = e == null ? void 0 : e.viewer_info) == null ? void 0 : n.loader) || "").trim().toLowerCase();
return t || ib[cd(e)] || "";
}
-function ku(e) {
+function Xu(e) {
return String((e == null ? void 0 : e.kind) || "").toLowerCase() === "model3d" ? !0 : vA.has(cd(e));
}
-function NA(e) {
- return XA(e) || "gltf";
+function kA(e) {
+ return NA(e) || "gltf";
}
-function AY() {
+function AV() {
return ob;
}
-function WY(e) {
+function WV(e) {
var t, n, i, o;
try {
if ((n = (t = e == null ? void 0 : e.classList) == null ? void 0 : t.contains) != null && n.call(t, "mjr-model3d-render-canvas")) return e;
@@ -15960,7 +15987,7 @@ function WY(e) {
return null;
}
}
-function wc(e) {
+function Mc(e) {
var t;
try {
return !!((t = e == null ? void 0 : e.closest) != null && t.call(
@@ -15975,9 +16002,9 @@ function RA(e, t) {
const n = t || { ROTATE: 0, DOLLY: 1, PAN: 2 };
return { LEFT: n.ROTATE, MIDDLE: n.DOLLY, RIGHT: n.PAN };
}
-function Xu(e, t, n = {}) {
- var Pe, Le, Ot;
- const i = (n == null ? void 0 : n.pauseDuringExecution) == null ? !!(fe != null && fe.VIEWER_PAUSE_DURING_EXECUTION) : !!n.pauseDuringExecution, o = document.createElement("div");
+function Nu(e, t, n = {}) {
+ var He, Ye, Pt;
+ const i = (n == null ? void 0 : n.pauseDuringExecution) == null ? !!(he != null && he.VIEWER_PAUSE_DURING_EXECUTION) : !!n.pauseDuringExecution, o = document.createElement("div");
o.className = n.hostClassName || "mjr-model3d-host mjr-viewer-model3d-host", o.style.cssText = n.hostStyle || [
"width:100%",
"height:100%",
@@ -16002,8 +16029,8 @@ function Xu(e, t, n = {}) {
].join(";"), r.tabIndex = 0, r._mjrDisableViewerTransform = n.disableViewerTransform !== !1;
try {
(e == null ? void 0 : e.id) != null && (r.dataset.mjrAssetId = String(e.id));
- } catch (Xe) {
- (Pe = console.debug) == null || Pe.call(console, Xe);
+ } catch (ke) {
+ (He = console.debug) == null || He.call(console, ke);
}
o.appendChild(r);
const l = document.createElement("canvas");
@@ -16018,8 +16045,8 @@ function Xu(e, t, n = {}) {
].join(";"), o.appendChild(l);
const a = cd(e).replace(".", "").toUpperCase();
if (a) {
- const Xe = document.createElement("div");
- Xe.className = "mjr-model3d-badge", Xe.textContent = a, Xe.style.cssText = [
+ const ke = document.createElement("div");
+ ke.className = "mjr-model3d-badge", ke.textContent = a, ke.style.cssText = [
"position:absolute",
"top:10px",
"left:10px",
@@ -16031,7 +16058,7 @@ function Xu(e, t, n = {}) {
"background:rgba(76,175,80,0.9)",
"pointer-events:none",
"z-index:2"
- ].join(";"), o.appendChild(Xe);
+ ].join(";"), o.appendChild(ke);
}
const c = document.createElement("div");
c.className = "mjr-model3d-toolbar", c.style.cssText = [
@@ -16047,10 +16074,10 @@ function Xu(e, t, n = {}) {
].join(";");
const s = document.createElement("div");
s.style.cssText = "display:flex;align-items:center;gap:6px;flex-wrap:wrap;pointer-events:auto;";
- const d = Bl("Reset", "Reset 3D view"), u = Bl("Grid", "Toggle grid"), I = Bl("Persp", "Switch perspective / orthographic"), y = Bl("⚙", "Settings");
- s.append(d, u, I, y), c.appendChild(s), o.appendChild(c);
- const S = document.createElement("div");
- S.className = "mjr-model3d-hint", S.textContent = n.hintText || ob, S.style.cssText = [
+ const d = Kl("Reset", "Reset 3D view"), u = Kl("Grid", "Toggle grid"), I = Kl("Persp", "Switch perspective / orthographic"), A = Kl("⚙", "Settings");
+ s.append(d, u, I, A), c.appendChild(s), o.appendChild(c);
+ const h = document.createElement("div");
+ h.className = "mjr-model3d-hint", h.textContent = n.hintText || ob, h.style.cssText = [
"position:absolute",
"right:10px",
"bottom:10px",
@@ -16063,102 +16090,102 @@ function Xu(e, t, n = {}) {
"pointer-events:none",
"z-index:2",
"transition:bottom 0.2s"
- ].join(";"), o.appendChild(S);
- const Z = Yu({
- defaultBgColor: Ac,
+ ].join(";"), o.appendChild(h);
+ const S = Vu({
+ defaultBgColor: Wc,
defaultFov: zr,
- defaultLightIntensity: Wc,
+ defaultLightIntensity: wc,
hasSkeleton: !1
// updated after load
});
- o.appendChild(Z.panel);
- const C = jA();
- o.appendChild(C.bar);
- let g = !1, A = null, p = null, b = null, L = null, h = null, G = null, W = null, f = null, X = null, x = null, T = !1, v = null, w = null, R = null, Y = null, F = null, N = null, V = 0, k = Si.PERSPECTIVE, K = /* @__PURE__ */ new Map();
+ o.appendChild(S.panel);
+ const W = jA();
+ o.appendChild(W.bar);
+ let g = !1, y = null, p = null, b = null, L = null, C = null, G = null, Z = null, f = null, X = null, x = null, K = !1, j = null, w = null, R = null, V = null, O = null, k = null, Y = 0, N = Gi.PERSPECTIVE, U = /* @__PURE__ */ new Map();
const z = /* @__PURE__ */ new Set();
- let B = null, J = !1, P = null, H = [], $ = Wc, E = null, oe = null, M = [], j = [], O = 0, D = 1, q = !1, ee = !1, ce = !1;
- const ue = String((e == null ? void 0 : e.filename) || "3D model"), U = () => {
- var Xe, Ee;
+ let T = null, J = !1, P = null, E = [], $ = wc, H = null, ne = null, M = [], v = [], F = 0, D = 1, q = !1, ee = !1, ae = !1;
+ const ue = String((e == null ? void 0 : e.filename) || "3D model"), B = () => {
+ var ke, Ee;
try {
- (Xe = n.scheduleOverlayRedraw) == null || Xe.call(n);
+ (ke = n.scheduleOverlayRedraw) == null || ke.call(n);
} catch (Ke) {
(Ee = console.debug) == null || Ee.call(console, Ke);
}
- }, Q = (Xe, Ee = "", Ke = "#4CAF50") => {
- v = { title: Xe, hintText: Ee, accent: Ke }, l.style.display = "block", Vu(l, Xe, Ee, Ke);
+ }, Q = (ke, Ee = "", Ke = "#4CAF50") => {
+ j = { title: ke, hintText: Ee, accent: Ke }, l.style.display = "block", Yu(l, ke, Ee, Ke);
}, _ = () => {
- v = null, l.style.display = "none";
+ j = null, l.style.display = "none";
}, le = () => {
- var Xe, Ee;
+ var ke, Ee;
try {
const Ke = o.getBoundingClientRect();
r._mjrNaturalW = Math.max(1, Math.round(Ke.width || r.width || 1)), r._mjrNaturalH = Math.max(1, Math.round(Ke.height || r.height || 1));
} catch (Ke) {
- (Xe = console.debug) == null || Xe.call(console, Ke);
+ (ke = console.debug) == null || ke.call(console, Ke);
}
try {
- v && Vu(
+ j && Yu(
l,
- v.title,
- v.hintText,
- v.accent
+ j.title,
+ j.hintText,
+ j.accent
);
} catch (Ke) {
(Ee = console.debug) == null || Ee.call(console, Ke);
}
- }, de = (Xe, Ee) => {
- if (!W || !(V > 0)) return;
- const Ke = Math.max(1e-4, (Number(Xe) || 1) / Math.max(1, Number(Ee) || 1)), nt = V * Ke;
- W.left = -nt / 2, W.right = nt / 2, W.top = V / 2, W.bottom = -V / 2, W.updateProjectionMatrix();
- }, se = () => {
- var Xe;
- if (!(!Y || !f || !N)) {
- if (k === Si.ORTHOGRAPHIC) {
+ }, ce = (ke, Ee) => {
+ if (!Z || !(Y > 0)) return;
+ const Ke = Math.max(1e-4, (Number(ke) || 1) / Math.max(1, Number(Ee) || 1)), lt = Y * Ke;
+ Z.left = -lt / 2, Z.right = lt / 2, Z.top = Y / 2, Z.bottom = -Y / 2, Z.updateProjectionMatrix();
+ }, de = () => {
+ var ke;
+ if (!(!V || !f || !k)) {
+ if (N === Gi.ORTHOGRAPHIC) {
const Ee = o.getBoundingClientRect();
- V = AA(
- W,
+ Y = AA(
+ Z,
f,
- N,
+ k,
Math.max(1e-4, (Ee.width || 1) / Math.max(1, Ee.height || 1))
- ) || V, h = W;
+ ) || Y, C = Z;
} else
- ZA(p, G, f, N), h = G;
+ ZA(p, G, f, k), C = G;
try {
- f.object = h, f.update();
+ f.object = C, f.update();
} catch (Ee) {
- (Xe = console.debug) == null || Xe.call(console, Ee);
+ (ke = console.debug) == null || ke.call(console, Ee);
}
}
- }, ge = (Xe, { refit: Ee = !0 } = {}) => {
- var Ke, nt, ut, It, dt;
- k = Xe === Si.ORTHOGRAPHIC ? Si.ORTHOGRAPHIC : Si.PERSPECTIVE, h = k === Si.ORTHOGRAPHIC ? W : G;
+ }, ge = (ke, { refit: Ee = !0 } = {}) => {
+ var Ke, lt, wt, at, tt;
+ N = ke === Gi.ORTHOGRAPHIC ? Gi.ORTHOGRAPHIC : Gi.PERSPECTIVE, C = N === Gi.ORTHOGRAPHIC ? Z : G;
try {
- f && (f.object = h);
- } catch (Re) {
- (Ke = console.debug) == null || Ke.call(console, Re);
+ f && (f.object = C);
+ } catch (Oe) {
+ (Ke = console.debug) == null || Ke.call(console, Oe);
}
if (Ee)
- se();
+ de();
else {
try {
- (nt = h == null ? void 0 : h.updateProjectionMatrix) == null || nt.call(h);
- } catch (Re) {
- (ut = console.debug) == null || ut.call(console, Re);
+ (lt = C == null ? void 0 : C.updateProjectionMatrix) == null || lt.call(C);
+ } catch (Oe) {
+ (wt = console.debug) == null || wt.call(console, Oe);
}
try {
- (It = f == null ? void 0 : f.update) == null || It.call(f);
- } catch (Re) {
- (dt = console.debug) == null || dt.call(console, Re);
+ (at = f == null ? void 0 : f.update) == null || at.call(f);
+ } catch (Oe) {
+ (tt = console.debug) == null || tt.call(console, Oe);
}
}
- Te(), U();
- }, je = (Xe) => {
+ Re(), B();
+ }, Le = (ke) => {
var Ke;
- $ = Math.max(0, Math.min(10, Number(Xe) || 0));
+ $ = Math.max(0, Math.min(10, Number(ke) || 0));
try {
P && (P.intensity = Zi.ambient * $);
- } catch (nt) {
- (Ke = console.debug) == null || Ke.call(console, nt);
+ } catch (lt) {
+ (Ke = console.debug) == null || Ke.call(console, lt);
}
const Ee = [
Zi.main,
@@ -16167,159 +16194,159 @@ function Xu(e, t, n = {}) {
Zi.fill,
Zi.bottom
];
- H.forEach((nt, ut) => {
- var It;
+ E.forEach((lt, wt) => {
+ var at;
try {
- nt && (nt.intensity = (Ee[ut] ?? Zi.fill) * $);
- } catch (dt) {
- (It = console.debug) == null || It.call(console, dt);
+ lt && (lt.intensity = (Ee[wt] ?? Zi.fill) * $);
+ } catch (tt) {
+ (at = console.debug) == null || at.call(console, tt);
}
});
- }, Se = (Xe) => {
- !F || !p || (ju(z), hA(p, F, Xe, K, z), U());
- }, ke = (Xe) => {
+ }, xe = (ke) => {
+ !O || !p || (ju(z), CA(p, O, ke, U, z), B());
+ }, Xe = (ke) => {
var Ke;
- if (!Y) return;
- const Ee = VA[Xe] || [0, 0, 0];
+ if (!V) return;
+ const Ee = YA[ke] || [0, 0, 0];
try {
- Y.rotation.set(Ee[0], Ee[1], Ee[2]), Y.updateMatrixWorld(!0);
- } catch (nt) {
- (Ke = console.debug) == null || Ke.call(console, nt);
+ V.rotation.set(Ee[0], Ee[1], Ee[2]), V.updateMatrixWorld(!0);
+ } catch (lt) {
+ (Ke = console.debug) == null || Ke.call(console, lt);
}
- p && (N = vu(p, Y)), se();
- }, we = (Xe) => {
+ p && (k = vu(p, V)), de();
+ }, Me = (ke) => {
var Ee;
- if (B)
+ if (T)
try {
- B.visible = !!Xe;
+ T.visible = !!ke;
} catch (Ke) {
(Ee = console.debug) == null || Ee.call(console, Ke);
}
- }, Je = () => {
- var ut, It;
- if (!E || M.length === 0) return;
- const Xe = j[O];
- if (!Xe) return;
- const Ee = M[O], Ke = (Ee == null ? void 0 : Ee.duration) || 0, nt = Xe.time || 0;
+ }, Fe = () => {
+ var wt, at;
+ if (!H || M.length === 0) return;
+ const ke = v[F];
+ if (!ke) return;
+ const Ee = M[F], Ke = (Ee == null ? void 0 : Ee.duration) || 0, lt = ke.time || 0;
try {
- C.timeLbl.textContent = `${Tl(nt)} / ${Tl(Ke)}`;
- } catch (dt) {
- (ut = console.debug) == null || ut.call(console, dt);
+ W.timeLbl.textContent = `${Tl(lt)} / ${Tl(Ke)}`;
+ } catch (tt) {
+ (wt = console.debug) == null || wt.call(console, tt);
}
if (!ee && Ke > 0)
try {
- const dt = Number(C.progressSlider.max) || 1e3;
- C.progressSlider.value = String(Math.round(nt / Ke * dt));
- } catch (dt) {
- (It = console.debug) == null || It.call(console, dt);
+ const tt = Number(W.progressSlider.max) || 1e3;
+ W.progressSlider.value = String(Math.round(lt / Ke * tt));
+ } catch (tt) {
+ (at = console.debug) == null || at.call(console, tt);
}
- }, $e = (Xe) => {
- if (!E || !M.length) return;
- const Ee = M[Xe];
+ }, it = (ke) => {
+ if (!H || !M.length) return;
+ const Ee = M[ke];
if (!Ee) return;
- j.forEach((nt) => {
- var ut;
+ v.forEach((lt) => {
+ var wt;
try {
- nt == null || nt.stop();
- } catch (It) {
- (ut = console.debug) == null || ut.call(console, It);
+ lt == null || lt.stop();
+ } catch (at) {
+ (wt = console.debug) == null || wt.call(console, at);
}
});
- const Ke = E.clipAction(Ee);
- Ke.timeScale = D, Ke.clampWhenFinished = !1, Ke.loop = (p == null ? void 0 : p.LoopRepeat) ?? 2201, Ke.play(), j[Xe] = Ke, O = Xe, q = !0, C.playBtn.textContent = "⏸";
+ const Ke = H.clipAction(Ee);
+ Ke.timeScale = D, Ke.clampWhenFinished = !1, Ke.loop = (p == null ? void 0 : p.LoopRepeat) ?? 2201, Ke.play(), v[ke] = Ke, F = ke, q = !0, W.playBtn.textContent = "⏸";
try {
- const nt = Math.max(100, Math.min(1e4, Math.round((Ee.duration || 1) * 100)));
- C.progressSlider.max = String(nt);
+ const lt = Math.max(100, Math.min(1e4, Math.round((Ee.duration || 1) * 100)));
+ W.progressSlider.max = String(lt);
} catch {
}
}, qe = () => {
- var Xe, Ee;
- !E || !M.length || (q ? (E.timeScale = 0, q = !1, C.playBtn.textContent = "▶") : (E.timeScale = D, (Ee = (Xe = j[O]) == null ? void 0 : Xe.isRunning) != null && Ee.call(Xe) ? (q = !0, C.playBtn.textContent = "⏸") : $e(O)));
- }, Ue = (Xe, Ee) => {
- !Xe || Xe.length === 0 || !p || (M = Xe, E = new p.AnimationMixer(Ee), oe = new p.Clock(), j = new Array(Xe.length).fill(null), C.animSel.innerHTML = "", Xe.forEach((Ke, nt) => {
- const ut = document.createElement("option");
- ut.value = String(nt), ut.textContent = Ke.name || `Animation ${nt + 1}`, C.animSel.appendChild(ut);
- }), C.animSel.style.display = Xe.length > 1 ? "" : "none", C.bar.style.display = "flex", S.style.bottom = `${YA + 10}px`, $e(0), C.playBtn.addEventListener("click", (Ke) => {
- Ui(Ke), qe();
- }), C.speedSel.addEventListener("change", () => {
- D = Number(C.speedSel.value) || 1, E.timeScale = q ? D : 0;
- const Ke = j[O];
+ var ke, Ee;
+ !H || !M.length || (q ? (H.timeScale = 0, q = !1, W.playBtn.textContent = "▶") : (H.timeScale = D, (Ee = (ke = v[F]) == null ? void 0 : ke.isRunning) != null && Ee.call(ke) ? (q = !0, W.playBtn.textContent = "⏸") : it(F)));
+ }, Pe = (ke, Ee) => {
+ !ke || ke.length === 0 || !p || (M = ke, H = new p.AnimationMixer(Ee), ne = new p.Clock(), v = new Array(ke.length).fill(null), W.animSel.innerHTML = "", ke.forEach((Ke, lt) => {
+ const wt = document.createElement("option");
+ wt.value = String(lt), wt.textContent = Ke.name || `Animation ${lt + 1}`, W.animSel.appendChild(wt);
+ }), W.animSel.style.display = ke.length > 1 ? "" : "none", W.bar.style.display = "flex", h.style.bottom = `${VA + 10}px`, it(0), W.playBtn.addEventListener("click", (Ke) => {
+ Bi(Ke), qe();
+ }), W.speedSel.addEventListener("change", () => {
+ D = Number(W.speedSel.value) || 1, H.timeScale = q ? D : 0;
+ const Ke = v[F];
Ke && (Ke.timeScale = D);
- }), C.animSel.addEventListener("change", () => {
- const Ke = Number(C.animSel.value) || 0;
- $e(Ke);
- }), C.progressSlider.addEventListener("pointerdown", () => {
+ }), W.animSel.addEventListener("change", () => {
+ const Ke = Number(W.animSel.value) || 0;
+ it(Ke);
+ }), W.progressSlider.addEventListener("pointerdown", () => {
ee = !0;
- }), C.progressSlider.addEventListener("pointerup", () => {
+ }), W.progressSlider.addEventListener("pointerup", () => {
ee = !1;
- const Ke = j[O], nt = M[O];
- if (Ke && nt) {
- const ut = Number(C.progressSlider.max) || 1e3, It = Number(C.progressSlider.value) / ut * nt.duration;
- Ke.time = Math.max(0, Math.min(It, nt.duration));
+ const Ke = v[F], lt = M[F];
+ if (Ke && lt) {
+ const wt = Number(W.progressSlider.max) || 1e3, at = Number(W.progressSlider.value) / wt * lt.duration;
+ Ke.time = Math.max(0, Math.min(at, lt.duration));
}
- }), C.progressSlider.addEventListener("input", () => {
- const Ke = j[O], nt = M[O];
- if (Ke && nt && ee) {
- const ut = Number(C.progressSlider.max) || 1e3, It = Number(C.progressSlider.value) / ut * nt.duration;
- Ke.time = Math.max(0, Math.min(It, nt.duration)), C.timeLbl.textContent = `${Tl(It)} / ${Tl(nt.duration)}`;
+ }), W.progressSlider.addEventListener("input", () => {
+ const Ke = v[F], lt = M[F];
+ if (Ke && lt && ee) {
+ const wt = Number(W.progressSlider.max) || 1e3, at = Number(W.progressSlider.value) / wt * lt.duration;
+ Ke.time = Math.max(0, Math.min(at, lt.duration)), W.timeLbl.textContent = `${Tl(at)} / ${Tl(lt.duration)}`;
}
}));
- }, Te = () => {
- Zc(u, !!(R != null && R.visible)), Zc(I, k === Si.ORTHOGRAPHIC), I.textContent = k === Si.ORTHOGRAPHIC ? "Ortho" : "Persp", Zc(y, ce);
+ }, Re = () => {
+ Ac(u, !!(R != null && R.visible)), Ac(I, N === Gi.ORTHOGRAPHIC), I.textContent = N === Gi.ORTHOGRAPHIC ? "Ortho" : "Persp", Ac(A, ae);
};
- Z.bgInput.addEventListener("input", () => {
+ S.bgInput.addEventListener("input", () => {
var Ee;
- const Xe = Z.bgInput.value;
+ const ke = S.bgInput.value;
try {
- L && (L.background = new ((p == null ? void 0 : p.Color) || Object)(Xe));
+ L && (L.background = new ((p == null ? void 0 : p.Color) || Object)(ke));
} catch (Ke) {
(Ee = console.debug) == null || Ee.call(console, Ke);
}
- }), Z.materialSel.addEventListener("change", () => {
- Se(Z.materialSel.value);
- }), Z.upSel.addEventListener("change", () => {
- ke(Z.upSel.value);
- }), Z.skeletonToggle && Z.skeletonToggle.addEventListener("change", () => {
- we(Z.skeletonToggle.checked);
- }), Z.fovSlider.addEventListener("input", () => {
+ }), S.materialSel.addEventListener("change", () => {
+ xe(S.materialSel.value);
+ }), S.upSel.addEventListener("change", () => {
+ Xe(S.upSel.value);
+ }), S.skeletonToggle && S.skeletonToggle.addEventListener("change", () => {
+ Me(S.skeletonToggle.checked);
+ }), S.fovSlider.addEventListener("input", () => {
var Ee;
- const Xe = Math.max(
+ const ke = Math.max(
1,
- Math.min(179, Number(Z.fovSlider.value) || zr)
+ Math.min(179, Number(S.fovSlider.value) || zr)
);
try {
- G && (G.fov = Xe, G.updateProjectionMatrix());
+ G && (G.fov = ke, G.updateProjectionMatrix());
} catch (Ke) {
(Ee = console.debug) == null || Ee.call(console, Ke);
}
- }), Z.lightSlider.addEventListener("input", () => {
- je(Number(Z.lightSlider.value));
+ }), S.lightSlider.addEventListener("input", () => {
+ Le(Number(S.lightSlider.value));
});
- const Oe = () => {
- const Xe = [], Ee = (Ke, nt, ut, It) => {
- Ke.addEventListener(nt, ut, It), Xe.push(() => Ke.removeEventListener(nt, ut, It));
+ const rt = () => {
+ const ke = [], Ee = (Ke, lt, wt, at) => {
+ Ke.addEventListener(lt, wt, at), ke.push(() => Ke.removeEventListener(lt, wt, at));
};
return Ee(o, "pointerdown", () => {
- var Ke, nt;
+ var Ke, lt;
try {
(Ke = r.focus) == null || Ke.call(r);
- } catch (ut) {
- (nt = console.debug) == null || nt.call(console, ut);
+ } catch (wt) {
+ (lt = console.debug) == null || lt.call(console, wt);
}
- }), Ee(o, "wheel", (Ke) => Ui(Ke)), Ee(o, "contextmenu", (Ke) => Ui(Ke, { preventDefault: !0 })), Ee(o, "dragstart", (Ke) => Ui(Ke, { preventDefault: !0 })), Ee(o, "dragover", (Ke) => Ui(Ke, { preventDefault: !0 })), Ee(o, "dragleave", (Ke) => Ui(Ke)), Ee(o, "drop", (Ke) => Ui(Ke, { preventDefault: !0 })), () => {
+ }), Ee(o, "wheel", (Ke) => Bi(Ke)), Ee(o, "contextmenu", (Ke) => Bi(Ke, { preventDefault: !0 })), Ee(o, "dragstart", (Ke) => Bi(Ke, { preventDefault: !0 })), Ee(o, "dragover", (Ke) => Bi(Ke, { preventDefault: !0 })), Ee(o, "dragleave", (Ke) => Bi(Ke)), Ee(o, "drop", (Ke) => Bi(Ke, { preventDefault: !0 })), () => {
var Ke;
- for (const nt of Xe)
+ for (const lt of ke)
try {
- nt();
- } catch (ut) {
- (Ke = console.debug) == null || Ke.call(console, ut);
+ lt();
+ } catch (wt) {
+ (Ke = console.debug) == null || Ke.call(console, wt);
}
};
- }, pt = () => {
- var Xe, Ee, Ke, nt, ut, It, dt, Re, Wt, lt, qt, yt, mt, kt, $t, Tt, te, ye, We, pe, De, ot, Zt, tn, Pt, vt, re;
+ }, Te = () => {
+ var ke, Ee, Ke, lt, wt, at, tt, Oe, Rt, nt, Mt, dt, bt, Yt, $t, nn, ie, pe, Ce, ye, De, ut, At, Ht, Qt, xt, Gt;
g = !0;
try {
- window.removeEventListener(ht.RUNTIME_STATUS, Mt);
+ window.removeEventListener(ft.RUNTIME_STATUS, we);
} catch {
}
try {
@@ -16328,163 +16355,163 @@ function Xu(e, t, n = {}) {
}
try {
X != null && cancelAnimationFrame(X);
- } catch (ne) {
- (Xe = console.debug) == null || Xe.call(console, ne);
+ } catch (je) {
+ (ke = console.debug) == null || ke.call(console, je);
}
X = null;
try {
w == null || w();
- } catch (ne) {
- (Ee = console.debug) == null || Ee.call(console, ne);
+ } catch (je) {
+ (Ee = console.debug) == null || Ee.call(console, je);
}
w = null;
try {
- (Ke = A == null ? void 0 : A.disconnect) == null || Ke.call(A);
- } catch (ne) {
- (nt = console.debug) == null || nt.call(console, ne);
+ (Ke = y == null ? void 0 : y.disconnect) == null || Ke.call(y);
+ } catch (je) {
+ (lt = console.debug) == null || lt.call(console, je);
}
- A = null;
+ y = null;
try {
- (ut = f == null ? void 0 : f.dispose) == null || ut.call(f);
- } catch (ne) {
- (It = console.debug) == null || It.call(console, ne);
+ (wt = f == null ? void 0 : f.dispose) == null || wt.call(f);
+ } catch (je) {
+ (at = console.debug) == null || at.call(console, je);
}
f = null;
try {
- (dt = E == null ? void 0 : E.stopAllAction) == null || dt.call(E), (Wt = E == null ? void 0 : E.uncacheRoot) == null || Wt.call(E, (Re = E.getRoot) == null ? void 0 : Re.call(E));
- } catch (ne) {
- (lt = console.debug) == null || lt.call(console, ne);
+ (tt = H == null ? void 0 : H.stopAllAction) == null || tt.call(H), (Rt = H == null ? void 0 : H.uncacheRoot) == null || Rt.call(H, (Oe = H.getRoot) == null ? void 0 : Oe.call(H));
+ } catch (je) {
+ (nt = console.debug) == null || nt.call(console, je);
}
try {
- for (const ne of j)
+ for (const je of v)
try {
- (qt = E == null ? void 0 : E.uncacheAction) == null || qt.call(E, ne);
+ (Mt = H == null ? void 0 : H.uncacheAction) == null || Mt.call(H, je);
} catch {
}
- } catch (ne) {
- (yt = console.debug) == null || yt.call(console, ne);
+ } catch (je) {
+ (dt = console.debug) == null || dt.call(console, je);
}
try {
- for (const ne of M)
+ for (const je of M)
try {
- (mt = ne == null ? void 0 : ne.dispose) == null || mt.call(ne);
+ (bt = je == null ? void 0 : je.dispose) == null || bt.call(je);
} catch {
}
- } catch (ne) {
- (kt = console.debug) == null || kt.call(console, ne);
+ } catch (je) {
+ (Yt = console.debug) == null || Yt.call(console, je);
}
- E = null, j = [], M = [], ju(z);
+ H = null, v = [], M = [], ju(z);
try {
- B && (($t = L == null ? void 0 : L.remove) == null || $t.call(L, B), (Tt = B.dispose) == null || Tt.call(B));
- } catch (ne) {
- (te = console.debug) == null || te.call(console, ne);
+ T && (($t = L == null ? void 0 : L.remove) == null || $t.call(L, T), (nn = T.dispose) == null || nn.call(T));
+ } catch (je) {
+ (ie = console.debug) == null || ie.call(console, je);
}
- B = null;
+ T = null;
try {
- (ye = L == null ? void 0 : L.traverse) == null || ye.call(L, (ne) => {
- var Ie, Ne, He;
+ (pe = L == null ? void 0 : L.traverse) == null || pe.call(L, (je) => {
+ var oe, se, fe;
try {
- (Ne = (Ie = ne.geometry) == null ? void 0 : Ie.dispose) == null || Ne.call(Ie);
+ (se = (oe = je.geometry) == null ? void 0 : oe.dispose) == null || se.call(oe);
} catch {
}
try {
- const rt = Array.isArray(ne.material) ? ne.material : ne.material ? [ne.material] : [];
- for (const St of rt)
+ const Be = Array.isArray(je.material) ? je.material : je.material ? [je.material] : [];
+ for (const gt of Be)
try {
- if (St) {
- for (const Yt of Object.keys(St))
+ if (gt) {
+ for (const Wt of Object.keys(gt))
try {
- const Gt = St[Yt];
- Gt && typeof Gt == "object" && typeof Gt.dispose == "function" && Gt.isTexture && Gt.dispose();
+ const Vt = gt[Wt];
+ Vt && typeof Vt == "object" && typeof Vt.dispose == "function" && Vt.isTexture && Vt.dispose();
} catch {
}
- (He = St.dispose) == null || He.call(St);
+ (fe = gt.dispose) == null || fe.call(gt);
}
} catch {
}
} catch {
}
});
- } catch (ne) {
- (We = console.debug) == null || We.call(console, ne);
+ } catch (je) {
+ (Ce = console.debug) == null || Ce.call(console, je);
}
try {
- o._mjrAxisScene && ((De = (pe = o._mjrAxisScene).traverse) == null || De.call(pe, (ne) => {
- var Ie, Ne, He, rt;
+ o._mjrAxisScene && ((De = (ye = o._mjrAxisScene).traverse) == null || De.call(ye, (je) => {
+ var oe, se, fe, Be;
try {
- (Ne = (Ie = ne.geometry) == null ? void 0 : Ie.dispose) == null || Ne.call(Ie);
+ (se = (oe = je.geometry) == null ? void 0 : oe.dispose) == null || se.call(oe);
} catch {
}
try {
- (rt = (He = ne.material) == null ? void 0 : He.dispose) == null || rt.call(He);
+ (Be = (fe = je.material) == null ? void 0 : fe.dispose) == null || Be.call(fe);
} catch {
}
}), o._mjrAxisScene = null);
- } catch (ne) {
- (ot = console.debug) == null || ot.call(console, ne);
+ } catch (je) {
+ (ut = console.debug) == null || ut.call(console, je);
}
try {
- (Zt = b == null ? void 0 : b.dispose) == null || Zt.call(b);
- } catch (ne) {
- (tn = console.debug) == null || tn.call(console, ne);
+ (At = b == null ? void 0 : b.dispose) == null || At.call(b);
+ } catch (je) {
+ (Ht = console.debug) == null || Ht.call(console, je);
}
- b = null, L = null, h = null, G = null, W = null, F = null, Y = null, N = null, x = null;
+ b = null, L = null, C = null, G = null, Z = null, O = null, V = null, k = null, x = null;
try {
- const ne = r.getContext("webgl2") || r.getContext("webgl");
- ne && ((vt = (Pt = ne.getExtension("WEBGL_lose_context")) == null ? void 0 : Pt.loseContext) == null || vt.call(Pt));
- } catch (ne) {
- (re = console.debug) == null || re.call(console, ne);
+ const je = r.getContext("webgl2") || r.getContext("webgl");
+ je && ((xt = (Qt = je.getExtension("WEBGL_lose_context")) == null ? void 0 : Qt.loseContext) == null || xt.call(Qt));
+ } catch (je) {
+ (Gt = console.debug) == null || Gt.call(console, je);
}
- }, Me = () => {
- var Xe;
- T = !0;
+ }, qt = () => {
+ var ke;
+ K = !0;
try {
X != null && cancelAnimationFrame(X);
} catch (Ee) {
- (Xe = console.debug) == null || Xe.call(console, Ee);
+ (ke = console.debug) == null || ke.call(console, Ee);
}
X = null;
- }, Xt = () => {
- var Xe;
- if (T = !1, !(g || X != null || typeof x != "function"))
+ }, kt = () => {
+ var ke;
+ if (K = !1, !(g || X != null || typeof x != "function"))
try {
X = requestAnimationFrame(x);
} catch (Ee) {
- (Xe = console.debug) == null || Xe.call(console, Ee);
+ (ke = console.debug) == null || ke.call(console, Ee);
}
- }, Mt = (Xe) => {
+ }, we = (ke) => {
var Ke;
if (!i) return;
- if (String(((Ke = Xe == null ? void 0 : Xe.detail) == null ? void 0 : Ke.active_prompt_id) || "").trim()) {
- Me();
+ if (String(((Ke = ke == null ? void 0 : ke.detail) == null ? void 0 : Ke.active_prompt_id) || "").trim()) {
+ qt();
return;
}
- Xt();
+ kt();
}, me = {
setParams: () => {
},
- destroy: pt,
+ destroy: Te,
captureCanvas: () => r,
- pause: Me,
- resume: Xt
+ pause: qt,
+ resume: kt
};
r._mjrProc = me;
try {
- i && (window.addEventListener(ht.RUNTIME_STATUS, Mt), String(((Le = window == null ? void 0 : window.__MJR_EXECUTION_RUNTIME__) == null ? void 0 : Le.active_prompt_id) || "").trim() && (T = !0));
- } catch (Xe) {
- (Ot = console.debug) == null || Ot.call(console, Xe);
+ i && (window.addEventListener(ft.RUNTIME_STATUS, we), String(((Ye = window == null ? void 0 : window.__MJR_EXECUTION_RUNTIME__) == null ? void 0 : Ye.active_prompt_id) || "").trim() && (K = !0));
+ } catch (ke) {
+ (Pt = console.debug) == null || Pt.call(console, ke);
}
return Q("Preparing 3D preview", ue), Promise.resolve().then(async () => {
- var Ee, Ke, nt, ut;
- const Xe = NA(e);
- if (!LA.has(Xe)) {
+ var Ee, Ke, lt, wt;
+ const ke = kA(e);
+ if (!LA.has(ke)) {
if (Q(
"3D preview unavailable",
- `${Xe.toUpperCase()} is not supported in the embedded viewer.`
- ), S.style.display = "none", t)
+ `${ke.toUpperCase()} is not supported in the embedded viewer.`
+ ), h.style.display = "none", t)
try {
- const It = document.createElement("a");
- It.href = t, It.download = String((e == null ? void 0 : e.filename) || "model"), It.textContent = `Download ${String((e == null ? void 0 : e.filename) || "file")}`, It.style.cssText = [
+ const at = document.createElement("a");
+ at.href = t, at.download = String((e == null ? void 0 : e.filename) || "model"), at.textContent = `Download ${String((e == null ? void 0 : e.filename) || "file")}`, at.style.cssText = [
"position:absolute",
"bottom:18px",
"left:50%",
@@ -16497,248 +16524,248 @@ function Xu(e, t, n = {}) {
"text-decoration:none",
"pointer-events:auto",
"z-index:3"
- ].join(";"), o.appendChild(It);
+ ].join(";"), o.appendChild(at);
} catch {
}
return;
}
try {
- const It = await SA();
+ const at = await GA();
if (g) return;
- const dt = It.THREE;
- p = dt;
- const Re = new dt.LoadingManager();
- Re.setURLModifier((ne) => {
- if (!ne || kA(ne)) return ne;
- const Ie = ly(e, ne);
- if (Ie) return Ie;
+ const tt = at.THREE;
+ p = tt;
+ const Oe = new tt.LoadingManager();
+ Oe.setURLModifier((je) => {
+ if (!je || XA(je)) return je;
+ const oe = ly(e, je);
+ if (oe) return oe;
try {
- return new URL(ne, t).href;
+ return new URL(je, t).href;
} catch {
- return ne;
+ return je;
}
- }), b = new dt.WebGLRenderer({
+ }), b = new tt.WebGLRenderer({
canvas: r,
antialias: !0,
alpha: !0,
preserveDrawingBuffer: !0
- }), b.outputColorSpace = dt.SRGBColorSpace, b.setPixelRatio(Math.min(2, window.devicePixelRatio || 1)), L = new dt.Scene(), L.background = new dt.Color(Ac), G = new dt.PerspectiveCamera(
+ }), b.outputColorSpace = tt.SRGBColorSpace, b.setPixelRatio(Math.min(2, window.devicePixelRatio || 1)), L = new tt.Scene(), L.background = new tt.Color(Wc), G = new tt.PerspectiveCamera(
zr,
16 / 9,
0.01,
1e4
- ), W = new dt.OrthographicCamera(-1, 1, 1, -1, -1e4, 1e4), h = G, f = new It.OrbitControls(h, r), f.enableDamping = !0, f.dampingFactor = 0.08, f.rotateSpeed = 0.82, f.zoomSpeed = 1, f.panSpeed = 0.9, f.screenSpacePanning = !0, f.mouseButtons = RA(null, dt.MOUSE), w = Oe(), P = new dt.AmbientLight(
+ ), Z = new tt.OrthographicCamera(-1, 1, 1, -1, -1e4, 1e4), C = G, f = new at.OrbitControls(C, r), f.enableDamping = !0, f.dampingFactor = 0.08, f.rotateSpeed = 0.82, f.zoomSpeed = 1, f.panSpeed = 0.9, f.screenSpacePanning = !0, f.mouseButtons = RA(null, tt.MOUSE), w = rt(), P = new tt.AmbientLight(
16777215,
Zi.ambient * $
), L.add(P);
- const Wt = new dt.DirectionalLight(
+ const Rt = new tt.DirectionalLight(
16777215,
Zi.main * $
);
- Wt.position.set(0, 10, 10);
- const lt = new dt.DirectionalLight(
+ Rt.position.set(0, 10, 10);
+ const nt = new tt.DirectionalLight(
16777215,
Zi.back * $
);
- lt.position.set(-10, 0, -10);
- const qt = new dt.DirectionalLight(
+ nt.position.set(-10, 0, -10);
+ const Mt = new tt.DirectionalLight(
15266047,
Zi.fill * $
);
- qt.position.set(10, 5, -5);
- const yt = new dt.DirectionalLight(
+ Mt.position.set(10, 5, -5);
+ const dt = new tt.DirectionalLight(
16773352,
Zi.fill * $
);
- yt.position.set(-10, 5, 5);
- const mt = new dt.DirectionalLight(
+ dt.position.set(-10, 5, 5);
+ const bt = new tt.DirectionalLight(
16777215,
Zi.bottom * $
);
- mt.position.set(0, -10, 0), H = [Wt, lt, qt, yt, mt], H.forEach((ne) => L.add(ne)), R = new dt.GridHelper(20, 20, 5068128, 3094338), L.add(R);
- const kt = () => {
- if (g || !b || !h) return;
- const ne = o.getBoundingClientRect(), Ie = Math.max(1, Math.round(ne.width || r.clientWidth || 1)), Ne = Math.max(1, Math.round(ne.height || r.clientHeight || 1));
- b.setSize(Ie, Ne, !1), G && (G.aspect = Ie / Ne, G.updateProjectionMatrix()), de(Ie, Ne), le(), U();
+ bt.position.set(0, -10, 0), E = [Rt, nt, Mt, dt, bt], E.forEach((je) => L.add(je)), R = new tt.GridHelper(20, 20, 5068128, 3094338), L.add(R);
+ const Yt = () => {
+ if (g || !b || !C) return;
+ const je = o.getBoundingClientRect(), oe = Math.max(1, Math.round(je.width || r.clientWidth || 1)), se = Math.max(1, Math.round(je.height || r.clientHeight || 1));
+ b.setSize(oe, se, !1), G && (G.aspect = oe / se, G.updateProjectionMatrix()), ce(oe, se), le(), B();
};
- typeof ResizeObserver < "u" && (A = new ResizeObserver(() => kt()), A.observe(o));
- const $t = wA(It, Xe, Re);
+ typeof ResizeObserver < "u" && (y = new ResizeObserver(() => Yt()), y.observe(o));
+ const $t = wA(at, ke, Oe);
if (!$t) {
Q(
"3D loader unavailable",
- `${Xe.toUpperCase()} loader could not be created.`
- ), S.style.display = "none";
+ `${ke.toUpperCase()} loader could not be created.`
+ ), h.style.display = "none";
return;
}
- if (Xe === "obj" && It.MTLLoader)
+ if (ke === "obj" && at.MTLLoader)
try {
- const ne = t.replace(/\.obj(\?.*)?$/i, (He, rt) => `.mtl${rt || ""}`), Ie = new It.MTLLoader(Re), Ne = await new Promise((He) => {
- Ie.load(ne, He, void 0, () => He(null));
+ const je = t.replace(/\.obj(\?.*)?$/i, (fe, Be) => `.mtl${Be || ""}`), oe = new at.MTLLoader(Oe), se = await new Promise((fe) => {
+ oe.load(je, fe, void 0, () => fe(null));
});
- Ne && !g && (Ne.preload(), $t.setMaterials(Ne));
- } catch (ne) {
- (Ee = console.debug) == null || Ee.call(console, "[MJR 3D] MTL load skipped:", ne == null ? void 0 : ne.message);
+ se && !g && (se.preload(), $t.setMaterials(se));
+ } catch (je) {
+ (Ee = console.debug) == null || Ee.call(console, "[MJR 3D] MTL load skipped:", je == null ? void 0 : je.message);
}
- const Tt = await MA($t, Xe, t);
+ const nn = await MA($t, ke, t);
if (g) return;
- const te = WA(dt, Xe, Tt);
- if (!te) {
- Q("Empty 3D scene", "The loader returned no renderable object."), S.style.display = "none";
+ const ie = WA(tt, ke, nn);
+ if (!ie) {
+ Q("Empty 3D scene", "The loader returned no renderable object."), h.style.display = "none";
return;
}
try {
- const ne = new dt.Box3().setFromObject(te);
- if (!ne.isEmpty()) {
- const Ie = ne.getSize(new dt.Vector3()), Ne = ne.getCenter(new dt.Vector3()), rt = 5 / Math.max(Ie.x, Ie.y, Ie.z, 1e-3);
- te.scale.multiplyScalar(rt), ne.setFromObject(te), ne.getCenter(Ne), te.position.set(-Ne.x, -ne.min.y, -Ne.z);
+ const je = new tt.Box3().setFromObject(ie);
+ if (!je.isEmpty()) {
+ const oe = je.getSize(new tt.Vector3()), se = je.getCenter(new tt.Vector3()), Be = 5 / Math.max(oe.x, oe.y, oe.z, 1e-3);
+ ie.scale.multiplyScalar(Be), je.setFromObject(ie), je.getCenter(se), ie.position.set(-se.x, -je.min.y, -se.z);
}
- } catch (ne) {
- (Ke = console.debug) == null || Ke.call(console, "[MJR 3D] normalize skipped:", ne);
+ } catch (je) {
+ (Ke = console.debug) == null || Ke.call(console, "[MJR 3D] normalize skipped:", je);
}
- if (F = te, Y = new dt.Group(), Y.add(te), L.add(Y), K = fA(te), J = yA(te), J) {
- B = new dt.SkeletonHelper(te), B.visible = !1, L.add(B);
- const ne = Yu({
- defaultBgColor: Ac,
+ if (O = ie, V = new tt.Group(), V.add(ie), L.add(V), U = fA(ie), J = yA(ie), J) {
+ T = new tt.SkeletonHelper(ie), T.visible = !1, L.add(T);
+ const je = Vu({
+ defaultBgColor: Wc,
defaultFov: zr,
- defaultLightIntensity: Wc,
+ defaultLightIntensity: wc,
hasSkeleton: !0
});
- o.replaceChild(ne.panel, Z.panel), Object.assign(Z, ne), Z.bgInput.addEventListener("input", () => {
- var Ie;
+ o.replaceChild(je.panel, S.panel), Object.assign(S, je), S.bgInput.addEventListener("input", () => {
+ var oe;
try {
- L && (L.background = new dt.Color(Z.bgInput.value));
- } catch (Ne) {
- (Ie = console.debug) == null || Ie.call(console, Ne);
+ L && (L.background = new tt.Color(S.bgInput.value));
+ } catch (se) {
+ (oe = console.debug) == null || oe.call(console, se);
}
- }), Z.materialSel.addEventListener("change", () => {
- Se(Z.materialSel.value);
- }), Z.upSel.addEventListener("change", () => {
- ke(Z.upSel.value);
- }), Z.skeletonToggle && Z.skeletonToggle.addEventListener("change", () => {
- we(Z.skeletonToggle.checked);
- }), Z.fovSlider.addEventListener("input", () => {
- var Ne;
- const Ie = Math.max(
+ }), S.materialSel.addEventListener("change", () => {
+ xe(S.materialSel.value);
+ }), S.upSel.addEventListener("change", () => {
+ Xe(S.upSel.value);
+ }), S.skeletonToggle && S.skeletonToggle.addEventListener("change", () => {
+ Me(S.skeletonToggle.checked);
+ }), S.fovSlider.addEventListener("input", () => {
+ var se;
+ const oe = Math.max(
1,
Math.min(
179,
- Number(Z.fovSlider.value) || zr
+ Number(S.fovSlider.value) || zr
)
);
try {
- G && (G.fov = Ie, G.updateProjectionMatrix());
- } catch (He) {
- (Ne = console.debug) == null || Ne.call(console, He);
+ G && (G.fov = oe, G.updateProjectionMatrix());
+ } catch (fe) {
+ (se = console.debug) == null || se.call(console, fe);
}
- }), Z.lightSlider.addEventListener("input", () => {
- je(Number(Z.lightSlider.value));
+ }), S.lightSlider.addEventListener("input", () => {
+ Le(Number(S.lightSlider.value));
});
}
- N = vu(dt, Y), N && (R.position.y = N.box.min.y), k = Si.PERSPECTIVE, se(), kt(), _(), Te();
- const ye = CA(Tt, Xe);
- ye.length > 0 && Ue(ye, te);
- const We = new dt.Scene();
- o._mjrAxisScene = We;
- const pe = new dt.PerspectiveCamera(50, 1, 0.1, 100);
- pe.position.set(0, 0, 3.2), pe.lookAt(0, 0, 0);
- const De = 96, ot = [
+ k = vu(tt, V), k && (R.position.y = k.box.min.y), N = Gi.PERSPECTIVE, de(), Yt(), _(), Re();
+ const pe = hA(nn, ke);
+ pe.length > 0 && Pe(pe, ie);
+ const Ce = new tt.Scene();
+ o._mjrAxisScene = Ce;
+ const ye = new tt.PerspectiveCamera(50, 1, 0.1, 100);
+ ye.position.set(0, 0, 3.2), ye.lookAt(0, 0, 0);
+ const De = 96, ut = [
{ dir: [1, 0, 0], color: 16724787 },
// X = red
{ dir: [0, 1, 0], color: 3407667 },
// Y = green
{ dir: [0, 0, 1], color: 5605631 }
// Z = blue
- ], Zt = new dt.SphereGeometry(0.1, 12, 8), tn = new dt.SphereGeometry(0.08, 10, 6), Pt = new dt.MeshBasicMaterial({ color: 13421772 });
- We.add(new dt.Mesh(tn, Pt));
- for (const { dir: ne, color: Ie } of ot) {
- const Ne = new dt.LineBasicMaterial({ color: Ie }), He = [
- new dt.Vector3(0, 0, 0),
- new dt.Vector3(ne[0], ne[1], ne[2])
- ], rt = new dt.BufferGeometry().setFromPoints(He);
- We.add(new dt.Line(rt, Ne));
- const St = new dt.MeshBasicMaterial({ color: Ie }), Yt = new dt.Mesh(Zt, St);
- Yt.position.set(ne[0], ne[1], ne[2]), We.add(Yt);
+ ], At = new tt.SphereGeometry(0.1, 12, 8), Ht = new tt.SphereGeometry(0.08, 10, 6), Qt = new tt.MeshBasicMaterial({ color: 13421772 });
+ Ce.add(new tt.Mesh(Ht, Qt));
+ for (const { dir: je, color: oe } of ut) {
+ const se = new tt.LineBasicMaterial({ color: oe }), fe = [
+ new tt.Vector3(0, 0, 0),
+ new tt.Vector3(je[0], je[1], je[2])
+ ], Be = new tt.BufferGeometry().setFromPoints(fe);
+ Ce.add(new tt.Line(Be, se));
+ const gt = new tt.MeshBasicMaterial({ color: oe }), Wt = new tt.Mesh(At, gt);
+ Wt.position.set(je[0], je[1], je[2]), Ce.add(Wt);
}
o._mjr3D = {
controls: f,
get camera() {
- return h;
+ return C;
}
};
try {
- (nt = n.onReady) == null || nt.call(n, {
+ (lt = n.onReady) == null || lt.call(n, {
canvas: r,
host: o,
- object: Y,
+ object: V,
renderer: b,
- camera: h,
+ camera: C,
controls: f
});
- } catch (ne) {
- (ut = console.debug) == null || ut.call(console, ne);
+ } catch (je) {
+ (wt = console.debug) == null || wt.call(console, je);
}
- U();
- const vt = () => {
- var ne, Ie;
- if (!(g || T || !b || !L || !h)) {
+ B();
+ const xt = () => {
+ var je, oe;
+ if (!(g || K || !b || !L || !C)) {
try {
- if ((ne = f == null ? void 0 : f.update) == null || ne.call(f), E && oe) {
- const St = oe.getDelta();
- q && E.update(St), Je();
+ if ((je = f == null ? void 0 : f.update) == null || je.call(f), H && ne) {
+ const gt = ne.getDelta();
+ q && H.update(gt), Fe();
}
- b.setScissorTest(!1), b.setViewport(0, 0, r.width, r.height), b.render(L, h);
- const Ne = Math.min(2, window.devicePixelRatio || 1), He = Math.round(De * Ne);
- b.setScissorTest(!0), b.setScissor(0, 0, He, He), b.setViewport(0, 0, He, He), b.setClearColor(0, 0), b.clear(!0, !0, !1);
- const rt = h.quaternion;
- pe.position.set(0, 0, 3.2).applyQuaternion(rt), pe.quaternion.copy(rt), b.render(We, pe), b.setScissorTest(!1);
+ b.setScissorTest(!1), b.setViewport(0, 0, r.width, r.height), b.render(L, C);
+ const se = Math.min(2, window.devicePixelRatio || 1), fe = Math.round(De * se);
+ b.setScissorTest(!0), b.setScissor(0, 0, fe, fe), b.setViewport(0, 0, fe, fe), b.setClearColor(0, 0), b.clear(!0, !0, !1);
+ const Be = C.quaternion;
+ ye.position.set(0, 0, 3.2).applyQuaternion(Be), ye.quaternion.copy(Be), b.render(Ce, ye), b.setScissorTest(!1);
try {
b.setClearColor(L.background || 0, 1);
} catch {
}
le();
- } catch (Ne) {
- (Ie = console.debug) == null || Ie.call(console, Ne);
+ } catch (se) {
+ (oe = console.debug) == null || oe.call(console, se);
}
- T || (X = requestAnimationFrame(vt));
+ K || (X = requestAnimationFrame(xt));
}
};
- x = vt;
- const re = (ne) => Ui(ne, { preventDefault: !0 });
- d.addEventListener("click", (ne) => {
- re(ne), se(), Te();
- }), u.addEventListener("click", (ne) => {
- re(ne), R && (R.visible = !R.visible), Te(), U();
- }), I.addEventListener("click", (ne) => {
- re(ne), ge(
- k === Si.PERSPECTIVE ? Si.ORTHOGRAPHIC : Si.PERSPECTIVE
+ x = xt;
+ const Gt = (je) => Bi(je, { preventDefault: !0 });
+ d.addEventListener("click", (je) => {
+ Gt(je), de(), Re();
+ }), u.addEventListener("click", (je) => {
+ Gt(je), R && (R.visible = !R.visible), Re(), B();
+ }), I.addEventListener("click", (je) => {
+ Gt(je), ge(
+ N === Gi.PERSPECTIVE ? Gi.ORTHOGRAPHIC : Gi.PERSPECTIVE
);
- }), y.addEventListener("click", (ne) => {
- re(ne), ce = !ce, Z.panel.style.display = ce ? "block" : "none", Te();
- }), T || vt();
- } catch (It) {
- console.warn("[MJR 3D] preview init failed", It), Q(
+ }), A.addEventListener("click", (je) => {
+ Gt(je), ae = !ae, S.panel.style.display = ae ? "block" : "none", Re();
+ }), K || xt();
+ } catch (at) {
+ console.warn("[MJR 3D] preview init failed", at), Q(
"Failed to load 3D preview",
- String((It == null ? void 0 : It.message) || "Three.js initialization failed.")
- ), S.style.display = "none";
+ String((at == null ? void 0 : at.message) || "Three.js initialization failed.")
+ ), h.style.display = "none";
}
- }).catch((Xe) => {
+ }).catch((ke) => {
if (!g) {
- console.warn("[MJR 3D] preview init unhandled error", Xe);
+ console.warn("[MJR 3D] preview init unhandled error", ke);
try {
Q(
"Failed to load 3D preview",
- String((Xe == null ? void 0 : Xe.message) || "Initialization failed.")
+ String((ke == null ? void 0 : ke.message) || "Initialization failed.")
);
} catch {
}
try {
- S.style.display = "none";
+ h.style.display = "none";
} catch {
}
}
}), o;
}
-function FA({
+function OA({
overlay: e,
content: t,
singleView: n,
@@ -16749,104 +16776,104 @@ function FA({
scheduleOverlayRedraw: a,
lifecycle: c
} = {}) {
- var Y, F;
- const s = (c == null ? void 0 : c.safeCall) || bt, d = (c == null ? void 0 : c.safeAddListener) || Qe, u = (c == null ? void 0 : c.unsubs) || [], I = () => {
- var N;
+ var V, O;
+ const s = (c == null ? void 0 : c.safeCall) || It, d = (c == null ? void 0 : c.safeAddListener) || $e, u = (c == null ? void 0 : c.unsubs) || [], I = () => {
+ var k;
try {
- return (r == null ? void 0 : r.mode) !== (l == null ? void 0 : l.SINGLE) ? null : ((N = n == null ? void 0 : n.querySelector) == null ? void 0 : N.call(n, ".mjr-viewer-media")) || null;
+ return (r == null ? void 0 : r.mode) !== (l == null ? void 0 : l.SINGLE) ? null : ((k = n == null ? void 0 : n.querySelector) == null ? void 0 : k.call(n, ".mjr-viewer-media")) || null;
} catch {
return null;
}
- }, y = (N) => {
- var V;
+ }, A = (k) => {
+ var Y;
try {
- if (!N) return { w: 0, h: 0 };
- const k = Number(N == null ? void 0 : N._mjrNaturalW) || 0, K = Number(N == null ? void 0 : N._mjrNaturalH) || 0;
- if (k > 0 && K > 0)
- return { w: k, h: K };
- if (N.tagName === "IMG")
+ if (!k) return { w: 0, h: 0 };
+ const N = Number(k == null ? void 0 : k._mjrNaturalW) || 0, U = Number(k == null ? void 0 : k._mjrNaturalH) || 0;
+ if (N > 0 && U > 0)
+ return { w: N, h: U };
+ if (k.tagName === "IMG")
return {
- w: Number(N.naturalWidth) || 0,
- h: Number(N.naturalHeight) || 0
+ w: Number(k.naturalWidth) || 0,
+ h: Number(k.naturalHeight) || 0
};
- if (N.tagName === "VIDEO")
- return { w: Number(N.videoWidth) || 0, h: Number(N.videoHeight) || 0 };
- if (N.tagName === "CANVAS") {
- const z = Number(N._mjrNaturalW) || Number(N.width) || 0, B = Number(N._mjrNaturalH) || Number(N.height) || 0;
- return { w: z, h: B };
+ if (k.tagName === "VIDEO")
+ return { w: Number(k.videoWidth) || 0, h: Number(k.videoHeight) || 0 };
+ if (k.tagName === "CANVAS") {
+ const z = Number(k._mjrNaturalW) || Number(k.width) || 0, T = Number(k._mjrNaturalH) || Number(k.height) || 0;
+ return { w: z, h: T };
}
- } catch (k) {
- (V = console.debug) == null || V.call(console, k);
+ } catch (N) {
+ (Y = console.debug) == null || Y.call(console, N);
}
return { w: 0, h: 0 };
- }, S = () => {
- var N;
+ }, h = () => {
+ var k;
try {
- const V = (N = t == null ? void 0 : t.getBoundingClientRect) == null ? void 0 : N.call(t);
- return V && V.width > 0 && V.height > 0 ? V : null;
+ const Y = (k = t == null ? void 0 : t.getBoundingClientRect) == null ? void 0 : k.call(t);
+ return Y && Y.width > 0 && Y.height > 0 ? Y : null;
} catch {
return null;
}
- }, Z = () => {
- var N, V;
+ }, S = () => {
+ var k, Y;
try {
- let k = n;
- (r == null ? void 0 : r.mode) === (l == null ? void 0 : l.AB_COMPARE) ? k = i : (r == null ? void 0 : r.mode) === (l == null ? void 0 : l.SIDE_BY_SIDE) && (k = o);
- const K = (N = k == null ? void 0 : k.querySelector) == null ? void 0 : N.call(k, ".mjr-viewer-media");
- if (!K) return;
- const { w: z, h: B } = y(K);
- z > 0 && B > 0 && (r._mediaW = z, r._mediaH = B);
- } catch (k) {
- (V = console.debug) == null || V.call(console, k);
+ let N = n;
+ (r == null ? void 0 : r.mode) === (l == null ? void 0 : l.AB_COMPARE) ? N = i : (r == null ? void 0 : r.mode) === (l == null ? void 0 : l.SIDE_BY_SIDE) && (N = o);
+ const U = (k = N == null ? void 0 : N.querySelector) == null ? void 0 : k.call(N, ".mjr-viewer-media");
+ if (!U) return;
+ const { w: z, h: T } = A(U);
+ z > 0 && T > 0 && (r._mediaW = z, r._mediaH = T);
+ } catch (N) {
+ (Y = console.debug) == null || Y.call(console, N);
}
- }, C = (N, { clampPanToBounds: V, applyTransform: k } = {}) => {
+ }, W = (k, { clampPanToBounds: Y, applyTransform: N } = {}) => {
var z;
- if (!N || N._mjrMediaSizeBound) return;
- N._mjrMediaSizeBound = !0;
- const K = () => {
- var B, J;
- Z();
+ if (!k || k._mjrMediaSizeBound) return;
+ k._mjrMediaSizeBound = !0;
+ const U = () => {
+ var T, J;
+ S();
try {
- V == null || V();
+ Y == null || Y();
} catch (P) {
- (B = console.debug) == null || B.call(console, P);
+ (T = console.debug) == null || T.call(console, P);
}
try {
- k == null || k();
+ N == null || N();
} catch (P) {
(J = console.debug) == null || J.call(console, P);
}
};
try {
- N.tagName === "IMG" ? N.addEventListener("load", () => requestAnimationFrame(K), { once: !0 }) : N.tagName === "VIDEO" && N.addEventListener("loadedmetadata", () => requestAnimationFrame(K), {
+ k.tagName === "IMG" ? k.addEventListener("load", () => requestAnimationFrame(U), { once: !0 }) : k.tagName === "VIDEO" && k.addEventListener("loadedmetadata", () => requestAnimationFrame(U), {
once: !0
});
- } catch (B) {
- (z = console.debug) == null || z.call(console, B);
+ } catch (T) {
+ (z = console.debug) == null || z.call(console, T);
}
}, g = () => {
- var N, V, k;
+ var k, Y, N;
try {
if (!e || e.style.display === "none") return;
- const K = Math.max(
+ const U = Math.max(
si.MIN,
Math.min(si.MAX, Number(r == null ? void 0 : r.zoom) || 1)
- ), z = (N = r == null ? void 0 : r.assets) == null ? void 0 : N[r == null ? void 0 : r.currentIndex];
- let B = Number(z == null ? void 0 : z.width) || 0, J = Number(z == null ? void 0 : z.height) || 0;
- if (B > 0 && J > 0 || (Z(), B = Number(r == null ? void 0 : r._mediaW) || 0, J = Number(r == null ? void 0 : r._mediaH) || 0), !(B > 0 && J > 0)) return;
- const P = B / J;
+ ), z = (k = r == null ? void 0 : r.assets) == null ? void 0 : k[r == null ? void 0 : r.currentIndex];
+ let T = Number(z == null ? void 0 : z.width) || 0, J = Number(z == null ? void 0 : z.height) || 0;
+ if (T > 0 && J > 0 || (S(), T = Number(r == null ? void 0 : r._mediaW) || 0, J = Number(r == null ? void 0 : r._mediaH) || 0), !(T > 0 && J > 0)) return;
+ const P = T / J;
if (!Number.isFinite(P) || P <= 0) return;
- const H = () => {
- var ge, je;
+ const E = () => {
+ var ge, Le;
const Q = Date.now();
try {
- const Se = r == null ? void 0 : r._viewportCache;
- if (Se && Se.mode === (r == null ? void 0 : r.mode) && Q - (Se.at || 0) < 250) {
- const ke = Number(Se.w) || 0, we = Number(Se.h) || 0;
- if (ke > 0 && we > 0) return { w: ke, h: we };
+ const xe = r == null ? void 0 : r._viewportCache;
+ if (xe && xe.mode === (r == null ? void 0 : r.mode) && Q - (xe.at || 0) < 250) {
+ const Xe = Number(xe.w) || 0, Me = Number(xe.h) || 0;
+ if (Xe > 0 && Me > 0) return { w: Xe, h: Me };
}
- } catch (Se) {
- (ge = console.debug) == null || ge.call(console, Se);
+ } catch (xe) {
+ (ge = console.debug) == null || ge.call(console, xe);
}
const _ = Math.max(
Number(t == null ? void 0 : t.clientWidth) || 0,
@@ -16854,191 +16881,191 @@ function FA({
), le = Math.max(
Number(t == null ? void 0 : t.clientHeight) || 0,
Number(e == null ? void 0 : e.clientHeight) || 0
- ), de = (Se, ke) => ({
- w: Math.max(Number(Se) || 0, _),
- h: Math.max(Number(ke) || 0, le)
+ ), ce = (xe, Xe) => ({
+ w: Math.max(Number(xe) || 0, _),
+ h: Math.max(Number(Xe) || 0, le)
});
- let se = null;
+ let de = null;
if ((r == null ? void 0 : r.mode) === (l == null ? void 0 : l.SINGLE))
- se = de(n == null ? void 0 : n.clientWidth, n == null ? void 0 : n.clientHeight);
+ de = ce(n == null ? void 0 : n.clientWidth, n == null ? void 0 : n.clientHeight);
else if ((r == null ? void 0 : r.mode) === (l == null ? void 0 : l.AB_COMPARE))
- se = de(i == null ? void 0 : i.clientWidth, i == null ? void 0 : i.clientHeight);
+ de = ce(i == null ? void 0 : i.clientWidth, i == null ? void 0 : i.clientHeight);
else {
- const Se = Array.from((o == null ? void 0 : o.children) || []).filter(
- (ke) => ke && ke.nodeType === 1
+ const xe = Array.from((o == null ? void 0 : o.children) || []).filter(
+ (Xe) => Xe && Xe.nodeType === 1
);
- if (Se.length) {
- let ke = 1 / 0, we = 1 / 0;
- for (const Je of Se) {
- const $e = Number(Je.clientWidth) || 0, qe = Number(Je.clientHeight) || 0;
- $e > 0 && (ke = Math.min(ke, $e)), qe > 0 && (we = Math.min(we, qe));
+ if (xe.length) {
+ let Xe = 1 / 0, Me = 1 / 0;
+ for (const Fe of xe) {
+ const it = Number(Fe.clientWidth) || 0, qe = Number(Fe.clientHeight) || 0;
+ it > 0 && (Xe = Math.min(Xe, it)), qe > 0 && (Me = Math.min(Me, qe));
}
- Number.isFinite(ke) && Number.isFinite(we) && (se = de(ke, we));
+ Number.isFinite(Xe) && Number.isFinite(Me) && (de = ce(Xe, Me));
}
- se || (se = de(o == null ? void 0 : o.clientWidth, o == null ? void 0 : o.clientHeight));
+ de || (de = ce(o == null ? void 0 : o.clientWidth, o == null ? void 0 : o.clientHeight));
}
try {
- r._viewportCache = { mode: r == null ? void 0 : r.mode, w: se.w, h: se.h, at: Q };
- } catch (Se) {
- (je = console.debug) == null || je.call(console, Se);
+ r._viewportCache = { mode: r == null ? void 0 : r.mode, w: de.w, h: de.h, at: Q };
+ } catch (xe) {
+ (Le = console.debug) == null || Le.call(console, xe);
}
- return se;
- }, { w: $, h: E } = H();
- if (!($ > 0 && E > 0)) {
- ((V = e == null ? void 0 : e.style) == null ? void 0 : V.display) !== "none" && requestAnimationFrame(g);
+ return de;
+ }, { w: $, h: H } = E();
+ if (!($ > 0 && H > 0)) {
+ ((Y = e == null ? void 0 : e.style) == null ? void 0 : Y.display) !== "none" && requestAnimationFrame(g);
return;
}
- const oe = $ / E;
- let M = 0, j = 0;
- P > oe ? (M = $, j = $ / P) : (j = E, M = E * P);
- const O = M * K, D = j * K, q = O > $ + 1 || D > E + 1;
- if (!(K > 1.001) && !q) {
+ const ne = $ / H;
+ let M = 0, v = 0;
+ P > ne ? (M = $, v = $ / P) : (v = H, M = H * P);
+ const F = M * U, D = v * U, q = F > $ + 1 || D > H + 1;
+ if (!(U > 1.001) && !q) {
r.panX = 0, r.panY = 0;
return;
}
- const ee = Math.max(0, O - $), ce = Math.max(0, D - E), ue = ee / 2 * K, U = ce / 2 * K;
- r.panX = Math.max(-ue, Math.min(ue, Number(r == null ? void 0 : r.panX) || 0)), r.panY = Math.max(-U, Math.min(U, Number(r == null ? void 0 : r.panY) || 0));
- } catch (K) {
- (k = console.debug) == null || k.call(console, K);
+ const ee = Math.max(0, F - $), ae = Math.max(0, D - H), ue = ee / 2 * U, B = ae / 2 * U;
+ r.panX = Math.max(-ue, Math.min(ue, Number(r == null ? void 0 : r.panX) || 0)), r.panY = Math.max(-B, Math.min(B, Number(r == null ? void 0 : r.panY) || 0));
+ } catch (U) {
+ (N = console.debug) == null || N.call(console, U);
}
- }, A = () => {
- const N = Math.max(si.MIN, Math.min(si.MAX, Number(r == null ? void 0 : r.zoom) || 1)), V = Number(r == null ? void 0 : r.panX) || 0, k = Number(r == null ? void 0 : r.panY) || 0, K = V / N, z = k / N;
- return `translate3d(${K}px, ${z}px, 0) scale(${N})`;
+ }, y = () => {
+ const k = Math.max(si.MIN, Math.min(si.MAX, Number(r == null ? void 0 : r.zoom) || 1)), Y = Number(r == null ? void 0 : r.panX) || 0, N = Number(r == null ? void 0 : r.panY) || 0, U = Y / k, z = N / k;
+ return `translate3d(${U}px, ${z}px, 0) scale(${k})`;
}, p = () => {
- var N;
+ var k;
try {
if (!t) return;
if (!e || e.style.display === "none") {
t.style.cursor = "";
return;
}
- const V = Number(r == null ? void 0 : r.zoom) || 1, k = I(), { w: K, h: z } = y(k) || { w: 0, h: 0 }, B = S(), J = B && K > 0 && z > 0 ? f(K, z, B.width, B.height, V) : !1;
- if (!(V > 1.01 || J)) {
+ const Y = Number(r == null ? void 0 : r.zoom) || 1, N = I(), { w: U, h: z } = A(N) || { w: 0, h: 0 }, T = h(), J = T && U > 0 && z > 0 ? f(U, z, T.width, T.height, Y) : !1;
+ if (!(Y > 1.01 || J)) {
t.style.cursor = "";
return;
}
t.style.cursor = "grab";
- } catch (V) {
- (N = console.debug) == null || N.call(console, V);
+ } catch (Y) {
+ (k = console.debug) == null || k.call(console, Y);
}
}, b = () => {
- var N, V, k, K, z;
+ var k, Y, N, U, z;
try {
g();
- const B = A(), J = G(), P = ((N = e == null ? void 0 : e.querySelectorAll) == null ? void 0 : N.call(e, ".mjr-viewer-media")) || [];
- for (const H of P)
+ const T = y(), J = G(), P = ((k = e == null ? void 0 : e.querySelectorAll) == null ? void 0 : k.call(e, ".mjr-viewer-media")) || [];
+ for (const E of P)
try {
- if (H != null && H._mjrDisableViewerTransform) continue;
- const $ = W(H, J), E = ((V = $ == null ? void 0 : $.getBoundingClientRect) == null ? void 0 : V.call($)) || null;
- if (E) {
- const oe = Number(E.width) || 0, M = Number(E.height) || 0;
- if (oe > 1 && M > 1) {
- const { w: j, h: O } = y(H) || { w: 0, h: 0 };
- if (j > 0 && O > 0) {
- const D = h(j, O, oe, M);
- D.w > 1 && D.h > 1 && (H.style.width = `${Math.round(D.w)}px`, H.style.height = `${Math.round(D.h)}px`);
+ if (E != null && E._mjrDisableViewerTransform) continue;
+ const $ = Z(E, J), H = ((Y = $ == null ? void 0 : $.getBoundingClientRect) == null ? void 0 : Y.call($)) || null;
+ if (H) {
+ const ne = Number(H.width) || 0, M = Number(H.height) || 0;
+ if (ne > 1 && M > 1) {
+ const { w: v, h: F } = A(E) || { w: 0, h: 0 };
+ if (v > 0 && F > 0) {
+ const D = C(v, F, ne, M);
+ D.w > 1 && D.h > 1 && (E.style.width = `${Math.round(D.w)}px`, E.style.height = `${Math.round(D.h)}px`);
}
}
}
- H.style.transform = B;
+ E.style.transform = T;
} catch ($) {
- (k = console.debug) == null || k.call(console, $);
+ (N = console.debug) == null || N.call(console, $);
}
try {
a == null || a(!0);
- } catch (H) {
- (K = console.debug) == null || K.call(console, H);
+ } catch (E) {
+ (U = console.debug) == null || U.call(console, E);
}
- } catch (B) {
- (z = console.debug) == null || z.call(console, B);
+ } catch (T) {
+ (z = console.debug) == null || z.call(console, T);
}
- }, L = (N, { clientX: V = null, clientY: k = null } = {}) => {
- var K, z, B, J;
+ }, L = (k, { clientX: Y = null, clientY: N = null } = {}) => {
+ var U, z, T, J;
try {
const P = Math.max(
si.MIN,
Math.min(si.MAX, Number(r == null ? void 0 : r.zoom) || 1)
- ), H = Math.max(
+ ), E = Math.max(
si.MIN,
- Math.min(si.MAX, Number(N) || P)
+ Math.min(si.MAX, Number(k) || P)
);
try {
r._userInteracted = !0;
} catch (M) {
- (K = console.debug) == null || K.call(console, M);
+ (U = console.debug) == null || U.call(console, M);
}
- let $ = Number(r == null ? void 0 : r.panX) || 0, E = Number(r == null ? void 0 : r.panY) || 0;
- if (V != null && k != null && Number.isFinite(Number(V)) && Number.isFinite(Number(k)))
+ let $ = Number(r == null ? void 0 : r.panX) || 0, H = Number(r == null ? void 0 : r.panY) || 0;
+ if (Y != null && N != null && Number.isFinite(Number(Y)) && Number.isFinite(Number(N)))
try {
const M = (z = t == null ? void 0 : t.getBoundingClientRect) == null ? void 0 : z.call(t);
if (M && M.width > 0 && M.height > 0) {
- const j = M.left + M.width / 2, O = M.top + M.height / 2, D = (Number(V) || 0) - j, q = (Number(k) || 0) - O, ee = H / P;
- $ = Math.round(((Number(r == null ? void 0 : r.panX) || 0) * ee + (1 - ee) * D) * 10) / 10, E = Math.round(((Number(r == null ? void 0 : r.panY) || 0) * ee + (1 - ee) * q) * 10) / 10;
+ const v = M.left + M.width / 2, F = M.top + M.height / 2, D = (Number(Y) || 0) - v, q = (Number(N) || 0) - F, ee = E / P;
+ $ = Math.round(((Number(r == null ? void 0 : r.panX) || 0) * ee + (1 - ee) * D) * 10) / 10, H = Math.round(((Number(r == null ? void 0 : r.panY) || 0) * ee + (1 - ee) * q) * 10) / 10;
}
} catch (M) {
- (B = console.debug) == null || B.call(console, M);
+ (T = console.debug) == null || T.call(console, M);
}
- else if (H !== P) {
- const M = H / P;
- $ = Math.round((Number(r == null ? void 0 : r.panX) || 0) * M * 10) / 10, E = Math.round((Number(r == null ? void 0 : r.panY) || 0) * M * 10) / 10;
+ else if (E !== P) {
+ const M = E / P;
+ $ = Math.round((Number(r == null ? void 0 : r.panX) || 0) * M * 10) / 10, H = Math.round((Number(r == null ? void 0 : r.panY) || 0) * M * 10) / 10;
}
- r.zoom = H, r.panX = $, r.panY = E, Math.abs(r.zoom - 1) < 1e-3 && (r.zoom = 1, r.panX = 0, r.panY = 0), r.targetZoom = r.zoom, b(), p();
+ r.zoom = E, r.panX = $, r.panY = H, Math.abs(r.zoom - 1) < 1e-3 && (r.zoom = 1, r.panX = 0, r.panY = 0), r.targetZoom = r.zoom, b(), p();
} catch (P) {
(J = console.debug) == null || J.call(console, P);
}
- }, h = (N, V, k, K) => {
+ }, C = (k, Y, N, U) => {
try {
- const z = Number(N) || 0, B = Number(V) || 0, J = Number(k) || 0, P = Number(K) || 0;
- if (!(z > 0 && B > 0 && J > 0 && P > 0)) return { w: 0, h: 0 };
- const H = z / B;
- return !Number.isFinite(H) || H <= 0 ? { w: 0, h: 0 } : { w: P * H, h: P };
+ const z = Number(k) || 0, T = Number(Y) || 0, J = Number(N) || 0, P = Number(U) || 0;
+ if (!(z > 0 && T > 0 && J > 0 && P > 0)) return { w: 0, h: 0 };
+ const E = z / T;
+ return !Number.isFinite(E) || E <= 0 ? { w: 0, h: 0 } : { w: P * E, h: P };
} catch {
return { w: 0, h: 0 };
}
}, G = () => {
try {
- const N = r == null ? void 0 : r.mode;
- return N === (l == null ? void 0 : l.AB_COMPARE) ? i || t || null : N === (l == null ? void 0 : l.SIDE_BY_SIDE) ? o || t || null : n || t || null;
+ const k = r == null ? void 0 : r.mode;
+ return k === (l == null ? void 0 : l.AB_COMPARE) ? i || t || null : k === (l == null ? void 0 : l.SIDE_BY_SIDE) ? o || t || null : n || t || null;
} catch {
return t || null;
}
- }, W = (N, V) => {
+ }, Z = (k, Y) => {
try {
- if (!N) return V || null;
- const k = r == null ? void 0 : r.mode;
- if (k === (l == null ? void 0 : l.SIDE_BY_SIDE) || k === (l == null ? void 0 : l.AB_COMPARE)) {
- let K = N;
- for (; K && K !== V && K.parentElement; ) {
- if (K.parentElement === V) return K;
- K = K.parentElement;
+ if (!k) return Y || null;
+ const N = r == null ? void 0 : r.mode;
+ if (N === (l == null ? void 0 : l.SIDE_BY_SIDE) || N === (l == null ? void 0 : l.AB_COMPARE)) {
+ let U = k;
+ for (; U && U !== Y && U.parentElement; ) {
+ if (U.parentElement === Y) return U;
+ U = U.parentElement;
}
- return V || null;
+ return Y || null;
}
- return V || t || null;
+ return Y || t || null;
} catch {
- return V || t || null;
+ return Y || t || null;
}
- }, f = (N, V, k, K, z) => {
+ }, f = (k, Y, N, U, z) => {
try {
- const B = h(N, V, k, K);
- if (!(B.w > 0 && B.h > 0)) return !1;
- const J = Math.max(si.MIN, Math.min(si.MAX, Number(z) || 1)), P = B.w * J, H = B.h * J;
- return P > (Number(k) || 0) + 1 || H > (Number(K) || 0) + 1;
+ const T = C(k, Y, N, U);
+ if (!(T.w > 0 && T.h > 0)) return !1;
+ const J = Math.max(si.MIN, Math.min(si.MAX, Number(z) || 1)), P = T.w * J, E = T.h * J;
+ return P > (Number(N) || 0) + 1 || E > (Number(U) || 0) + 1;
} catch {
return !1;
}
}, X = () => {
try {
- const N = I();
- if (!N) return null;
- const { w: V, h: k } = y(N);
- if (!(V > 0 && k > 0)) return null;
- const K = S();
- if (!K) return null;
- const z = h(V, k, K.width, K.height);
+ const k = I();
+ if (!k) return null;
+ const { w: Y, h: N } = A(k);
+ if (!(Y > 0 && N > 0)) return null;
+ const U = h();
+ if (!U) return null;
+ const z = C(Y, N, U.width, U.height);
if (!(z.w > 0 && z.h > 0)) return null;
- const B = V / z.w;
- return !Number.isFinite(B) || B <= 0 ? null : Math.max(si.MIN, Math.min(si.MAX, B));
+ const T = Y / z.w;
+ return !Number.isFinite(T) || T <= 0 ? null : Math.max(si.MIN, Math.min(si.MAX, T));
} catch {
return null;
}
@@ -17049,162 +17076,162 @@ function FA({
startY: 0,
startPanX: 0,
startPanY: 0
- }, T = (N) => {
- var J, P, H, $, E, oe, M, j, O, D, q, ee, ce, ue, U, Q, _, le, de;
- if (!e || e.style.display === "none" || wc(N == null ? void 0 : N.target)) return;
- const V = Number(r == null ? void 0 : r.zoom) || 1, k = (() => {
+ }, K = (k) => {
+ var J, P, E, $, H, ne, M, v, F, D, q, ee, ae, ue, B, Q, _, le, ce;
+ if (!e || e.style.display === "none" || Mc(k == null ? void 0 : k.target)) return;
+ const Y = Number(r == null ? void 0 : r.zoom) || 1, N = (() => {
try {
- return !!(fe != null && fe.VIEWER_ALLOW_PAN_AT_ZOOM_1);
+ return !!(he != null && he.VIEWER_ALLOW_PAN_AT_ZOOM_1);
} catch {
return !1;
}
})();
if (!(() => {
try {
- if (k) return !0;
- const se = I(), { w: ge, h: je } = y(se) || { w: 0, h: 0 }, Se = S();
- return !Se || !(ge > 0 && je > 0) ? V > 1.01 : V > 1.01 || f(ge, je, Se.width, Se.height, V);
+ if (N) return !0;
+ const de = I(), { w: ge, h: Le } = A(de) || { w: 0, h: 0 }, xe = h();
+ return !xe || !(ge > 0 && Le > 0) ? Y > 1.01 : Y > 1.01 || f(ge, Le, xe.width, xe.height, Y);
} catch {
- return V > 1.01;
+ return Y > 1.01;
}
})()) {
try {
- r._panHintAt = Date.now(), r._panHintX = (N == null ? void 0 : N.clientX) ?? null, r._panHintY = (N == null ? void 0 : N.clientY) ?? null;
- } catch (se) {
- (J = console.debug) == null || J.call(console, se);
+ r._panHintAt = Date.now(), r._panHintX = (k == null ? void 0 : k.clientX) ?? null, r._panHintY = (k == null ? void 0 : k.clientY) ?? null;
+ } catch (de) {
+ (J = console.debug) == null || J.call(console, de);
}
try {
r._panHintTimer && clearTimeout(r._panHintTimer);
- } catch (se) {
- (P = console.debug) == null || P.call(console, se);
+ } catch (de) {
+ (P = console.debug) == null || P.call(console, de);
}
try {
r._panHintTimer = setTimeout(() => {
- var se;
+ var de;
try {
r._panHintAt = 0;
} catch (ge) {
- (se = console.debug) == null || se.call(console, ge);
+ (de = console.debug) == null || de.call(console, ge);
}
s(a);
}, 950);
- } catch (se) {
- (H = console.debug) == null || H.call(console, se);
+ } catch (de) {
+ (E = console.debug) == null || E.call(console, de);
}
s(a);
return;
}
- const z = N.button === 0, B = N.button === 1;
- if (!(!z && !B)) {
+ const z = k.button === 0, T = k.button === 1;
+ if (!(!z && !T)) {
try {
- const se = N.target;
- if (se && (se.tagName === "INPUT" || se.tagName === "TEXTAREA" || se.tagName === "SELECT" || se.isContentEditable))
+ const de = k.target;
+ if (de && (de.tagName === "INPUT" || de.tagName === "TEXTAREA" || de.tagName === "SELECT" || de.isContentEditable))
return;
- } catch (se) {
- ($ = console.debug) == null || $.call(console, se);
+ } catch (de) {
+ ($ = console.debug) == null || $.call(console, de);
}
try {
- if ((oe = (E = N == null ? void 0 : N.target) == null ? void 0 : E.closest) != null && oe.call(E, ".mjr-video-controls") || (j = (M = N == null ? void 0 : N.target) == null ? void 0 : M.closest) != null && j.call(M, ".mjr-context-menu") || (D = (O = N == null ? void 0 : N.target) == null ? void 0 : O.closest) != null && D.call(O, ".mjr-ab-slider") || wc(N == null ? void 0 : N.target)) return;
- } catch (se) {
- (q = console.debug) == null || q.call(console, se);
+ if ((ne = (H = k == null ? void 0 : k.target) == null ? void 0 : H.closest) != null && ne.call(H, ".mjr-video-controls") || (v = (M = k == null ? void 0 : k.target) == null ? void 0 : M.closest) != null && v.call(M, ".mjr-context-menu") || (D = (F = k == null ? void 0 : k.target) == null ? void 0 : F.closest) != null && D.call(F, ".mjr-ab-slider") || Mc(k == null ? void 0 : k.target)) return;
+ } catch (de) {
+ (q = console.debug) == null || q.call(console, de);
}
try {
- if (!((ee = t == null ? void 0 : t.contains) != null && ee.call(t, N.target))) return;
+ if (!((ee = t == null ? void 0 : t.contains) != null && ee.call(t, k.target))) return;
} catch {
return;
}
x.active = !0;
try {
r._userInteracted = !0;
- } catch (se) {
- (ce = console.debug) == null || ce.call(console, se);
+ } catch (de) {
+ (ae = console.debug) == null || ae.call(console, de);
}
- x.pointerId = N.pointerId;
+ x.pointerId = k.pointerId;
try {
- r._lastPointerX = N.clientX, r._lastPointerY = N.clientY;
- } catch (se) {
- (ue = console.debug) == null || ue.call(console, se);
+ r._lastPointerX = k.clientX, r._lastPointerY = k.clientY;
+ } catch (de) {
+ (ue = console.debug) == null || ue.call(console, de);
}
- x.startX = N.clientX, x.startY = N.clientY, x.startPanX = Number(r == null ? void 0 : r.panX) || 0, x.startPanY = Number(r == null ? void 0 : r.panY) || 0;
+ x.startX = k.clientX, x.startY = k.clientY, x.startPanX = Number(r == null ? void 0 : r.panX) || 0, x.startPanY = Number(r == null ? void 0 : r.panY) || 0;
try {
- N.preventDefault(), N.stopPropagation(), (U = N.stopImmediatePropagation) == null || U.call(N);
- } catch (se) {
- (Q = console.debug) == null || Q.call(console, se);
+ k.preventDefault(), k.stopPropagation(), (B = k.stopImmediatePropagation) == null || B.call(k);
+ } catch (de) {
+ (Q = console.debug) == null || Q.call(console, de);
}
try {
- (_ = t == null ? void 0 : t.setPointerCapture) == null || _.call(t, N.pointerId);
- } catch (se) {
- (le = console.debug) == null || le.call(console, se);
+ (_ = t == null ? void 0 : t.setPointerCapture) == null || _.call(t, k.pointerId);
+ } catch (de) {
+ (le = console.debug) == null || le.call(console, de);
}
try {
t && (t.style.cursor = "grabbing");
- } catch (se) {
- (de = console.debug) == null || de.call(console, se);
+ } catch (de) {
+ (ce = console.debug) == null || ce.call(console, de);
}
}
- }, v = (N) => {
- var B, J, P, H, $, E;
+ }, j = (k) => {
+ var T, J, P, E, $, H;
if (!x.active) return;
try {
- if ((J = (B = N == null ? void 0 : N.target) == null ? void 0 : B.closest) != null && J.call(B, ".mjr-video-controls")) return;
- } catch (oe) {
- (P = console.debug) == null || P.call(console, oe);
+ if ((J = (T = k == null ? void 0 : k.target) == null ? void 0 : T.closest) != null && J.call(T, ".mjr-video-controls")) return;
+ } catch (ne) {
+ (P = console.debug) == null || P.call(console, ne);
}
try {
- N.preventDefault(), N.stopPropagation(), (H = N.stopImmediatePropagation) == null || H.call(N);
- } catch (oe) {
- ($ = console.debug) == null || $.call(console, oe);
+ k.preventDefault(), k.stopPropagation(), (E = k.stopImmediatePropagation) == null || E.call(k);
+ } catch (ne) {
+ ($ = console.debug) == null || $.call(console, ne);
}
- const V = (Number(N.clientX) || 0) - x.startX, k = (Number(N.clientY) || 0) - x.startY, K = Math.max(si.MIN, Math.min(si.MAX, Number(r == null ? void 0 : r.zoom) || 1)), z = Math.max(1, K);
- r.panX = x.startPanX + V * z, r.panY = x.startPanY + k * z;
+ const Y = (Number(k.clientX) || 0) - x.startX, N = (Number(k.clientY) || 0) - x.startY, U = Math.max(si.MIN, Math.min(si.MAX, Number(r == null ? void 0 : r.zoom) || 1)), z = Math.max(1, U);
+ r.panX = x.startPanX + Y * z, r.panY = x.startPanY + N * z;
try {
- r._lastPointerX = N.clientX, r._lastPointerY = N.clientY;
- } catch (oe) {
- (E = console.debug) == null || E.call(console, oe);
+ r._lastPointerX = k.clientX, r._lastPointerY = k.clientY;
+ } catch (ne) {
+ (H = console.debug) == null || H.call(console, ne);
}
b(), p();
- }, w = (N) => {
- var V, k;
+ }, w = (k) => {
+ var Y, N;
if (x.active) {
x.active = !1, x.pointerId = null;
try {
- (V = t == null ? void 0 : t.releasePointerCapture) == null || V.call(t, N.pointerId);
- } catch (K) {
- (k = console.debug) == null || k.call(console, K);
+ (Y = t == null ? void 0 : t.releasePointerCapture) == null || Y.call(t, k.pointerId);
+ } catch (U) {
+ (N = console.debug) == null || N.call(console, U);
}
p();
}
- }, R = (N) => {
- var k, K, z, B, J;
+ }, R = (k) => {
+ var N, U, z, T, J;
if (!e || e.style.display === "none") return;
try {
- if (!((k = t == null ? void 0 : t.contains) != null && k.call(t, N.target))) return;
+ if (!((N = t == null ? void 0 : t.contains) != null && N.call(t, k.target))) return;
} catch (P) {
- (K = console.debug) == null || K.call(console, P);
+ (U = console.debug) == null || U.call(console, P);
}
try {
- if (wc(N == null ? void 0 : N.target)) return;
+ if (Mc(k == null ? void 0 : k.target)) return;
} catch (P) {
(z = console.debug) == null || z.call(console, P);
}
try {
- N.preventDefault(), N.stopPropagation(), (B = N.stopImmediatePropagation) == null || B.call(N);
+ k.preventDefault(), k.stopPropagation(), (T = k.stopImmediatePropagation) == null || T.call(k);
} catch (P) {
(J = console.debug) == null || J.call(console, P);
}
Math.abs((Number(r == null ? void 0 : r.targetZoom) || 1) - 1) < 0.01 ? L(Math.min(8, (Number(r == null ? void 0 : r.targetZoom) || 1) * 4), {
- clientX: N.clientX,
- clientY: N.clientY
- }) : L(1, { clientX: N.clientX, clientY: N.clientY });
+ clientX: k.clientX,
+ clientY: k.clientY
+ }) : L(1, { clientX: k.clientX, clientY: k.clientY });
};
try {
t && !t._mjrPanBound && (u.push(
- d(t, "pointerdown", T, {
+ d(t, "pointerdown", K, {
passive: !1,
capture: !0
})
), u.push(
- d(t, "pointermove", v, {
+ d(t, "pointermove", j, {
passive: !1,
capture: !0
})
@@ -17219,8 +17246,8 @@ function FA({
capture: !0
})
), t._mjrPanBound = !0);
- } catch (N) {
- (Y = console.debug) == null || Y.call(console, N);
+ } catch (k) {
+ (V = console.debug) == null || V.call(console, k);
}
try {
t && !t._mjrDblClickResetBound && (u.push(
@@ -17229,17 +17256,17 @@ function FA({
capture: !0
})
), t._mjrDblClickResetBound = !0);
- } catch (N) {
- (F = console.debug) == null || F.call(console, N);
+ } catch (k) {
+ (O = console.debug) == null || O.call(console, k);
}
return {
getPrimaryMedia: I,
- getMediaNaturalSize: y,
- getViewportRect: S,
- updateMediaNaturalSize: Z,
- attachMediaLoadHandlers: C,
+ getMediaNaturalSize: A,
+ getViewportRect: h,
+ updateMediaNaturalSize: S,
+ attachMediaLoadHandlers: W,
clampPanToBounds: g,
- mediaTransform: A,
+ mediaTransform: y,
applyTransform: b,
setZoom: L,
computeOneToOneZoom: X,
@@ -17251,7 +17278,7 @@ function FA({
}
};
}
-const OA = `
+const FA = `
attribute vec2 a_position;
varying vec2 v_uv;
void main() {
@@ -17314,7 +17341,7 @@ void main() {
}
}
`;
-function Nu(e, t, n) {
+function ku(e, t, n) {
const i = e.createShader(t);
return e.shaderSource(i, n), e.compileShader(i), e.getShaderParameter(i, e.COMPILE_STATUS) ? i : (console.warn("WebGL Shader Error:", e.getShaderInfoLog(i)), e.deleteShader(i), null);
}
@@ -17340,7 +17367,7 @@ function TA() {
return !1;
}
}
-function BA(e) {
+function KA(e) {
const { canvas: t, videoEl: n, getGradeParams: i } = e;
let o = null, r = null, l = 4096, a = !1;
const c = {
@@ -17349,31 +17376,31 @@ function BA(e) {
};
function s() {
var p, b;
- let A = null;
+ let y = null;
try {
- A = t.getContext("webgl", { alpha: !1, preserveDrawingBuffer: !0 });
+ y = t.getContext("webgl", { alpha: !1, preserveDrawingBuffer: !0 });
} catch (L) {
(p = console.debug) == null || p.call(console, L);
}
- if (!A)
+ if (!y)
try {
- A = t.getContext("experimental-webgl", {
+ y = t.getContext("experimental-webgl", {
alpha: !1,
preserveDrawingBuffer: !0
});
} catch (L) {
(b = console.debug) == null || b.call(console, L);
}
- return A && (l = A.getParameter(A.MAX_TEXTURE_SIZE) || 4096), A;
+ return y && (l = y.getParameter(y.MAX_TEXTURE_SIZE) || 4096), y;
}
- const d = (A = "") => {
+ const d = (y = "") => {
if (!o) return;
const p = o.getError();
- p !== o.NO_ERROR && console.error(`WebGL Error [${A}]: ${p}`);
+ p !== o.NO_ERROR && console.error(`WebGL Error [${y}]: ${p}`);
}, u = () => {
- var L, h, G, W, f, X;
+ var L, C, G, Z, f, X;
if (!o || !r) return;
- const { positionBuffer: A, texture: p, program: b } = r;
+ const { positionBuffer: y, texture: p, program: b } = r;
try {
o.bindTexture(o.TEXTURE_2D, null);
} catch (x) {
@@ -17382,7 +17409,7 @@ function BA(e) {
try {
o.bindBuffer(o.ARRAY_BUFFER, null);
} catch (x) {
- (h = console.debug) == null || h.call(console, x);
+ (C = console.debug) == null || C.call(console, x);
}
try {
o.useProgram(null);
@@ -17392,10 +17419,10 @@ function BA(e) {
try {
o.deleteTexture(p);
} catch (x) {
- (W = console.debug) == null || W.call(console, x);
+ (Z = console.debug) == null || Z.call(console, x);
}
try {
- o.deleteBuffer(A);
+ o.deleteBuffer(y);
} catch (x) {
(f = console.debug) == null || f.call(console, x);
}
@@ -17408,11 +17435,11 @@ function BA(e) {
}, I = () => {
if (!o) return null;
u();
- const A = Nu(o, o.VERTEX_SHADER, OA), p = Nu(o, o.FRAGMENT_SHADER, zA);
- if (!A || !p)
- return A && o.deleteShader(A), p && o.deleteShader(p), null;
- const b = JA(o, A, p);
- if (o.deleteShader(A), o.deleteShader(p), !b)
+ const y = ku(o, o.VERTEX_SHADER, FA), p = ku(o, o.FRAGMENT_SHADER, zA);
+ if (!y || !p)
+ return y && o.deleteShader(y), p && o.deleteShader(p), null;
+ const b = JA(o, y, p);
+ if (o.deleteShader(y), o.deleteShader(p), !b)
return null;
d("setupResources:createProgram");
const L = {
@@ -17424,56 +17451,56 @@ function BA(e) {
u_analysis: o.getUniformLocation(b, "u_analysis"),
u_thresh: o.getUniformLocation(b, "u_zebra_threshold"),
u_res: o.getUniformLocation(b, "u_resolution")
- }, h = o.createBuffer();
- o.bindBuffer(o.ARRAY_BUFFER, h), o.bufferData(
+ }, C = o.createBuffer();
+ o.bindBuffer(o.ARRAY_BUFFER, C), o.bufferData(
o.ARRAY_BUFFER,
new Float32Array([-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1]),
o.STATIC_DRAW
), d("setupResources:bufferData");
const G = o.createTexture();
- return o.bindTexture(o.TEXTURE_2D, G), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_WRAP_S, o.CLAMP_TO_EDGE), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_WRAP_T, o.CLAMP_TO_EDGE), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_MIN_FILTER, o.LINEAR), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_MAG_FILTER, o.LINEAR), d("setupResources:texSetup"), { program: b, loc: L, positionBuffer: h, texture: G };
- }, y = () => a || c._destroyed || (o || (o = s()), !o) ? !1 : (r || (r = I()), !!r), S = () => {
+ return o.bindTexture(o.TEXTURE_2D, G), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_WRAP_S, o.CLAMP_TO_EDGE), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_WRAP_T, o.CLAMP_TO_EDGE), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_MIN_FILTER, o.LINEAR), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_MAG_FILTER, o.LINEAR), d("setupResources:texSetup"), { program: b, loc: L, positionBuffer: C, texture: G };
+ }, A = () => a || c._destroyed || (o || (o = s()), !o) ? !1 : (r || (r = I()), !!r), h = () => {
if (!a && o && (n != null && n.videoWidth)) {
- let A = n.videoWidth, p = n.videoHeight;
+ let y = n.videoWidth, p = n.videoHeight;
const b = l || o.getParameter(o.MAX_TEXTURE_SIZE) || 4096;
- if (A > b || p > b) {
- const L = Math.min(b / A, b / p);
- A = Math.floor(A * L), p = Math.floor(p * L);
+ if (y > b || p > b) {
+ const L = Math.min(b / y, b / p);
+ y = Math.floor(y * L), p = Math.floor(p * L);
}
- return (t.width !== A || t.height !== p) && (t.width = A, t.height = p, o.viewport(0, 0, A, p)), !0;
+ return (t.width !== y || t.height !== p) && (t.width = y, t.height = p, o.viewport(0, 0, y, p)), !0;
}
return !1;
- }, Z = (A) => {
- if (!a && y() && S()) {
- const { program: p, loc: b, positionBuffer: L, texture: h } = r;
- o.useProgram(p), o.activeTexture(o.TEXTURE0), o.bindTexture(o.TEXTURE_2D, h);
+ }, S = (y) => {
+ if (!a && A() && h()) {
+ const { program: p, loc: b, positionBuffer: L, texture: C } = r;
+ o.useProgram(p), o.activeTexture(o.TEXTURE0), o.bindTexture(o.TEXTURE_2D, C);
try {
o.texImage2D(o.TEXTURE_2D, 0, o.RGBA, o.RGBA, o.UNSIGNED_BYTE, n);
- } catch (T) {
- console.warn("WebGL texImage2D failed", T), d("texImage2D");
+ } catch (K) {
+ console.warn("WebGL texImage2D failed", K), d("texImage2D");
return;
}
d("texImage2D"), o.uniform1i(b.u_image, 0);
- const G = A || (i ? i() : {}), W = Number(G.exposureEV) || 0, f = Math.max(0.1, Math.min(3, Number(G.gamma) || 1)), X = G.analysisMode === "zebra" ? 1 : 0;
+ const G = y || (i ? i() : {}), Z = Number(G.exposureEV) || 0, f = Math.max(0.1, Math.min(3, Number(G.gamma) || 1)), X = G.analysisMode === "zebra" ? 1 : 0;
let x = 0;
- G.channel === "r" && (x = 1), G.channel === "g" && (x = 2), G.channel === "b" && (x = 3), o.uniform1f(b.u_exposure, Math.pow(2, W)), o.uniform1f(b.u_gamma, 1 / f), o.uniform1i(b.u_channel, x), o.uniform1i(b.u_analysis, X), o.uniform1f(b.u_thresh, G.zebraThreshold ?? 0.95), o.uniform2f(b.u_res, t.width, t.height), o.enableVertexAttribArray(b.position), o.bindBuffer(o.ARRAY_BUFFER, L), o.vertexAttribPointer(b.position, 2, o.FLOAT, !1, 0, 0), o.drawArrays(o.TRIANGLES, 0, 6), d("drawArrays");
+ G.channel === "r" && (x = 1), G.channel === "g" && (x = 2), G.channel === "b" && (x = 3), o.uniform1f(b.u_exposure, Math.pow(2, Z)), o.uniform1f(b.u_gamma, 1 / f), o.uniform1i(b.u_channel, x), o.uniform1i(b.u_analysis, X), o.uniform1f(b.u_thresh, G.zebraThreshold ?? 0.95), o.uniform2f(b.u_res, t.width, t.height), o.enableVertexAttribArray(b.position), o.bindBuffer(o.ARRAY_BUFFER, L), o.vertexAttribPointer(b.position, 2, o.FLOAT, !1, 0, 0), o.drawArrays(o.TRIANGLES, 0, 6), d("drawArrays");
}
- }, C = (A) => {
- A.preventDefault(), a = !0, u();
+ }, W = (y) => {
+ y.preventDefault(), a = !0, u();
}, g = () => {
- o = s(), a = !1, r = null, y();
+ o = s(), a = !1, r = null, A();
};
- return t.addEventListener("webglcontextlost", C), t.addEventListener("webglcontextrestored", g), {
- update: Z,
+ return t.addEventListener("webglcontextlost", W), t.addEventListener("webglcontextrestored", g), {
+ update: S,
destroy: () => {
- var A, p, b;
+ var y, p, b;
if (c._destroyed = !0, c.ready = !1, u(), o)
try {
- (p = (A = o.getExtension("WEBGL_lose_context")) == null ? void 0 : A.loseContext) == null || p.call(A);
+ (p = (y = o.getExtension("WEBGL_lose_context")) == null ? void 0 : y.loseContext) == null || p.call(y);
} catch (L) {
(b = console.debug) == null || b.call(console, L);
}
- t.removeEventListener("webglcontextlost", C), t.removeEventListener("webglcontextrestored", g);
+ t.removeEventListener("webglcontextlost", W), t.removeEventListener("webglcontextrestored", g);
}
};
}
@@ -17491,12 +17518,12 @@ function Ru({
safeCall: d,
onReady: u
} = {}) {
- var k, K;
- const I = i == null ? !!(fe != null && fe.VIEWER_PAUSE_DURING_EXECUTION) : !!i;
- let y = null;
+ var N, U;
+ const I = i == null ? !!(he != null && he.VIEWER_PAUSE_DURING_EXECUTION) : !!i;
+ let A = null;
if (!n && TA())
try {
- y = BA({
+ A = KA({
canvas: e,
videoEl: t,
getGradeParams: o,
@@ -17504,23 +17531,23 @@ function Ru({
maxProcPixelsVideo: a
});
} catch (z) {
- console.warn("WebGL Init failed, falling back to 2D", z), y = null;
+ console.warn("WebGL Init failed, falling back to 2D", z), A = null;
}
- const S = y ? null : (() => {
+ const h = A ? null : (() => {
try {
return e.getContext("2d", { willReadFrequently: !0, alpha: !1 });
} catch {
return null;
}
- })(), Z = document.createElement("canvas"), C = (() => {
+ })(), S = document.createElement("canvas"), W = (() => {
try {
- return Z.getContext("2d", { willReadFrequently: !0, alpha: !1 });
+ return S.getContext("2d", { willReadFrequently: !0, alpha: !1 });
} catch {
return null;
}
})(), g = document.createElement("canvas");
g.width = 1, g.height = 1;
- const A = (() => {
+ const y = (() => {
try {
return g.getContext("2d", { willReadFrequently: !0, alpha: !1 });
} catch {
@@ -17547,76 +17574,76 @@ function Ru({
_lastFrameTime: -1,
_lastHeavySig: "",
_runtimePaused: !1
- }, b = [], L = (z, B) => nb(a, z, B), h = () => {
+ }, b = [], L = (z, T) => nb(a, z, T), C = () => {
try {
- const z = Number(t == null ? void 0 : t.videoWidth) || 0, B = Number(t == null ? void 0 : t.videoHeight) || 0;
- if (!(z > 0 && B > 0)) return !1;
- p.naturalW = z, p.naturalH = B, p.scale = L(z, B);
- const J = Math.max(1, Math.round(z * p.scale)), P = Math.max(1, Math.round(B * p.scale));
- return Z.width !== J && (Z.width = J), Z.height !== P && (Z.height = P), y || (e.width !== J && (e.width = J), e.height !== P && (e.height = P)), e._mjrNaturalW = z, e._mjrNaturalH = B, e._mjrPixelScale = p.scale, p.ready = !0, !0;
+ const z = Number(t == null ? void 0 : t.videoWidth) || 0, T = Number(t == null ? void 0 : t.videoHeight) || 0;
+ if (!(z > 0 && T > 0)) return !1;
+ p.naturalW = z, p.naturalH = T, p.scale = L(z, T);
+ const J = Math.max(1, Math.round(z * p.scale)), P = Math.max(1, Math.round(T * p.scale));
+ return S.width !== J && (S.width = J), S.height !== P && (S.height = P), A || (e.width !== J && (e.width = J), e.height !== P && (e.height = P)), e._mjrNaturalW = z, e._mjrNaturalH = T, e._mjrPixelScale = p.scale, p.ready = !0, !0;
} catch {
return !1;
}
}, G = () => {
- if (!C || !p.ready) return !1;
+ if (!W || !p.ready) return !1;
try {
- return C.drawImage(t, 0, 0, Z.width, Z.height), !0;
+ return W.drawImage(t, 0, 0, S.width, S.height), !0;
} catch {
return !1;
}
- }, W = () => {
- var U, Q, _;
+ }, Z = () => {
+ var B, Q, _;
if (!p.ready) return;
const z = p.lastParams || (o == null ? void 0 : o()) || {};
- if (y) {
- y.update(z);
+ if (A) {
+ A.update(z);
return;
}
- if (!S || !C) return;
+ if (!h || !W) return;
if (r != null && r(z)) {
try {
- S.clearRect(0, 0, e.width, e.height), S.drawImage(t, 0, 0, e.width, e.height);
+ h.clearRect(0, 0, e.width, e.height), h.drawImage(t, 0, 0, e.width, e.height);
} catch (le) {
- (U = console.debug) == null || U.call(console, le);
+ (B = console.debug) == null || B.call(console, le);
}
return;
}
if (!G()) return;
- let B;
+ let T;
try {
- B = C.getImageData(0, 0, Z.width, Z.height);
+ T = W.getImageData(0, 0, S.width, S.height);
} catch {
try {
- S.clearRect(0, 0, e.width, e.height), S.drawImage(t, 0, 0, e.width, e.height);
+ h.clearRect(0, 0, e.width, e.height), h.drawImage(t, 0, 0, e.width, e.height);
} catch (le) {
(Q = console.debug) == null || Q.call(console, le);
}
return;
}
- const J = Z.width, P = Z.height;
- let H = p._buffer;
- if (!H || H.width !== J || H.height !== P)
+ const J = S.width, P = S.height;
+ let E = p._buffer;
+ if (!E || E.width !== J || E.height !== P)
try {
- H = S.createImageData(J, P), p._buffer = H;
+ E = h.createImageData(J, P), p._buffer = E;
} catch {
try {
- H = new ImageData(J, P), p._buffer = H;
+ E = new ImageData(J, P), p._buffer = E;
} catch {
return;
}
}
- if (!H) return;
- const $ = Number(z.exposureEV) || 0, oe = 1 / Math.max(0.1, Math.min(3, Number(z.gamma) || 1)), M = String(z.channel || "rgb"), j = String(z.analysisMode || "none"), O = In(z.zebraThreshold ?? 0.95), D = Math.pow(2, $), q = B.data, ee = H.data, ce = j !== "zebra" && M === "rgb";
+ if (!E) return;
+ const $ = Number(z.exposureEV) || 0, ne = 1 / Math.max(0.1, Math.min(3, Number(z.gamma) || 1)), M = String(z.channel || "rgb"), v = String(z.analysisMode || "none"), F = pn(z.zebraThreshold ?? 0.95), D = Math.pow(2, $), q = T.data, ee = E.data, ae = v !== "zebra" && M === "rgb";
let ue = null;
- if (ce) {
- const le = `${D.toFixed(6)}|${oe.toFixed(6)}`;
+ if (ae) {
+ const le = `${D.toFixed(6)}|${ne.toFixed(6)}`;
if (!p._lut || p._lutKey !== le) {
- const de = new Uint8ClampedArray(256);
- for (let se = 0; se < 256; se += 1) {
- const ge = se / 255;
- de[se] = Math.round(Math.pow(In(ge * D), oe) * 255);
+ const ce = new Uint8ClampedArray(256);
+ for (let de = 0; de < 256; de += 1) {
+ const ge = de / 255;
+ ce[de] = Math.round(Math.pow(pn(ge * D), ne) * 255);
}
- p._lut = de, p._lutKey = le;
+ p._lut = ce, p._lutKey = le;
}
ue = p._lut;
}
@@ -17625,62 +17652,62 @@ function Ru({
ee[le] = ue[q[le] ?? 0], ee[le + 1] = ue[q[le + 1] ?? 0], ee[le + 2] = ue[q[le + 2] ?? 0], ee[le + 3] = 255;
else
for (let le = 0; le < ee.length; le += 4) {
- const de = (q[le] ?? 0) / 255, se = (q[le + 1] ?? 0) / 255, ge = (q[le + 2] ?? 0) / 255, je = (q[le + 3] ?? 255) / 255;
- let Se = de * D, ke = se * D, we = ge * D;
- const Je = 0.2126 * Se + 0.7152 * ke + 0.0722 * we;
- if (j === "zebra")
- if (In(Je) >= O) {
+ const ce = (q[le] ?? 0) / 255, de = (q[le + 1] ?? 0) / 255, ge = (q[le + 2] ?? 0) / 255, Le = (q[le + 3] ?? 255) / 255;
+ let xe = ce * D, Xe = de * D, Me = ge * D;
+ const Fe = 0.2126 * xe + 0.7152 * Xe + 0.0722 * Me;
+ if (v === "zebra")
+ if (pn(Fe) >= F) {
const qe = (Math.floor(le / 4) % J + Math.floor(le / 4 / J) & 7) < 3;
- Se = qe ? 1 : 0, ke = qe ? 1 : 0, we = qe ? 1 : 0;
+ xe = qe ? 1 : 0, Xe = qe ? 1 : 0, Me = qe ? 1 : 0;
} else
- Se = Math.pow(In(Se), oe), ke = Math.pow(In(ke), oe), we = Math.pow(In(we), oe);
+ xe = Math.pow(pn(xe), ne), Xe = Math.pow(pn(Xe), ne), Me = Math.pow(pn(Me), ne);
else
- Se = Math.pow(In(Se), oe), ke = Math.pow(In(ke), oe), we = Math.pow(In(we), oe);
+ xe = Math.pow(pn(xe), ne), Xe = Math.pow(pn(Xe), ne), Me = Math.pow(pn(Me), ne);
if (M === "r")
- ke = Se, we = Se;
+ Xe = xe, Me = xe;
else if (M === "g")
- Se = ke, we = ke;
+ xe = Xe, Me = Xe;
else if (M === "b")
- Se = we, ke = we;
+ xe = Me, Xe = Me;
else if (M === "a")
- Se = je, ke = je, we = je;
+ xe = Le, Xe = Le, Me = Le;
else if (M === "l") {
- const $e = In(Je), qe = Math.pow($e, oe);
- Se = qe, ke = qe, we = qe;
+ const it = pn(Fe), qe = Math.pow(it, ne);
+ xe = qe, Xe = qe, Me = qe;
}
- ee[le] = Math.round(In(Se) * 255), ee[le + 1] = Math.round(In(ke) * 255), ee[le + 2] = Math.round(In(we) * 255), ee[le + 3] = 255;
+ ee[le] = Math.round(pn(xe) * 255), ee[le + 1] = Math.round(pn(Xe) * 255), ee[le + 2] = Math.round(pn(Me) * 255), ee[le + 3] = 255;
}
try {
- S.putImageData(H, 0, 0);
+ h.putImageData(E, 0, 0);
} catch (le) {
(_ = console.debug) == null || _.call(console, le);
}
}, f = () => {
var z;
- if (!p._destroyed && e != null && e.isConnected && (p.ready || h(), !!p.ready)) {
+ if (!p._destroyed && e != null && e.isConnected && (p.ready || C(), !!p.ready)) {
try {
- const B = p.lastParams || (o == null ? void 0 : o()) || {};
- if (!(r != null && r(B))) {
- const P = Number(t == null ? void 0 : t.currentTime) || 0, H = `${Number(B.exposureEV) || 0}|${Number(B.gamma) || 1}|${String(B.channel || "rgb")}|${String(B.analysisMode || "none")}|${Number(B.zebraThreshold ?? 0.95)}`;
- if (Math.abs(P - (Number(p._lastFrameTime) || 0)) < 1e-6 && H === String(p._lastHeavySig || ""))
+ const T = p.lastParams || (o == null ? void 0 : o()) || {};
+ if (!(r != null && r(T))) {
+ const P = Number(t == null ? void 0 : t.currentTime) || 0, E = `${Number(T.exposureEV) || 0}|${Number(T.gamma) || 1}|${String(T.channel || "rgb")}|${String(T.analysisMode || "none")}|${Number(T.zebraThreshold ?? 0.95)}`;
+ if (Math.abs(P - (Number(p._lastFrameTime) || 0)) < 1e-6 && E === String(p._lastHeavySig || ""))
return;
- p._lastFrameTime = P, p._lastHeavySig = H;
+ p._lastFrameTime = P, p._lastHeavySig = E;
}
- } catch (B) {
- (z = console.debug) == null || z.call(console, B);
+ } catch (T) {
+ (z = console.debug) == null || z.call(console, T);
}
- W();
+ Z();
}
}, X = () => {
var z;
if (!p._destroyed) {
try {
if (e != null && e.isConnected) {
- p._connectRAF = null, p._connectTries = 0, T();
+ p._connectRAF = null, p._connectTries = 0, K();
return;
}
- } catch (B) {
- (z = console.debug) == null || z.call(console, B);
+ } catch (T) {
+ (z = console.debug) == null || z.call(console, T);
}
if (p._connectRAF == null) {
if (p._connectTries = (Number(p._connectTries) || 0) + 1, p._connectTries > 20) {
@@ -17703,37 +17730,37 @@ function Ru({
} catch {
return 0;
}
- }, T = () => {
- var P, H;
+ }, K = () => {
+ var P, E;
if (p._destroyed || p._runtimePaused || p._rendering) return;
if (!(e != null && e.isConnected)) {
X();
return;
}
- const z = p.lastParams || (o == null ? void 0 : o()) || {}, B = !(r != null && r(z)), J = B && !(t != null && t.paused) ? x() : 0;
+ const z = p.lastParams || (o == null ? void 0 : o()) || {}, T = !(r != null && r(z)), J = T && !(t != null && t.paused) ? x() : 0;
if (J > 0) {
- const $ = Date.now(), E = (Number(p._lastHeavyRenderAt) || 0) + J;
- if ($ < E) {
+ const $ = Date.now(), H = (Number(p._lastHeavyRenderAt) || 0) + J;
+ if ($ < H) {
try {
p._throttleTimer && clearTimeout(p._throttleTimer);
- } catch (oe) {
- (P = console.debug) == null || P.call(console, oe);
+ } catch (ne) {
+ (P = console.debug) == null || P.call(console, ne);
}
try {
p._throttleTimer = setTimeout(
() => {
- var oe;
+ var ne;
try {
p._throttleTimer = null;
} catch (M) {
- (oe = console.debug) == null || oe.call(console, M);
+ (ne = console.debug) == null || ne.call(console, M);
}
- T();
+ K();
},
- Math.min(250, Math.max(0, E - $))
+ Math.min(250, Math.max(0, H - $))
);
- } catch (oe) {
- (H = console.debug) == null || H.call(console, oe);
+ } catch (ne) {
+ (E = console.debug) == null || E.call(console, ne);
}
return;
}
@@ -17744,241 +17771,241 @@ function Ru({
var $;
p._rafIdSchedule = null, p._rendering = !1, f();
try {
- B && (p._lastHeavyRenderAt = Date.now());
- } catch (E) {
- ($ = console.debug) == null || $.call(console, E);
+ T && (p._lastHeavyRenderAt = Date.now());
+ } catch (H) {
+ ($ = console.debug) == null || $.call(console, H);
}
});
} catch {
p._rendering = !1;
}
- }, v = () => {
- var B, J, P, H, $;
+ }, j = () => {
+ var T, J, P, E, $;
if (p._destroyed || p._runtimePaused) return;
try {
p._rvfc != null && typeof (t == null ? void 0 : t.cancelVideoFrameCallback) == "function" && (t.cancelVideoFrameCallback(p._rvfc), p._rvfc = null);
- } catch (E) {
- (B = console.debug) == null || B.call(console, E);
+ } catch (H) {
+ (T = console.debug) == null || T.call(console, H);
}
try {
p._rafIdLoop != null && (cancelAnimationFrame(p._rafIdLoop), p._rafIdLoop = null);
- } catch (E) {
- (J = console.debug) == null || J.call(console, E);
+ } catch (H) {
+ (J = console.debug) == null || J.call(console, H);
}
try {
if (typeof (t == null ? void 0 : t.requestVideoFrameCallback) == "function") {
- const E = () => {
- var oe;
- if (!p._destroyed && e != null && e.isConnected && (T(), !t.paused))
+ const H = () => {
+ var ne;
+ if (!p._destroyed && e != null && e.isConnected && (K(), !t.paused))
try {
- p._rvfc = t.requestVideoFrameCallback(E);
+ p._rvfc = t.requestVideoFrameCallback(H);
} catch (M) {
- (oe = console.debug) == null || oe.call(console, M);
+ (ne = console.debug) == null || ne.call(console, M);
}
};
try {
- p._rvfc = t.requestVideoFrameCallback(E);
- } catch (oe) {
- (P = console.debug) == null || P.call(console, oe);
+ p._rvfc = t.requestVideoFrameCallback(H);
+ } catch (ne) {
+ (P = console.debug) == null || P.call(console, ne);
}
return;
}
- } catch (E) {
- (H = console.debug) == null || H.call(console, E);
+ } catch (H) {
+ (E = console.debug) == null || E.call(console, H);
}
const z = () => {
- var E;
- if (!p._destroyed && e != null && e.isConnected && (T(), !t.paused))
+ var H;
+ if (!p._destroyed && e != null && e.isConnected && (K(), !t.paused))
try {
p._rafIdLoop = requestAnimationFrame(z);
- } catch (oe) {
- (E = console.debug) == null || E.call(console, oe);
+ } catch (ne) {
+ (H = console.debug) == null || H.call(console, ne);
}
};
try {
p._rafIdLoop = requestAnimationFrame(z);
- } catch (E) {
- ($ = console.debug) == null || $.call(console, E);
+ } catch (H) {
+ ($ = console.debug) == null || $.call(console, H);
}
}, w = (z) => {
- p.lastParams = z || p.lastParams || (o == null ? void 0 : o()), T();
+ p.lastParams = z || p.lastParams || (o == null ? void 0 : o()), K();
}, R = () => {
- var z, B, J, P;
+ var z, T, J, P;
p._runtimePaused = !0;
try {
p._throttleTimer && clearTimeout(p._throttleTimer);
- } catch (H) {
- (z = console.debug) == null || z.call(console, H);
+ } catch (E) {
+ (z = console.debug) == null || z.call(console, E);
}
p._throttleTimer = null;
try {
p._rvfc != null && typeof (t == null ? void 0 : t.cancelVideoFrameCallback) == "function" && t.cancelVideoFrameCallback(p._rvfc);
- } catch (H) {
- (B = console.debug) == null || B.call(console, H);
+ } catch (E) {
+ (T = console.debug) == null || T.call(console, E);
}
p._rvfc = null;
try {
p._rafIdLoop != null && cancelAnimationFrame(p._rafIdLoop);
- } catch (H) {
- (J = console.debug) == null || J.call(console, H);
+ } catch (E) {
+ (J = console.debug) == null || J.call(console, E);
}
p._rafIdLoop = null;
try {
p._rafIdSchedule != null && cancelAnimationFrame(p._rafIdSchedule);
- } catch (H) {
- (P = console.debug) == null || P.call(console, H);
+ } catch (E) {
+ (P = console.debug) == null || P.call(console, E);
}
p._rafIdSchedule = null, p._rendering = !1;
- }, Y = () => {
+ }, V = () => {
if (p._runtimePaused = !1, t != null && t.paused) {
- T();
+ K();
return;
}
- v(), T();
- }, F = (z, B) => {
+ j(), K();
+ }, O = (z, T) => {
var J, P;
try {
- if (p.ready || h(), !p.ready) return null;
+ if (p.ready || C(), !p.ready) return null;
G();
- const H = p.scale || 1, $ = Math.max(
+ const E = p.scale || 1, $ = Math.max(
0,
- Math.min(Z.width - 1, Math.floor((Number(z) || 0) * H))
- ), E = Math.max(
+ Math.min(S.width - 1, Math.floor((Number(z) || 0) * E))
+ ), H = Math.max(
0,
- Math.min(Z.height - 1, Math.floor((Number(B) || 0) * H))
+ Math.min(S.height - 1, Math.floor((Number(T) || 0) * E))
);
- if (!A) return null;
- A.clearRect(0, 0, 1, 1), A.drawImage(Z, $, E, 1, 1, 0, 0, 1, 1);
- const oe = (J = A.getImageData(0, 0, 1, 1)) == null ? void 0 : J.data;
- if (!oe || oe.length < 4) return null;
- const M = oe[0] ?? 0, j = oe[1] ?? 0, O = oe[2] ?? 0, D = oe[3] ?? 255, q = [M / 255, j / 255, O / 255, D / 255], ee = Number((P = p.lastParams) == null ? void 0 : P.exposureEV) || 0, ce = Math.pow(2, ee), ue = [
- q[0] * ce,
- q[1] * ce,
- q[2] * ce,
+ if (!y) return null;
+ y.clearRect(0, 0, 1, 1), y.drawImage(S, $, H, 1, 1, 0, 0, 1, 1);
+ const ne = (J = y.getImageData(0, 0, 1, 1)) == null ? void 0 : J.data;
+ if (!ne || ne.length < 4) return null;
+ const M = ne[0] ?? 0, v = ne[1] ?? 0, F = ne[2] ?? 0, D = ne[3] ?? 255, q = [M / 255, v / 255, F / 255, D / 255], ee = Number((P = p.lastParams) == null ? void 0 : P.exposureEV) || 0, ae = Math.pow(2, ee), ue = [
+ q[0] * ae,
+ q[1] * ae,
+ q[2] * ae,
q[3]
];
- return { r: M, g: j, b: O, a: D, raw: q, lin: ue, scale: p.scale };
+ return { r: M, g: v, b: F, a: D, raw: q, lin: ue, scale: p.scale };
} catch {
return null;
}
- }, N = () => {
+ }, k = () => {
var z;
- h(), T();
+ C(), K();
try {
u == null || u({ naturalW: p.naturalW, naturalH: p.naturalH, pixelScale: p.scale });
- } catch (B) {
- (z = console.debug) == null || z.call(console, B);
+ } catch (T) {
+ (z = console.debug) == null || z.call(console, T);
}
- }, V = (z) => {
+ }, Y = (z) => {
var J;
if (!I) return;
if (String(((J = z == null ? void 0 : z.detail) == null ? void 0 : J.active_prompt_id) || "").trim()) {
R();
return;
}
- Y();
+ V();
};
try {
const z = () => {
- p._runtimePaused || v();
- }, B = () => {
- var J, P, H;
+ p._runtimePaused || j();
+ }, T = () => {
+ var J, P, E;
p.ready = !1;
try {
- const $ = (J = t == null ? void 0 : t.error) == null ? void 0 : J.code, E = ((P = t == null ? void 0 : t.error) == null ? void 0 : P.message) || "";
- let oe, M;
- $ === 2 ? (oe = "Failed to load video (network / path error)", M = "Check file permissions / path, or try re-indexing.") : $ === 3 ? (oe = "Failed to load video (decode error — unsupported codec?)", M = "Browser may not support this codec (e.g. H.265/HEVC). Try converting to H.264/MP4.") : $ === 4 ? (oe = "Failed to load video (unsupported format or codec)", M = "Browser cannot decode this file (e.g. H.265/HEVC). Try converting to H.264/MP4.") : (oe = "Failed to load video", M = E || "Check file permissions / path, or try re-indexing."), console.warn("[MJR] Video load error", {
+ const $ = (J = t == null ? void 0 : t.error) == null ? void 0 : J.code, H = ((P = t == null ? void 0 : t.error) == null ? void 0 : P.message) || "";
+ let ne, M;
+ $ === 2 ? (ne = "Failed to load video (network / path error)", M = "Check file permissions / path, or try re-indexing.") : $ === 3 ? (ne = "Failed to load video (decode error — unsupported codec?)", M = "Browser may not support this codec (e.g. H.265/HEVC). Try converting to H.264/MP4.") : $ === 4 ? (ne = "Failed to load video (unsupported format or codec)", M = "Browser cannot decode this file (e.g. H.265/HEVC). Try converting to H.264/MP4.") : (ne = "Failed to load video", M = H || "Check file permissions / path, or try re-indexing."), console.warn("[MJR] Video load error", {
code: $,
- message: E,
+ message: H,
src: t == null ? void 0 : t.src
- }), fo(e, oe, M);
+ }), fo(e, ne, M);
} catch ($) {
- (H = console.debug) == null || H.call(console, $);
+ (E = console.debug) == null || E.call(console, $);
}
};
b.push(
- (s == null ? void 0 : s(t, "loadedmetadata", N, { once: !0 })) || (() => {
+ (s == null ? void 0 : s(t, "loadedmetadata", k, { once: !0 })) || (() => {
})
), b.push(
- (s == null ? void 0 : s(t, "seeked", T, { passive: !0 })) || (() => {
+ (s == null ? void 0 : s(t, "seeked", K, { passive: !0 })) || (() => {
})
), b.push(
- (s == null ? void 0 : s(t, "pause", T, { passive: !0 })) || (() => {
+ (s == null ? void 0 : s(t, "pause", K, { passive: !0 })) || (() => {
})
), b.push((s == null ? void 0 : s(t, "play", z, { passive: !0 })) || (() => {
})), b.push(
- (s == null ? void 0 : s(t, "timeupdate", T, { passive: !0 })) || (() => {
+ (s == null ? void 0 : s(t, "timeupdate", K, { passive: !0 })) || (() => {
})
- ), b.push((s == null ? void 0 : s(t, "error", B, { passive: !0 })) || (() => {
- })), I && (window.addEventListener(ht.RUNTIME_STATUS, V), String(((k = window == null ? void 0 : window.__MJR_EXECUTION_RUNTIME__) == null ? void 0 : k.active_prompt_id) || "").trim() && R());
+ ), b.push((s == null ? void 0 : s(t, "error", T, { passive: !0 })) || (() => {
+ })), I && (window.addEventListener(ft.RUNTIME_STATUS, Y), String(((N = window == null ? void 0 : window.__MJR_EXECUTION_RUNTIME__) == null ? void 0 : N.active_prompt_id) || "").trim() && R());
} catch (z) {
- (K = console.debug) == null || K.call(console, z);
+ (U = console.debug) == null || U.call(console, z);
}
return {
setParams: w,
- sampleAtOriginal: F,
- getInfo: () => ({ ...p, renderer: y ? "webgl" : "2d" }),
+ sampleAtOriginal: O,
+ getInfo: () => ({ ...p, renderer: A ? "webgl" : "2d" }),
pause: R,
- resume: Y,
+ resume: V,
destroy: () => {
- var z, B, J, P, H, $, E, oe, M;
- y && y.destroy(), p._destroyed = !0;
+ var z, T, J, P, E, $, H, ne, M;
+ A && A.destroy(), p._destroyed = !0;
try {
- window.removeEventListener(ht.RUNTIME_STATUS, V);
- } catch (j) {
- (z = console.debug) == null || z.call(console, j);
+ window.removeEventListener(ft.RUNTIME_STATUS, Y);
+ } catch (v) {
+ (z = console.debug) == null || z.call(console, v);
}
try {
p._throttleTimer && clearTimeout(p._throttleTimer);
- } catch (j) {
- (B = console.debug) == null || B.call(console, j);
+ } catch (v) {
+ (T = console.debug) == null || T.call(console, v);
}
p._throttleTimer = null;
try {
p._connectRAF != null && cancelAnimationFrame(p._connectRAF);
- } catch (j) {
- (J = console.debug) == null || J.call(console, j);
+ } catch (v) {
+ (J = console.debug) == null || J.call(console, v);
}
p._connectRAF = null, p._connectTries = 0;
try {
p._rvfc != null && typeof (t == null ? void 0 : t.cancelVideoFrameCallback) == "function" && t.cancelVideoFrameCallback(p._rvfc);
- } catch (j) {
- (P = console.debug) == null || P.call(console, j);
+ } catch (v) {
+ (P = console.debug) == null || P.call(console, v);
}
try {
p._rafIdLoop != null && cancelAnimationFrame(p._rafIdLoop);
- } catch (j) {
- (H = console.debug) == null || H.call(console, j);
+ } catch (v) {
+ (E = console.debug) == null || E.call(console, v);
}
try {
p._rafIdSchedule != null && cancelAnimationFrame(p._rafIdSchedule);
- } catch (j) {
- ($ = console.debug) == null || $.call(console, j);
+ } catch (v) {
+ ($ = console.debug) == null || $.call(console, v);
}
try {
- for (const j of b) d == null || d(j);
- } catch (j) {
- (E = console.debug) == null || E.call(console, j);
+ for (const v of b) d == null || d(v);
+ } catch (v) {
+ (H = console.debug) == null || H.call(console, v);
}
try {
- Z.width = 0, Z.height = 0;
- } catch (j) {
- (oe = console.debug) == null || oe.call(console, j);
+ S.width = 0, S.height = 0;
+ } catch (v) {
+ (ne = console.debug) == null || ne.call(console, v);
}
try {
e.width = 0, e.height = 0;
- } catch (j) {
- (M = console.debug) == null || M.call(console, j);
+ } catch (v) {
+ (M = console.debug) == null || M.call(console, v);
}
p._buffer = null;
}
};
}
-function ka(e, t, n) {
+function Na(e, t, n) {
const i = Number(e);
return Number.isFinite(i) ? Math.max(t, Math.min(n, i)) : t;
}
-function Fu(e) {
+function Ou(e) {
var t, n;
try {
const i = String(e || "").toLowerCase();
@@ -17988,7 +18015,7 @@ function Fu(e) {
(t = console.debug) == null || t.call(console, i);
}
try {
- const i = String((fe == null ? void 0 : fe.VIEWER_AUDIO_VISUALIZER_MODE) || "simple").toLowerCase();
+ const i = String((he == null ? void 0 : he.VIEWER_AUDIO_VISUALIZER_MODE) || "simple").toLowerCase();
if (i === "artistic") return "artistic";
if (i === "webgl3d" || i === "webgl") return "simple";
} catch (i) {
@@ -17996,7 +18023,7 @@ function Fu(e) {
}
return "simple";
}
-function UA(e) {
+function BA(e) {
const t = e.getContext("2d");
if (!t) return null;
const n = (l, a) => {
@@ -18025,26 +18052,26 @@ function UA(e) {
try {
const d = e.width || 0, u = e.height || 0;
if (!(d > 1 && u > 1)) return;
- const y = Number(c) * 1e-3 * 0.12 % 1;
+ const A = Number(c) * 1e-3 * 0.12 % 1;
t.clearRect(0, 0, d, u);
- const S = d * 0.5, Z = u * 0.52, C = Math.max(36, Math.min(140, Math.floor(d / 12))), g = Math.min(d * 0.56, C * 8), A = g / Math.max(1, C - 1), p = S - g * 0.5, b = Z - u * 0.08;
+ const h = d * 0.5, S = u * 0.52, W = Math.max(36, Math.min(140, Math.floor(d / 12))), g = Math.min(d * 0.56, W * 8), y = g / Math.max(1, W - 1), p = h - g * 0.5, b = S - u * 0.08;
t.fillStyle = "rgba(255,255,255,0.95)";
- for (let h = 0; h < C; h++) {
- const G = p + h * A, f = (h / Math.max(1, C - 1) + y) % 1, X = i(l, f), x = b - X * u * 0.11, T = 1.2 + X * 1.2;
- t.beginPath(), t.arc(G, x, T, 0, Math.PI * 2), t.fill();
+ for (let C = 0; C < W; C++) {
+ const G = p + C * y, f = (C / Math.max(1, W - 1) + A) % 1, X = i(l, f), x = b - X * u * 0.11, K = 1.2 + X * 1.2;
+ t.beginPath(), t.arc(G, x, K, 0, Math.PI * 2), t.fill();
}
t.fillStyle = "rgba(255,255,255,0.9)";
- for (let h = 0; h < C; h++) {
- const G = p + h * A, W = 1.6;
- t.beginPath(), t.arc(G, Z, W, 0, Math.PI * 2), t.fill();
+ for (let C = 0; C < W; C++) {
+ const G = p + C * y, Z = 1.6;
+ t.beginPath(), t.arc(G, S, Z, 0, Math.PI * 2), t.fill();
}
- const L = Math.max(1.5, A * 0.45);
- for (let h = 0; h < C; h++) {
- const G = p + h * A, W = h / Math.max(1, C - 1), f = (W + y) % 1, X = o(l, f), x = r(l, f), T = 1 - Math.abs(W * 2 - 1), w = Math.pow(
- (X * 0.62 + x * 0.38) * 0.84 + T * 0.16,
+ const L = Math.max(1.5, y * 0.45);
+ for (let C = 0; C < W; C++) {
+ const G = p + C * y, Z = C / Math.max(1, W - 1), f = (Z + A) % 1, X = o(l, f), x = r(l, f), K = 1 - Math.abs(Z * 2 - 1), w = Math.pow(
+ (X * 0.62 + x * 0.38) * 0.84 + K * 0.16,
1.1
) * u * 0.32;
- t.fillStyle = "rgba(255,255,255,0.96)", t.fillRect(G - L * 0.5, Z + 1, L, w);
+ t.fillStyle = "rgba(255,255,255,0.96)", t.fillRect(G - L * 0.5, S + 1, L, w);
}
} catch (d) {
(s = console.debug) == null || s.call(console, d);
@@ -18054,7 +18081,7 @@ function UA(e) {
}
};
}
-function KA(e, { pseudo3d: t = !1 } = {}) {
+function UA(e, { pseudo3d: t = !1 } = {}) {
let n = null;
try {
n = e.getContext("webgl", {
@@ -18077,9 +18104,9 @@ uniform vec4 uColor;
void main() {
gl_FragColor = uColor;
}
-`, r = (g, A) => {
+`, r = (g, y) => {
const p = n.createShader(g);
- return p ? (n.shaderSource(p, A), n.compileShader(p), n.getShaderParameter(p, n.COMPILE_STATUS) ? p : (n.deleteShader(p), null)) : null;
+ return p ? (n.shaderSource(p, y), n.compileShader(p), n.getShaderParameter(p, n.COMPILE_STATUS) ? p : (n.deleteShader(p), null)) : null;
}, l = r(n.VERTEX_SHADER, i), a = r(n.FRAGMENT_SHADER, o);
if (!l || !a) return null;
const c = n.createProgram();
@@ -18087,51 +18114,51 @@ void main() {
n.useProgram(c);
const s = n.getAttribLocation(c, "aPos"), d = n.getUniformLocation(c, "uColor"), u = n.createBuffer();
if (!u || s < 0 || !d) return null;
- const I = (g, A) => {
- n.bindBuffer(n.ARRAY_BUFFER, u), n.bufferData(n.ARRAY_BUFFER, g, n.DYNAMIC_DRAW), n.enableVertexAttribArray(s), n.vertexAttribPointer(s, 2, n.FLOAT, !1, 0, 0), n.uniform4f(d, A[0], A[1], A[2], A[3]), n.drawArrays(n.LINE_STRIP, 0, Math.floor(g.length / 2));
- }, y = (g, A) => {
+ const I = (g, y) => {
+ n.bindBuffer(n.ARRAY_BUFFER, u), n.bufferData(n.ARRAY_BUFFER, g, n.DYNAMIC_DRAW), n.enableVertexAttribArray(s), n.vertexAttribPointer(s, 2, n.FLOAT, !1, 0, 0), n.uniform4f(d, y[0], y[1], y[2], y[3]), n.drawArrays(n.LINE_STRIP, 0, Math.floor(g.length / 2));
+ }, A = (g, y) => {
try {
const p = Math.max(
0,
- Math.min(g.length - 1, Math.floor(A * (g.length - 1)))
+ Math.min(g.length - 1, Math.floor(y * (g.length - 1)))
);
return (Number(g[p]) || 0) / 255;
} catch {
return 0;
}
- }, S = (g, A) => {
- const p = y(g, 0.18 + A * 0.18), b = y(g, 0.28 + A * 0.16), L = y(g, 0.4 + A * 0.06), h = y(g, 0.46 + A * 0.03);
- return p * 0.28 + b * 0.36 + L * 0.24 + h * 0.12;
- }, Z = (g, A) => {
- const p = y(g, 0.01 + A * 0.06), b = y(g, 0.04 + A * 0.07), L = y(g, 0.09 + A * 0.04);
+ }, h = (g, y) => {
+ const p = A(g, 0.18 + y * 0.18), b = A(g, 0.28 + y * 0.16), L = A(g, 0.4 + y * 0.06), C = A(g, 0.46 + y * 0.03);
+ return p * 0.28 + b * 0.36 + L * 0.24 + C * 0.12;
+ }, S = (g, y) => {
+ const p = A(g, 0.01 + y * 0.06), b = A(g, 0.04 + y * 0.07), L = A(g, 0.09 + y * 0.04);
return p * 0.45 + b * 0.35 + L * 0.2;
- }, C = (g, A) => {
- const p = y(g, 0.64 + A * 0.18), b = y(g, 0.78 + A * 0.12), L = y(g, 0.92 + A * 0.06);
+ }, W = (g, y) => {
+ const p = A(g, 0.64 + y * 0.18), b = A(g, 0.78 + y * 0.12), L = A(g, 0.92 + y * 0.06);
return p * 0.34 + b * 0.38 + L * 0.28;
};
return {
- draw(g, A, p = 0) {
+ draw(g, y, p = 0) {
var b;
try {
n.viewport(0, 0, e.width || 1, e.height || 1), n.clearColor(0, 0, 0, 0), n.clear(n.COLOR_BUFFER_BIT);
- const L = Math.max(48, Math.min(180, Math.floor((e.width || 640) / 7))), h = Number(p) * 1e-3, G = new Float32Array(L * 2);
+ const L = Math.max(48, Math.min(180, Math.floor((e.width || 640) / 7))), C = Number(p) * 1e-3, G = new Float32Array(L * 2);
for (let f = 0; f < L; f++) {
- const X = f / Math.max(1, L - 1), x = X * 2 - 1, T = S(g, X), v = t ? Math.sin(X * Math.PI * 4 + h * 1.1) * 0.18 : 0, w = t ? 1 / (1 + Math.max(-0.7, v) * 0.8) : 1, Y = ka((0.18 + T * 0.32) * w, -0.95, 0.95);
- G[f * 2] = x, G[f * 2 + 1] = Y;
+ const X = f / Math.max(1, L - 1), x = X * 2 - 1, K = h(g, X), j = t ? Math.sin(X * Math.PI * 4 + C * 1.1) * 0.18 : 0, w = t ? 1 / (1 + Math.max(-0.7, j) * 0.8) : 1, V = Na((0.18 + K * 0.32) * w, -0.95, 0.95);
+ G[f * 2] = x, G[f * 2 + 1] = V;
}
I(G, [1, 1, 1, 0.95]);
- const W = new Float32Array(L * 2);
+ const Z = new Float32Array(L * 2);
for (let f = 0; f < L; f++) {
- const X = f / Math.max(1, L - 1), x = X * 2 - 1, T = Z(g, X), v = C(g, X), w = T * 0.62 + v * 0.38, R = t ? Math.sin(X * Math.PI * 3 + h * 1) * 0.14 : 0, Y = t ? 1 / (1 + Math.max(-0.7, R) * 0.8) : 1, F = ka(-w * 0.62 * Y, -0.95, 0);
- W[f * 2] = x, W[f * 2 + 1] = F;
+ const X = f / Math.max(1, L - 1), x = X * 2 - 1, K = S(g, X), j = W(g, X), w = K * 0.62 + j * 0.38, R = t ? Math.sin(X * Math.PI * 3 + C * 1) * 0.14 : 0, V = t ? 1 / (1 + Math.max(-0.7, R) * 0.8) : 1, O = Na(-w * 0.62 * V, -0.95, 0);
+ Z[f * 2] = x, Z[f * 2 + 1] = O;
}
- I(W, [1, 1, 1, 0.9]);
+ I(Z, [1, 1, 1, 0.9]);
} catch (L) {
(b = console.debug) == null || b.call(console, L);
}
},
destroy() {
- var g, A, p, b;
+ var g, y, p, b;
try {
n.deleteBuffer(u);
} catch (L) {
@@ -18140,7 +18167,7 @@ void main() {
try {
n.deleteProgram(c);
} catch (L) {
- (A = console.debug) == null || A.call(console, L);
+ (y = console.debug) == null || y.call(console, L);
}
try {
n.deleteShader(l);
@@ -18161,58 +18188,58 @@ function DA({
mode: n,
pauseDuringExecution: i = null
} = {}) {
- var v, w, R;
+ var j, w, R;
if (!e || !t) return { destroy() {
} };
- const o = i == null ? !!(fe != null && fe.VIEWER_PAUSE_DURING_EXECUTION) : !!i;
- let r = null, l = !1, a = null, c = null, s = null, d = null, u = null, I = null, y = 0, S = !1;
- const C = 1e3 / ka((fe == null ? void 0 : fe.VIEWER_AUDIO_VIS_FPS) ?? 24, 8, 60);
- let g = Fu(n);
- const A = () => {
- var Y;
+ const o = i == null ? !!(he != null && he.VIEWER_PAUSE_DURING_EXECUTION) : !!i;
+ let r = null, l = !1, a = null, c = null, s = null, d = null, u = null, I = null, A = 0, h = !1;
+ const W = 1e3 / Na((he == null ? void 0 : he.VIEWER_AUDIO_VIS_FPS) ?? 24, 8, 60);
+ let g = Ou(n);
+ const y = () => {
+ var V;
try {
- const F = ka(window.devicePixelRatio || 1, 1, 2), N = Math.max(32, Math.floor((e.clientWidth || 640) * F)), V = Math.max(24, Math.floor((e.clientHeight || 140) * F));
- e.width !== N && (e.width = N), e.height !== V && (e.height = V);
- } catch (F) {
- (Y = console.debug) == null || Y.call(console, F);
+ const O = Na(window.devicePixelRatio || 1, 1, 2), k = Math.max(32, Math.floor((e.clientWidth || 640) * O)), Y = Math.max(24, Math.floor((e.clientHeight || 140) * O));
+ e.width !== k && (e.width = k), e.height !== Y && (e.height = Y);
+ } catch (O) {
+ (V = console.debug) == null || V.call(console, O);
}
- }, p = (Y = g) => {
- var F, N, V, k, K;
- g = Fu(Y);
+ }, p = (V = g) => {
+ var O, k, Y, N, U;
+ g = Ou(V);
try {
- (F = I == null ? void 0 : I.destroy) == null || F.call(I);
- } catch (z) {
- (N = console.debug) == null || N.call(console, z);
- }
- I = null;
- try {
- A();
- } catch (z) {
- (V = console.debug) == null || V.call(console, z);
- }
- try {
- g === "artistic" && !(fe != null && fe.VIEWER_DISABLE_WEBGL_AUDIO) && (I = KA(e, { pseudo3d: !0 }));
+ (O = I == null ? void 0 : I.destroy) == null || O.call(I);
} catch (z) {
(k = console.debug) == null || k.call(console, z);
}
+ I = null;
+ try {
+ y();
+ } catch (z) {
+ (Y = console.debug) == null || Y.call(console, z);
+ }
+ try {
+ g === "artistic" && !(he != null && he.VIEWER_DISABLE_WEBGL_AUDIO) && (I = UA(e, { pseudo3d: !0 }));
+ } catch (z) {
+ (N = console.debug) == null || N.call(console, z);
+ }
if (!I)
try {
- I = UA(e);
+ I = BA(e);
} catch (z) {
- (K = console.debug) == null || K.call(console, z), I = null;
+ (U = console.debug) == null || U.call(console, z), I = null;
}
- return y = 0, g;
+ return A = 0, g;
}, b = () => {
if (!(l || s))
try {
- const Y = window.AudioContext || window.webkitAudioContext;
- if (!Y) return;
- a = new Y(), c = a.createMediaElementSource(t), s = a.createAnalyser(), s.fftSize = 1024, s.smoothingTimeConstant = 0.8, c.connect(s), s.connect(a.destination), d = new Uint8Array(s.frequencyBinCount), u = new Uint8Array(s.fftSize), I || p(g);
+ const V = window.AudioContext || window.webkitAudioContext;
+ if (!V) return;
+ a = new V(), c = a.createMediaElementSource(t), s = a.createAnalyser(), s.fftSize = 1024, s.smoothingTimeConstant = 0.8, c.connect(s), s.connect(a.destination), d = new Uint8Array(s.frequencyBinCount), u = new Uint8Array(s.fftSize), I || p(g);
} catch {
s = null;
}
- }, L = (Y) => {
- var F;
+ }, L = (V) => {
+ var O;
if (!l) {
try {
r = requestAnimationFrame(L);
@@ -18220,88 +18247,88 @@ function DA({
r = null;
return;
}
- if (!S && !(!s || !I) && !(Y - y < C)) {
- y = Y;
+ if (!h && !(!s || !I) && !(V - A < W)) {
+ A = V;
try {
- A(), s.getByteFrequencyData(d), s.getByteTimeDomainData(u), I.draw(d, u, Y);
- } catch (N) {
- (F = console.debug) == null || F.call(console, N);
+ y(), s.getByteFrequencyData(d), s.getByteTimeDomainData(u), I.draw(d, u, V);
+ } catch (k) {
+ (O = console.debug) == null || O.call(console, k);
}
}
}
- }, h = async () => {
- var Y, F;
+ }, C = async () => {
+ var V, O;
try {
- if (S || (b(), !a)) return;
+ if (h || (b(), !a)) return;
if (a.state === "suspended")
try {
await a.resume();
- } catch (N) {
- (Y = console.debug) == null || Y.call(console, N);
+ } catch (k) {
+ (V = console.debug) == null || V.call(console, k);
}
r == null && (r = requestAnimationFrame(L));
- } catch (N) {
- (F = console.debug) == null || F.call(console, N);
+ } catch (k) {
+ (O = console.debug) == null || O.call(console, k);
}
}, G = () => {
- var Y;
+ var V;
try {
r != null && cancelAnimationFrame(r);
- } catch (F) {
- (Y = console.debug) == null || Y.call(console, F);
+ } catch (O) {
+ (V = console.debug) == null || V.call(console, O);
}
r = null;
- }, W = () => {
- h();
- }, f = () => G(), X = () => G(), x = () => A(), T = (Y) => {
- var N;
+ }, Z = () => {
+ C();
+ }, f = () => G(), X = () => G(), x = () => y(), K = (V) => {
+ var k;
if (!o) return;
- if (S = !!String(((N = Y == null ? void 0 : Y.detail) == null ? void 0 : N.active_prompt_id) || "").trim(), S) {
+ if (h = !!String(((k = V == null ? void 0 : V.detail) == null ? void 0 : k.active_prompt_id) || "").trim(), h) {
G();
return;
}
- t != null && t.paused || h();
+ t != null && t.paused || C();
};
try {
- A(), p(g);
- } catch (Y) {
- (v = console.debug) == null || v.call(console, Y);
+ y(), p(g);
+ } catch (V) {
+ (j = console.debug) == null || j.call(console, V);
}
try {
- t.addEventListener("play", W, { passive: !0 }), t.addEventListener("pause", f, { passive: !0 }), t.addEventListener("ended", X, { passive: !0 }), window.addEventListener("resize", x, { passive: !0 }), o && (window.addEventListener(ht.RUNTIME_STATUS, T), String(((w = window == null ? void 0 : window.__MJR_EXECUTION_RUNTIME__) == null ? void 0 : w.active_prompt_id) || "").trim() && (S = !0));
- } catch (Y) {
- (R = console.debug) == null || R.call(console, Y);
+ t.addEventListener("play", Z, { passive: !0 }), t.addEventListener("pause", f, { passive: !0 }), t.addEventListener("ended", X, { passive: !0 }), window.addEventListener("resize", x, { passive: !0 }), o && (window.addEventListener(ft.RUNTIME_STATUS, K), String(((w = window == null ? void 0 : window.__MJR_EXECUTION_RUNTIME__) == null ? void 0 : w.active_prompt_id) || "").trim() && (h = !0));
+ } catch (V) {
+ (R = console.debug) == null || R.call(console, V);
}
return {
- setMode(Y) {
- return l ? g : p(Y);
+ setMode(V) {
+ return l ? g : p(V);
},
destroy() {
- var Y, F, N, V, k, K, z, B, J;
+ var V, O, k, Y, N, U, z, T, J;
if (!l) {
l = !0, G();
try {
- t.removeEventListener("play", W), t.removeEventListener("pause", f), t.removeEventListener("ended", X), window.removeEventListener("resize", x), window.removeEventListener(ht.RUNTIME_STATUS, T);
+ t.removeEventListener("play", Z), t.removeEventListener("pause", f), t.removeEventListener("ended", X), window.removeEventListener("resize", x), window.removeEventListener(ft.RUNTIME_STATUS, K);
} catch (P) {
- (Y = console.debug) == null || Y.call(console, P);
+ (V = console.debug) == null || V.call(console, P);
}
try {
- (F = I == null ? void 0 : I.destroy) == null || F.call(I);
- } catch (P) {
- (N = console.debug) == null || N.call(console, P);
- }
- try {
- (V = c == null ? void 0 : c.disconnect) == null || V.call(c);
+ (O = I == null ? void 0 : I.destroy) == null || O.call(I);
} catch (P) {
(k = console.debug) == null || k.call(console, P);
}
try {
- (K = s == null ? void 0 : s.disconnect) == null || K.call(s);
+ (Y = c == null ? void 0 : c.disconnect) == null || Y.call(c);
+ } catch (P) {
+ (N = console.debug) == null || N.call(console, P);
+ }
+ try {
+ (U = s == null ? void 0 : s.disconnect) == null || U.call(s);
} catch (P) {
(z = console.debug) == null || z.call(console, P);
}
try {
- (B = a == null ? void 0 : a.close) == null || B.call(a);
+ (T = a == null ? void 0 : a.close) == null || T.call(a);
} catch (P) {
(J = console.debug) == null || J.call(console, P);
}
@@ -18310,14 +18337,14 @@ function DA({
}
};
}
-const EA = (() => {
+const HA = (() => {
try {
return new URL("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAIAAABAH0oBAAAIf3RFWHRwcm9tcHQAeyI5IjogeyJpbnB1dHMiOiB7ImZpbGVuYW1lX3ByZWZpeCI6ICJQUk9KRUNUUy8yNjAxX1RFU1QvMDJfT1VUL0lNQUdFUy8yNjAyMDcvVGVzdC9aX0ltYWdlX1R1cmJvLzI2MDIwN19UZXN0XyIsICJpbWFnZXMiOiBbIjU3OjgiLCAwXX0sICJjbGFzc190eXBlIjogIlNhdmVJbWFnZSIsICJfbWV0YSI6IHsidGl0bGUiOiAiU2F2ZSBJbWFnZSJ9fSwgIjU4IjogeyJpbnB1dHMiOiB7InZhbHVlIjogIkJsdXJyeSBjdXRlIHNtYWxsIGRpbm9zYXVydXMgbGlrZSBjcmVhdHVyZSBzaWxob3VldHRlIHdpdGggaGVhZHBob25lIGluIGEgY2luZW1hdGljIHNsb3ctc2h1dHRlciBwYW4sIHdhcm0gYmFja2xpdCBzdW5zZXQgZ3JhZGllbnQgZnJvbSBkZWVwIHJlZCB0byBvcmFuZ2UgYW5kIGdvbGQsIGdsb3dpbmcgaGF6ZSBhbmQgYmxvb20sIHJpbS1saXQgaGFpciBoYWxvLCBnZW50bGUgbW90aW9uLWJsdXIgdHJhaWwsIHNvZnQtZm9jdXMgZmFjaWFsIGZlYXR1cmVzLCBzdWJ0bGUgZmlsbSBncmFpbiwgYXRtb3NwaGVyaWMgZm9nLCBzaGFsbG93IGRlcHRoIG9mIGZpZWxkLCBtaW5pbWFsIGNvbXBvc2l0aW9uLCBkcmVhbXkgbm9zdGFsZ2ljIG1vb2QsIHZpbnRhZ2UgbGVucyBzb2Z0bmVzcyBhbmQgc21vb3RoIGNvbG9yIHRyYW5zaXRpb25zLiJ9LCAiY2xhc3NfdHlwZSI6ICJQcmltaXRpdmVTdHJpbmdNdWx0aWxpbmUiLCAiX21ldGEiOiB7InRpdGxlIjogIlByb21wdCJ9fSwgIjU3OjMwIjogeyJpbnB1dHMiOiB7ImNsaXBfbmFtZSI6ICJxd2VuXzNfNGIuc2FmZXRlbnNvcnMiLCAidHlwZSI6ICJsdW1pbmEyIiwgImRldmljZSI6ICJkZWZhdWx0In0sICJjbGFzc190eXBlIjogIkNMSVBMb2FkZXIiLCAiX21ldGEiOiB7InRpdGxlIjogIkxvYWQgQ0xJUCJ9fSwgIjU3OjI5IjogeyJpbnB1dHMiOiB7InZhZV9uYW1lIjogImFlLnNhZmV0ZW5zb3JzIn0sICJjbGFzc190eXBlIjogIlZBRUxvYWRlciIsICJfbWV0YSI6IHsidGl0bGUiOiAiTG9hZCBWQUUifX0sICI1NzozMyI6IHsiaW5wdXRzIjogeyJjb25kaXRpb25pbmciOiBbIjU3OjI3IiwgMF19LCAiY2xhc3NfdHlwZSI6ICJDb25kaXRpb25pbmdaZXJvT3V0IiwgIl9tZXRhIjogeyJ0aXRsZSI6ICJDb25kaXRpb25pbmdaZXJvT3V0In19LCAiNTc6OCI6IHsiaW5wdXRzIjogeyJzYW1wbGVzIjogWyI1NzozIiwgMF0sICJ2YWUiOiBbIjU3OjI5IiwgMF19LCAiY2xhc3NfdHlwZSI6ICJWQUVEZWNvZGUiLCAiX21ldGEiOiB7InRpdGxlIjogIlZBRSBEZWNvZGUifX0sICI1NzoyOCI6IHsiaW5wdXRzIjogeyJ1bmV0X25hbWUiOiAiel9pbWFnZV90dXJib19iZjE2LnNhZmV0ZW5zb3JzIiwgIndlaWdodF9kdHlwZSI6ICJkZWZhdWx0In0sICJjbGFzc190eXBlIjogIlVORVRMb2FkZXIiLCAiX21ldGEiOiB7InRpdGxlIjogIkxvYWQgRGlmZnVzaW9uIE1vZGVsIn19LCAiNTc6MjciOiB7ImlucHV0cyI6IHsidGV4dCI6IFsiNTgiLCAwXSwgImNsaXAiOiBbIjU3OjMwIiwgMF19LCAiY2xhc3NfdHlwZSI6ICJDTElQVGV4dEVuY29kZSIsICJfbWV0YSI6IHsidGl0bGUiOiAiQ0xJUCBUZXh0IEVuY29kZSAoUHJvbXB0KSJ9fSwgIjU3OjEzIjogeyJpbnB1dHMiOiB7IndpZHRoIjogMTI4MCwgImhlaWdodCI6IDcyMCwgImJhdGNoX3NpemUiOiAxfSwgImNsYXNzX3R5cGUiOiAiRW1wdHlTRDNMYXRlbnRJbWFnZSIsICJfbWV0YSI6IHsidGl0bGUiOiAiRW1wdHlTRDNMYXRlbnRJbWFnZSJ9fSwgIjU3OjMiOiB7ImlucHV0cyI6IHsic2VlZCI6IDY0OTI5MjEyMjcxODY3MSwgInN0ZXBzIjogNCwgImNmZyI6IDEuMCwgInNhbXBsZXJfbmFtZSI6ICJyZXNfbXVsdGlzdGVwIiwgInNjaGVkdWxlciI6ICJzaW1wbGUiLCAiZGVub2lzZSI6IDEuMCwgIm1vZGVsIjogWyI1NzoxMSIsIDBdLCAicG9zaXRpdmUiOiBbIjU3OjI3IiwgMF0sICJuZWdhdGl2ZSI6IFsiNTc6MzMiLCAwXSwgImxhdGVudF9pbWFnZSI6IFsiNTc6MTMiLCAwXX0sICJjbGFzc190eXBlIjogIktTYW1wbGVyIiwgIl9tZXRhIjogeyJ0aXRsZSI6ICJLU2FtcGxlciJ9fSwgIjU3OjExIjogeyJpbnB1dHMiOiB7InNoaWZ0IjogMy4wLCAibW9kZWwiOiBbIjU3OjI4IiwgMF19LCAiY2xhc3NfdHlwZSI6ICJNb2RlbFNhbXBsaW5nQXVyYUZsb3ciLCAiX21ldGEiOiB7InRpdGxlIjogIk1vZGVsU2FtcGxpbmdBdXJhRmxvdyJ9fX2E/dbiAABnQnRFWHR3b3JrZmxvdwB7ImlkIjogIjlhZTYwODJiLWM3ZjQtNDMzYy05OTcxLTdhOGY2NWEzZWE2NSIsICJyZXZpc2lvbiI6IDAsICJsYXN0X25vZGVfaWQiOiA2MSwgImxhc3RfbGlua19pZCI6IDY4LCAibm9kZXMiOiBbeyJpZCI6IDYwLCAidHlwZSI6ICJTYXZlSW1hZ2UiLCAicG9zIjogWzExNzAsIDYzMF0sICJzaXplIjogWzc4MCwgNjYwXSwgImZsYWdzIjoge30sICJvcmRlciI6IDYsICJtb2RlIjogNCwgImlucHV0cyI6IFt7Im5hbWUiOiAiaW1hZ2VzIiwgInR5cGUiOiAiSU1BR0UiLCAibGluayI6IDY1fV0sICJvdXRwdXRzIjogW10sICJwcm9wZXJ0aWVzIjogeyJjbnJfaWQiOiAiY29tZnktY29yZSIsICJ2ZXIiOiAiMC4zLjY0IiwgIk5vZGUgbmFtZSBmb3IgUyZSIjogIlNhdmVJbWFnZSIsICJlbmFibGVUYWJzIjogZmFsc2UsICJ0YWJXaWR0aCI6IDY1LCAidGFiWE9mZnNldCI6IDEwLCAiaGFzU2Vjb25kVGFiIjogZmFsc2UsICJzZWNvbmRUYWJUZXh0IjogIlNlbmQgQmFjayIsICJzZWNvbmRUYWJPZmZzZXQiOiA4MCwgInNlY29uZFRhYldpZHRoIjogNjV9LCAid2lkZ2V0c192YWx1ZXMiOiBbIlBST0pFQ1RTLzI2MDFfVEVTVC8wMl9PVVQvSU1BR0VTLzI2MDIwNy9UZXN0L1pfSW1hZ2VfVHVyYm8vMjYwMjA3X1Rlc3RfIl19LCB7ImlkIjogMzUsICJ0eXBlIjogIk1hcmtkb3duTm90ZSIsICJwb3MiOiBbLTQ0MCwgMTkwXSwgInNpemUiOiBbNTEwLCA2MDBdLCAiZmxhZ3MiOiB7ImNvbGxhcHNlZCI6IGZhbHNlfSwgIm9yZGVyIjogMCwgIm1vZGUiOiAwLCAiaW5wdXRzIjogW10sICJvdXRwdXRzIjogW10sICJ0aXRsZSI6ICJNb2RlbCBsaW5rIiwgInByb3BlcnRpZXMiOiB7fSwgIndpZGdldHNfdmFsdWVzIjogWyIjIyBSZXBvcnQgd29ya2Zsb3cgaXNzdWVcblxuSWYgeW91IGZvdW5kIGFueSBpc3N1ZXMgd2hlbiBydW5uaW5nIHRoaXMgd29ya2Zsb3csIFtyZXBvcnQgdGVtcGxhdGUgaXNzdWUgaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL0NvbWZ5LU9yZy93b3JrZmxvd190ZW1wbGF0ZXMvaXNzdWVzKVxuXG5cbiMjIE1vZGVsIGxpbmtzXG5cbioqdGV4dF9lbmNvZGVycyoqXG5cbi0gW3F3ZW5fM180Yi5zYWZldGVuc29yc10oaHR0cHM6Ly9odWdnaW5nZmFjZS5jby9Db21meS1Pcmcvel9pbWFnZV90dXJiby9yZXNvbHZlL21haW4vc3BsaXRfZmlsZXMvdGV4dF9lbmNvZGVycy9xd2VuXzNfNGIuc2FmZXRlbnNvcnMpXG5cbioqbG9yYXMqKlxuXG4tIFtwaXhlbF9hcnRfc3R5bGVfel9pbWFnZV90dXJiby5zYWZldGVuc29yc10oaHR0cHM6Ly9odWdnaW5nZmFjZS5jby90YXJuNTkvcGl4ZWxfYXJ0X3N0eWxlX2xvcmFfel9pbWFnZV90dXJiby9yZXNvbHZlL21haW4vcGl4ZWxfYXJ0X3N0eWxlX3pfaW1hZ2VfdHVyYm8uc2FmZXRlbnNvcnMpXG5cbioqZGlmZnVzaW9uX21vZGVscyoqXG5cbi0gW3pfaW1hZ2VfdHVyYm9fYmYxNi5zYWZldGVuc29yc10oaHR0cHM6Ly9odWdnaW5nZmFjZS5jby9Db21meS1Pcmcvel9pbWFnZV90dXJiby9yZXNvbHZlL21haW4vc3BsaXRfZmlsZXMvZGlmZnVzaW9uX21vZGVscy96X2ltYWdlX3R1cmJvX2JmMTYuc2FmZXRlbnNvcnMpXG5cbioqdmFlKipcblxuLSBbYWUuc2FmZXRlbnNvcnNdKGh0dHBzOi8vaHVnZ2luZ2ZhY2UuY28vQ29tZnktT3JnL3pfaW1hZ2VfdHVyYm8vcmVzb2x2ZS9tYWluL3NwbGl0X2ZpbGVzL3ZhZS9hZS5zYWZldGVuc29ycylcblxuXG5Nb2RlbCBTdG9yYWdlIExvY2F0aW9uXG5cbmBgYFxuXHVkODNkXHVkY2MyIENvbWZ5VUkvXG5cdTI1MWNcdTI1MDBcdTI1MDAgXHVkODNkXHVkY2MyIG1vZGVscy9cblx1MjUwMiAgIFx1MjUxY1x1MjUwMFx1MjUwMCBcdWQ4M2RcdWRjYzIgdGV4dF9lbmNvZGVycy9cblx1MjUwMiAgIFx1MjUwMiAgICAgIFx1MjUxNFx1MjUwMFx1MjUwMCBxd2VuXzNfNGIuc2FmZXRlbnNvcnNcblx1MjUwMiAgIFx1MjUxY1x1MjUwMFx1MjUwMCBcdWQ4M2RcdWRjYzIgbG9yYXMvXG5cdTI1MDIgICBcdTI1MDIgICAgICBcdTI1MTRcdTI1MDBcdTI1MDAgcGl4ZWxfYXJ0X3N0eWxlX3pfaW1hZ2VfdHVyYm8uc2FmZXRlbnNvcnNcblx1MjUwMiAgIFx1MjUxY1x1MjUwMFx1MjUwMCBcdWQ4M2RcdWRjYzIgZGlmZnVzaW9uX21vZGVscy9cblx1MjUwMiAgIFx1MjUwMiAgICAgIFx1MjUxNFx1MjUwMFx1MjUwMCB6X2ltYWdlX3R1cmJvX2JmMTYuc2FmZXRlbnNvcnNcblx1MjUwMiAgIFx1MjUxNFx1MjUwMFx1MjUwMCBcdWQ4M2RcdWRjYzIgdmFlL1xuXHUyNTAyICAgICAgICAgIFx1MjUxNFx1MjUwMFx1MjUwMCBhZS5zYWZldGVuc29yc1xuYGBgXG4iXSwgImNvbG9yIjogIiM0MzIiLCAiYmdjb2xvciI6ICIjMDAwIn0sIHsiaWQiOiA2MSwgInR5cGUiOiAiU3RyaW5nQ29uY2F0ZW5hdGUiLCAicG9zIjogWzE0MCwgNTAwXSwgInNpemUiOiBbNDAwLCAyMDBdLCAiZmxhZ3MiOiB7fSwgIm9yZGVyIjogMywgIm1vZGUiOiA0LCAiaW5wdXRzIjogW3sibmFtZSI6ICJzdHJpbmdfYiIsICJ0eXBlIjogIlNUUklORyIsICJ3aWRnZXQiOiB7Im5hbWUiOiAic3RyaW5nX2IifSwgImxpbmsiOiA2N31dLCAib3V0cHV0cyI6IFt7Im5hbWUiOiAiU1RSSU5HIiwgInR5cGUiOiAiU1RSSU5HIiwgImxpbmtzIjogWzY2XX1dLCAicHJvcGVydGllcyI6IHsiY25yX2lkIjogImNvbWZ5LWNvcmUiLCAidmVyIjogIjAuNy4wIiwgIk5vZGUgbmFtZSBmb3IgUyZSIjogIlN0cmluZ0NvbmNhdGVuYXRlIiwgImVuYWJsZVRhYnMiOiBmYWxzZSwgInRhYldpZHRoIjogNjUsICJ0YWJYT2Zmc2V0IjogMTAsICJoYXNTZWNvbmRUYWIiOiBmYWxzZSwgInNlY29uZFRhYlRleHQiOiAiU2VuZCBCYWNrIiwgInNlY29uZFRhYk9mZnNldCI6IDgwLCAic2Vjb25kVGFiV2lkdGgiOiA2NX0sICJ3aWRnZXRzX3ZhbHVlcyI6IFsiUGl4ZWwgYXJ0IHN0eWxlLCIsICIiLCAiIl19LCB7ImlkIjogNTksICJ0eXBlIjogImQwOTdiNjQ1LTRkM2EtNGJiNy04YjBlLTcwZTYwMWNmMDdjOSIsICJwb3MiOiBbNzIwLCA2MzBdLCAic2l6ZSI6IFs0MDAsIDQ3MF0sICJmbGFncyI6IHt9LCAib3JkZXIiOiA1LCAibW9kZSI6IDQsICJpbnB1dHMiOiBbeyJuYW1lIjogInRleHQiLCAidHlwZSI6ICJTVFJJTkciLCAid2lkZ2V0IjogeyJuYW1lIjogInRleHQifSwgImxpbmsiOiA2Nn0sIHsibGFiZWwiOiAibG9yYV9zdHJlbmd0aCIsICJuYW1lIjogInN0cmVuZ3RoX21vZGVsIiwgInR5cGUiOiAiRkxPQVQiLCAid2lkZ2V0IjogeyJuYW1lIjogInN0cmVuZ3RoX21vZGVsIn0sICJsaW5rIjogbnVsbH1dLCAib3V0cHV0cyI6IFt7Im5hbWUiOiAiSU1BR0UiLCAidHlwZSI6ICJJTUFHRSIsICJsaW5rcyI6IFs2NV19XSwgInByb3BlcnRpZXMiOiB7InByb3h5V2lkZ2V0cyI6IFtbIi0xIiwgInRleHQiXSwgWyItMSIsICJ3aWR0aCJdLCBbIi0xIiwgImhlaWdodCJdLCBbIi0xIiwgImxvcmFfbmFtZSJdLCBbIi0xIiwgInN0cmVuZ3RoX21vZGVsIl0sIFsiMyIsICJzZWVkIl0sIFsiMyIsICJjb250cm9sX2FmdGVyX2dlbmVyYXRlIl1dLCAiY25yX2lkIjogImNvbWZ5LWNvcmUiLCAidmVyIjogIjAuMy43MyIsICJlbmFibGVUYWJzIjogZmFsc2UsICJ0YWJXaWR0aCI6IDY1LCAidGFiWE9mZnNldCI6IDEwLCAiaGFzU2Vjb25kVGFiIjogZmFsc2UsICJzZWNvbmRUYWJUZXh0IjogIlNlbmQgQmFjayIsICJzZWNvbmRUYWJPZmZzZXQiOiA4MCwgInNlY29uZFRhYldpZHRoIjogNjV9LCAid2lkZ2V0c192YWx1ZXMiOiBbIiIsIDEwMjQsIDEwMjQsICJwaXhlbF9hcnRfc3R5bGVfel9pbWFnZV90dXJiby5zYWZldGVuc29ycyIsIDFdfSwgeyJpZCI6IDksICJ0eXBlIjogIlNhdmVJbWFnZSIsICJwb3MiOiBbMTE2MCwgLTExMF0sICJzaXplIjogWzc4MCwgNjYwXSwgImZsYWdzIjoge30sICJvcmRlciI6IDQsICJtb2RlIjogMCwgImlucHV0cyI6IFt7Im5hbWUiOiAiaW1hZ2VzIiwgInR5cGUiOiAiSU1BR0UiLCAibGluayI6IDYyfV0sICJvdXRwdXRzIjogW10sICJwcm9wZXJ0aWVzIjogeyJjbnJfaWQiOiAiY29tZnktY29yZSIsICJ2ZXIiOiAiMC4zLjY0IiwgIk5vZGUgbmFtZSBmb3IgUyZSIjogIlNhdmVJbWFnZSIsICJlbmFibGVUYWJzIjogZmFsc2UsICJ0YWJXaWR0aCI6IDY1LCAidGFiWE9mZnNldCI6IDEwLCAiaGFzU2Vjb25kVGFiIjogZmFsc2UsICJzZWNvbmRUYWJUZXh0IjogIlNlbmQgQmFjayIsICJzZWNvbmRUYWJPZmZzZXQiOiA4MCwgInNlY29uZFRhYldpZHRoIjogNjV9LCAid2lkZ2V0c192YWx1ZXMiOiBbIlBST0pFQ1RTLzI2MDFfVEVTVC8wMl9PVVQvSU1BR0VTLzI2MDIwNy9UZXN0L1pfSW1hZ2VfVHVyYm8vMjYwMjA3X1Rlc3RfIl19LCB7ImlkIjogNTcsICJ0eXBlIjogImYyZmRlYmY2LWRmYWYtNDNiNi05ZWIyLTdmNzA2MTNjZmRjMSIsICJwb3MiOiBbNzIwLCAtMTEwXSwgInNpemUiOiBbNDAwLCA0NzBdLCAiZmxhZ3MiOiB7fSwgIm9yZGVyIjogMiwgIm1vZGUiOiAwLCAiaW5wdXRzIjogW3sibGFiZWwiOiAicHJvbXB0IiwgIm5hbWUiOiAidGV4dCIsICJ0eXBlIjogIlNUUklORyIsICJ3aWRnZXQiOiB7Im5hbWUiOiAidGV4dCJ9LCAibGluayI6IDYzfV0sICJvdXRwdXRzIjogW3sibmFtZSI6ICJJTUFHRSIsICJ0eXBlIjogIklNQUdFIiwgImxpbmtzIjogWzYyXX1dLCAicHJvcGVydGllcyI6IHsicHJveHlXaWRnZXRzIjogW1siLTEiLCAidGV4dCJdLCBbIi0xIiwgIndpZHRoIl0sIFsiLTEiLCAiaGVpZ2h0Il0sIFsiMyIsICJzZWVkIl0sIFsiMyIsICJjb250cm9sX2FmdGVyX2dlbmVyYXRlIl1dLCAiY25yX2lkIjogImNvbWZ5LWNvcmUiLCAidmVyIjogIjAuMy43MyIsICJlbmFibGVUYWJzIjogZmFsc2UsICJ0YWJXaWR0aCI6IDY1LCAidGFiWE9mZnNldCI6IDEwLCAiaGFzU2Vjb25kVGFiIjogZmFsc2UsICJzZWNvbmRUYWJUZXh0IjogIlNlbmQgQmFjayIsICJzZWNvbmRUYWJPZmZzZXQiOiA4MCwgInNlY29uZFRhYldpZHRoIjogNjV9LCAid2lkZ2V0c192YWx1ZXMiOiBbIiIsIDEyODAsIDcyMF19LCB7ImlkIjogNTgsICJ0eXBlIjogIlByaW1pdGl2ZVN0cmluZ011bHRpbGluZSIsICJwb3MiOiBbMTUwLjI0MzUyNzQ4ODI2NTk1LCAtMzMuNTM5MjMyMTU0MTYxOTY1XSwgInNpemUiOiBbNDAwLCAyMDBdLCAiZmxhZ3MiOiB7fSwgIm9yZGVyIjogMSwgIm1vZGUiOiAwLCAiaW5wdXRzIjogW10sICJvdXRwdXRzIjogW3sibmFtZSI6ICJTVFJJTkciLCAidHlwZSI6ICJTVFJJTkciLCAibGlua3MiOiBbNjMsIDY3XX1dLCAidGl0bGUiOiAiUHJvbXB0IiwgInByb3BlcnRpZXMiOiB7ImNucl9pZCI6ICJjb21meS1jb3JlIiwgInZlciI6ICIwLjcuMCIsICJOb2RlIG5hbWUgZm9yIFMmUiI6ICJQcmltaXRpdmVTdHJpbmdNdWx0aWxpbmUiLCAiZW5hYmxlVGFicyI6IGZhbHNlLCAidGFiV2lkdGgiOiA2NSwgInRhYlhPZmZzZXQiOiAxMCwgImhhc1NlY29uZFRhYiI6IGZhbHNlLCAic2Vjb25kVGFiVGV4dCI6ICJTZW5kIEJhY2siLCAic2Vjb25kVGFiT2Zmc2V0IjogODAsICJzZWNvbmRUYWJXaWR0aCI6IDY1fSwgIndpZGdldHNfdmFsdWVzIjogWyJCbHVycnkgY3V0ZSBzbWFsbCBkaW5vc2F1cnVzIGxpa2UgY3JlYXR1cmUgc2lsaG91ZXR0ZSB3aXRoIGhlYWRwaG9uZSBpbiBhIGNpbmVtYXRpYyBzbG93LXNodXR0ZXIgcGFuLCB3YXJtIGJhY2tsaXQgc3Vuc2V0IGdyYWRpZW50IGZyb20gZGVlcCByZWQgdG8gb3JhbmdlIGFuZCBnb2xkLCBnbG93aW5nIGhhemUgYW5kIGJsb29tLCByaW0tbGl0IGhhaXIgaGFsbywgZ2VudGxlIG1vdGlvbi1ibHVyIHRyYWlsLCBzb2Z0LWZvY3VzIGZhY2lhbCBmZWF0dXJlcywgc3VidGxlIGZpbG0gZ3JhaW4sIGF0bW9zcGhlcmljIGZvZywgc2hhbGxvdyBkZXB0aCBvZiBmaWVsZCwgbWluaW1hbCBjb21wb3NpdGlvbiwgZHJlYW15IG5vc3RhbGdpYyBtb29kLCB2aW50YWdlIGxlbnMgc29mdG5lc3MgYW5kIHNtb290aCBjb2xvciB0cmFuc2l0aW9ucy4iXX1dLCAibGlua3MiOiBbWzYyLCA1NywgMCwgOSwgMCwgIklNQUdFIl0sIFs2MywgNTgsIDAsIDU3LCAwLCAiU1RSSU5HIl0sIFs2NSwgNTksIDAsIDYwLCAwLCAiSU1BR0UiXSwgWzY2LCA2MSwgMCwgNTksIDAsICJTVFJJTkciXSwgWzY3LCA1OCwgMCwgNjEsIDAsICJTVFJJTkciXV0sICJncm91cHMiOiBbXSwgImRlZmluaXRpb25zIjogeyJzdWJncmFwaHMiOiBbeyJpZCI6ICJmMmZkZWJmNi1kZmFmLTQzYjYtOWViMi03ZjcwNjEzY2ZkYzEiLCAidmVyc2lvbiI6IDEsICJzdGF0ZSI6IHsibGFzdEdyb3VwSWQiOiA0LCAibGFzdE5vZGVJZCI6IDM0LCAibGFzdExpbmtJZCI6IDM3LCAibGFzdFJlcm91dGVJZCI6IDB9LCAicmV2aXNpb24iOiAwLCAiY29uZmlnIjoge30sICJuYW1lIjogIlRleHQgdG8gSW1hZ2UgKFotSW1hZ2UtVHVyYm8pIiwgImlucHV0Tm9kZSI6IHsiaWQiOiAtMTAsICJib3VuZGluZyI6IFstODAsIDQyNSwgMTIwLCAxMDBdfSwgIm91dHB1dE5vZGUiOiB7ImlkIjogLTIwLCAiYm91bmRpbmciOiBbMTQ5MCwgNDE1LCAxMjAsIDYwXX0sICJpbnB1dHMiOiBbeyJpZCI6ICJmYjE3ODY2OS1lNzQyLTRhNTMtOGE2OS03ZGY1OTgzNGRmZDgiLCAibmFtZSI6ICJ0ZXh0IiwgInR5cGUiOiAiU1RSSU5HIiwgImxpbmtJZHMiOiBbMzRdLCAibGFiZWwiOiAicHJvbXB0IiwgInBvcyI6IFsyMCwgNDQ1XX0sIHsiaWQiOiAiZGQ3ODBiM2MtMjNlOS00NmZmLTg0NjktMTU2MDA4ZjQyZTVhIiwgIm5hbWUiOiAid2lkdGgiLCAidHlwZSI6ICJJTlQiLCAibGlua0lkcyI6IFszNV0sICJwb3MiOiBbMjAsIDQ2NV19LCB7ImlkIjogIjdiMDhkNTQ2LTZiYjAtNGVmOS04MmU5LWZmYWU1ZTFlZTZiYyIsICJuYW1lIjogImhlaWdodCIsICJ0eXBlIjogIklOVCIsICJsaW5rSWRzIjogWzM2XSwgInBvcyI6IFsyMCwgNDg1XX1dLCAib3V0cHV0cyI6IFt7ImlkIjogIjFmYTcyYTIxLWNlMDAtNDk1Mi04MTRlLTFmMmZmYmU4N2QxZCIsICJuYW1lIjogIklNQUdFIiwgInR5cGUiOiAiSU1BR0UiLCAibGlua0lkcyI6IFsxNl0sICJsb2NhbGl6ZWRfbmFtZSI6ICJJTUFHRSIsICJwb3MiOiBbMTUxMCwgNDM1XX1dLCAid2lkZ2V0cyI6IFtdLCAibm9kZXMiOiBbeyJpZCI6IDMwLCAidHlwZSI6ICJDTElQTG9hZGVyIiwgInBvcyI6IFsxMTAsIDMzMF0sICJzaXplIjogWzI3MCwgMTA2XSwgImZsYWdzIjoge30sICJvcmRlciI6IDAsICJtb2RlIjogMCwgImlucHV0cyI6IFtdLCAib3V0cHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogIkNMSVAiLCAibmFtZSI6ICJDTElQIiwgInR5cGUiOiAiQ0xJUCIsICJsaW5rcyI6IFsyOF19XSwgInByb3BlcnRpZXMiOiB7ImNucl9pZCI6ICJjb21meS1jb3JlIiwgInZlciI6ICIwLjMuNzMiLCAiTm9kZSBuYW1lIGZvciBTJlIiOiAiQ0xJUExvYWRlciIsICJtb2RlbHMiOiBbeyJuYW1lIjogInF3ZW5fM180Yi5zYWZldGVuc29ycyIsICJ1cmwiOiAiaHR0cHM6Ly9odWdnaW5nZmFjZS5jby9Db21meS1Pcmcvel9pbWFnZV90dXJiby9yZXNvbHZlL21haW4vc3BsaXRfZmlsZXMvdGV4dF9lbmNvZGVycy9xd2VuXzNfNGIuc2FmZXRlbnNvcnMiLCAiZGlyZWN0b3J5IjogInRleHRfZW5jb2RlcnMifV0sICJlbmFibGVUYWJzIjogZmFsc2UsICJ0YWJXaWR0aCI6IDY1LCAidGFiWE9mZnNldCI6IDEwLCAiaGFzU2Vjb25kVGFiIjogZmFsc2UsICJzZWNvbmRUYWJUZXh0IjogIlNlbmQgQmFjayIsICJzZWNvbmRUYWJPZmZzZXQiOiA4MCwgInNlY29uZFRhYldpZHRoIjogNjV9LCAid2lkZ2V0c192YWx1ZXMiOiBbInF3ZW5fM180Yi5zYWZldGVuc29ycyIsICJsdW1pbmEyIiwgImRlZmF1bHQiXX0sIHsiaWQiOiAyOSwgInR5cGUiOiAiVkFFTG9hZGVyIiwgInBvcyI6IFsxMTAsIDQ4MF0sICJzaXplIjogWzI3MCwgNThdLCAiZmxhZ3MiOiB7fSwgIm9yZGVyIjogMSwgIm1vZGUiOiAwLCAiaW5wdXRzIjogW10sICJvdXRwdXRzIjogW3sibG9jYWxpemVkX25hbWUiOiAiVkFFIiwgIm5hbWUiOiAiVkFFIiwgInR5cGUiOiAiVkFFIiwgImxpbmtzIjogWzI3XX1dLCAicHJvcGVydGllcyI6IHsiY25yX2lkIjogImNvbWZ5LWNvcmUiLCAidmVyIjogIjAuMy43MyIsICJOb2RlIG5hbWUgZm9yIFMmUiI6ICJWQUVMb2FkZXIiLCAibW9kZWxzIjogW3sibmFtZSI6ICJhZS5zYWZldGVuc29ycyIsICJ1cmwiOiAiaHR0cHM6Ly9odWdnaW5nZmFjZS5jby9Db21meS1Pcmcvel9pbWFnZV90dXJiby9yZXNvbHZlL21haW4vc3BsaXRfZmlsZXMvdmFlL2FlLnNhZmV0ZW5zb3JzIiwgImRpcmVjdG9yeSI6ICJ2YWUifV0sICJlbmFibGVUYWJzIjogZmFsc2UsICJ0YWJXaWR0aCI6IDY1LCAidGFiWE9mZnNldCI6IDEwLCAiaGFzU2Vjb25kVGFiIjogZmFsc2UsICJzZWNvbmRUYWJUZXh0IjogIlNlbmQgQmFjayIsICJzZWNvbmRUYWJPZmZzZXQiOiA4MCwgInNlY29uZFRhYldpZHRoIjogNjV9LCAid2lkZ2V0c192YWx1ZXMiOiBbImFlLnNhZmV0ZW5zb3JzIl19LCB7ImlkIjogMzMsICJ0eXBlIjogIkNvbmRpdGlvbmluZ1plcm9PdXQiLCAicG9zIjogWzY0MCwgNjIwXSwgInNpemUiOiBbMjA0LjEzNDc2NTYyNSwgMjZdLCAiZmxhZ3MiOiB7fSwgIm9yZGVyIjogOCwgIm1vZGUiOiAwLCAiaW5wdXRzIjogW3sibG9jYWxpemVkX25hbWUiOiAiY29uZGl0aW9uaW5nIiwgIm5hbWUiOiAiY29uZGl0aW9uaW5nIiwgInR5cGUiOiAiQ09ORElUSU9OSU5HIiwgImxpbmsiOiAzMn1dLCAib3V0cHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogIkNPTkRJVElPTklORyIsICJuYW1lIjogIkNPTkRJVElPTklORyIsICJ0eXBlIjogIkNPTkRJVElPTklORyIsICJsaW5rcyI6IFszM119XSwgInByb3BlcnRpZXMiOiB7ImNucl9pZCI6ICJjb21meS1jb3JlIiwgInZlciI6ICIwLjMuNzMiLCAiTm9kZSBuYW1lIGZvciBTJlIiOiAiQ29uZGl0aW9uaW5nWmVyb091dCIsICJlbmFibGVUYWJzIjogZmFsc2UsICJ0YWJXaWR0aCI6IDY1LCAidGFiWE9mZnNldCI6IDEwLCAiaGFzU2Vjb25kVGFiIjogZmFsc2UsICJzZWNvbmRUYWJUZXh0IjogIlNlbmQgQmFjayIsICJzZWNvbmRUYWJPZmZzZXQiOiA4MCwgInNlY29uZFRhYldpZHRoIjogNjV9LCAid2lkZ2V0c192YWx1ZXMiOiBbXX0sIHsiaWQiOiA4LCAidHlwZSI6ICJWQUVEZWNvZGUiLCAicG9zIjogWzEyMjAsIDE2MF0sICJzaXplIjogWzIxMCwgNDZdLCAiZmxhZ3MiOiB7fSwgIm9yZGVyIjogNSwgIm1vZGUiOiAwLCAiaW5wdXRzIjogW3sibG9jYWxpemVkX25hbWUiOiAic2FtcGxlcyIsICJuYW1lIjogInNhbXBsZXMiLCAidHlwZSI6ICJMQVRFTlQiLCAibGluayI6IDE0fSwgeyJsb2NhbGl6ZWRfbmFtZSI6ICJ2YWUiLCAibmFtZSI6ICJ2YWUiLCAidHlwZSI6ICJWQUUiLCAibGluayI6IDI3fV0sICJvdXRwdXRzIjogW3sibG9jYWxpemVkX25hbWUiOiAiSU1BR0UiLCAibmFtZSI6ICJJTUFHRSIsICJ0eXBlIjogIklNQUdFIiwgInNsb3RfaW5kZXgiOiAwLCAibGlua3MiOiBbMTZdfV0sICJwcm9wZXJ0aWVzIjogeyJjbnJfaWQiOiAiY29tZnktY29yZSIsICJ2ZXIiOiAiMC4zLjY0IiwgIk5vZGUgbmFtZSBmb3IgUyZSIjogIlZBRURlY29kZSIsICJlbmFibGVUYWJzIjogZmFsc2UsICJ0YWJXaWR0aCI6IDY1LCAidGFiWE9mZnNldCI6IDEwLCAiaGFzU2Vjb25kVGFiIjogZmFsc2UsICJzZWNvbmRUYWJUZXh0IjogIlNlbmQgQmFjayIsICJzZWNvbmRUYWJPZmZzZXQiOiA4MCwgInNlY29uZFRhYldpZHRoIjogNjV9LCAid2lkZ2V0c192YWx1ZXMiOiBbXX0sIHsiaWQiOiAyOCwgInR5cGUiOiAiVU5FVExvYWRlciIsICJwb3MiOiBbMTEwLCAyMDBdLCAic2l6ZSI6IFsyNzAsIDgyXSwgImZsYWdzIjoge30sICJvcmRlciI6IDIsICJtb2RlIjogMCwgImlucHV0cyI6IFtdLCAib3V0cHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogIk1PREVMIiwgIm5hbWUiOiAiTU9ERUwiLCAidHlwZSI6ICJNT0RFTCIsICJsaW5rcyI6IFsyNl19XSwgInByb3BlcnRpZXMiOiB7ImNucl9pZCI6ICJjb21meS1jb3JlIiwgInZlciI6ICIwLjMuNzMiLCAiTm9kZSBuYW1lIGZvciBTJlIiOiAiVU5FVExvYWRlciIsICJtb2RlbHMiOiBbeyJuYW1lIjogInpfaW1hZ2VfdHVyYm9fYmYxNi5zYWZldGVuc29ycyIsICJ1cmwiOiAiaHR0cHM6Ly9odWdnaW5nZmFjZS5jby9Db21meS1Pcmcvel9pbWFnZV90dXJiby9yZXNvbHZlL21haW4vc3BsaXRfZmlsZXMvZGlmZnVzaW9uX21vZGVscy96X2ltYWdlX3R1cmJvX2JmMTYuc2FmZXRlbnNvcnMiLCAiZGlyZWN0b3J5IjogImRpZmZ1c2lvbl9tb2RlbHMifV0sICJlbmFibGVUYWJzIjogZmFsc2UsICJ0YWJXaWR0aCI6IDY1LCAidGFiWE9mZnNldCI6IDEwLCAiaGFzU2Vjb25kVGFiIjogZmFsc2UsICJzZWNvbmRUYWJUZXh0IjogIlNlbmQgQmFjayIsICJzZWNvbmRUYWJPZmZzZXQiOiA4MCwgInNlY29uZFRhYldpZHRoIjogNjV9LCAid2lkZ2V0c192YWx1ZXMiOiBbInpfaW1hZ2VfdHVyYm9fYmYxNi5zYWZldGVuc29ycyIsICJkZWZhdWx0Il0sICJjb2xvciI6ICIjRkYwMDAwIn0sIHsiaWQiOiAyNywgInR5cGUiOiAiQ0xJUFRleHRFbmNvZGUiLCAicG9zIjogWzQzMCwgMjAwXSwgInNpemUiOiBbNDEwLCAzNzBdLCAiZmxhZ3MiOiB7fSwgIm9yZGVyIjogNywgIm1vZGUiOiAwLCAiaW5wdXRzIjogW3sibG9jYWxpemVkX25hbWUiOiAiY2xpcCIsICJuYW1lIjogImNsaXAiLCAidHlwZSI6ICJDTElQIiwgImxpbmsiOiAyOH0sIHsibG9jYWxpemVkX25hbWUiOiAidGV4dCIsICJuYW1lIjogInRleHQiLCAidHlwZSI6ICJTVFJJTkciLCAid2lkZ2V0IjogeyJuYW1lIjogInRleHQifSwgImxpbmsiOiAzNH1dLCAib3V0cHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogIkNPTkRJVElPTklORyIsICJuYW1lIjogIkNPTkRJVElPTklORyIsICJ0eXBlIjogIkNPTkRJVElPTklORyIsICJsaW5rcyI6IFszMCwgMzJdfV0sICJwcm9wZXJ0aWVzIjogeyJjbnJfaWQiOiAiY29tZnktY29yZSIsICJ2ZXIiOiAiMC4zLjczIiwgIk5vZGUgbmFtZSBmb3IgUyZSIjogIkNMSVBUZXh0RW5jb2RlIiwgImVuYWJsZVRhYnMiOiBmYWxzZSwgInRhYldpZHRoIjogNjUsICJ0YWJYT2Zmc2V0IjogMTAsICJoYXNTZWNvbmRUYWIiOiBmYWxzZSwgInNlY29uZFRhYlRleHQiOiAiU2VuZCBCYWNrIiwgInNlY29uZFRhYk9mZnNldCI6IDgwLCAic2Vjb25kVGFiV2lkdGgiOiA2NX0sICJ3aWRnZXRzX3ZhbHVlcyI6IFsiIl19LCB7ImlkIjogMTMsICJ0eXBlIjogIkVtcHR5U0QzTGF0ZW50SW1hZ2UiLCAicG9zIjogWzExMCwgNjMwXSwgInNpemUiOiBbMjYwLCAxMTBdLCAiZmxhZ3MiOiB7fSwgIm9yZGVyIjogNiwgIm1vZGUiOiAwLCAiaW5wdXRzIjogW3sibG9jYWxpemVkX25hbWUiOiAid2lkdGgiLCAibmFtZSI6ICJ3aWR0aCIsICJ0eXBlIjogIklOVCIsICJ3aWRnZXQiOiB7Im5hbWUiOiAid2lkdGgifSwgImxpbmsiOiAzNX0sIHsibG9jYWxpemVkX25hbWUiOiAiaGVpZ2h0IiwgIm5hbWUiOiAiaGVpZ2h0IiwgInR5cGUiOiAiSU5UIiwgIndpZGdldCI6IHsibmFtZSI6ICJoZWlnaHQifSwgImxpbmsiOiAzNn1dLCAib3V0cHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogIkxBVEVOVCIsICJuYW1lIjogIkxBVEVOVCIsICJ0eXBlIjogIkxBVEVOVCIsICJzbG90X2luZGV4IjogMCwgImxpbmtzIjogWzE3XX1dLCAicHJvcGVydGllcyI6IHsiY25yX2lkIjogImNvbWZ5LWNvcmUiLCAidmVyIjogIjAuMy42NCIsICJOb2RlIG5hbWUgZm9yIFMmUiI6ICJFbXB0eVNEM0xhdGVudEltYWdlIiwgImVuYWJsZVRhYnMiOiBmYWxzZSwgInRhYldpZHRoIjogNjUsICJ0YWJYT2Zmc2V0IjogMTAsICJoYXNTZWNvbmRUYWIiOiBmYWxzZSwgInNlY29uZFRhYlRleHQiOiAiU2VuZCBCYWNrIiwgInNlY29uZFRhYk9mZnNldCI6IDgwLCAic2Vjb25kVGFiV2lkdGgiOiA2NX0sICJ3aWRnZXRzX3ZhbHVlcyI6IFsxMjgwLCA3MjAsIDFdfSwgeyJpZCI6IDMsICJ0eXBlIjogIktTYW1wbGVyIiwgInBvcyI6IFs4ODAsIDI3MF0sICJzaXplIjogWzMxNSwgMjYyXSwgImZsYWdzIjoge30sICJvcmRlciI6IDQsICJtb2RlIjogMCwgImlucHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogIm1vZGVsIiwgIm5hbWUiOiAibW9kZWwiLCAidHlwZSI6ICJNT0RFTCIsICJsaW5rIjogMTN9LCB7ImxvY2FsaXplZF9uYW1lIjogInBvc2l0aXZlIiwgIm5hbWUiOiAicG9zaXRpdmUiLCAidHlwZSI6ICJDT05ESVRJT05JTkciLCAibGluayI6IDMwfSwgeyJsb2NhbGl6ZWRfbmFtZSI6ICJuZWdhdGl2ZSIsICJuYW1lIjogIm5lZ2F0aXZlIiwgInR5cGUiOiAiQ09ORElUSU9OSU5HIiwgImxpbmsiOiAzM30sIHsibG9jYWxpemVkX25hbWUiOiAibGF0ZW50X2ltYWdlIiwgIm5hbWUiOiAibGF0ZW50X2ltYWdlIiwgInR5cGUiOiAiTEFURU5UIiwgImxpbmsiOiAxN31dLCAib3V0cHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogIkxBVEVOVCIsICJuYW1lIjogIkxBVEVOVCIsICJ0eXBlIjogIkxBVEVOVCIsICJzbG90X2luZGV4IjogMCwgImxpbmtzIjogWzE0XX1dLCAicHJvcGVydGllcyI6IHsiY25yX2lkIjogImNvbWZ5LWNvcmUiLCAidmVyIjogIjAuMy42NCIsICJOb2RlIG5hbWUgZm9yIFMmUiI6ICJLU2FtcGxlciIsICJlbmFibGVUYWJzIjogZmFsc2UsICJ0YWJXaWR0aCI6IDY1LCAidGFiWE9mZnNldCI6IDEwLCAiaGFzU2Vjb25kVGFiIjogZmFsc2UsICJzZWNvbmRUYWJUZXh0IjogIlNlbmQgQmFjayIsICJzZWNvbmRUYWJPZmZzZXQiOiA4MCwgInNlY29uZFRhYldpZHRoIjogNjV9LCAid2lkZ2V0c192YWx1ZXMiOiBbNjQ5MjkyMTIyNzE4NjcxLCAicmFuZG9taXplIiwgNCwgMSwgInJlc19tdWx0aXN0ZXAiLCAic2ltcGxlIiwgMV19LCB7ImlkIjogMTEsICJ0eXBlIjogIk1vZGVsU2FtcGxpbmdBdXJhRmxvdyIsICJwb3MiOiBbODgwLCAxNjBdLCAic2l6ZSI6IFszMTAsIDYwXSwgImZsYWdzIjoge30sICJvcmRlciI6IDMsICJtb2RlIjogMCwgImlucHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogIm1vZGVsIiwgIm5hbWUiOiAibW9kZWwiLCAidHlwZSI6ICJNT0RFTCIsICJsaW5rIjogMjZ9XSwgIm91dHB1dHMiOiBbeyJsb2NhbGl6ZWRfbmFtZSI6ICJNT0RFTCIsICJuYW1lIjogIk1PREVMIiwgInR5cGUiOiAiTU9ERUwiLCAic2xvdF9pbmRleCI6IDAsICJsaW5rcyI6IFsxM119XSwgInByb3BlcnRpZXMiOiB7ImNucl9pZCI6ICJjb21meS1jb3JlIiwgInZlciI6ICIwLjMuNjQiLCAiTm9kZSBuYW1lIGZvciBTJlIiOiAiTW9kZWxTYW1wbGluZ0F1cmFGbG93IiwgImVuYWJsZVRhYnMiOiBmYWxzZSwgInRhYldpZHRoIjogNjUsICJ0YWJYT2Zmc2V0IjogMTAsICJoYXNTZWNvbmRUYWIiOiBmYWxzZSwgInNlY29uZFRhYlRleHQiOiAiU2VuZCBCYWNrIiwgInNlY29uZFRhYk9mZnNldCI6IDgwLCAic2Vjb25kVGFiV2lkdGgiOiA2NX0sICJ3aWRnZXRzX3ZhbHVlcyI6IFszXX1dLCAiZ3JvdXBzIjogW3siaWQiOiAyLCAidGl0bGUiOiAiU3RlcDIgLSBJbWFnZSBzaXplIiwgImJvdW5kaW5nIjogWzEwMCwgNTYwLCAyOTAsIDIwMF0sICJjb2xvciI6ICIjM2Y3ODllIiwgImZvbnRfc2l6ZSI6IDI0LCAiZmxhZ3MiOiB7fX0sIHsiaWQiOiAzLCAidGl0bGUiOiAiU3RlcDMgLSBQcm9tcHQiLCAiYm91bmRpbmciOiBbNDEwLCAxMzAsIDQ1MCwgNTQwXSwgImNvbG9yIjogIiMzZjc4OWUiLCAiZm9udF9zaXplIjogMjQsICJmbGFncyI6IHt9fSwgeyJpZCI6IDQsICJ0aXRsZSI6ICJTdGVwMSAtIExvYWQgbW9kZWxzIiwgImJvdW5kaW5nIjogWzEwMCwgMTMwLCAyOTAsIDQxMy42XSwgImNvbG9yIjogIiMzZjc4OWUiLCAiZm9udF9zaXplIjogMjQsICJmbGFncyI6IHt9fV0sICJsaW5rcyI6IFt7ImlkIjogMzIsICJvcmlnaW5faWQiOiAyNywgIm9yaWdpbl9zbG90IjogMCwgInRhcmdldF9pZCI6IDMzLCAidGFyZ2V0X3Nsb3QiOiAwLCAidHlwZSI6ICJDT05ESVRJT05JTkcifSwgeyJpZCI6IDI2LCAib3JpZ2luX2lkIjogMjgsICJvcmlnaW5fc2xvdCI6IDAsICJ0YXJnZXRfaWQiOiAxMSwgInRhcmdldF9zbG90IjogMCwgInR5cGUiOiAiTU9ERUwifSwgeyJpZCI6IDE0LCAib3JpZ2luX2lkIjogMywgIm9yaWdpbl9zbG90IjogMCwgInRhcmdldF9pZCI6IDgsICJ0YXJnZXRfc2xvdCI6IDAsICJ0eXBlIjogIkxBVEVOVCJ9LCB7ImlkIjogMjcsICJvcmlnaW5faWQiOiAyOSwgIm9yaWdpbl9zbG90IjogMCwgInRhcmdldF9pZCI6IDgsICJ0YXJnZXRfc2xvdCI6IDEsICJ0eXBlIjogIlZBRSJ9LCB7ImlkIjogMTMsICJvcmlnaW5faWQiOiAxMSwgIm9yaWdpbl9zbG90IjogMCwgInRhcmdldF9pZCI6IDMsICJ0YXJnZXRfc2xvdCI6IDAsICJ0eXBlIjogIk1PREVMIn0sIHsiaWQiOiAzMCwgIm9yaWdpbl9pZCI6IDI3LCAib3JpZ2luX3Nsb3QiOiAwLCAidGFyZ2V0X2lkIjogMywgInRhcmdldF9zbG90IjogMSwgInR5cGUiOiAiQ09ORElUSU9OSU5HIn0sIHsiaWQiOiAzMywgIm9yaWdpbl9pZCI6IDMzLCAib3JpZ2luX3Nsb3QiOiAwLCAidGFyZ2V0X2lkIjogMywgInRhcmdldF9zbG90IjogMiwgInR5cGUiOiAiQ09ORElUSU9OSU5HIn0sIHsiaWQiOiAxNywgIm9yaWdpbl9pZCI6IDEzLCAib3JpZ2luX3Nsb3QiOiAwLCAidGFyZ2V0X2lkIjogMywgInRhcmdldF9zbG90IjogMywgInR5cGUiOiAiTEFURU5UIn0sIHsiaWQiOiAyOCwgIm9yaWdpbl9pZCI6IDMwLCAib3JpZ2luX3Nsb3QiOiAwLCAidGFyZ2V0X2lkIjogMjcsICJ0YXJnZXRfc2xvdCI6IDAsICJ0eXBlIjogIkNMSVAifSwgeyJpZCI6IDE2LCAib3JpZ2luX2lkIjogOCwgIm9yaWdpbl9zbG90IjogMCwgInRhcmdldF9pZCI6IC0yMCwgInRhcmdldF9zbG90IjogMCwgInR5cGUiOiAiSU1BR0UifSwgeyJpZCI6IDM0LCAib3JpZ2luX2lkIjogLTEwLCAib3JpZ2luX3Nsb3QiOiAwLCAidGFyZ2V0X2lkIjogMjcsICJ0YXJnZXRfc2xvdCI6IDEsICJ0eXBlIjogIlNUUklORyJ9LCB7ImlkIjogMzUsICJvcmlnaW5faWQiOiAtMTAsICJvcmlnaW5fc2xvdCI6IDEsICJ0YXJnZXRfaWQiOiAxMywgInRhcmdldF9zbG90IjogMCwgInR5cGUiOiAiSU5UIn0sIHsiaWQiOiAzNiwgIm9yaWdpbl9pZCI6IC0xMCwgIm9yaWdpbl9zbG90IjogMiwgInRhcmdldF9pZCI6IDEzLCAidGFyZ2V0X3Nsb3QiOiAxLCAidHlwZSI6ICJJTlQifV0sICJleHRyYSI6IHsid29ya2Zsb3dSZW5kZXJlclZlcnNpb24iOiAiTEcifX0sIHsiaWQiOiAiZDA5N2I2NDUtNGQzYS00YmI3LThiMGUtNzBlNjAxY2YwN2M5IiwgInZlcnNpb24iOiAxLCAic3RhdGUiOiB7Imxhc3RHcm91cElkIjogNCwgImxhc3ROb2RlSWQiOiAzNiwgImxhc3RMaW5rSWQiOiA0MSwgImxhc3RSZXJvdXRlSWQiOiAwfSwgInJldmlzaW9uIjogMCwgImNvbmZpZyI6IHt9LCAibmFtZSI6ICJUZXh0IHRvIEltYWdlIChaLUltYWdlLVR1cmJvIHdpdGggTG9SQSkiLCAiaW5wdXROb2RlIjogeyJpZCI6IC0xMCwgImJvdW5kaW5nIjogWy04MCwgNDI1LCAxMjAsIDE0MF19LCAib3V0cHV0Tm9kZSI6IHsiaWQiOiAtMjAsICJib3VuZGluZyI6IFsxNDkwLCA0MTUsIDEyMCwgNjBdfSwgImlucHV0cyI6IFt7ImlkIjogImZiMTc4NjY5LWU3NDItNGE1My04YTY5LTdkZjU5ODM0ZGZkOCIsICJuYW1lIjogInRleHQiLCAidHlwZSI6ICJTVFJJTkciLCAibGlua0lkcyI6IFszNF0sICJwb3MiOiBbMjAsIDQ0NV19LCB7ImlkIjogImRkNzgwYjNjLTIzZTktNDZmZi04NDY5LTE1NjAwOGY0MmU1YSIsICJuYW1lIjogIndpZHRoIiwgInR5cGUiOiAiSU5UIiwgImxpbmtJZHMiOiBbMzVdLCAicG9zIjogWzIwLCA0NjVdfSwgeyJpZCI6ICI3YjA4ZDU0Ni02YmIwLTRlZjktODJlOS1mZmFlNWUxZWU2YmMiLCAibmFtZSI6ICJoZWlnaHQiLCAidHlwZSI6ICJJTlQiLCAibGlua0lkcyI6IFszNl0sICJwb3MiOiBbMjAsIDQ4NV19LCB7ImlkIjogIjg0MGNkNTMxLWZmYzUtNDk0OS04OTg2LTM5YjIyNzI1ZDZlYSIsICJuYW1lIjogImxvcmFfbmFtZSIsICJ0eXBlIjogIkNPTUJPIiwgImxpbmtJZHMiOiBbNDBdLCAicG9zIjogWzIwLCA1MDVdfSwgeyJpZCI6ICIzOGM5ZWMwNy1jN2UzLTQyMGMtOGFkNS0zMWVmYmQxMmUyNTgiLCAibmFtZSI6ICJzdHJlbmd0aF9tb2RlbCIsICJ0eXBlIjogIkZMT0FUIiwgImxpbmtJZHMiOiBbNDFdLCAibGFiZWwiOiAibG9yYV9zdHJlbmd0aCIsICJwb3MiOiBbMjAsIDUyNV19XSwgIm91dHB1dHMiOiBbeyJpZCI6ICIxZmE3MmEyMS1jZTAwLTQ5NTItODE0ZS0xZjJmZmJlODdkMWQiLCAibmFtZSI6ICJJTUFHRSIsICJ0eXBlIjogIklNQUdFIiwgImxpbmtJZHMiOiBbMTZdLCAibG9jYWxpemVkX25hbWUiOiAiSU1BR0UiLCAicG9zIjogWzE1MTAsIDQzNV19XSwgIndpZGdldHMiOiBbXSwgIm5vZGVzIjogW3siaWQiOiAzMCwgInR5cGUiOiAiQ0xJUExvYWRlciIsICJwb3MiOiBbMTEwLCAzMzBdLCAic2l6ZSI6IFsyNzAsIDEwNl0sICJmbGFncyI6IHt9LCAib3JkZXIiOiAwLCAibW9kZSI6IDQsICJpbnB1dHMiOiBbXSwgIm91dHB1dHMiOiBbeyJsb2NhbGl6ZWRfbmFtZSI6ICJDTElQIiwgIm5hbWUiOiAiQ0xJUCIsICJ0eXBlIjogIkNMSVAiLCAibGlua3MiOiBbMjhdfV0sICJwcm9wZXJ0aWVzIjogeyJjbnJfaWQiOiAiY29tZnktY29yZSIsICJ2ZXIiOiAiMC4zLjczIiwgIk5vZGUgbmFtZSBmb3IgUyZSIjogIkNMSVBMb2FkZXIiLCAibW9kZWxzIjogW3sibmFtZSI6ICJxd2VuXzNfNGIuc2FmZXRlbnNvcnMiLCAidXJsIjogImh0dHBzOi8vaHVnZ2luZ2ZhY2UuY28vQ29tZnktT3JnL3pfaW1hZ2VfdHVyYm8vcmVzb2x2ZS9tYWluL3NwbGl0X2ZpbGVzL3RleHRfZW5jb2RlcnMvcXdlbl8zXzRiLnNhZmV0ZW5zb3JzIiwgImRpcmVjdG9yeSI6ICJ0ZXh0X2VuY29kZXJzIn1dLCAiZW5hYmxlVGFicyI6IGZhbHNlLCAidGFiV2lkdGgiOiA2NSwgInRhYlhPZmZzZXQiOiAxMCwgImhhc1NlY29uZFRhYiI6IGZhbHNlLCAic2Vjb25kVGFiVGV4dCI6ICJTZW5kIEJhY2siLCAic2Vjb25kVGFiT2Zmc2V0IjogODAsICJzZWNvbmRUYWJXaWR0aCI6IDY1fSwgIndpZGdldHNfdmFsdWVzIjogWyJxd2VuXzNfNGIuc2FmZXRlbnNvcnMiLCAibHVtaW5hMiIsICJkZWZhdWx0Il19LCB7ImlkIjogMjksICJ0eXBlIjogIlZBRUxvYWRlciIsICJwb3MiOiBbMTEwLCA0ODBdLCAic2l6ZSI6IFsyNzAsIDU4XSwgImZsYWdzIjoge30sICJvcmRlciI6IDEsICJtb2RlIjogNCwgImlucHV0cyI6IFtdLCAib3V0cHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogIlZBRSIsICJuYW1lIjogIlZBRSIsICJ0eXBlIjogIlZBRSIsICJsaW5rcyI6IFsyN119XSwgInByb3BlcnRpZXMiOiB7ImNucl9pZCI6ICJjb21meS1jb3JlIiwgInZlciI6ICIwLjMuNzMiLCAiTm9kZSBuYW1lIGZvciBTJlIiOiAiVkFFTG9hZGVyIiwgIm1vZGVscyI6IFt7Im5hbWUiOiAiYWUuc2FmZXRlbnNvcnMiLCAidXJsIjogImh0dHBzOi8vaHVnZ2luZ2ZhY2UuY28vQ29tZnktT3JnL3pfaW1hZ2VfdHVyYm8vcmVzb2x2ZS9tYWluL3NwbGl0X2ZpbGVzL3ZhZS9hZS5zYWZldGVuc29ycyIsICJkaXJlY3RvcnkiOiAidmFlIn1dLCAiZW5hYmxlVGFicyI6IGZhbHNlLCAidGFiV2lkdGgiOiA2NSwgInRhYlhPZmZzZXQiOiAxMCwgImhhc1NlY29uZFRhYiI6IGZhbHNlLCAic2Vjb25kVGFiVGV4dCI6ICJTZW5kIEJhY2siLCAic2Vjb25kVGFiT2Zmc2V0IjogODAsICJzZWNvbmRUYWJXaWR0aCI6IDY1fSwgIndpZGdldHNfdmFsdWVzIjogWyJhZS5zYWZldGVuc29ycyJdfSwgeyJpZCI6IDMzLCAidHlwZSI6ICJDb25kaXRpb25pbmdaZXJvT3V0IiwgInBvcyI6IFs2NDAsIDYyMF0sICJzaXplIjogWzIwNC4xMzQ3NjU2MjUsIDI2XSwgImZsYWdzIjoge30sICJvcmRlciI6IDksICJtb2RlIjogNCwgImlucHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogImNvbmRpdGlvbmluZyIsICJuYW1lIjogImNvbmRpdGlvbmluZyIsICJ0eXBlIjogIkNPTkRJVElPTklORyIsICJsaW5rIjogMzJ9XSwgIm91dHB1dHMiOiBbeyJsb2NhbGl6ZWRfbmFtZSI6ICJDT05ESVRJT05JTkciLCAibmFtZSI6ICJDT05ESVRJT05JTkciLCAidHlwZSI6ICJDT05ESVRJT05JTkciLCAibGlua3MiOiBbMzNdfV0sICJwcm9wZXJ0aWVzIjogeyJjbnJfaWQiOiAiY29tZnktY29yZSIsICJ2ZXIiOiAiMC4zLjczIiwgIk5vZGUgbmFtZSBmb3IgUyZSIjogIkNvbmRpdGlvbmluZ1plcm9PdXQiLCAiZW5hYmxlVGFicyI6IGZhbHNlLCAidGFiV2lkdGgiOiA2NSwgInRhYlhPZmZzZXQiOiAxMCwgImhhc1NlY29uZFRhYiI6IGZhbHNlLCAic2Vjb25kVGFiVGV4dCI6ICJTZW5kIEJhY2siLCAic2Vjb25kVGFiT2Zmc2V0IjogODAsICJzZWNvbmRUYWJXaWR0aCI6IDY1fSwgIndpZGdldHNfdmFsdWVzIjogW119LCB7ImlkIjogOCwgInR5cGUiOiAiVkFFRGVjb2RlIiwgInBvcyI6IFsxMjIwLCAxNjBdLCAic2l6ZSI6IFsyMTAsIDQ2XSwgImZsYWdzIjoge30sICJvcmRlciI6IDUsICJtb2RlIjogNCwgImlucHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogInNhbXBsZXMiLCAibmFtZSI6ICJzYW1wbGVzIiwgInR5cGUiOiAiTEFURU5UIiwgImxpbmsiOiAxNH0sIHsibG9jYWxpemVkX25hbWUiOiAidmFlIiwgIm5hbWUiOiAidmFlIiwgInR5cGUiOiAiVkFFIiwgImxpbmsiOiAyN31dLCAib3V0cHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogIklNQUdFIiwgIm5hbWUiOiAiSU1BR0UiLCAidHlwZSI6ICJJTUFHRSIsICJzbG90X2luZGV4IjogMCwgImxpbmtzIjogWzE2XX1dLCAicHJvcGVydGllcyI6IHsiY25yX2lkIjogImNvbWZ5LWNvcmUiLCAidmVyIjogIjAuMy42NCIsICJOb2RlIG5hbWUgZm9yIFMmUiI6ICJWQUVEZWNvZGUiLCAiZW5hYmxlVGFicyI6IGZhbHNlLCAidGFiV2lkdGgiOiA2NSwgInRhYlhPZmZzZXQiOiAxMCwgImhhc1NlY29uZFRhYiI6IGZhbHNlLCAic2Vjb25kVGFiVGV4dCI6ICJTZW5kIEJhY2siLCAic2Vjb25kVGFiT2Zmc2V0IjogODAsICJzZWNvbmRUYWJXaWR0aCI6IDY1fSwgIndpZGdldHNfdmFsdWVzIjogW119LCB7ImlkIjogMjcsICJ0eXBlIjogIkNMSVBUZXh0RW5jb2RlIiwgInBvcyI6IFs0MzAsIDIwMF0sICJzaXplIjogWzQxMCwgMzcwXSwgImZsYWdzIjoge30sICJvcmRlciI6IDgsICJtb2RlIjogNCwgImlucHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogImNsaXAiLCAibmFtZSI6ICJjbGlwIiwgInR5cGUiOiAiQ0xJUCIsICJsaW5rIjogMjh9LCB7ImxvY2FsaXplZF9uYW1lIjogInRleHQiLCAibmFtZSI6ICJ0ZXh0IiwgInR5cGUiOiAiU1RSSU5HIiwgIndpZGdldCI6IHsibmFtZSI6ICJ0ZXh0In0sICJsaW5rIjogMzR9XSwgIm91dHB1dHMiOiBbeyJsb2NhbGl6ZWRfbmFtZSI6ICJDT05ESVRJT05JTkciLCAibmFtZSI6ICJDT05ESVRJT05JTkciLCAidHlwZSI6ICJDT05ESVRJT05JTkciLCAibGlua3MiOiBbMzAsIDMyXX1dLCAicHJvcGVydGllcyI6IHsiY25yX2lkIjogImNvbWZ5LWNvcmUiLCAidmVyIjogIjAuMy43MyIsICJOb2RlIG5hbWUgZm9yIFMmUiI6ICJDTElQVGV4dEVuY29kZSIsICJlbmFibGVUYWJzIjogZmFsc2UsICJ0YWJXaWR0aCI6IDY1LCAidGFiWE9mZnNldCI6IDEwLCAiaGFzU2Vjb25kVGFiIjogZmFsc2UsICJzZWNvbmRUYWJUZXh0IjogIlNlbmQgQmFjayIsICJzZWNvbmRUYWJPZmZzZXQiOiA4MCwgInNlY29uZFRhYldpZHRoIjogNjV9LCAid2lkZ2V0c192YWx1ZXMiOiBbIiJdfSwgeyJpZCI6IDEzLCAidHlwZSI6ICJFbXB0eVNEM0xhdGVudEltYWdlIiwgInBvcyI6IFsxMTAsIDYzMF0sICJzaXplIjogWzI2MCwgMTEwXSwgImZsYWdzIjoge30sICJvcmRlciI6IDcsICJtb2RlIjogNCwgImlucHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogIndpZHRoIiwgIm5hbWUiOiAid2lkdGgiLCAidHlwZSI6ICJJTlQiLCAid2lkZ2V0IjogeyJuYW1lIjogIndpZHRoIn0sICJsaW5rIjogMzV9LCB7ImxvY2FsaXplZF9uYW1lIjogImhlaWdodCIsICJuYW1lIjogImhlaWdodCIsICJ0eXBlIjogIklOVCIsICJ3aWRnZXQiOiB7Im5hbWUiOiAiaGVpZ2h0In0sICJsaW5rIjogMzZ9XSwgIm91dHB1dHMiOiBbeyJsb2NhbGl6ZWRfbmFtZSI6ICJMQVRFTlQiLCAibmFtZSI6ICJMQVRFTlQiLCAidHlwZSI6ICJMQVRFTlQiLCAic2xvdF9pbmRleCI6IDAsICJsaW5rcyI6IFsxN119XSwgInByb3BlcnRpZXMiOiB7ImNucl9pZCI6ICJjb21meS1jb3JlIiwgInZlciI6ICIwLjMuNjQiLCAiTm9kZSBuYW1lIGZvciBTJlIiOiAiRW1wdHlTRDNMYXRlbnRJbWFnZSIsICJlbmFibGVUYWJzIjogZmFsc2UsICJ0YWJXaWR0aCI6IDY1LCAidGFiWE9mZnNldCI6IDEwLCAiaGFzU2Vjb25kVGFiIjogZmFsc2UsICJzZWNvbmRUYWJUZXh0IjogIlNlbmQgQmFjayIsICJzZWNvbmRUYWJPZmZzZXQiOiA4MCwgInNlY29uZFRhYldpZHRoIjogNjV9LCAid2lkZ2V0c192YWx1ZXMiOiBbMTAyNCwgMTAyNCwgMV19LCB7ImlkIjogMywgInR5cGUiOiAiS1NhbXBsZXIiLCAicG9zIjogWzg4MCwgMjcwXSwgInNpemUiOiBbMzE1LCAyNjJdLCAiZmxhZ3MiOiB7fSwgIm9yZGVyIjogNCwgIm1vZGUiOiA0LCAiaW5wdXRzIjogW3sibG9jYWxpemVkX25hbWUiOiAibW9kZWwiLCAibmFtZSI6ICJtb2RlbCIsICJ0eXBlIjogIk1PREVMIiwgImxpbmsiOiAxM30sIHsibG9jYWxpemVkX25hbWUiOiAicG9zaXRpdmUiLCAibmFtZSI6ICJwb3NpdGl2ZSIsICJ0eXBlIjogIkNPTkRJVElPTklORyIsICJsaW5rIjogMzB9LCB7ImxvY2FsaXplZF9uYW1lIjogIm5lZ2F0aXZlIiwgIm5hbWUiOiAibmVnYXRpdmUiLCAidHlwZSI6ICJDT05ESVRJT05JTkciLCAibGluayI6IDMzfSwgeyJsb2NhbGl6ZWRfbmFtZSI6ICJsYXRlbnRfaW1hZ2UiLCAibmFtZSI6ICJsYXRlbnRfaW1hZ2UiLCAidHlwZSI6ICJMQVRFTlQiLCAibGluayI6IDE3fV0sICJvdXRwdXRzIjogW3sibG9jYWxpemVkX25hbWUiOiAiTEFURU5UIiwgIm5hbWUiOiAiTEFURU5UIiwgInR5cGUiOiAiTEFURU5UIiwgInNsb3RfaW5kZXgiOiAwLCAibGlua3MiOiBbMTRdfV0sICJwcm9wZXJ0aWVzIjogeyJjbnJfaWQiOiAiY29tZnktY29yZSIsICJ2ZXIiOiAiMC4zLjY0IiwgIk5vZGUgbmFtZSBmb3IgUyZSIjogIktTYW1wbGVyIiwgImVuYWJsZVRhYnMiOiBmYWxzZSwgInRhYldpZHRoIjogNjUsICJ0YWJYT2Zmc2V0IjogMTAsICJoYXNTZWNvbmRUYWIiOiBmYWxzZSwgInNlY29uZFRhYlRleHQiOiAiU2VuZCBCYWNrIiwgInNlY29uZFRhYk9mZnNldCI6IDgwLCAic2Vjb25kVGFiV2lkdGgiOiA2NX0sICJ3aWRnZXRzX3ZhbHVlcyI6IFsyNDEwNjI3OTQzNjk1OTUsICJyYW5kb21pemUiLCA0LCAxLCAicmVzX211bHRpc3RlcCIsICJzaW1wbGUiLCAxXX0sIHsiaWQiOiAyOCwgInR5cGUiOiAiVU5FVExvYWRlciIsICJwb3MiOiBbMTEwLCAyMDBdLCAic2l6ZSI6IFsyNzAsIDgyXSwgImZsYWdzIjoge30sICJvcmRlciI6IDIsICJtb2RlIjogNCwgImlucHV0cyI6IFtdLCAib3V0cHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogIk1PREVMIiwgIm5hbWUiOiAiTU9ERUwiLCAidHlwZSI6ICJNT0RFTCIsICJsaW5rcyI6IFszOF19XSwgInByb3BlcnRpZXMiOiB7ImNucl9pZCI6ICJjb21meS1jb3JlIiwgInZlciI6ICIwLjMuNzMiLCAiTm9kZSBuYW1lIGZvciBTJlIiOiAiVU5FVExvYWRlciIsICJtb2RlbHMiOiBbeyJuYW1lIjogInpfaW1hZ2VfdHVyYm9fYmYxNi5zYWZldGVuc29ycyIsICJ1cmwiOiAiaHR0cHM6Ly9odWdnaW5nZmFjZS5jby9Db21meS1Pcmcvel9pbWFnZV90dXJiby9yZXNvbHZlL21haW4vc3BsaXRfZmlsZXMvZGlmZnVzaW9uX21vZGVscy96X2ltYWdlX3R1cmJvX2JmMTYuc2FmZXRlbnNvcnMiLCAiZGlyZWN0b3J5IjogImRpZmZ1c2lvbl9tb2RlbHMifV0sICJlbmFibGVUYWJzIjogZmFsc2UsICJ0YWJXaWR0aCI6IDY1LCAidGFiWE9mZnNldCI6IDEwLCAiaGFzU2Vjb25kVGFiIjogZmFsc2UsICJzZWNvbmRUYWJUZXh0IjogIlNlbmQgQmFjayIsICJzZWNvbmRUYWJPZmZzZXQiOiA4MCwgInNlY29uZFRhYldpZHRoIjogNjV9LCAid2lkZ2V0c192YWx1ZXMiOiBbInpfaW1hZ2VfdHVyYm9fYmYxNi5zYWZldGVuc29ycyIsICJkZWZhdWx0Il0sICJjb2xvciI6ICIjRkYwMDAwIn0sIHsiaWQiOiAzNiwgInR5cGUiOiAiTm90ZSIsICJwb3MiOiBbNTEwLCAtMTMwXSwgInNpemUiOiBbMjEwLCA4OF0sICJmbGFncyI6IHt9LCAib3JkZXIiOiAzLCAibW9kZSI6IDQsICJpbnB1dHMiOiBbXSwgIm91dHB1dHMiOiBbXSwgInRpdGxlIjogIkxvUkEgdHJpZ2dlciB3b3JkIiwgInByb3BlcnRpZXMiOiB7fSwgIndpZGdldHNfdmFsdWVzIjogWyJQaXhlbCBhcnQgc3R5bGUiXSwgImNvbG9yIjogIiM0MzIiLCAiYmdjb2xvciI6ICIjMDAwIn0sIHsiaWQiOiAxMSwgInR5cGUiOiAiTW9kZWxTYW1wbGluZ0F1cmFGbG93IiwgInBvcyI6IFs4ODAsIDE2MF0sICJzaXplIjogWzMxMCwgNjBdLCAiZmxhZ3MiOiB7fSwgIm9yZGVyIjogNiwgIm1vZGUiOiA0LCAiaW5wdXRzIjogW3sibG9jYWxpemVkX25hbWUiOiAibW9kZWwiLCAibmFtZSI6ICJtb2RlbCIsICJ0eXBlIjogIk1PREVMIiwgImxpbmsiOiAzOX1dLCAib3V0cHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogIk1PREVMIiwgIm5hbWUiOiAiTU9ERUwiLCAidHlwZSI6ICJNT0RFTCIsICJzbG90X2luZGV4IjogMCwgImxpbmtzIjogWzEzXX1dLCAicHJvcGVydGllcyI6IHsiY25yX2lkIjogImNvbWZ5LWNvcmUiLCAidmVyIjogIjAuMy42NCIsICJOb2RlIG5hbWUgZm9yIFMmUiI6ICJNb2RlbFNhbXBsaW5nQXVyYUZsb3ciLCAiZW5hYmxlVGFicyI6IGZhbHNlLCAidGFiV2lkdGgiOiA2NSwgInRhYlhPZmZzZXQiOiAxMCwgImhhc1NlY29uZFRhYiI6IGZhbHNlLCAic2Vjb25kVGFiVGV4dCI6ICJTZW5kIEJhY2siLCAic2Vjb25kVGFiT2Zmc2V0IjogODAsICJzZWNvbmRUYWJXaWR0aCI6IDY1fSwgIndpZGdldHNfdmFsdWVzIjogWzNdfSwgeyJpZCI6IDM1LCAidHlwZSI6ICJMb3JhTG9hZGVyTW9kZWxPbmx5IiwgInBvcyI6IFs0NTAsIDEwXSwgInNpemUiOiBbMzcwLCA4Ml0sICJmbGFncyI6IHt9LCAib3JkZXIiOiAxMCwgIm1vZGUiOiA0LCAiaW5wdXRzIjogW3sibG9jYWxpemVkX25hbWUiOiAibW9kZWwiLCAibmFtZSI6ICJtb2RlbCIsICJ0eXBlIjogIk1PREVMIiwgImxpbmsiOiAzOH0sIHsibG9jYWxpemVkX25hbWUiOiAibG9yYV9uYW1lIiwgIm5hbWUiOiAibG9yYV9uYW1lIiwgInR5cGUiOiAiQ09NQk8iLCAid2lkZ2V0IjogeyJuYW1lIjogImxvcmFfbmFtZSJ9LCAibGluayI6IDQwfSwgeyJsb2NhbGl6ZWRfbmFtZSI6ICJzdHJlbmd0aF9tb2RlbCIsICJuYW1lIjogInN0cmVuZ3RoX21vZGVsIiwgInR5cGUiOiAiRkxPQVQiLCAid2lkZ2V0IjogeyJuYW1lIjogInN0cmVuZ3RoX21vZGVsIn0sICJsaW5rIjogNDF9XSwgIm91dHB1dHMiOiBbeyJsb2NhbGl6ZWRfbmFtZSI6ICJNT0RFTCIsICJuYW1lIjogIk1PREVMIiwgInR5cGUiOiAiTU9ERUwiLCAibGlua3MiOiBbMzldfV0sICJwcm9wZXJ0aWVzIjogeyJjbnJfaWQiOiAiY29tZnktY29yZSIsICJ2ZXIiOiAiMC4zLjc1IiwgIk5vZGUgbmFtZSBmb3IgUyZSIjogIkxvcmFMb2FkZXJNb2RlbE9ubHkiLCAibW9kZWxzIjogW3sibmFtZSI6ICJwaXhlbF9hcnRfc3R5bGVfel9pbWFnZV90dXJiby5zYWZldGVuc29ycyIsICJ1cmwiOiAiaHR0cHM6Ly9odWdnaW5nZmFjZS5jby90YXJuNTkvcGl4ZWxfYXJ0X3N0eWxlX2xvcmFfel9pbWFnZV90dXJiby9yZXNvbHZlL21haW4vcGl4ZWxfYXJ0X3N0eWxlX3pfaW1hZ2VfdHVyYm8uc2FmZXRlbnNvcnMiLCAiZGlyZWN0b3J5IjogImxvcmFzIn1dLCAiZW5hYmxlVGFicyI6IGZhbHNlLCAidGFiV2lkdGgiOiA2NSwgInRhYlhPZmZzZXQiOiAxMCwgImhhc1NlY29uZFRhYiI6IGZhbHNlLCAic2Vjb25kVGFiVGV4dCI6ICJTZW5kIEJhY2siLCAic2Vjb25kVGFiT2Zmc2V0IjogODAsICJzZWNvbmRUYWJXaWR0aCI6IDY1fSwgIndpZGdldHNfdmFsdWVzIjogWyJwaXhlbF9hcnRfc3R5bGVfel9pbWFnZV90dXJiby5zYWZldGVuc29ycyIsIDFdfV0sICJncm91cHMiOiBbeyJpZCI6IDIsICJ0aXRsZSI6ICJTdGVwMiAtIEltYWdlIHNpemUiLCAiYm91bmRpbmciOiBbMTAwLCA1NjAsIDI5MCwgMjAwXSwgImNvbG9yIjogIiMzZjc4OWUiLCAiZm9udF9zaXplIjogMjQsICJmbGFncyI6IHt9fSwgeyJpZCI6IDMsICJ0aXRsZSI6ICJTdGVwMyAtIFByb21wdCIsICJib3VuZGluZyI6IFs0MTAsIDEzMCwgNDUwLCA1NDBdLCAiY29sb3IiOiAiIzNmNzg5ZSIsICJmb250X3NpemUiOiAyNCwgImZsYWdzIjoge319LCB7ImlkIjogNCwgInRpdGxlIjogIlN0ZXAxIC0gTG9hZCBtb2RlbHMiLCAiYm91bmRpbmciOiBbMTAwLCAxMzAsIDI5MCwgNDEzLjZdLCAiY29sb3IiOiAiIzNmNzg5ZSIsICJmb250X3NpemUiOiAyNCwgImZsYWdzIjoge319XSwgImxpbmtzIjogW3siaWQiOiAzMiwgIm9yaWdpbl9pZCI6IDI3LCAib3JpZ2luX3Nsb3QiOiAwLCAidGFyZ2V0X2lkIjogMzMsICJ0YXJnZXRfc2xvdCI6IDAsICJ0eXBlIjogIkNPTkRJVElPTklORyJ9LCB7ImlkIjogMTQsICJvcmlnaW5faWQiOiAzLCAib3JpZ2luX3Nsb3QiOiAwLCAidGFyZ2V0X2lkIjogOCwgInRhcmdldF9zbG90IjogMCwgInR5cGUiOiAiTEFURU5UIn0sIHsiaWQiOiAyNywgIm9yaWdpbl9pZCI6IDI5LCAib3JpZ2luX3Nsb3QiOiAwLCAidGFyZ2V0X2lkIjogOCwgInRhcmdldF9zbG90IjogMSwgInR5cGUiOiAiVkFFIn0sIHsiaWQiOiAxMywgIm9yaWdpbl9pZCI6IDExLCAib3JpZ2luX3Nsb3QiOiAwLCAidGFyZ2V0X2lkIjogMywgInRhcmdldF9zbG90IjogMCwgInR5cGUiOiAiTU9ERUwifSwgeyJpZCI6IDMwLCAib3JpZ2luX2lkIjogMjcsICJvcmlnaW5fc2xvdCI6IDAsICJ0YXJnZXRfaWQiOiAzLCAidGFyZ2V0X3Nsb3QiOiAxLCAidHlwZSI6ICJDT05ESVRJT05JTkcifSwgeyJpZCI6IDMzLCAib3JpZ2luX2lkIjogMzMsICJvcmlnaW5fc2xvdCI6IDAsICJ0YXJnZXRfaWQiOiAzLCAidGFyZ2V0X3Nsb3QiOiAyLCAidHlwZSI6ICJDT05ESVRJT05JTkcifSwgeyJpZCI6IDE3LCAib3JpZ2luX2lkIjogMTMsICJvcmlnaW5fc2xvdCI6IDAsICJ0YXJnZXRfaWQiOiAzLCAidGFyZ2V0X3Nsb3QiOiAzLCAidHlwZSI6ICJMQVRFTlQifSwgeyJpZCI6IDI4LCAib3JpZ2luX2lkIjogMzAsICJvcmlnaW5fc2xvdCI6IDAsICJ0YXJnZXRfaWQiOiAyNywgInRhcmdldF9zbG90IjogMCwgInR5cGUiOiAiQ0xJUCJ9LCB7ImlkIjogMTYsICJvcmlnaW5faWQiOiA4LCAib3JpZ2luX3Nsb3QiOiAwLCAidGFyZ2V0X2lkIjogLTIwLCAidGFyZ2V0X3Nsb3QiOiAwLCAidHlwZSI6ICJJTUFHRSJ9LCB7ImlkIjogMzQsICJvcmlnaW5faWQiOiAtMTAsICJvcmlnaW5fc2xvdCI6IDAsICJ0YXJnZXRfaWQiOiAyNywgInRhcmdldF9zbG90IjogMSwgInR5cGUiOiAiU1RSSU5HIn0sIHsiaWQiOiAzNSwgIm9yaWdpbl9pZCI6IC0xMCwgIm9yaWdpbl9zbG90IjogMSwgInRhcmdldF9pZCI6IDEzLCAidGFyZ2V0X3Nsb3QiOiAwLCAidHlwZSI6ICJJTlQifSwgeyJpZCI6IDM2LCAib3JpZ2luX2lkIjogLTEwLCAib3JpZ2luX3Nsb3QiOiAyLCAidGFyZ2V0X2lkIjogMTMsICJ0YXJnZXRfc2xvdCI6IDEsICJ0eXBlIjogIklOVCJ9LCB7ImlkIjogMzgsICJvcmlnaW5faWQiOiAyOCwgIm9yaWdpbl9zbG90IjogMCwgInRhcmdldF9pZCI6IDM1LCAidGFyZ2V0X3Nsb3QiOiAwLCAidHlwZSI6ICJNT0RFTCJ9LCB7ImlkIjogMzksICJvcmlnaW5faWQiOiAzNSwgIm9yaWdpbl9zbG90IjogMCwgInRhcmdldF9pZCI6IDExLCAidGFyZ2V0X3Nsb3QiOiAw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", import.meta.url).href;
} catch {
return "";
}
})();
-function HA({
+function EA({
overlay: e,
state: t,
mediaTransform: n,
@@ -18331,69 +18358,69 @@ function HA({
maxProcPixels: d,
maxProcPixelsVideo: u,
disableWebGL: I,
- videoGradeThrottleFps: y,
- safeAddListener: S,
- safeCall: Z
+ videoGradeThrottleFps: A,
+ safeAddListener: h,
+ safeCall: S
} = {}) {
- const C = Z || bt, g = S || Qe, A = (w) => {
- var R, Y;
+ const W = S || It, g = h || $e, y = (w) => {
+ var R, V;
try {
- const F = String((w == null ? void 0 : w.ext) || "").trim().toLowerCase();
- if (F) return F.startsWith(".") ? F : `.${F}`;
- } catch (F) {
- (R = console.debug) == null || R.call(console, F);
+ const O = String((w == null ? void 0 : w.ext) || "").trim().toLowerCase();
+ if (O) return O.startsWith(".") ? O : `.${O}`;
+ } catch (O) {
+ (R = console.debug) == null || R.call(console, O);
}
try {
- const F = String((w == null ? void 0 : w.filename) || (w == null ? void 0 : w.filepath) || "").trim(), N = F.lastIndexOf(".");
- if (N >= 0) return F.slice(N).toLowerCase();
- } catch (F) {
- (Y = console.debug) == null || Y.call(console, F);
+ const O = String((w == null ? void 0 : w.filename) || (w == null ? void 0 : w.filepath) || "").trim(), k = O.lastIndexOf(".");
+ if (k >= 0) return O.slice(k).toLowerCase();
+ } catch (O) {
+ (V = console.debug) == null || V.call(console, O);
}
return "";
}, p = (w) => {
- const R = A(w);
+ const R = y(w);
return R === ".gif" || R === ".webp";
}, b = (w, R) => {
- var V, k, K, z, B, J;
- const Y = document.createElement("img");
- Y.className = "mjr-viewer-media";
+ var Y, N, U, z, T, J;
+ const V = document.createElement("img");
+ V.className = "mjr-viewer-media";
try {
- (w == null ? void 0 : w.id) != null && (Y != null && Y.dataset) && (Y.dataset.mjrAssetId = String(w.id));
+ (w == null ? void 0 : w.id) != null && (V != null && V.dataset) && (V.dataset.mjrAssetId = String(w.id));
} catch (P) {
- (V = console.debug) == null || V.call(console, P);
+ (Y = console.debug) == null || Y.call(console, P);
}
- Y.alt = String((w == null ? void 0 : w.filename) || "") || "image";
+ V.alt = String((w == null ? void 0 : w.filename) || "") || "image";
try {
- Y.decoding = "async";
+ V.decoding = "async";
} catch (P) {
- (k = console.debug) == null || k.call(console, P);
+ (N = console.debug) == null || N.call(console, P);
}
try {
- Y.loading = "eager";
+ V.loading = "eager";
} catch (P) {
- (K = console.debug) == null || K.call(console, P);
+ (U = console.debug) == null || U.call(console, P);
}
try {
- Y.draggable = !1;
+ V.draggable = !1;
} catch (P) {
(z = console.debug) == null || z.call(console, P);
}
- Y.src = R, Y.style.cssText = `
+ V.src = R, V.style.cssText = `
max-width: 100%;
max-height: 100%;
display: block;
transform: ${(n == null ? void 0 : n()) || ""};
transform-origin: center center;
`;
- const F = () => {
- var P, H;
+ const O = () => {
+ var P, E;
try {
requestAnimationFrame(() => {
var $;
try {
t != null && t._userInteracted || (i == null || i(), o == null || o(), r == null || r());
- } catch (E) {
- ($ = console.debug) == null || $.call(console, E);
+ } catch (H) {
+ ($ = console.debug) == null || $.call(console, H);
}
});
} catch ($) {
@@ -18402,17 +18429,17 @@ function HA({
try {
l == null || l();
} catch ($) {
- (H = console.debug) == null || H.call(console, $);
+ (E = console.debug) == null || E.call(console, $);
}
- }, N = () => {
- var P, H;
+ }, k = () => {
+ var P, E;
try {
const $ = document.createElement("canvas");
$.className = "mjr-viewer-media";
try {
(w == null ? void 0 : w.id) != null && ($ != null && $.dataset) && ($.dataset.mjrAssetId = String(w.id));
- } catch (E) {
- (P = console.debug) == null || P.call(console, E);
+ } catch (H) {
+ (P = console.debug) == null || P.call(console, H);
}
L($, w), $.style.cssText = `
max-width: 100%;
@@ -18420,132 +18447,132 @@ function HA({
display: block;
transform: ${(n == null ? void 0 : n()) || ""};
transform-origin: center center;
- `, fo($, "Failed to load image"), Y.replaceWith($);
+ `, fo($, "Failed to load image"), V.replaceWith($);
} catch ($) {
- (H = console.debug) == null || H.call(console, $);
+ (E = console.debug) == null || E.call(console, $);
}
};
try {
- Y.addEventListener("load", F, { once: !0 });
+ V.addEventListener("load", O, { once: !0 });
} catch (P) {
- (B = console.debug) == null || B.call(console, P);
+ (T = console.debug) == null || T.call(console, P);
}
try {
- Y.addEventListener("error", N, { once: !0 });
+ V.addEventListener("error", k, { once: !0 });
} catch (P) {
(J = console.debug) == null || J.call(console, P);
}
- return Y;
+ return V;
}, L = (w, R) => {
- var Y;
+ var V;
try {
if (!w || !(w instanceof HTMLCanvasElement)) return;
- const F = Number(R == null ? void 0 : R.width) || 0, N = Number(R == null ? void 0 : R.height) || 0;
- if (!(F > 0 && N > 0)) return;
- !Number(w._mjrNaturalW) && !Number(w._mjrNaturalH) && (w._mjrNaturalW = F, w._mjrNaturalH = N);
- } catch (F) {
- (Y = console.debug) == null || Y.call(console, F);
+ const O = Number(R == null ? void 0 : R.width) || 0, k = Number(R == null ? void 0 : R.height) || 0;
+ if (!(O > 0 && k > 0)) return;
+ !Number(w._mjrNaturalW) && !Number(w._mjrNaturalH) && (w._mjrNaturalW = O, w._mjrNaturalH = k);
+ } catch (O) {
+ (V = console.debug) == null || V.call(console, O);
}
- }, h = (w) => {
+ }, C = (w) => {
var R;
try {
- const Y = Number(w);
- if (Number.isFinite(Y) && Y > 0) return Y;
- const F = String(w || "").trim();
- if (!F) return null;
- if (F.includes("/")) {
- const [V, k] = F.split("/"), K = Number(V), z = Number(k);
- if (Number.isFinite(K) && Number.isFinite(z) && z !== 0) return K / z;
+ const V = Number(w);
+ if (Number.isFinite(V) && V > 0) return V;
+ const O = String(w || "").trim();
+ if (!O) return null;
+ if (O.includes("/")) {
+ const [Y, N] = O.split("/"), U = Number(Y), z = Number(N);
+ if (Number.isFinite(U) && Number.isFinite(z) && z !== 0) return U / z;
}
- const N = Number.parseFloat(F);
- if (Number.isFinite(N) && N > 0) return N;
- } catch (Y) {
- (R = console.debug) == null || R.call(console, Y);
+ const k = Number.parseFloat(O);
+ if (Number.isFinite(k) && k > 0) return k;
+ } catch (V) {
+ (R = console.debug) == null || R.call(console, V);
}
return null;
}, G = (w) => {
try {
- const R = w == null ? void 0 : w.metadata_raw, Y = R && typeof R == "object" ? R : null, F = (Y == null ? void 0 : Y.raw_ffprobe) || {}, N = (F == null ? void 0 : F.video_stream) || {};
- return h(
- (Y == null ? void 0 : Y.fps) ?? (Y == null ? void 0 : Y.frame_rate) ?? (w == null ? void 0 : w.fps) ?? (N == null ? void 0 : N.avg_frame_rate) ?? (N == null ? void 0 : N.r_frame_rate)
+ const R = w == null ? void 0 : w.metadata_raw, V = R && typeof R == "object" ? R : null, O = (V == null ? void 0 : V.raw_ffprobe) || {}, k = (O == null ? void 0 : O.video_stream) || {};
+ return C(
+ (V == null ? void 0 : V.fps) ?? (V == null ? void 0 : V.frame_rate) ?? (w == null ? void 0 : w.fps) ?? (k == null ? void 0 : k.avg_frame_rate) ?? (k == null ? void 0 : k.r_frame_rate)
);
} catch {
return null;
}
- }, W = (w, R, Y, F = "metadata") => {
- var N;
+ }, Z = (w, R, V, O = "metadata") => {
+ var k;
try {
- const V = Number(Y);
- if (!Number.isFinite(V) || V <= 0) return;
- const k = Math.round(V * 1e3) / 1e3, K = Number((w == null ? void 0 : w._mjrDetectedFps) || 0) || 0;
- if (K > 0 && Math.abs(K - k) < 0.01) return;
- w._mjrDetectedFps = k, window.dispatchEvent(
+ const Y = Number(V);
+ if (!Number.isFinite(Y) || Y <= 0) return;
+ const N = Math.round(Y * 1e3) / 1e3, U = Number((w == null ? void 0 : w._mjrDetectedFps) || 0) || 0;
+ if (U > 0 && Math.abs(U - N) < 0.01) return;
+ w._mjrDetectedFps = N, window.dispatchEvent(
new CustomEvent("mjr:viewer-fps-detected", {
detail: {
- fps: k,
- source: String(F || "metadata"),
+ fps: N,
+ source: String(O || "metadata"),
assetId: (R == null ? void 0 : R.id) != null ? String(R.id) : ""
}
})
);
- } catch (V) {
- (N = console.debug) == null || N.call(console, V);
+ } catch (Y) {
+ (k = console.debug) == null || k.call(console, Y);
}
}, f = (w, R) => {
- var Y, F, N;
+ var V, O, k;
try {
- const V = G(R);
- V && W(w, R, V, "asset-metadata");
- } catch (V) {
- (Y = console.debug) == null || Y.call(console, V);
+ const Y = G(R);
+ Y && Z(w, R, Y, "asset-metadata");
+ } catch (Y) {
+ (V = console.debug) == null || V.call(console, Y);
}
try {
w.addEventListener(
"loadedmetadata",
() => {
- var V;
+ var Y;
try {
- const k = G(R);
- k && W(w, R, k, "loadedmetadata");
- } catch (k) {
- (V = console.debug) == null || V.call(console, k);
+ const N = G(R);
+ N && Z(w, R, N, "loadedmetadata");
+ } catch (N) {
+ (Y = console.debug) == null || Y.call(console, N);
}
},
{ once: !0 }
);
- } catch (V) {
- (F = console.debug) == null || F.call(console, V);
+ } catch (Y) {
+ (O = console.debug) == null || O.call(console, Y);
}
try {
if (typeof (w == null ? void 0 : w.requestVideoFrameCallback) != "function") return;
- let V = null, k = 0, K = 0;
- const z = 10, B = (J, P) => {
- var H;
+ let Y = null, N = 0, U = 0;
+ const z = 10, T = (J, P) => {
+ var E;
try {
const $ = Number(P == null ? void 0 : P.mediaTime);
if (Number.isFinite($) && $ >= 0) {
- if (V != null) {
- const E = $ - V;
- E > 0 && E < 1 && (K += E, k += 1);
+ if (Y != null) {
+ const H = $ - Y;
+ H > 0 && H < 1 && (U += H, N += 1);
}
- V = $;
+ Y = $;
}
- if (k >= 3) {
- const E = K / Math.max(1, k), oe = E > 0 ? 1 / E : 0;
- Number.isFinite(oe) && oe > 1 && W(w, R, oe, "rvfc");
+ if (N >= 3) {
+ const H = U / Math.max(1, N), ne = H > 0 ? 1 / H : 0;
+ Number.isFinite(ne) && ne > 1 && Z(w, R, ne, "rvfc");
}
- k < z && w.requestVideoFrameCallback(B);
+ N < z && w.requestVideoFrameCallback(T);
} catch ($) {
- (H = console.debug) == null || H.call(console, $);
+ (E = console.debug) == null || E.call(console, $);
}
};
- w.requestVideoFrameCallback(B);
- } catch (V) {
- (N = console.debug) == null || N.call(console, V);
+ w.requestVideoFrameCallback(T);
+ } catch (Y) {
+ (k = console.debug) == null || k.call(console, Y);
}
- }, X = (w, R, { compare: Y = !1 } = {}) => {
- const F = document.createElement("div");
- if (F.style.cssText = `
+ }, X = (w, R, { compare: V = !1 } = {}) => {
+ const O = document.createElement("div");
+ if (O.style.cssText = `
width: 100%;
height: 100%;
display: flex;
@@ -18555,16 +18582,16 @@ function HA({
gap: 12px;
color: rgba(255,255,255,0.85);
padding: 14px;
- background-image: linear-gradient(rgba(0,0,0,0.42), rgba(0,0,0,0.42)), url('${EA}');
+ background-image: linear-gradient(rgba(0,0,0,0.42), rgba(0,0,0,0.42)), url('${HA}');
background-size: cover;
background-position: center center;
background-repeat: no-repeat;
- `, !Y) {
- const k = document.createElement("div");
- k.textContent = String((w == null ? void 0 : w.filename) || "Audio"), k.style.cssText = "font-size: 12px; opacity: 0.9; max-width: 90%; text-align: center; overflow: hidden; text-overflow: ellipsis;", F.appendChild(k);
+ `, !V) {
+ const N = document.createElement("div");
+ N.textContent = String((w == null ? void 0 : w.filename) || "Audio"), N.style.cssText = "font-size: 12px; opacity: 0.9; max-width: 90%; text-align: center; overflow: hidden; text-overflow: ellipsis;", O.appendChild(N);
}
- const N = document.createElement("canvas");
- N.className = "mjr-viewer-audio-viz", N.style.cssText = `
+ const k = document.createElement("canvas");
+ k.className = "mjr-viewer-audio-viz", k.style.cssText = `
width: min(1920px, 96%);
aspect-ratio: 16 / 9;
height: auto;
@@ -18574,25 +18601,25 @@ function HA({
border-radius: 10px;
background: transparent;
`;
- const V = document.createElement("audio");
- V.className = "mjr-viewer-audio-src", V.src = R, V.controls = !1, V.autoplay = !0, V.preload = "metadata", V.style.cssText = "width: min(680px, 90%);";
+ const Y = document.createElement("audio");
+ Y.className = "mjr-viewer-audio-src", Y.src = R, Y.controls = !1, Y.autoplay = !0, Y.preload = "metadata", Y.style.cssText = "width: min(680px, 90%);";
try {
- const k = DA({
- canvas: N,
- audioEl: V,
+ const N = DA({
+ canvas: k,
+ audioEl: Y,
mode: t == null ? void 0 : t.audioVisualizerMode,
pauseDuringExecution: !0
});
- V._mjrAudioViz = k, N._mjrProc = k;
+ Y._mjrAudioViz = N, k._mjrProc = N;
} catch {
- V._mjrAudioViz = null, N._mjrProc = null;
+ Y._mjrAudioViz = null, k._mjrProc = null;
}
- return F.appendChild(N), F.appendChild(V), F;
+ return O.appendChild(k), O.appendChild(Y), O;
};
function x(w, R) {
- var V, k, K, z, B, J, P, H, $, E, oe;
- const Y = document.createElement("div");
- Y.className = "mjr-video-host", Y.style.cssText = `
+ var Y, N, U, z, T, J, P, E, $, H, ne;
+ const V = document.createElement("div");
+ V.className = "mjr-video-host", V.style.cssText = `
width: 100%;
height: 100%;
display: flex;
@@ -18600,41 +18627,41 @@ function HA({
justify-content: center;
position: relative;
`;
- const F = String((w == null ? void 0 : w.kind) || "").toLowerCase();
- if (ku(w) || F === "model3d")
- return Xu(w, R, {
+ const O = String((w == null ? void 0 : w.kind) || "").toLowerCase();
+ if (Xu(w) || O === "model3d")
+ return Nu(w, R, {
hostClassName: "mjr-model3d-host mjr-viewer-model3d-host",
canvasClassName: "mjr-viewer-media mjr-model3d-render-canvas",
pauseDuringExecution: !0,
scheduleOverlayRedraw: l,
onReady: () => {
- var M, j;
+ var M, v;
try {
requestAnimationFrame(() => {
- var O;
+ var F;
try {
t != null && t._userInteracted || (i == null || i(), o == null || o(), r == null || r());
} catch (D) {
- (O = console.debug) == null || O.call(console, D);
+ (F = console.debug) == null || F.call(console, D);
}
});
- } catch (O) {
- (M = console.debug) == null || M.call(console, O);
+ } catch (F) {
+ (M = console.debug) == null || M.call(console, F);
}
try {
l == null || l();
- } catch (O) {
- (j = console.debug) == null || j.call(console, O);
+ } catch (F) {
+ (v = console.debug) == null || v.call(console, F);
}
}
});
- if (F && F !== "image" && F !== "video" && F !== "audio") {
+ if (O && O !== "image" && O !== "video" && O !== "audio") {
const M = document.createElement("canvas");
M.className = "mjr-viewer-media";
try {
(w == null ? void 0 : w.id) != null && (M != null && M.dataset) && (M.dataset.mjrAssetId = String(w.id));
- } catch (j) {
- (V = console.debug) == null || V.call(console, j);
+ } catch (v) {
+ (Y = console.debug) == null || Y.call(console, v);
}
L(M, w), M.style.cssText = `
max-width: 100%;
@@ -18644,20 +18671,20 @@ function HA({
transform-origin: center center;
`;
try {
- fo(M, `Unsupported file type: ${F}`);
- } catch (j) {
- (k = console.debug) == null || k.call(console, j);
+ fo(M, `Unsupported file type: ${O}`);
+ } catch (v) {
+ (N = console.debug) == null || N.call(console, v);
}
return M;
}
- if (F === "audio") return X(w, R, { compare: !1 });
- if (F === "video") {
+ if (O === "audio") return X(w, R, { compare: !1 });
+ if (O === "video") {
const M = document.createElement("canvas");
M.className = "mjr-viewer-media";
try {
(w == null ? void 0 : w.id) != null && (M != null && M.dataset) && (M.dataset.mjrAssetId = String(w.id));
- } catch (O) {
- (K = console.debug) == null || K.call(console, O);
+ } catch (F) {
+ (U = console.debug) == null || U.call(console, F);
}
L(M, w), M.style.cssText = `
max-width: 100%;
@@ -18667,28 +18694,28 @@ function HA({
transform: ${(n == null ? void 0 : n()) || ""};
transform-origin: center center;
`;
- const j = document.createElement("video");
- j.className = "mjr-viewer-video-src", j.src = R, j.controls = !1, j.loop = !0, j.playsInline = !0, j.muted = !0, j.autoplay = !0, j.preload = "auto";
+ const v = document.createElement("video");
+ v.className = "mjr-viewer-video-src", v.src = R, v.controls = !1, v.loop = !0, v.playsInline = !0, v.muted = !0, v.autoplay = !0, v.preload = "auto";
try {
- "decode" in HTMLVideoElement.prototype && (j.decoding = "async");
+ "decode" in HTMLVideoElement.prototype && (v.decoding = "async");
} catch {
}
- j.style.cssText = "position:absolute; width:1px; height:1px; opacity:0; pointer-events:none;", f(j, w);
+ v.style.cssText = "position:absolute; width:1px; height:1px; opacity:0; pointer-events:none;", f(v, w);
try {
M._mjrProc = Ru({
canvas: M,
- videoEl: j,
- disableWebGL: I || !!fe.VIEWER_DISABLE_WEBGL_VIDEO,
+ videoEl: v,
+ disableWebGL: I || !!he.VIEWER_DISABLE_WEBGL_VIDEO,
pauseDuringExecution: !0,
getGradeParams: a,
isDefaultGrade: c,
tonemap: s,
maxProcPixelsVideo: u,
- throttleFps: y,
+ throttleFps: A,
safeAddListener: g,
- safeCall: C,
+ safeCall: W,
onReady: () => {
- var O, D;
+ var F, D;
try {
requestAnimationFrame(() => {
var q;
@@ -18699,7 +18726,7 @@ function HA({
}
});
} catch (q) {
- (O = console.debug) == null || O.call(console, q);
+ (F = console.debug) == null || F.call(console, q);
}
try {
l == null || l();
@@ -18707,17 +18734,17 @@ function HA({
(D = console.debug) == null || D.call(console, q);
}
}
- }), (B = (z = M._mjrProc) == null ? void 0 : z.setParams) == null || B.call(z, a == null ? void 0 : a());
- } catch (O) {
- (J = console.debug) == null || J.call(console, O);
+ }), (T = (z = M._mjrProc) == null ? void 0 : z.setParams) == null || T.call(z, a == null ? void 0 : a());
+ } catch (F) {
+ (J = console.debug) == null || J.call(console, F);
}
try {
- j.addEventListener(
+ v.addEventListener(
"canplay",
() => {
- var O, D;
+ var F, D;
try {
- const q = (O = j.play) == null ? void 0 : O.call(j);
+ const q = (F = v.play) == null ? void 0 : F.call(v);
q && typeof q.catch == "function" && q.catch(() => {
var ee;
try {
@@ -18725,8 +18752,8 @@ function HA({
M,
"Autoplay blocked (press Space / Play)"
);
- } catch (ce) {
- (ee = console.debug) == null || ee.call(console, ce);
+ } catch (ae) {
+ (ee = console.debug) == null || ee.call(console, ae);
}
});
} catch {
@@ -18739,21 +18766,21 @@ function HA({
},
{ once: !0 }
);
- } catch (O) {
- (P = console.debug) == null || P.call(console, O);
+ } catch (F) {
+ (P = console.debug) == null || P.call(console, F);
}
- return Y.appendChild(M), Y.appendChild(j), Y;
+ return V.appendChild(M), V.appendChild(v), V;
}
if (p(w))
return b(w, R);
- const N = document.createElement("canvas");
- N.className = "mjr-viewer-media";
+ const k = document.createElement("canvas");
+ k.className = "mjr-viewer-media";
try {
- (w == null ? void 0 : w.id) != null && (N != null && N.dataset) && (N.dataset.mjrAssetId = String(w.id));
+ (w == null ? void 0 : w.id) != null && (k != null && k.dataset) && (k.dataset.mjrAssetId = String(w.id));
} catch (M) {
- (H = console.debug) == null || H.call(console, M);
+ (E = console.debug) == null || E.call(console, M);
}
- L(N, w), N.style.cssText = `
+ L(k, w), k.style.cssText = `
max-width: 100%;
max-height: 100%;
object-fit: contain;
@@ -18762,78 +18789,78 @@ function HA({
transform-origin: center center;
`;
try {
- N._mjrProc = Lu({
- canvas: N,
+ k._mjrProc = Lu({
+ canvas: k,
url: R,
getGradeParams: a,
isDefaultGrade: c,
tonemap: s,
maxProcPixels: d,
onReady: () => {
- var M, j;
+ var M, v;
try {
requestAnimationFrame(() => {
- var O;
+ var F;
try {
t != null && t._userInteracted || (i == null || i(), o == null || o(), r == null || r());
} catch (D) {
- (O = console.debug) == null || O.call(console, D);
+ (F = console.debug) == null || F.call(console, D);
}
});
- } catch (O) {
- (M = console.debug) == null || M.call(console, O);
+ } catch (F) {
+ (M = console.debug) == null || M.call(console, F);
}
try {
l == null || l();
- } catch (O) {
- (j = console.debug) == null || j.call(console, O);
+ } catch (F) {
+ (v = console.debug) == null || v.call(console, F);
}
}
- }), (E = ($ = N._mjrProc) == null ? void 0 : $.setParams) == null || E.call($, a == null ? void 0 : a());
+ }), (H = ($ = k._mjrProc) == null ? void 0 : $.setParams) == null || H.call($, a == null ? void 0 : a());
} catch (M) {
- (oe = console.debug) == null || oe.call(console, M);
+ (ne = console.debug) == null || ne.call(console, M);
}
- return N;
+ return k;
}
- function T(w, R) {
- var N, V, k, K, z, B, J, P, H, $;
- const Y = String((w == null ? void 0 : w.kind) || "").toLowerCase();
- if (ku(w) || Y === "model3d")
- return Xu(w, R, {
+ function K(w, R) {
+ var k, Y, N, U, z, T, J, P, E, $;
+ const V = String((w == null ? void 0 : w.kind) || "").toLowerCase();
+ if (Xu(w) || V === "model3d")
+ return Nu(w, R, {
hostClassName: "mjr-model3d-host mjr-viewer-model3d-host",
canvasClassName: "mjr-viewer-media mjr-model3d-render-canvas",
pauseDuringExecution: !0,
scheduleOverlayRedraw: l,
onReady: () => {
- var E, oe;
+ var H, ne;
try {
requestAnimationFrame(() => {
var M;
try {
t != null && t._userInteracted || (i == null || i(), o == null || o(), r == null || r());
- } catch (j) {
- (M = console.debug) == null || M.call(console, j);
+ } catch (v) {
+ (M = console.debug) == null || M.call(console, v);
}
});
} catch (M) {
- (E = console.debug) == null || E.call(console, M);
+ (H = console.debug) == null || H.call(console, M);
}
try {
l == null || l();
} catch (M) {
- (oe = console.debug) == null || oe.call(console, M);
+ (ne = console.debug) == null || ne.call(console, M);
}
}
});
- if (Y && Y !== "image" && Y !== "video" && Y !== "audio") {
- const E = document.createElement("canvas");
- E.className = "mjr-viewer-media";
+ if (V && V !== "image" && V !== "video" && V !== "audio") {
+ const H = document.createElement("canvas");
+ H.className = "mjr-viewer-media";
try {
- (w == null ? void 0 : w.id) != null && (E != null && E.dataset) && (E.dataset.mjrAssetId = String(w.id));
- } catch (oe) {
- (N = console.debug) == null || N.call(console, oe);
+ (w == null ? void 0 : w.id) != null && (H != null && H.dataset) && (H.dataset.mjrAssetId = String(w.id));
+ } catch (ne) {
+ (k = console.debug) == null || k.call(console, ne);
}
- L(E, w), E.style.cssText = `
+ L(H, w), H.style.cssText = `
max-width: 100%;
max-height: 100%;
display: block;
@@ -18841,24 +18868,24 @@ function HA({
transform-origin: center center;
`;
try {
- fo(E, `Unsupported file type: ${Y}`);
- } catch (oe) {
- (V = console.debug) == null || V.call(console, oe);
+ fo(H, `Unsupported file type: ${V}`);
+ } catch (ne) {
+ (Y = console.debug) == null || Y.call(console, ne);
}
- return E;
+ return H;
}
- if (Y === "audio") return X(w, R, { compare: !0 });
- if (Y === "video") {
- const E = document.createElement("div");
- E.style.cssText = "width:100%; height:100%; position:relative; display:flex; align-items:center; justify-content:center;";
- const oe = document.createElement("canvas");
- oe.className = "mjr-viewer-media";
+ if (V === "audio") return X(w, R, { compare: !0 });
+ if (V === "video") {
+ const H = document.createElement("div");
+ H.style.cssText = "width:100%; height:100%; position:relative; display:flex; align-items:center; justify-content:center;";
+ const ne = document.createElement("canvas");
+ ne.className = "mjr-viewer-media";
try {
- (w == null ? void 0 : w.id) != null && (oe != null && oe.dataset) && (oe.dataset.mjrAssetId = String(w.id));
- } catch (j) {
- (k = console.debug) == null || k.call(console, j);
+ (w == null ? void 0 : w.id) != null && (ne != null && ne.dataset) && (ne.dataset.mjrAssetId = String(w.id));
+ } catch (v) {
+ (N = console.debug) == null || N.call(console, v);
}
- L(oe, w), oe.style.cssText = `
+ L(ne, w), ne.style.cssText = `
max-width: 100%;
max-height: 100%;
object-fit: contain;
@@ -18874,19 +18901,19 @@ function HA({
}
M.style.cssText = "position:absolute; width:1px; height:1px; opacity:0; pointer-events:none;", f(M, w);
try {
- oe._mjrProc = Ru({
- canvas: oe,
+ ne._mjrProc = Ru({
+ canvas: ne,
videoEl: M,
pauseDuringExecution: !0,
getGradeParams: a,
isDefaultGrade: c,
tonemap: s,
maxProcPixelsVideo: u,
- throttleFps: y,
+ throttleFps: A,
safeAddListener: g,
- safeCall: C,
+ safeCall: W,
onReady: () => {
- var j, O;
+ var v, F;
try {
requestAnimationFrame(() => {
var D;
@@ -18897,30 +18924,30 @@ function HA({
}
});
} catch (D) {
- (j = console.debug) == null || j.call(console, D);
+ (v = console.debug) == null || v.call(console, D);
}
try {
l == null || l();
} catch (D) {
- (O = console.debug) == null || O.call(console, D);
+ (F = console.debug) == null || F.call(console, D);
}
}
- }), (z = (K = oe._mjrProc) == null ? void 0 : K.setParams) == null || z.call(K, a == null ? void 0 : a());
- } catch (j) {
- (B = console.debug) == null || B.call(console, j);
+ }), (z = (U = ne._mjrProc) == null ? void 0 : U.setParams) == null || z.call(U, a == null ? void 0 : a());
+ } catch (v) {
+ (T = console.debug) == null || T.call(console, v);
}
- return E.appendChild(oe), E.appendChild(M), E;
+ return H.appendChild(ne), H.appendChild(M), H;
}
if (p(w))
return b(w, R);
- const F = document.createElement("canvas");
- F.className = "mjr-viewer-media";
+ const O = document.createElement("canvas");
+ O.className = "mjr-viewer-media";
try {
- (w == null ? void 0 : w.id) != null && (F != null && F.dataset) && (F.dataset.mjrAssetId = String(w.id));
- } catch (E) {
- (J = console.debug) == null || J.call(console, E);
+ (w == null ? void 0 : w.id) != null && (O != null && O.dataset) && (O.dataset.mjrAssetId = String(w.id));
+ } catch (H) {
+ (J = console.debug) == null || J.call(console, H);
}
- L(F, w), F.style.cssText = `
+ L(O, w), O.style.cssText = `
max-width: 100%;
max-height: 100%;
display: block;
@@ -18928,55 +18955,55 @@ function HA({
transform-origin: center center;
`;
try {
- F._mjrProc = Lu({
- canvas: F,
+ O._mjrProc = Lu({
+ canvas: O,
url: R,
getGradeParams: a,
isDefaultGrade: c,
tonemap: s,
maxProcPixels: d,
onReady: () => {
- var E, oe;
+ var H, ne;
try {
requestAnimationFrame(() => {
var M;
try {
t != null && t._userInteracted || (i == null || i(), o == null || o(), r == null || r());
- } catch (j) {
- (M = console.debug) == null || M.call(console, j);
+ } catch (v) {
+ (M = console.debug) == null || M.call(console, v);
}
});
} catch (M) {
- (E = console.debug) == null || E.call(console, M);
+ (H = console.debug) == null || H.call(console, M);
}
try {
l == null || l();
} catch (M) {
- (oe = console.debug) == null || oe.call(console, M);
+ (ne = console.debug) == null || ne.call(console, M);
}
}
- }), (H = (P = F._mjrProc) == null ? void 0 : P.setParams) == null || H.call(P, a == null ? void 0 : a());
- } catch (E) {
- ($ = console.debug) == null || $.call(console, E);
+ }), (E = (P = O._mjrProc) == null ? void 0 : P.setParams) == null || E.call(P, a == null ? void 0 : a());
+ } catch (H) {
+ ($ = console.debug) == null || $.call(console, H);
}
- return F;
+ return O;
}
return {
createMediaElement: x,
- createCompareMediaElement: T,
+ createCompareMediaElement: K,
applyTransformToVisibleMedia: () => {
- var w, R, Y;
+ var w, R, V;
try {
- const F = (n == null ? void 0 : n()) || "", N = ((w = e == null ? void 0 : e.querySelectorAll) == null ? void 0 : w.call(e, ".mjr-viewer-media")) || [];
- for (const V of N)
+ const O = (n == null ? void 0 : n()) || "", k = ((w = e == null ? void 0 : e.querySelectorAll) == null ? void 0 : w.call(e, ".mjr-viewer-media")) || [];
+ for (const Y of k)
try {
- if (V != null && V._mjrDisableViewerTransform) continue;
- V.style.transform = F;
- } catch (k) {
- (R = console.debug) == null || R.call(console, k);
+ if (Y != null && Y._mjrDisableViewerTransform) continue;
+ Y.style.transform = O;
+ } catch (N) {
+ (R = console.debug) == null || R.call(console, N);
}
- } catch (F) {
- (Y = console.debug) == null || Y.call(console, F);
+ } catch (O) {
+ (V = console.debug) == null || V.call(console, O);
}
}
};
@@ -19002,11 +19029,11 @@ function qA({ buildAssetViewURL: e, IMAGE_PRELOAD_EXTENSIONS: t, state: n }) {
try {
n._preloadRefs = n._preloadRefs || /* @__PURE__ */ new Set(), n._preloadRefs.add(c);
const d = () => {
- var u, I, y;
+ var u, I, A;
try {
(I = (u = n._preloadRefs) == null ? void 0 : u.delete) == null || I.call(u, c);
- } catch (S) {
- (y = console.debug) == null || y.call(console, S);
+ } catch (h) {
+ (A = console.debug) == null || A.call(console, h);
}
};
c.addEventListener("load", d, { once: !0, passive: !0 }), c.addEventListener("error", d, { once: !0, passive: !0 });
@@ -19015,7 +19042,7 @@ function qA({ buildAssetViewURL: e, IMAGE_PRELOAD_EXTENSIONS: t, state: n }) {
}
}
function l(c, s) {
- var u, I, y;
+ var u, I, A;
if (!c || !s || !o(c)) return;
const d = i(c) || s;
if (d) {
@@ -19023,21 +19050,21 @@ function qA({ buildAssetViewURL: e, IMAGE_PRELOAD_EXTENSIONS: t, state: n }) {
if (n._preloadedAssetKeys.add(d), n._preloadedAssetKeys.size > 250)
try {
n._preloadedAssetKeys.clear();
- } catch (S) {
- (u = console.debug) == null || u.call(console, S);
+ } catch (h) {
+ (u = console.debug) == null || u.call(console, h);
}
}
try {
- const S = new Image();
- S.decoding = "async";
+ const h = new Image();
+ h.decoding = "async";
try {
- S.loading = "lazy";
- } catch (Z) {
- (I = console.debug) == null || I.call(console, Z);
+ h.loading = "lazy";
+ } catch (S) {
+ (I = console.debug) == null || I.call(console, S);
}
- S.alt = "", S.src = s, r(S);
- } catch (S) {
- (y = console.debug) == null || y.call(console, S);
+ h.alt = "", h.src = s, r(h);
+ } catch (h) {
+ (A = console.debug) == null || A.call(console, h);
}
}
function a(c, s) {
@@ -19053,17 +19080,17 @@ function qA({ buildAssetViewURL: e, IMAGE_PRELOAD_EXTENSIONS: t, state: n }) {
];
for (const I of u) {
if (I < 0 || I >= d.length) continue;
- const y = d[I];
- if (!y) continue;
- const S = e(y);
- l(y, S);
+ const A = d[I];
+ if (!A) continue;
+ const h = e(A);
+ l(A, h);
}
}
return { preloadAdjacentAssets: a, preloadImageForAsset: l, trackPreloadRef: r };
}
function PA(e) {
var i, o, r, l, a, c, s;
- const t = FC();
+ const t = Oh();
if (t.length) {
const d = t[t.length - 1];
for (const u of t)
@@ -19087,7 +19114,7 @@ function PA(e) {
}
}
const n = e();
- return RC(n), n._mjrViewerAPI;
+ return Rh(n), n._mjrViewerAPI;
}
function QA({
state: e,
@@ -19103,72 +19130,72 @@ function QA({
isPlayableViewerKind: d,
collectPlayableMediaElements: u,
pickPrimaryPlayableMedia: I,
- mountUnifiedMediaControls: y,
- installFollowerVideoSync: S,
- getViewerInfo: Z,
- scheduleOverlayRedraw: C,
+ mountUnifiedMediaControls: A,
+ installFollowerVideoSync: h,
+ getViewerInfo: S,
+ scheduleOverlayRedraw: W,
viewerInfoCacheGet: g,
- viewerInfoCacheSet: A
+ viewerInfoCacheSet: y
}) {
function p() {
- var L, h, G, W, f, X, x, T, v, w, R, Y, F, N, V, k;
+ var L, C, G, Z, f, X, x, K, j, w, R, V, O, k, Y, N;
try {
e._videoControlsDestroy && e._videoControlsDestroy();
- } catch (K) {
- (L = console.debug) == null || L.call(console, K);
+ } catch (U) {
+ (L = console.debug) == null || L.call(console, U);
}
e._videoControlsDestroy = null, e._videoControlsMounted = null, e._activeVideoEl = null, e._activeVideoAssetId = null, e.nativeFps = null;
try {
- (G = (h = e._videoSyncAbort) == null ? void 0 : h.abort) == null || G.call(h);
- } catch (K) {
- (W = console.debug) == null || W.call(console, K);
+ (G = (C = e._videoSyncAbort) == null ? void 0 : C.abort) == null || G.call(C);
+ } catch (U) {
+ (Z = console.debug) == null || Z.call(console, U);
}
e._videoSyncAbort = null;
try {
(X = (f = e._videoMetaAbort) == null ? void 0 : f.abort) == null || X.call(f);
- } catch (K) {
- (x = console.debug) == null || x.call(console, K);
+ } catch (U) {
+ (x = console.debug) == null || x.call(console, U);
}
e._videoMetaAbort = null;
try {
- (v = (T = e._videoFpsEventAbort) == null ? void 0 : T.abort) == null || v.call(T);
- } catch (K) {
- (w = console.debug) == null || w.call(console, K);
+ (j = (K = e._videoFpsEventAbort) == null ? void 0 : K.abort) == null || j.call(K);
+ } catch (U) {
+ (w = console.debug) == null || w.call(console, U);
}
e._videoFpsEventAbort = null;
try {
- (Y = (R = e._scopesVideoAbort) == null ? void 0 : R.abort) == null || Y.call(R);
- } catch (K) {
- (F = console.debug) == null || F.call(console, K);
+ (V = (R = e._scopesVideoAbort) == null ? void 0 : R.abort) == null || V.call(R);
+ } catch (U) {
+ (O = console.debug) == null || O.call(console, U);
}
e._scopesVideoAbort = null;
try {
r.innerHTML = "";
- } catch (K) {
- (N = console.debug) == null || N.call(console, K);
+ } catch (U) {
+ (k = console.debug) == null || k.call(console, U);
}
try {
r.style.display = "none";
- } catch (K) {
- (V = console.debug) == null || V.call(console, K);
+ } catch (U) {
+ (Y = console.debug) == null || Y.call(console, U);
}
try {
o.style.display = "";
- } catch (K) {
- (k = console.debug) == null || k.call(console, K);
+ } catch (U) {
+ (N = console.debug) == null || N.call(console, U);
}
}
async function b() {
- var L, h, G, W, f, X, x, T, v, w, R, Y, F, N, V, k, K, z, B, J, P, H, $, E, oe, M, j, O, D, q, ee, ce, ue, U, Q;
+ var L, C, G, Z, f, X, x, K, j, w, R, V, O, k, Y, N, U, z, T, J, P, E, $, H, ne, M, v, F, D, q, ee, ae, ue, B, Q;
try {
const _ = e.assets[e.currentIndex], le = (_ == null ? void 0 : _.id) ?? null;
if (!d(_ == null ? void 0 : _.kind)) {
p();
return;
}
- let de = null, se = [];
+ let ce = null, de = [];
try {
- se = u({
+ de = u({
mode: e.mode,
VIEWER_MODES: n,
singleView: l,
@@ -19176,259 +19203,259 @@ function QA({
sideView: c
});
} catch {
- se = [];
+ de = [];
}
try {
- de = I(se);
+ ce = I(de);
} catch {
- de = se[0] || null;
+ ce = de[0] || null;
}
- if (!de) {
+ if (!ce) {
p();
return;
}
- if (e._activeVideoEl && e._activeVideoEl === de && e._activeVideoAssetId === le && e._videoControlsDestroy) {
+ if (e._activeVideoEl && e._activeVideoEl === ce && e._activeVideoAssetId === le && e._videoControlsDestroy) {
try {
o.style.display = "none", r.style.display = "";
- } catch (we) {
- (L = console.debug) == null || L.call(console, we);
+ } catch (Me) {
+ (L = console.debug) == null || L.call(console, Me);
}
return;
}
p();
try {
o.style.display = "none";
- } catch (we) {
- (h = console.debug) == null || h.call(console, we);
+ } catch (Me) {
+ (C = console.debug) == null || C.call(console, Me);
}
try {
r.style.display = "";
- } catch (we) {
- (G = console.debug) == null || G.call(console, we);
+ } catch (Me) {
+ (G = console.debug) == null || G.call(console, Me);
}
- let ge, je;
+ let ge, Le;
try {
- const we = ($e) => {
+ const Me = (it) => {
try {
- const qe = PI($e), Ue = QI($e, qe);
- return { fps: qe, frameCount: Ue };
+ const qe = PI(it), Pe = QI(it, qe);
+ return { fps: qe, frameCount: Pe };
} catch {
return { fps: null, frameCount: null };
}
- }, Je = we(_);
- if (Je.fps != null && (ge = Je.fps), Je.frameCount != null && (je = Je.frameCount), ge == null || je == null) {
- const $e = (W = s == null ? void 0 : s.getCached) == null ? void 0 : W.call(s, _ == null ? void 0 : _.id), qe = $e != null && $e.data ? we($e.data) : { fps: null, frameCount: null };
- ge == null && qe.fps != null && (ge = qe.fps), je == null && qe.frameCount != null && (je = qe.frameCount);
+ }, Fe = Me(_);
+ if (Fe.fps != null && (ge = Fe.fps), Fe.frameCount != null && (Le = Fe.frameCount), ge == null || Le == null) {
+ const it = (Z = s == null ? void 0 : s.getCached) == null ? void 0 : Z.call(s, _ == null ? void 0 : _.id), qe = it != null && it.data ? Me(it.data) : { fps: null, frameCount: null };
+ ge == null && qe.fps != null && (ge = qe.fps), Le == null && qe.frameCount != null && (Le = qe.frameCount);
}
- } catch (we) {
- (f = console.debug) == null || f.call(console, we);
+ } catch (Me) {
+ (f = console.debug) == null || f.call(console, Me);
}
try {
if (ge == null) {
- const we = Number(de == null ? void 0 : de._mjrDetectedFps);
- Number.isFinite(we) && we > 0 && (ge = we);
+ const Me = Number(ce == null ? void 0 : ce._mjrDetectedFps);
+ Number.isFinite(Me) && Me > 0 && (ge = Me);
}
- } catch (we) {
- (X = console.debug) == null || X.call(console, we);
+ } catch (Me) {
+ (X = console.debug) == null || X.call(console, Me);
}
- const Se = String((_ == null ? void 0 : _.kind) || "").toLowerCase() === "audio" ? "audio" : "video", ke = y(de, {
+ const xe = String((_ == null ? void 0 : _.kind) || "").toLowerCase() === "audio" ? "audio" : "video", Xe = A(ce, {
variant: "viewerbar",
hostEl: r,
fullscreenEl: i,
initialFps: ge,
- initialFrameCount: je,
+ initialFrameCount: Le,
initialPlaybackRate: Number(e == null ? void 0 : e.playbackRate) || 1,
- mediaKind: Se
+ mediaKind: xe
});
- e._videoControlsMounted = ke || null, e._videoControlsDestroy = (ke == null ? void 0 : ke.destroy) || null, e._activeVideoEl = de, e._activeVideoAssetId = le;
+ e._videoControlsMounted = Xe || null, e._videoControlsDestroy = (Xe == null ? void 0 : Xe.destroy) || null, e._activeVideoEl = ce, e._activeVideoAssetId = le;
try {
e.nativeFps = Number(ge) > 0 ? Number(ge) : null;
- } catch (we) {
- (x = console.debug) == null || x.call(console, we);
+ } catch (Me) {
+ (x = console.debug) == null || x.call(console, Me);
}
try {
- if (Se === "audio") {
- const we = (T = de.play) == null ? void 0 : T.call(de);
- we && typeof we.catch == "function" && we.catch(() => {
+ if (xe === "audio") {
+ const Me = (K = ce.play) == null ? void 0 : K.call(ce);
+ Me && typeof Me.catch == "function" && Me.catch(() => {
});
}
- } catch (we) {
- (v = console.debug) == null || v.call(console, we);
+ } catch (Me) {
+ (j = console.debug) == null || j.call(console, Me);
}
try {
- if (Se === "video" && e.mode === (n == null ? void 0 : n.SINGLE)) {
- de.muted = !1;
- const Je = (w = de.play) == null ? void 0 : w.call(de);
- Je && typeof Je.catch == "function" && Je.catch(() => {
+ if (xe === "video" && e.mode === (n == null ? void 0 : n.SINGLE)) {
+ ce.muted = !1;
+ const Fe = (w = ce.play) == null ? void 0 : w.call(ce);
+ Fe && typeof Fe.catch == "function" && Fe.catch(() => {
});
}
- } catch (we) {
- (R = console.debug) == null || R.call(console, we);
+ } catch (Me) {
+ (R = console.debug) == null || R.call(console, Me);
}
try {
- (F = (Y = e._scopesVideoAbort) == null ? void 0 : Y.abort) == null || F.call(Y);
- } catch (we) {
- (N = console.debug) == null || N.call(console, we);
+ (O = (V = e._scopesVideoAbort) == null ? void 0 : V.abort) == null || O.call(V);
+ } catch (Me) {
+ (k = console.debug) == null || k.call(console, Me);
}
- if (Se === "video")
+ if (xe === "video")
try {
- const we = new AbortController();
- e._scopesVideoAbort = we;
- const Je = () => {
- var Te;
+ const Me = new AbortController();
+ e._scopesVideoAbort = Me;
+ const Fe = () => {
+ var Re;
try {
if (String((e == null ? void 0 : e.scopesMode) || "off") === "off") return;
- } catch (Oe) {
- (Te = console.debug) == null || Te.call(console, Oe);
+ } catch (rt) {
+ (Re = console.debug) == null || Re.call(console, rt);
}
- C();
+ W();
};
- de.addEventListener("seeked", Je, {
- signal: we.signal,
+ ce.addEventListener("seeked", Fe, {
+ signal: Me.signal,
passive: !0
- }), de.addEventListener("loadeddata", Je, {
- signal: we.signal,
+ }), ce.addEventListener("loadeddata", Fe, {
+ signal: Me.signal,
passive: !0
- }), de.addEventListener("play", Je, { signal: we.signal, passive: !0 }), de.addEventListener("pause", Je, {
- signal: we.signal,
+ }), ce.addEventListener("play", Fe, { signal: Me.signal, passive: !0 }), ce.addEventListener("pause", Fe, {
+ signal: Me.signal,
passive: !0
});
const qe = 1e3 / Math.max(
1,
Math.min(30, Math.floor(Number(t.VIEWER_SCOPES_FPS) || 10))
- ), Ue = () => {
- var Te, Oe, pt, Me;
- if (!we.signal.aborted) {
+ ), Pe = () => {
+ var Re, rt, Te, qt;
+ if (!Me.signal.aborted) {
try {
if (document != null && document.hidden) return;
- } catch (Xt) {
- (Te = console.debug) == null || Te.call(console, Xt);
+ } catch (kt) {
+ (Re = console.debug) == null || Re.call(console, kt);
}
try {
if (i.style.display === "none") return;
- } catch (Xt) {
- (Oe = console.debug) == null || Oe.call(console, Xt);
+ } catch (kt) {
+ (rt = console.debug) == null || rt.call(console, kt);
}
try {
- if (String((e == null ? void 0 : e.scopesMode) || "off") !== "off" && !de.paused) {
- const Xt = performance.now(), Mt = Number(e == null ? void 0 : e._scopesLastAt) || 0;
- Xt - Mt >= qe && (e._scopesLastAt = Xt, C());
+ if (String((e == null ? void 0 : e.scopesMode) || "off") !== "off" && !ce.paused) {
+ const kt = performance.now(), we = Number(e == null ? void 0 : e._scopesLastAt) || 0;
+ kt - we >= qe && (e._scopesLastAt = kt, W());
}
- } catch (Xt) {
- (pt = console.debug) == null || pt.call(console, Xt);
+ } catch (kt) {
+ (Te = console.debug) == null || Te.call(console, kt);
}
try {
- requestAnimationFrame(Ue);
- } catch (Xt) {
- (Me = console.debug) == null || Me.call(console, Xt);
+ requestAnimationFrame(Pe);
+ } catch (kt) {
+ (qt = console.debug) == null || qt.call(console, kt);
}
}
};
try {
- requestAnimationFrame(Ue);
- } catch (Te) {
- (V = console.debug) == null || V.call(console, Te);
+ requestAnimationFrame(Pe);
+ } catch (Re) {
+ (Y = console.debug) == null || Y.call(console, Re);
}
- } catch (we) {
- (k = console.debug) == null || k.call(console, we);
+ } catch (Me) {
+ (N = console.debug) == null || N.call(console, Me);
}
else
e._scopesVideoAbort = null;
try {
- (z = (K = e._videoSyncAbort) == null ? void 0 : K.abort) == null || z.call(K);
- } catch (we) {
- (B = console.debug) == null || B.call(console, we);
+ (z = (U = e._videoSyncAbort) == null ? void 0 : U.abort) == null || z.call(U);
+ } catch (Me) {
+ (T = console.debug) == null || T.call(console, Me);
}
try {
- if (e._videoSyncAbort = null, Se === "video" && se.length > 1) {
- const we = se.filter((Je) => Je && Je !== de);
- e._videoSyncAbort = S(de, we);
+ if (e._videoSyncAbort = null, xe === "video" && de.length > 1) {
+ const Me = de.filter((Fe) => Fe && Fe !== ce);
+ e._videoSyncAbort = h(ce, Me);
}
- } catch (we) {
- (J = console.debug) == null || J.call(console, we);
+ } catch (Me) {
+ (J = console.debug) == null || J.call(console, Me);
}
- if (Se === "video") {
+ if (xe === "video") {
try {
- const we = (Ue) => yo(Ue), Je = (Ue) => {
- const Te = Number(Ue);
- return !Number.isFinite(Te) || Te <= 0 ? null : Math.floor(Te);
- }, $e = (Ue) => {
- var Te, Oe;
+ const Me = (Pe) => yo(Pe), Fe = (Pe) => {
+ const Re = Number(Pe);
+ return !Number.isFinite(Re) || Re <= 0 ? null : Math.floor(Re);
+ }, it = (Pe) => {
+ var Re, rt;
try {
- if (!Ue || typeof Ue != "object") return;
- const pt = we((Ue == null ? void 0 : Ue.fps) ?? (Ue == null ? void 0 : Ue.fps_raw) ?? (Ue == null ? void 0 : Ue.frame_rate)), Me = Je(Ue == null ? void 0 : Ue.frame_count);
- (pt != null || Me != null) && ((Te = ke == null ? void 0 : ke.setMediaInfo) == null || Te.call(ke, { fps: pt, frameCount: Me }));
- } catch (pt) {
- (Oe = console.debug) == null || Oe.call(console, pt);
+ if (!Pe || typeof Pe != "object") return;
+ const Te = Me((Pe == null ? void 0 : Pe.fps) ?? (Pe == null ? void 0 : Pe.fps_raw) ?? (Pe == null ? void 0 : Pe.frame_rate)), qt = Fe(Pe == null ? void 0 : Pe.frame_count);
+ (Te != null || qt != null) && ((Re = Xe == null ? void 0 : Xe.setMediaInfo) == null || Re.call(Xe, { fps: Te, frameCount: qt }));
+ } catch (Te) {
+ (rt = console.debug) == null || rt.call(console, Te);
}
};
try {
- const Ue = g(_ == null ? void 0 : _.id);
- Ue && $e(Ue);
- } catch (Ue) {
- (P = console.debug) == null || P.call(console, Ue);
+ const Pe = g(_ == null ? void 0 : _.id);
+ Pe && it(Pe);
+ } catch (Pe) {
+ (P = console.debug) == null || P.call(console, Pe);
}
try {
- ($ = (H = e._videoMetaAbort) == null ? void 0 : H.abort) == null || $.call(H);
- } catch (Ue) {
- (E = console.debug) == null || E.call(console, Ue);
+ ($ = (E = e._videoMetaAbort) == null ? void 0 : E.abort) == null || $.call(E);
+ } catch (Pe) {
+ (H = console.debug) == null || H.call(console, Pe);
}
const qe = new AbortController();
e._videoMetaAbort = qe, (async () => {
- var Ue, Te;
+ var Pe, Re;
try {
- const Oe = await Z(_ == null ? void 0 : _.id, { signal: qe.signal });
- if (!(Oe != null && Oe.ok) || !Oe.data || e._activeVideoEl !== de) return;
+ const rt = await S(_ == null ? void 0 : _.id, { signal: qe.signal });
+ if (!(rt != null && rt.ok) || !rt.data || e._activeVideoEl !== ce) return;
try {
- A(_ == null ? void 0 : _.id, Oe.data);
- } catch (pt) {
- (Ue = console.debug) == null || Ue.call(console, pt);
+ y(_ == null ? void 0 : _.id, rt.data);
+ } catch (Te) {
+ (Pe = console.debug) == null || Pe.call(console, Te);
}
- $e(Oe.data);
- } catch (Oe) {
- (Te = console.debug) == null || Te.call(console, Oe);
+ it(rt.data);
+ } catch (rt) {
+ (Re = console.debug) == null || Re.call(console, rt);
}
})();
- } catch (we) {
- (oe = console.debug) == null || oe.call(console, we);
+ } catch (Me) {
+ (ne = console.debug) == null || ne.call(console, Me);
}
try {
- (j = (M = e._videoFpsEventAbort) == null ? void 0 : M.abort) == null || j.call(M);
- } catch (we) {
- (O = console.debug) == null || O.call(console, we);
+ (v = (M = e._videoFpsEventAbort) == null ? void 0 : M.abort) == null || v.call(M);
+ } catch (Me) {
+ (F = console.debug) == null || F.call(console, Me);
}
try {
- const we = new AbortController();
- e._videoFpsEventAbort = we, window.addEventListener(
+ const Me = new AbortController();
+ e._videoFpsEventAbort = Me, window.addEventListener(
"mjr:viewer-fps-detected",
- (Je) => {
- var $e, qe;
+ (Fe) => {
+ var it, qe;
try {
- const Ue = (Je == null ? void 0 : Je.detail) || {}, Te = String((Ue == null ? void 0 : Ue.assetId) || ""), Oe = String((_ == null ? void 0 : _.id) ?? "");
- if (!Te || !Oe || Te !== Oe || e._activeVideoEl !== de) return;
- const pt = Number(Ue == null ? void 0 : Ue.fps);
- if (!Number.isFinite(pt) || pt <= 0) return;
- e.nativeFps = pt, ($e = ke == null ? void 0 : ke.setMediaInfo) == null || $e.call(ke, { fps: pt });
- } catch (Ue) {
- (qe = console.debug) == null || qe.call(console, Ue);
+ const Pe = (Fe == null ? void 0 : Fe.detail) || {}, Re = String((Pe == null ? void 0 : Pe.assetId) || ""), rt = String((_ == null ? void 0 : _.id) ?? "");
+ if (!Re || !rt || Re !== rt || e._activeVideoEl !== ce) return;
+ const Te = Number(Pe == null ? void 0 : Pe.fps);
+ if (!Number.isFinite(Te) || Te <= 0) return;
+ e.nativeFps = Te, (it = Xe == null ? void 0 : Xe.setMediaInfo) == null || it.call(Xe, { fps: Te });
+ } catch (Pe) {
+ (qe = console.debug) == null || qe.call(console, Pe);
}
},
- { signal: we.signal, passive: !0 }
+ { signal: Me.signal, passive: !0 }
);
- } catch (we) {
- (D = console.debug) == null || D.call(console, we);
+ } catch (Me) {
+ (D = console.debug) == null || D.call(console, Me);
}
} else {
try {
(ee = (q = e._videoMetaAbort) == null ? void 0 : q.abort) == null || ee.call(q);
- } catch (we) {
- (ce = console.debug) == null || ce.call(console, we);
+ } catch (Me) {
+ (ae = console.debug) == null || ae.call(console, Me);
}
e._videoMetaAbort = null;
try {
- (U = (ue = e._videoFpsEventAbort) == null ? void 0 : ue.abort) == null || U.call(ue);
- } catch (we) {
- (Q = console.debug) == null || Q.call(console, we);
+ (B = (ue = e._videoFpsEventAbort) == null ? void 0 : ue.abort) == null || B.call(ue);
+ } catch (Me) {
+ (Q = console.debug) == null || Q.call(console, Me);
}
e._videoFpsEventAbort = null;
}
@@ -19438,7 +19465,7 @@ function QA({
}
return { destroyPlayerBar: p, syncPlayerBar: b };
}
-const Xa = "min(400px, 42vw)", Ou = `calc(${Xa} + 24px)`, zu = "mjr-viewer-modern-theme";
+const ka = "min(400px, 42vw)", Fu = `calc(${ka} + 24px)`, zu = "mjr-viewer-modern-theme";
function _A() {
var e;
try {
@@ -19547,7 +19574,7 @@ function _A() {
}
.mjr-viewer-geninfo {
- width: ${Xa} !important;
+ width: ${ka} !important;
top: 16px !important;
bottom: 16px !important;
border-radius: 20px;
@@ -19651,7 +19678,7 @@ const $A = 84, eW = 56, tW = 74, Ju = 0.45, nW = "0px 240px 0px 240px", iW = 350
return "";
}
})();
-function us(e) {
+function ms(e) {
var t;
try {
e != null && e._mjrFilmstripReleaseTimer && (clearTimeout(e._mjrFilmstripReleaseTimer), e._mjrFilmstripReleaseTimer = null);
@@ -19670,7 +19697,7 @@ function Tu(e) {
(n = console.debug) == null || n.call(console, i);
}
}
-function Mc(e) {
+function Gc(e) {
var t, n;
if (e)
try {
@@ -19690,10 +19717,10 @@ function rb(e) {
(n = console.debug) == null || n.call(console, i);
}
}
-function Ul(e, { releaseSrc: t = !0 } = {}) {
+function Bl(e, { releaseSrc: t = !0 } = {}) {
var n, i;
if (e) {
- us(e), rb(e);
+ ms(e), rb(e);
try {
e._mjrFilmstripInView = !1;
} catch (o) {
@@ -19739,35 +19766,35 @@ function rW({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: i }) {
const u = () => {
try {
return new IntersectionObserver(
- (v) => {
- var Y, F;
+ (j) => {
+ var V, O;
const w = o.style.display !== "none", R = !document.hidden;
- for (const N of v) {
- const V = N.target;
- if (!(V instanceof HTMLVideoElement)) continue;
- const k = N.isIntersecting || N.intersectionRatio > 0;
+ for (const k of j) {
+ const Y = k.target;
+ if (!(Y instanceof HTMLVideoElement)) continue;
+ const N = k.isIntersecting || k.intersectionRatio > 0;
try {
- V._mjrFilmstripInView = k;
+ Y._mjrFilmstripInView = N;
} catch (z) {
- (Y = console.debug) == null || Y.call(console, z);
+ (V = console.debug) == null || V.call(console, z);
}
- if (k && (us(V), Tu(V)), k && N.intersectionRatio >= Ju && w && R ? Mc(V) : rb(V), !k) {
- us(V);
+ if (N && (ms(Y), Tu(Y)), N && k.intersectionRatio >= Ju && w && R ? Gc(Y) : rb(Y), !N) {
+ ms(Y);
try {
- V._mjrFilmstripReleaseTimer = setTimeout(() => {
+ Y._mjrFilmstripReleaseTimer = setTimeout(() => {
var z;
try {
- if (!V.isConnected) {
- Ul(V, { releaseSrc: !0 });
+ if (!Y.isConnected) {
+ Bl(Y, { releaseSrc: !0 });
return;
}
- V._mjrFilmstripInView || Ul(V, { releaseSrc: !0 });
- } catch (B) {
- (z = console.debug) == null || z.call(console, B);
+ Y._mjrFilmstripInView || Bl(Y, { releaseSrc: !0 });
+ } catch (T) {
+ (z = console.debug) == null || z.call(console, T);
}
}, iW);
} catch (z) {
- (F = console.debug) == null || F.call(console, z);
+ (O = console.debug) == null || O.call(console, z);
}
}
}
@@ -19781,63 +19808,63 @@ function rW({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: i }) {
} catch {
return null;
}
- }, I = (v) => {
- var w, R, Y;
- if (v) {
+ }, I = (j) => {
+ var w, R, V;
+ if (j) {
try {
- v._mjrFilmstripInView = !1;
- } catch (F) {
- (w = console.debug) == null || w.call(console, F);
+ j._mjrFilmstripInView = !1;
+ } catch (O) {
+ (w = console.debug) == null || w.call(console, O);
}
- c.add(v);
+ c.add(j);
try {
- a || (a = u()), (R = a == null ? void 0 : a.observe) == null || R.call(a, v);
- } catch (F) {
- (Y = console.debug) == null || Y.call(console, F);
+ a || (a = u()), (R = a == null ? void 0 : a.observe) == null || R.call(a, j);
+ } catch (O) {
+ (V = console.debug) == null || V.call(console, O);
}
}
- }, y = ({ releaseSrc: v = !1 } = {}) => {
+ }, A = ({ releaseSrc: j = !1 } = {}) => {
for (const w of Array.from(c))
- Ul(w, { releaseSrc: v });
- }, S = () => {
- var v;
+ Bl(w, { releaseSrc: j });
+ }, h = () => {
+ var j;
for (const w of Array.from(c))
try {
if (!(w != null && w._mjrFilmstripInView) || !(w != null && w.isConnected)) continue;
- Tu(w), Mc(w);
+ Tu(w), Gc(w);
} catch (R) {
- (v = console.debug) == null || v.call(console, R);
+ (j = console.debug) == null || j.call(console, R);
}
- }, Z = ({ releaseSrc: v = !0 } = {}) => {
+ }, S = ({ releaseSrc: j = !0 } = {}) => {
var w, R;
try {
(w = a == null ? void 0 : a.disconnect) == null || w.call(a);
- } catch (Y) {
- (R = console.debug) == null || R.call(console, Y);
+ } catch (V) {
+ (R = console.debug) == null || R.call(console, V);
}
- a = null, y({ releaseSrc: v }), c.clear();
- }, C = () => {
- var v, w;
+ a = null, A({ releaseSrc: j }), c.clear();
+ }, W = () => {
+ var j, w;
try {
- return !!((w = (v = window == null ? void 0 : window.matchMedia) == null ? void 0 : v.call(window, "(prefers-reduced-motion: reduce)")) != null && w.matches);
+ return !!((w = (j = window == null ? void 0 : window.matchMedia) == null ? void 0 : j.call(window, "(prefers-reduced-motion: reduce)")) != null && w.matches);
} catch {
return !1;
}
- }, g = (v, w = 1.08) => {
- var R, Y, F, N;
- if (!(!v || C())) {
+ }, g = (j, w = 1.08) => {
+ var R, V, O, k;
+ if (!(!j || W())) {
try {
- (Y = (R = v._mjrFilmstripBounce) == null ? void 0 : R.cancel) == null || Y.call(R);
- } catch (V) {
- (F = console.debug) == null || F.call(console, V);
+ (V = (R = j._mjrFilmstripBounce) == null ? void 0 : R.cancel) == null || V.call(R);
+ } catch (Y) {
+ (O = console.debug) == null || O.call(console, Y);
}
try {
- if (typeof v.animate != "function") return;
- const V = Math.min(1.18, w + 0.07), k = Math.max(1, w - 0.03), K = v.animate(
+ if (typeof j.animate != "function") return;
+ const Y = Math.min(1.18, w + 0.07), N = Math.max(1, w - 0.03), U = j.animate(
[
{ transform: `scale(${w})` },
- { transform: `scale(${V})` },
- { transform: `scale(${k})` },
+ { transform: `scale(${Y})` },
+ { transform: `scale(${N})` },
{ transform: `scale(${w})` }
],
{
@@ -19845,20 +19872,20 @@ function rW({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: i }) {
easing: "cubic-bezier(0.22, 0.9, 0.32, 1.15)"
}
);
- v._mjrFilmstripBounce = K, K.onfinish = () => {
+ j._mjrFilmstripBounce = U, U.onfinish = () => {
var z;
try {
- v._mjrFilmstripBounce === K && (v._mjrFilmstripBounce = null);
- } catch (B) {
- (z = console.debug) == null || z.call(console, B);
+ j._mjrFilmstripBounce === U && (j._mjrFilmstripBounce = null);
+ } catch (T) {
+ (z = console.debug) == null || z.call(console, T);
}
};
- } catch (V) {
- (N = console.debug) == null || N.call(console, V);
+ } catch (Y) {
+ (k = console.debug) == null || k.call(console, Y);
}
}
- }, A = (v, w) => {
- var N;
+ }, y = (j, w) => {
+ var k;
const R = document.createElement("div");
R.className = "mjr-filmstrip-item", R.dataset.fidx = String(w), R.style.cssText = `
position: relative;
@@ -19875,10 +19902,10 @@ function rW({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: i }) {
transform: scale(1);
transition: border-color 0.16s ease, opacity 0.16s ease, transform 0.18s ease, box-shadow 0.18s ease, filter 0.18s ease;
`;
- const Y = String((v == null ? void 0 : v.kind) || "").toLowerCase(), F = t(v);
- if (F && Y === "video") {
- const V = document.createElement("video");
- V.className = "mjr-filmstrip-thumb", V.muted = !0, V.loop = !0, V.autoplay = !0, V.controls = !1, V.playsInline = !0, V.preload = "none", V.dataset.lazySrc = F, V.style.cssText = `
+ const V = String((j == null ? void 0 : j.kind) || "").toLowerCase(), O = t(j);
+ if (O && V === "video") {
+ const Y = document.createElement("video");
+ Y.className = "mjr-filmstrip-thumb", Y.muted = !0, Y.loop = !0, Y.autoplay = !0, Y.controls = !1, Y.playsInline = !0, Y.preload = "none", Y.dataset.lazySrc = O, Y.style.cssText = `
width: 100%;
height: 100%;
object-fit: cover;
@@ -19886,124 +19913,124 @@ function rW({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: i }) {
pointer-events: none;
`;
try {
- V.disablePictureInPicture = !0;
- } catch (k) {
- (N = console.debug) == null || N.call(console, k);
+ Y.disablePictureInPicture = !0;
+ } catch (N) {
+ (k = console.debug) == null || k.call(console, N);
}
- return V.addEventListener(
+ return Y.addEventListener(
"loadeddata",
() => {
- var k;
+ var N;
try {
- V._mjrFilmstripInView && o.style.display !== "none" && !document.hidden && Mc(V);
- } catch (K) {
- (k = console.debug) == null || k.call(console, K);
+ Y._mjrFilmstripInView && o.style.display !== "none" && !document.hidden && Gc(Y);
+ } catch (U) {
+ (N = console.debug) == null || N.call(console, U);
}
},
{ passive: !0 }
- ), V.addEventListener(
+ ), Y.addEventListener(
"error",
() => {
- var k;
+ var N;
try {
- V.style.display = "none";
- } catch (K) {
- (k = console.debug) == null || k.call(console, K);
+ Y.style.display = "none";
+ } catch (U) {
+ (N = console.debug) == null || N.call(console, U);
}
- Ul(V, { releaseSrc: !0 }), p(R);
+ Bl(Y, { releaseSrc: !0 }), p(R);
},
{ once: !0 }
- ), R.appendChild(V), h(R), I(V), R;
+ ), R.appendChild(Y), C(R), I(Y), R;
}
- if (Y === "audio") {
- const V = String(
- (v == null ? void 0 : v.thumbnail_url) || (v == null ? void 0 : v.thumb_url) || oW || ""
+ if (V === "audio") {
+ const Y = String(
+ (j == null ? void 0 : j.thumbnail_url) || (j == null ? void 0 : j.thumb_url) || oW || ""
).trim();
- if (V) {
- const k = document.createElement("img");
- k.className = "mjr-filmstrip-thumb", k.loading = "lazy", k.decoding = "async", k.src = V, k.alt = String((v == null ? void 0 : v.filename) || "Audio"), k.draggable = !1, k.style.cssText = `
+ if (Y) {
+ const N = document.createElement("img");
+ N.className = "mjr-filmstrip-thumb", N.loading = "lazy", N.decoding = "async", N.src = Y, N.alt = String((j == null ? void 0 : j.filename) || "Audio"), N.draggable = !1, N.style.cssText = `
width: 100%;
height: 100%;
object-fit: cover;
display: block;
pointer-events: none;
- `, k.addEventListener(
+ `, N.addEventListener(
"error",
() => {
- var K;
+ var U;
try {
- k.style.display = "none";
+ N.style.display = "none";
} catch (z) {
- (K = console.debug) == null || K.call(console, z);
+ (U = console.debug) == null || U.call(console, z);
}
b(R);
},
{ once: !0 }
- ), R.appendChild(k);
+ ), R.appendChild(N);
} else
b(R);
return f(R), R;
}
- if (Y === "model3d") {
- const V = (() => {
+ if (V === "model3d") {
+ const Y = (() => {
try {
- const k = String((v == null ? void 0 : v.filename) || "").trim();
- if (!k) return "";
- const K = k + ".png", z = String((v == null ? void 0 : v.subfolder) || "").trim(), B = String((v == null ? void 0 : v.type) || "output").trim();
- return v != null && v.root_id ? t({ ...v, filename: K, kind: "image" }) : ul(K, z || null, B);
+ const N = String((j == null ? void 0 : j.filename) || "").trim();
+ if (!N) return "";
+ const U = N + ".png", z = String((j == null ? void 0 : j.subfolder) || "").trim(), T = String((j == null ? void 0 : j.type) || "output").trim();
+ return j != null && j.root_id ? t({ ...j, filename: U, kind: "image" }) : ul(U, z || null, T);
} catch {
return "";
}
})();
- if (V) {
- const k = document.createElement("img");
- k.className = "mjr-filmstrip-thumb", k.loading = "lazy", k.decoding = "async", k.src = V, k.alt = String((v == null ? void 0 : v.filename) || "3D Model"), k.draggable = !1, k.style.cssText = `
+ if (Y) {
+ const N = document.createElement("img");
+ N.className = "mjr-filmstrip-thumb", N.loading = "lazy", N.decoding = "async", N.src = Y, N.alt = String((j == null ? void 0 : j.filename) || "3D Model"), N.draggable = !1, N.style.cssText = `
width: 100%;
height: 100%;
object-fit: cover;
display: block;
pointer-events: none;
- `, k.addEventListener(
+ `, N.addEventListener(
"error",
() => {
- var K;
+ var U;
try {
- k.style.display = "none";
+ N.style.display = "none";
} catch (z) {
- (K = console.debug) == null || K.call(console, z);
+ (U = console.debug) == null || U.call(console, z);
}
G(R);
},
{ once: !0 }
- ), R.appendChild(k);
+ ), R.appendChild(N);
} else
G(R);
- return W(R), R;
+ return Z(R), R;
}
- if (F) {
- const V = document.createElement("img");
- return V.className = "mjr-filmstrip-thumb", V.loading = "lazy", V.decoding = "async", V.src = F, V.style.cssText = `
+ if (O) {
+ const Y = document.createElement("img");
+ return Y.className = "mjr-filmstrip-thumb", Y.loading = "lazy", Y.decoding = "async", Y.src = O, Y.style.cssText = `
width: 100%;
height: 100%;
object-fit: cover;
display: block;
pointer-events: none;
- `, V.addEventListener(
+ `, Y.addEventListener(
"error",
() => {
- var k;
+ var N;
try {
- V.style.display = "none";
- } catch (K) {
- (k = console.debug) == null || k.call(console, K);
+ Y.style.display = "none";
+ } catch (U) {
+ (N = console.debug) == null || N.call(console, U);
}
},
{ once: !0 }
- ), R.appendChild(V), R;
+ ), R.appendChild(Y), R;
}
return L(R), R;
};
- function p(v) {
+ function p(j) {
var R;
const w = document.createElement("div");
w.style.cssText = `
@@ -20015,12 +20042,12 @@ function rW({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: i }) {
letter-spacing: 0.04em;
`, w.textContent = "VIDEO";
try {
- v.appendChild(w);
- } catch (Y) {
- (R = console.debug) == null || R.call(console, Y);
+ j.appendChild(w);
+ } catch (V) {
+ (R = console.debug) == null || R.call(console, V);
}
}
- function b(v) {
+ function b(j) {
var R;
const w = document.createElement("div");
w.style.cssText = `
@@ -20032,12 +20059,12 @@ function rW({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: i }) {
letter-spacing: 0.04em;
`, w.textContent = "AUDIO";
try {
- v.appendChild(w);
- } catch (Y) {
- (R = console.debug) == null || R.call(console, Y);
+ j.appendChild(w);
+ } catch (V) {
+ (R = console.debug) == null || R.call(console, V);
}
}
- function L(v) {
+ function L(j) {
var R;
const w = document.createElement("div");
w.style.cssText = `
@@ -20047,12 +20074,12 @@ function rW({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: i }) {
pointer-events: none;
`, w.textContent = "?";
try {
- v.appendChild(w);
- } catch (Y) {
- (R = console.debug) == null || R.call(console, Y);
+ j.appendChild(w);
+ } catch (V) {
+ (R = console.debug) == null || R.call(console, V);
}
}
- function h(v) {
+ function C(j) {
const w = document.createElement("div");
w.style.cssText = `
position: absolute; bottom: 2px; right: 2px;
@@ -20061,9 +20088,9 @@ function rW({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: i }) {
padding: 2px 3px; border-radius: 2px;
pointer-events: none;
letter-spacing: 0.02em;
- `, w.textContent = "VID", v.appendChild(w);
+ `, w.textContent = "VID", j.appendChild(w);
}
- function G(v) {
+ function G(j) {
var R;
const w = document.createElement("div");
w.style.cssText = `
@@ -20075,12 +20102,12 @@ function rW({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: i }) {
letter-spacing: 0.04em;
`, w.textContent = "3D";
try {
- v.appendChild(w);
- } catch (Y) {
- (R = console.debug) == null || R.call(console, Y);
+ j.appendChild(w);
+ } catch (V) {
+ (R = console.debug) == null || R.call(console, V);
}
}
- function W(v) {
+ function Z(j) {
const w = document.createElement("div");
w.style.cssText = `
position: absolute; bottom: 2px; right: 2px;
@@ -20090,9 +20117,9 @@ function rW({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: i }) {
pointer-events: none;
letter-spacing: 0.02em;
font-weight: 700;
- `, w.textContent = "3D", v.appendChild(w);
+ `, w.textContent = "3D", j.appendChild(w);
}
- function f(v) {
+ function f(j) {
const w = document.createElement("div");
w.style.cssText = `
position: absolute; bottom: 2px; right: 2px;
@@ -20101,70 +20128,70 @@ function rW({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: i }) {
padding: 2px 3px; border-radius: 2px;
pointer-events: none;
letter-spacing: 0.02em;
- `, w.textContent = "AUD", v.appendChild(w);
+ `, w.textContent = "AUD", j.appendChild(w);
}
const X = () => {
- Z({ releaseSrc: !0 }), r.innerHTML = "", l = [];
- const v = Array.isArray(e.assets) ? e.assets : [];
- if (v.length < 2) {
+ S({ releaseSrc: !0 }), r.innerHTML = "", l = [];
+ const j = Array.isArray(e.assets) ? e.assets : [];
+ if (j.length < 2) {
o.style.display = "none";
return;
}
o.style.display = "";
- for (let w = 0; w < v.length; w++) {
- const R = A(v[w], w);
+ for (let w = 0; w < j.length; w++) {
+ const R = y(j[w], w);
r.appendChild(R), l.push(R);
}
- T(!1);
- }, x = (v = {}) => {
- const w = v.isSingle !== !1, R = i != null && e.compareAsset != null, Y = Array.isArray(e.assets) ? e.assets : [];
- if (!w && !R || Y.length < 2) {
- o.style.display = "none", y({ releaseSrc: !1 });
+ K(!1);
+ }, x = (j = {}) => {
+ const w = j.isSingle !== !1, R = i != null && e.compareAsset != null, V = Array.isArray(e.assets) ? e.assets : [];
+ if (!w && !R || V.length < 2) {
+ o.style.display = "none", A({ releaseSrc: !1 });
return;
}
- o.style.display = "", S(), T(!0);
+ o.style.display = "", h(), K(!0);
};
- function T(v) {
- var F;
+ function K(j) {
+ var O;
const w = Number(e.currentIndex) || 0;
let R = -1;
i && e.compareAsset != null && (R = (Array.isArray(e.assets) ? e.assets : []).indexOf(e.compareAsset));
- for (let N = 0; N < l.length; N++)
- N === w ? (l[N].style.borderColor = "rgba(255, 255, 255, 0.98)", l[N].style.opacity = "1", l[N].style.transform = "scale(1.08)", l[N].style.filter = "saturate(1.12) brightness(1.08)", l[N].style.boxShadow = "0 0 0 1px rgba(255,255,255,0.45), 0 0 18px rgba(160,220,255,0.38), 0 8px 16px rgba(0,0,0,0.38)") : N === R ? (l[N].style.borderColor = "rgba(120, 186, 255, 0.98)", l[N].style.opacity = "0.96", l[N].style.transform = "scale(1.04)", l[N].style.filter = "saturate(1.07) brightness(1.03)", l[N].style.boxShadow = "0 0 0 1px rgba(120,186,255,0.38), 0 0 14px rgba(120,186,255,0.32), 0 6px 14px rgba(0,0,0,0.32)") : (l[N].style.borderColor = "transparent", l[N].style.opacity = "0.5", l[N].style.transform = "scale(1)", l[N].style.filter = "none", l[N].style.boxShadow = "none");
+ for (let k = 0; k < l.length; k++)
+ k === w ? (l[k].style.borderColor = "rgba(255, 255, 255, 0.98)", l[k].style.opacity = "1", l[k].style.transform = "scale(1.08)", l[k].style.filter = "saturate(1.12) brightness(1.08)", l[k].style.boxShadow = "0 0 0 1px rgba(255,255,255,0.45), 0 0 18px rgba(160,220,255,0.38), 0 8px 16px rgba(0,0,0,0.38)") : k === R ? (l[k].style.borderColor = "rgba(120, 186, 255, 0.98)", l[k].style.opacity = "0.96", l[k].style.transform = "scale(1.04)", l[k].style.filter = "saturate(1.07) brightness(1.03)", l[k].style.boxShadow = "0 0 0 1px rgba(120,186,255,0.38), 0 0 14px rgba(120,186,255,0.32), 0 6px 14px rgba(0,0,0,0.32)") : (l[k].style.borderColor = "transparent", l[k].style.opacity = "0.5", l[k].style.transform = "scale(1)", l[k].style.filter = "none", l[k].style.boxShadow = "none");
w !== s && l[w] && g(l[w], 1.08), R >= 0 && R !== d && l[R] && g(l[R], 1.04), s = w, d = R;
- const Y = l[w];
- if (Y)
+ const V = l[w];
+ if (V)
try {
- Y.scrollIntoView({
- behavior: v ? "smooth" : "instant",
+ V.scrollIntoView({
+ behavior: j ? "smooth" : "instant",
block: "nearest",
inline: "center"
});
} catch {
try {
- const N = Y.offsetLeft - o.clientWidth / 2 + Y.offsetWidth / 2;
+ const k = V.offsetLeft - o.clientWidth / 2 + V.offsetWidth / 2;
o.scrollTo({
- left: Math.max(0, N),
- behavior: v ? "smooth" : "instant"
+ left: Math.max(0, k),
+ behavior: j ? "smooth" : "instant"
});
- } catch (N) {
- (F = console.debug) == null || F.call(console, N);
+ } catch (k) {
+ (O = console.debug) == null || O.call(console, k);
}
}
}
return o.addEventListener(
"click",
- (v) => {
+ (j) => {
var w;
try {
- v.stopPropagation();
- const R = v.target.closest("[data-fidx]");
+ j.stopPropagation();
+ const R = j.target.closest("[data-fidx]");
if (!R) return;
- const Y = Number(R.dataset.fidx);
- if (!Number.isFinite(Y) || Y < 0) return;
- const F = Array.isArray(e.assets) ? e.assets : [];
- if (Y >= F.length) return;
- i && (v.ctrlKey || v.metaKey) ? i(Y) : n(Y);
+ const V = Number(R.dataset.fidx);
+ if (!Number.isFinite(V) || V < 0) return;
+ const O = Array.isArray(e.assets) ? e.assets : [];
+ if (V >= O.length) return;
+ i && (j.ctrlKey || j.metaKey) ? i(V) : n(V);
} catch (R) {
(w = console.debug) == null || w.call(console, R);
}
@@ -20172,10 +20199,10 @@ function rW({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: i }) {
!0
), o.addEventListener(
"wheel",
- (v) => {
+ (j) => {
var w;
try {
- v.stopPropagation();
+ j.stopPropagation();
} catch (R) {
(w = console.debug) == null || w.call(console, R);
}
@@ -20292,15 +20319,15 @@ function aW({
background: rgba(9,12,16,0.72);
transform: translate3d(0,0,0);
`;
- const y = document.createElement("canvas");
- y.width = 120, y.height = 120, y.style.cssText = "width:100%; height:100%; display:block; image-rendering: pixelated;", I.appendChild(y), s.appendChild(d), s.appendChild(u), s.appendChild(I), r.appendChild(s);
- const S = document.createElement("div");
- S.className = "mjr-viewer-geninfo mjr-viewer-geninfo--right", S.style.cssText = `
+ const A = document.createElement("canvas");
+ A.width = 120, A.height = 120, A.style.cssText = "width:100%; height:100%; display:block; image-rendering: pixelated;", I.appendChild(A), s.appendChild(d), s.appendChild(u), s.appendChild(I), r.appendChild(s);
+ const h = document.createElement("div");
+ h.className = "mjr-viewer-geninfo mjr-viewer-geninfo--right", h.style.cssText = `
position: absolute;
top: 16px;
right: 16px;
bottom: 16px;
- width: ${Xa};
+ width: ${ka};
display: none;
flex-direction: column;
overflow: hidden;
@@ -20310,8 +20337,8 @@ function aW({
backdrop-filter: blur(10px);
z-index: 10001;
`;
- const Z = document.createElement("div");
- Z.style.cssText = `
+ const S = document.createElement("div");
+ S.style.cssText = `
display: flex;
align-items: center;
justify-content: space-between;
@@ -20320,22 +20347,22 @@ function aW({
border-bottom: 1px solid rgba(255,255,255,0.10);
color: rgba(255,255,255,0.92);
`;
- const C = document.createElement("div");
- C.textContent = "Generation Info", C.style.cssText = "font-size: 13px; font-weight: 600;", Z.appendChild(C);
+ const W = document.createElement("div");
+ W.textContent = "Generation Info", W.style.cssText = "font-size: 13px; font-weight: 600;", S.appendChild(W);
const g = document.createElement("div");
g.style.cssText = `
flex: 1;
overflow: auto;
padding: 14px;
color: rgba(255,255,255,0.92);
- `, S.appendChild(Z), S.appendChild(g);
- const A = document.createElement("div");
- A.className = "mjr-viewer-geninfo mjr-viewer-geninfo--left", A.style.cssText = `
+ `, h.appendChild(S), h.appendChild(g);
+ const y = document.createElement("div");
+ y.className = "mjr-viewer-geninfo mjr-viewer-geninfo--left", y.style.cssText = `
position: absolute;
top: 16px;
left: 16px;
bottom: 16px;
- width: ${Xa};
+ width: ${ka};
display: none;
flex-direction: column;
overflow: hidden;
@@ -20345,7 +20372,7 @@ function aW({
backdrop-filter: blur(10px);
z-index: 10001;
`;
- const p = Z.cloneNode(!0);
+ const p = S.cloneNode(!0);
p.replaceChildren();
const b = document.createElement("div");
b.textContent = "Generation Info (A)", b.style.cssText = "font-size: 13px; font-weight: 600;", p.appendChild(b);
@@ -20355,9 +20382,9 @@ function aW({
overflow: auto;
padding: 14px;
color: rgba(255,255,255,0.92);
- `, A.appendChild(p), A.appendChild(L), o.appendChild(r);
- const h = document.createElement("div");
- h.className = "mjr-viewer-footer", h.style.cssText = `
+ `, y.appendChild(p), y.appendChild(L), o.appendChild(r);
+ const C = document.createElement("div");
+ C.className = "mjr-viewer-footer", C.style.cssText = `
display: flex;
justify-content: space-between;
align-items: center;
@@ -20370,15 +20397,15 @@ function aW({
`;
const G = fl("<", "Previous (Left Arrow)");
G.classList.add("mjr-viewer-nav-btn", "mjr-viewer-nav-btn--prev"), G.style.fontSize = "24px";
- const W = document.createElement("span");
- W.className = "mjr-viewer-index", W.style.cssText = "font-size: 14px; font-weight: 500;";
+ const Z = document.createElement("span");
+ Z.className = "mjr-viewer-index", Z.style.cssText = "font-size: 14px; font-weight: 500;";
const f = fl(">", "Next (Right Arrow)");
f.classList.add("mjr-viewer-nav-btn", "mjr-viewer-nav-btn--next"), f.style.fontSize = "24px";
const X = document.createElement("div");
- X.className = "mjr-viewer-nav", X.style.cssText = "display:flex; align-items:center; gap:20px;", X.appendChild(G), X.appendChild(W), X.appendChild(f);
+ X.className = "mjr-viewer-nav", X.style.cssText = "display:flex; align-items:center; gap:20px;", X.appendChild(G), X.appendChild(Z), X.appendChild(f);
const x = document.createElement("div");
- x.className = "mjr-viewer-playerbar", x.style.cssText = "display:none; width: 100%;", h.appendChild(X), h.appendChild(x);
- const T = rW({
+ x.className = "mjr-viewer-playerbar", x.style.cssText = "display:none; width: 100%;", C.appendChild(X), C.appendChild(x);
+ const K = rW({
state: e,
buildAssetViewURL: t,
onNavigate: n,
@@ -20394,20 +20421,20 @@ function aW({
gridCanvas: d,
probeTooltip: u,
loupeWrap: I,
- loupeCanvas: y,
- genInfoOverlay: S,
- genInfoTitle: C,
+ loupeCanvas: A,
+ genInfoOverlay: h,
+ genInfoTitle: W,
genInfoBody: g,
- genInfoOverlayLeft: A,
+ genInfoOverlayLeft: y,
genInfoTitleLeft: b,
genInfoBodyLeft: L,
- footer: h,
+ footer: C,
prevBtn: G,
- indexInfo: W,
+ indexInfo: Z,
nextBtn: f,
navBar: X,
playerBarHost: x,
- filmstrip: T
+ filmstrip: K
};
}
function li(e, t) {
@@ -20465,20 +20492,20 @@ function sW({ overlay: e, requestClose: t }) {
(n = console.debug) == null || n.call(console, i);
}
}
-let ko = null, Xo = null, ti = null, No = null, vi = null, Na = null;
+let Xo = null, No = null, ti = null, ko = null, vi = null, Ra = null;
function dW() {
- ko || import("./abCompare-BmccB9jW.js").then((e) => {
- ko = e;
- }), Xo || import("./sideBySide-DsvoFFQr.js").then((e) => {
+ Xo || import("./abCompare-BmccB9jW.js").then((e) => {
Xo = e;
- }), ti || import("./model3dRenderer-BJokSmes.js").then((e) => {
- ti = e;
- }), No || import("./scopes-B0qS9yvv.js").then((e) => {
+ }), No || import("./sideBySide-Cxerzz-Z.js").then((e) => {
No = e;
- }), vi || import("./genInfo-CgFRoaPM.js").then((e) => {
+ }), ti || import("./model3dRenderer-B8p2IdLl.js").then((e) => {
+ ti = e;
+ }), ko || import("./scopes-BfKBxPqI.js").then((e) => {
+ ko = e;
+ }), vi || import("./genInfo-cg-2k0dV.js").then((e) => {
vi = e;
- }), Na || import("./frameExport-D5sexOhA.js").then((e) => {
- Na = e;
+ }), Ra || import("./frameExport-D5sexOhA.js").then((e) => {
+ Ra = e;
});
}
const jt = {
@@ -20487,15 +20514,15 @@ const jt = {
SIDE_BY_SIDE: "sidebyside"
};
function uW() {
- var St, Yt, Gt, Qt, Yn, wn, xn, en, Vn, pn, Nn;
+ var gt, Wt, Vt, _t, Xt, tn, Ln, Mn, Xn, rn, vn;
dW(), _A();
const e = lW(), t = iA(e), n = t.unsubs || [], i = TZ();
i.mode = jt.SINGLE;
try {
- const ae = tA();
- ae && typeof ae == "object" && (typeof ae.analysisMode == "string" && (i.analysisMode = ae.analysisMode || "none"), typeof ae.loupeEnabled == "boolean" && (i.loupeEnabled = ae.loupeEnabled), typeof ae.probeEnabled == "boolean" && (i.probeEnabled = ae.probeEnabled), typeof ae.hudEnabled == "boolean" && (i.hudEnabled = ae.hudEnabled), typeof ae.genInfoOpen == "boolean" && (i.genInfoOpen = ae.genInfoOpen), typeof ae.audioVisualizerMode == "string" && (i.audioVisualizerMode = ae.audioVisualizerMode || "artistic"), typeof ae.abWipePercent == "number" && Number.isFinite(ae.abWipePercent) && ae.abWipePercent >= 0 && ae.abWipePercent <= 100 && (i._abWipePercent = ae.abWipePercent));
- } catch (ae) {
- (St = console.debug) == null || St.call(console, ae);
+ const re = tA();
+ re && typeof re == "object" && (typeof re.analysisMode == "string" && (i.analysisMode = re.analysisMode || "none"), typeof re.loupeEnabled == "boolean" && (i.loupeEnabled = re.loupeEnabled), typeof re.probeEnabled == "boolean" && (i.probeEnabled = re.probeEnabled), typeof re.hudEnabled == "boolean" && (i.hudEnabled = re.hudEnabled), typeof re.genInfoOpen == "boolean" && (i.genInfoOpen = re.genInfoOpen), typeof re.audioVisualizerMode == "string" && (i.audioVisualizerMode = re.audioVisualizerMode || "artistic"), typeof re.abWipePercent == "number" && Number.isFinite(re.abWipePercent) && re.abWipePercent >= 0 && re.abWipePercent <= 100 && (i._abWipePercent = re.abWipePercent));
+ } catch (re) {
+ (gt = console.debug) == null || gt.call(console, re);
}
const o = /* @__PURE__ */ new Set([
"png",
@@ -20513,121 +20540,121 @@ function uW() {
]);
let r = null, l = null;
function a() {
- var ae;
+ var re;
try {
- return ((ae = r == null ? void 0 : r.mediaTransform) == null ? void 0 : ae.call(r)) || "";
+ return ((re = r == null ? void 0 : r.mediaTransform) == null ? void 0 : re.call(r)) || "";
} catch {
return "";
}
}
function c() {
- var ae, he;
+ var re, Ie;
try {
- (ae = r == null ? void 0 : r.clampPanToBounds) == null || ae.call(r);
- } catch (ve) {
- (he = console.debug) == null || he.call(console, ve);
+ (re = r == null ? void 0 : r.clampPanToBounds) == null || re.call(r);
+ } catch (Ge) {
+ (Ie = console.debug) == null || Ie.call(console, Ge);
}
}
function s() {
- var ae, he;
+ var re, Ie;
try {
- (ae = r == null ? void 0 : r.applyTransform) == null || ae.call(r);
- } catch (ve) {
- (he = console.debug) == null || he.call(console, ve);
+ (re = r == null ? void 0 : r.applyTransform) == null || re.call(r);
+ } catch (Ge) {
+ (Ie = console.debug) == null || Ie.call(console, Ge);
}
}
- function d(ae, he) {
- var ve, Fe;
+ function d(re, Ie) {
+ var Ge, Je;
try {
- (ve = r == null ? void 0 : r.setZoom) == null || ve.call(r, ae, he);
+ (Ge = r == null ? void 0 : r.setZoom) == null || Ge.call(r, re, Ie);
} catch (_e) {
- (Fe = console.debug) == null || Fe.call(console, _e);
+ (Je = console.debug) == null || Je.call(console, _e);
}
}
function u() {
- var ae, he;
+ var re, Ie;
try {
- (ae = r == null ? void 0 : r.updatePanCursor) == null || ae.call(r);
- } catch (ve) {
- (he = console.debug) == null || he.call(console, ve);
+ (re = r == null ? void 0 : r.updatePanCursor) == null || re.call(r);
+ } catch (Ge) {
+ (Ie = console.debug) == null || Ie.call(console, Ge);
}
}
function I() {
- var ae;
+ var re;
try {
- return ((ae = r == null ? void 0 : r.getPrimaryMedia) == null ? void 0 : ae.call(r)) || null;
+ return ((re = r == null ? void 0 : r.getPrimaryMedia) == null ? void 0 : re.call(r)) || null;
} catch {
return null;
}
}
- function y(ae) {
- var he;
+ function A(re) {
+ var Ie;
try {
- return ((he = r == null ? void 0 : r.getMediaNaturalSize) == null ? void 0 : he.call(r, ae)) || { w: 0, h: 0 };
+ return ((Ie = r == null ? void 0 : r.getMediaNaturalSize) == null ? void 0 : Ie.call(r, re)) || { w: 0, h: 0 };
} catch {
return { w: 0, h: 0 };
}
}
+ function h() {
+ var re;
+ try {
+ return ((re = r == null ? void 0 : r.getViewportRect) == null ? void 0 : re.call(r)) || null;
+ } catch {
+ return null;
+ }
+ }
function S() {
- var ae;
+ var re;
try {
- return ((ae = r == null ? void 0 : r.getViewportRect) == null ? void 0 : ae.call(r)) || null;
+ return ((re = r == null ? void 0 : r.computeOneToOneZoom) == null ? void 0 : re.call(r)) ?? null;
} catch {
return null;
}
}
- function Z() {
- var ae;
+ function W() {
+ var re, Ie;
try {
- return ((ae = r == null ? void 0 : r.computeOneToOneZoom) == null ? void 0 : ae.call(r)) ?? null;
- } catch {
- return null;
+ (re = r == null ? void 0 : r.updateMediaNaturalSize) == null || re.call(r);
+ } catch (Ge) {
+ (Ie = console.debug) == null || Ie.call(console, Ge);
}
}
- function C() {
- var ae, he;
+ function g(re, Ie) {
+ var Ge;
try {
- (ae = r == null ? void 0 : r.updateMediaNaturalSize) == null || ae.call(r);
- } catch (ve) {
- (he = console.debug) == null || he.call(console, ve);
- }
- }
- function g(ae, he) {
- var ve;
- try {
- return ((ve = l == null ? void 0 : l.createMediaElement) == null ? void 0 : ve.call(l, ae, he)) || document.createElement("div");
+ return ((Ge = l == null ? void 0 : l.createMediaElement) == null ? void 0 : Ge.call(l, re, Ie)) || document.createElement("div");
} catch {
return document.createElement("div");
}
}
- function A(ae, he) {
- var ve;
+ function y(re, Ie) {
+ var Ge;
try {
- return ((ve = l == null ? void 0 : l.createCompareMediaElement) == null ? void 0 : ve.call(l, ae, he)) || document.createElement("div");
+ return ((Ge = l == null ? void 0 : l.createCompareMediaElement) == null ? void 0 : Ge.call(l, re, Ie)) || document.createElement("div");
} catch {
return document.createElement("div");
}
}
function p() {
- var he, ve, Fe;
- let ae = !1;
+ var Ie, Ge, Je;
+ let re = !1;
try {
- const _e = i.mode === jt.AB_COMPARE ? B : i.mode === jt.SIDE_BY_SIDE ? J : z, et = Array.from(((he = _e == null ? void 0 : _e.querySelectorAll) == null ? void 0 : he.call(_e, ".mjr-viewer-audio-viz")) || []);
- for (const tt of et)
+ const _e = i.mode === jt.AB_COMPARE ? T : i.mode === jt.SIDE_BY_SIDE ? J : z, Qe = Array.from(((Ie = _e == null ? void 0 : _e.querySelectorAll) == null ? void 0 : Ie.call(_e, ".mjr-viewer-audio-viz")) || []);
+ for (const et of Qe)
try {
- const st = (tt == null ? void 0 : tt._mjrProc) || null;
- if (!(st != null && st.setMode)) continue;
- st.setMode(i.audioVisualizerMode), ae = !0;
- } catch (st) {
- (ve = console.debug) == null || ve.call(console, st);
+ const mt = (et == null ? void 0 : et._mjrProc) || null;
+ if (!(mt != null && mt.setMode)) continue;
+ mt.setMode(i.audioVisualizerMode), re = !0;
+ } catch (mt) {
+ (Ge = console.debug) == null || Ge.call(console, mt);
}
} catch (_e) {
- (Fe = console.debug) == null || Fe.call(console, _e);
+ (Je = console.debug) == null || Je.call(console, _e);
}
- return ae;
+ return re;
}
- let b = null, L = () => He(), h = document.createElement("div");
- h.className = "mjr-viewer-header", h.style.cssText = `
+ let b = null, L = () => fe(), C = document.createElement("div");
+ C.className = "mjr-viewer-header", C.style.cssText = `
display: flex;
flex-direction: column;
gap: 8px;
@@ -20639,555 +20666,555 @@ function uW() {
`;
let G = document.createElement("span");
G.className = "mjr-viewer-filename", G.style.cssText = "font-size: 14px; font-weight: 500; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;";
- let W = document.createElement("div");
- W.className = "mjr-viewer-badges", W.style.cssText = "display:flex; gap:8px; align-items:center; flex-wrap:wrap;";
- let f = null, X = null, x = null, T = null, v = null, w = null, R = null, Y = null, F = null, N = null, V = null;
+ let Z = document.createElement("div");
+ Z.className = "mjr-viewer-badges", Z.style.cssText = "display:flex; gap:8px; align-items:center; flex-wrap:wrap;";
+ let f = null, X = null, x = null, K = null, j = null, w = null, R = null, V = null, O = null, k = null, Y = null;
try {
- h.appendChild(G), h.appendChild(W);
- } catch (ae) {
- (Yt = console.debug) == null || Yt.call(console, ae);
+ C.appendChild(G), C.appendChild(Z);
+ } catch (re) {
+ (Wt = console.debug) == null || Wt.call(console, re);
}
try {
b = cA({
VIEWER_MODES: jt,
state: i,
lifecycle: t,
- getCanAB: () => nt(),
+ getCanAB: () => lt(),
onToggleFullscreen: () => {
- var ae, he, ve;
+ var re, Ie, Ge;
try {
if (document.fullscreenElement)
try {
document.exitFullscreen();
- } catch (Fe) {
- (he = console.debug) == null || he.call(console, Fe);
+ } catch (Je) {
+ (Ie = console.debug) == null || Ie.call(console, Je);
}
else
try {
e.requestFullscreen();
- } catch (Fe) {
- (ae = console.debug) == null || ae.call(console, Fe);
+ } catch (Je) {
+ (re = console.debug) == null || re.call(console, Je);
}
- } catch (Fe) {
- (ve = console.debug) == null || ve.call(console, Fe);
+ } catch (Je) {
+ (Ge = console.debug) == null || Ge.call(console, Je);
}
},
// Close button should fully tear down the viewer (remove overlay + listeners) to avoid leaks/ghost UI.
onClose: () => L == null ? void 0 : L(),
- onMode: (ae) => {
- var he, ve, Fe;
+ onMode: (re) => {
+ var Ie, Ge, Je;
try {
- if (ae === jt.AB_COMPARE && !nt() || ae === jt.SIDE_BY_SIDE && !ut()) return;
- i.mode = ae, dt();
+ if (re === jt.AB_COMPARE && !lt() || re === jt.SIDE_BY_SIDE && !wt()) return;
+ i.mode = re, tt();
try {
- (he = b == null ? void 0 : b.syncToolsUIFromState) == null || he.call(b);
+ (Ie = b == null ? void 0 : b.syncToolsUIFromState) == null || Ie.call(b);
} catch (_e) {
- (ve = console.debug) == null || ve.call(console, _e);
+ (Ge = console.debug) == null || Ge.call(console, _e);
}
} catch (_e) {
- (Fe = console.debug) == null || Fe.call(console, _e);
+ (Je = console.debug) == null || Je.call(console, _e);
}
},
onZoomIn: () => {
- var ae;
+ var re;
try {
d((Number(i.zoom) || 1) + 0.25, {
clientX: i._lastPointerX,
clientY: i._lastPointerY
});
- } catch (he) {
- (ae = console.debug) == null || ae.call(console, he);
+ } catch (Ie) {
+ (re = console.debug) == null || re.call(console, Ie);
}
},
onZoomOut: () => {
- var ae;
+ var re;
try {
d((Number(i.zoom) || 1) - 0.25, {
clientX: i._lastPointerX,
clientY: i._lastPointerY
});
- } catch (he) {
- (ae = console.debug) == null || ae.call(console, he);
+ } catch (Ie) {
+ (re = console.debug) == null || re.call(console, Ie);
}
},
onZoomReset: () => {
- var ae;
+ var re;
try {
d(1);
- } catch (he) {
- (ae = console.debug) == null || ae.call(console, he);
+ } catch (Ie) {
+ (re = console.debug) == null || re.call(console, Ie);
}
},
onZoomOneToOne: () => {
- var ae, he;
+ var re, Ie;
try {
- const ve = () => {
- const Fe = Z();
- if (Fe == null) return !1;
- const _e = Math.abs((Number(i.zoom) || 1) - Fe) < 0.01;
- return d(_e ? 1 : Fe, {
+ const Ge = () => {
+ const Je = S();
+ if (Je == null) return !1;
+ const _e = Math.abs((Number(i.zoom) || 1) - Je) < 0.01;
+ return d(_e ? 1 : Je, {
clientX: i._lastPointerX,
clientY: i._lastPointerY
}), !0;
};
- if (ve()) return;
+ if (Ge()) return;
try {
requestAnimationFrame(() => {
- var Fe, _e;
+ var Je, _e;
try {
- C();
- } catch (et) {
- (Fe = console.debug) == null || Fe.call(console, et);
+ W();
+ } catch (Qe) {
+ (Je = console.debug) == null || Je.call(console, Qe);
}
try {
- ve();
- } catch (et) {
- (_e = console.debug) == null || _e.call(console, et);
+ Ge();
+ } catch (Qe) {
+ (_e = console.debug) == null || _e.call(console, Qe);
}
});
- } catch (Fe) {
- (ae = console.debug) == null || ae.call(console, Fe);
+ } catch (Je) {
+ (re = console.debug) == null || re.call(console, Je);
}
- } catch (ve) {
- (he = console.debug) == null || he.call(console, ve);
+ } catch (Ge) {
+ (Ie = console.debug) == null || Ie.call(console, Ge);
}
},
onCompareModeChanged: () => {
- var ae;
+ var re;
try {
- i.mode === jt.AB_COMPARE && (Re(), yt());
- } catch (he) {
- (ae = console.debug) == null || ae.call(console, he);
+ i.mode === jt.AB_COMPARE && (Oe(), dt());
+ } catch (Ie) {
+ (re = console.debug) == null || re.call(console, Ie);
}
},
onExportFrame: () => {
- var ae;
+ var re;
try {
Ee({ toClipboard: !1 });
- } catch (he) {
- (ae = console.debug) == null || ae.call(console, he);
+ } catch (Ie) {
+ (re = console.debug) == null || re.call(console, Ie);
}
},
onCopyFrame: () => {
- var ae;
+ var re;
try {
Ee({ toClipboard: !0 });
- } catch (he) {
- (ae = console.debug) == null || ae.call(console, he);
+ } catch (Ie) {
+ (re = console.debug) == null || re.call(console, Ie);
}
},
onAudioVizModeChanged: () => {
- var ae;
+ var re;
try {
- const he = i.assets[i.currentIndex];
- if (String((he == null ? void 0 : he.kind) || "") !== "audio") return;
- p() || (Re(), yt());
- } catch (he) {
- (ae = console.debug) == null || ae.call(console, he);
+ const Ie = i.assets[i.currentIndex];
+ if (String((Ie == null ? void 0 : Ie.kind) || "") !== "audio") return;
+ p() || (Oe(), dt());
+ } catch (Ie) {
+ (re = console.debug) == null || re.call(console, Ie);
}
},
onToolsChanged: () => {
- var ae, he, ve, Fe, _e, et, tt, st, Vt, Bt, Rt;
+ var re, Ie, Ge, Je, _e, Qe, et, mt, Lt, Tt, Ot;
try {
- (ae = b == null ? void 0 : b.syncToolsUIFromState) == null || ae.call(b);
+ (re = b == null ? void 0 : b.syncToolsUIFromState) == null || re.call(b);
} catch (Ct) {
- (he = console.debug) == null || he.call(console, Ct);
+ (Ie = console.debug) == null || Ie.call(console, Ct);
}
try {
nA(i);
} catch (Ct) {
- (ve = console.debug) == null || ve.call(console, Ct);
+ (Ge = console.debug) == null || Ge.call(console, Ct);
}
try {
- It();
+ at();
} catch (Ct) {
- (Fe = console.debug) == null || Fe.call(console, Ct);
+ (Je = console.debug) == null || Je.call(console, Ct);
}
try {
if (i.mode === jt.AB_COMPARE) {
const Ct = String(i.abCompareMode || "wipe");
- Ct !== "wipe" && Ct !== "wipeV" && ((_e = B == null ? void 0 : B._mjrDiffRequest) == null || _e.call(B));
+ Ct !== "wipe" && Ct !== "wipeV" && ((_e = T == null ? void 0 : T._mjrDiffRequest) == null || _e.call(T));
}
+ } catch (Ct) {
+ (Qe = console.debug) == null || Qe.call(console, Ct);
+ }
+ try {
+ i.probeEnabled || (E.style.display = "none");
} catch (Ct) {
(et = console.debug) == null || et.call(console, Ct);
}
- try {
- i.probeEnabled || (H.style.display = "none");
- } catch (Ct) {
- (tt = console.debug) == null || tt.call(console, Ct);
- }
try {
i.loupeEnabled || ($.style.display = "none");
} catch (Ct) {
- (st = console.debug) == null || st.call(console, Ct);
+ (mt = console.debug) == null || mt.call(console, Ct);
}
try {
- Oe();
+ rt();
} catch (Ct) {
- (Vt = console.debug) == null || Vt.call(console, Ct);
+ (Lt = console.debug) == null || Lt.call(console, Ct);
}
try {
- pe == null || pe();
+ ye == null || ye();
} catch (Ct) {
- (Bt = console.debug) == null || Bt.call(console, Ct);
+ (Tt = console.debug) == null || Tt.call(console, Ct);
}
try {
- Ot();
+ Pt();
} catch (Ct) {
- (Rt = console.debug) == null || Rt.call(console, Ct);
+ (Ot = console.debug) == null || Ot.call(console, Ct);
}
}
- }), b != null && b.headerEl && (h = b.headerEl), b != null && b.headerTopEl && (V = b.headerTopEl), b != null && b.filenameEl && (G = b.filenameEl), b != null && b.badgesBarEl && (W = b.badgesBarEl), b != null && b.filenameRightEl && (f = b.filenameRightEl), b != null && b.badgesBarRightEl && (X = b.badgesBarRightEl), b != null && b.leftAreaEl && (v = b.leftAreaEl), b != null && b.leftMetaEl && (w = b.leftMetaEl), b != null && b.centerAreaEl && (R = b.centerAreaEl), b != null && b.rightMetaEl && (x = b.rightMetaEl), b != null && b.rightAreaEl && (T = b.rightAreaEl), b != null && b.titleLineEl && (Y = b.titleLineEl), b != null && b.titleWrapEl && (F = b.titleWrapEl), b != null && b.modeButtonsEl && (N = b.modeButtonsEl);
- } catch (ae) {
- (Gt = console.debug) == null || Gt.call(console, ae);
+ }), b != null && b.headerEl && (C = b.headerEl), b != null && b.headerTopEl && (Y = b.headerTopEl), b != null && b.filenameEl && (G = b.filenameEl), b != null && b.badgesBarEl && (Z = b.badgesBarEl), b != null && b.filenameRightEl && (f = b.filenameRightEl), b != null && b.badgesBarRightEl && (X = b.badgesBarRightEl), b != null && b.leftAreaEl && (j = b.leftAreaEl), b != null && b.leftMetaEl && (w = b.leftMetaEl), b != null && b.centerAreaEl && (R = b.centerAreaEl), b != null && b.rightMetaEl && (x = b.rightMetaEl), b != null && b.rightAreaEl && (K = b.rightAreaEl), b != null && b.titleLineEl && (V = b.titleLineEl), b != null && b.titleWrapEl && (O = b.titleWrapEl), b != null && b.modeButtonsEl && (k = b.modeButtonsEl);
+ } catch (re) {
+ (Vt = console.debug) == null || Vt.call(console, re);
}
const {
- contentRow: k,
- content: K,
+ contentRow: N,
+ content: U,
singleView: z,
- abView: B,
+ abView: T,
sideView: J,
gridCanvas: P,
- probeTooltip: H,
+ probeTooltip: E,
loupeWrap: $,
- loupeCanvas: E,
- genInfoOverlay: oe,
+ loupeCanvas: H,
+ genInfoOverlay: ne,
genInfoTitle: M,
- genInfoBody: j,
- genInfoOverlayLeft: O,
+ genInfoBody: v,
+ genInfoOverlayLeft: F,
genInfoTitleLeft: D,
genInfoBodyLeft: q,
footer: ee,
- prevBtn: ce,
+ prevBtn: ae,
indexInfo: ue,
- nextBtn: U,
+ nextBtn: B,
navBar: Q,
playerBarHost: _,
filmstrip: le
} = aW({
state: i,
- buildAssetViewURL: Ki,
- onNavigate: (ae) => {
- var he;
+ buildAssetViewURL: Ui,
+ onNavigate: (re) => {
+ var Ie;
try {
- i.compareAsset != null && (i.compareAsset = null, i.mode = jt.SINGLE), i.currentIndex = ae, dt();
- } catch (ve) {
- (he = console.debug) == null || he.call(console, ve);
+ i.compareAsset != null && (i.compareAsset = null, i.mode = jt.SINGLE), i.currentIndex = re, tt();
+ } catch (Ge) {
+ (Ie = console.debug) == null || Ie.call(console, Ge);
}
},
- onCompare: (ae) => {
- var he;
+ onCompare: (re) => {
+ var Ie;
try {
- const ve = Array.isArray(i.assets) ? i.assets : [], Fe = ve[ae];
- if (!Fe || Fe === ve[i.currentIndex]) return;
- if (Fe === i.compareAsset) {
- i.compareAsset = null, i.mode = jt.SINGLE, dt();
+ const Ge = Array.isArray(i.assets) ? i.assets : [], Je = Ge[re];
+ if (!Je || Je === Ge[i.currentIndex]) return;
+ if (Je === i.compareAsset) {
+ i.compareAsset = null, i.mode = jt.SINGLE, tt();
return;
}
- ve.length === 2 ? (i.compareAsset = ve[1 - i.currentIndex], i.mode = se() ? jt.SIDE_BY_SIDE : jt.AB_COMPARE) : (i.compareAsset = Fe, i.mode = ut() ? jt.SIDE_BY_SIDE : jt.AB_COMPARE), dt();
- } catch (ve) {
- (he = console.debug) == null || he.call(console, ve);
+ Ge.length === 2 ? (i.compareAsset = Ge[1 - i.currentIndex], i.mode = de() ? jt.SIDE_BY_SIDE : jt.AB_COMPARE) : (i.compareAsset = Je, i.mode = wt() ? jt.SIDE_BY_SIDE : jt.AB_COMPARE), tt();
+ } catch (Ge) {
+ (Ie = console.debug) == null || Ie.call(console, Ge);
}
}
});
- e.appendChild(h), e.appendChild(k);
- function de() {
- var ae;
+ e.appendChild(C), e.appendChild(N);
+ function ce() {
+ var re;
try {
if (i.compareAsset) return i.compareAsset;
- const he = Array.isArray(i.assets) ? i.assets : [];
- if (he.length === 2)
- return he[1 - (i.currentIndex || 0)] || null;
- } catch (he) {
- (ae = console.debug) == null || ae.call(console, he);
+ const Ie = Array.isArray(i.assets) ? i.assets : [];
+ if (Ie.length === 2)
+ return Ie[1 - (i.currentIndex || 0)] || null;
+ } catch (Ie) {
+ (re = console.debug) == null || re.call(console, Ie);
}
return null;
}
- function se() {
- var ae, he, ve, Fe;
+ function de() {
+ var re, Ie, Ge, Je;
try {
- const _e = ((ae = i.assets) == null ? void 0 : ae[i.currentIndex]) || null;
- return (((he = ti == null ? void 0 : ti.isModel3DAsset) == null ? void 0 : he.call(ti, _e)) ?? !1) || (((ve = ti == null ? void 0 : ti.isModel3DAsset) == null ? void 0 : ve.call(ti, de())) ?? !1);
+ const _e = ((re = i.assets) == null ? void 0 : re[i.currentIndex]) || null;
+ return (((Ie = ti == null ? void 0 : ti.isModel3DAsset) == null ? void 0 : Ie.call(ti, _e)) ?? !1) || (((Ge = ti == null ? void 0 : ti.isModel3DAsset) == null ? void 0 : Ge.call(ti, ce())) ?? !1);
} catch (_e) {
- (Fe = console.debug) == null || Fe.call(console, _e);
+ (Je = console.debug) == null || Je.call(console, _e);
}
return !1;
}
- e.appendChild(le.el), e.appendChild(ee), e.appendChild(oe), e.appendChild(O), sW({
+ e.appendChild(le.el), e.appendChild(ee), e.appendChild(ne), e.appendChild(F), sW({
overlay: e,
requestClose: () => L()
});
const ge = pA({
state: i,
VIEWER_MODES: jt,
- APP_CONFIG: fe,
+ APP_CONFIG: he,
getAssetMetadata: gl,
getAssetsBatch: Bs
- }), je = 300 * 1e3, Se = 256, ke = /* @__PURE__ */ new Map(), we = () => {
- var ae, he;
+ }), Le = 300 * 1e3, xe = 256, Xe = /* @__PURE__ */ new Map(), Me = () => {
+ var re, Ie;
try {
- const ve = Date.now();
- for (const [et, tt] of ke.entries()) {
- const st = Number(tt == null ? void 0 : tt.at) || 0;
- (!st || ve - st > je) && ke.delete(et);
+ const Ge = Date.now();
+ for (const [Qe, et] of Xe.entries()) {
+ const mt = Number(et == null ? void 0 : et.at) || 0;
+ (!mt || Ge - mt > Le) && Xe.delete(Qe);
}
- if (ke.size <= Se) return;
- const Fe = Array.from(ke.entries()).sort(
- (et, tt) => {
- var st, Vt;
- return (Number((st = et == null ? void 0 : et[1]) == null ? void 0 : st.at) || 0) - (Number((Vt = tt == null ? void 0 : tt[1]) == null ? void 0 : Vt.at) || 0);
+ if (Xe.size <= xe) return;
+ const Je = Array.from(Xe.entries()).sort(
+ (Qe, et) => {
+ var mt, Lt;
+ return (Number((mt = Qe == null ? void 0 : Qe[1]) == null ? void 0 : mt.at) || 0) - (Number((Lt = et == null ? void 0 : et[1]) == null ? void 0 : Lt.at) || 0);
}
- ), _e = ke.size - Se;
- for (let et = 0; et < _e; et += 1) {
- const tt = (ae = Fe == null ? void 0 : Fe[et]) == null ? void 0 : ae[0];
- tt != null && ke.delete(tt);
+ ), _e = Xe.size - xe;
+ for (let Qe = 0; Qe < _e; Qe += 1) {
+ const et = (re = Je == null ? void 0 : Je[Qe]) == null ? void 0 : re[0];
+ et != null && Xe.delete(et);
}
- } catch (ve) {
- (he = console.debug) == null || he.call(console, ve);
+ } catch (Ge) {
+ (Ie = console.debug) == null || Ie.call(console, Ge);
}
- }, Je = (ae) => {
+ }, Fe = (re) => {
try {
- const he = String(ae ?? "");
- if (!he) return null;
- const ve = ke.get(he);
- if (!ve || typeof ve != "object") return null;
- const Fe = Number(ve == null ? void 0 : ve.at) || 0;
- return !Fe || Date.now() - Fe > je ? (ke.delete(he), null) : (ve == null ? void 0 : ve.data) || null;
+ const Ie = String(re ?? "");
+ if (!Ie) return null;
+ const Ge = Xe.get(Ie);
+ if (!Ge || typeof Ge != "object") return null;
+ const Je = Number(Ge == null ? void 0 : Ge.at) || 0;
+ return !Je || Date.now() - Je > Le ? (Xe.delete(Ie), null) : (Ge == null ? void 0 : Ge.data) || null;
} catch {
return null;
}
- }, $e = (ae, he) => {
- var ve;
+ }, it = (re, Ie) => {
+ var Ge;
try {
- const Fe = String(ae ?? "");
- if (!Fe || !he) return;
- ke.set(Fe, { data: he, at: Date.now() }), we();
- } catch (Fe) {
- (ve = console.debug) == null || ve.call(console, Fe);
+ const Je = String(re ?? "");
+ if (!Je || !Ie) return;
+ Xe.set(Je, { data: Ie, at: Date.now() }), Me();
+ } catch (Je) {
+ (Ge = console.debug) == null || Ge.call(console, Je);
}
}, qe = async () => {
- var ae, he;
+ var re, Ie;
try {
- await ((ae = ge == null ? void 0 : ge.hydrateVisibleMetadata) == null ? void 0 : ae.call(ge));
- } catch (ve) {
- (he = console.debug) == null || he.call(console, ve);
+ await ((re = ge == null ? void 0 : ge.hydrateVisibleMetadata) == null ? void 0 : re.call(ge));
+ } catch (Ge) {
+ (Ie = console.debug) == null || Ie.call(console, Ge);
}
};
try {
- r = FA({
+ r = OA({
overlay: e,
- content: K,
+ content: U,
singleView: z,
- abView: B,
+ abView: T,
sideView: J,
state: i,
VIEWER_MODES: jt,
- scheduleOverlayRedraw: Oe,
+ scheduleOverlayRedraw: rt,
lifecycle: t
});
} catch {
r = null;
}
- const Ue = (ae, he, ve) => {
- var Fe;
+ const Pe = (re, Ie, Ge) => {
+ var Je;
try {
- ae.clearRect(0, 0, he, ve);
+ re.clearRect(0, 0, Ie, Ge);
} catch (_e) {
- (Fe = console.debug) == null || Fe.call(console, _e);
+ (Je = console.debug) == null || Je.call(console, _e);
}
};
- let Te = null;
- function Oe(ae) {
- var he, ve;
+ let Re = null;
+ function rt(re) {
+ var Ie, Ge;
try {
if (e.style.display === "none") return;
- if (ae === !0) {
- Te != null && (cancelAnimationFrame(Te), Te = null);
+ if (re === !0) {
+ Re != null && (cancelAnimationFrame(Re), Re = null);
try {
- Xt();
- } catch (Fe) {
- (he = console.debug) == null || he.call(console, Fe);
+ kt();
+ } catch (Je) {
+ (Ie = console.debug) == null || Ie.call(console, Je);
}
return;
}
- if (Te != null) return;
- Te = requestAnimationFrame(() => {
- var Fe;
- Te = null;
+ if (Re != null) return;
+ Re = requestAnimationFrame(() => {
+ var Je;
+ Re = null;
try {
- Xt();
+ kt();
} catch (_e) {
- (Fe = console.debug) == null || Fe.call(console, _e);
+ (Je = console.debug) == null || Je.call(console, _e);
}
});
- } catch (Fe) {
- (ve = console.debug) == null || ve.call(console, Fe);
+ } catch (Je) {
+ (Ge = console.debug) == null || Ge.call(console, Je);
}
}
- const Me = gA({
+ const qt = gA({
gridCanvas: P,
- content: K,
+ content: U,
state: i,
VIEWER_MODES: jt,
getPrimaryMedia: () => {
- var ae, he, ve, Fe;
+ var re, Ie, Ge, Je;
try {
if ((i == null ? void 0 : i.mode) === jt.SINGLE)
- return ((ae = z == null ? void 0 : z.querySelector) == null ? void 0 : ae.call(z, ".mjr-viewer-media")) || null;
+ return ((re = z == null ? void 0 : z.querySelector) == null ? void 0 : re.call(z, ".mjr-viewer-media")) || null;
if ((i == null ? void 0 : i.mode) === jt.AB_COMPARE)
- return ((he = B == null ? void 0 : B.querySelector) == null ? void 0 : he.call(B, ".mjr-viewer-media")) || null;
+ return ((Ie = T == null ? void 0 : T.querySelector) == null ? void 0 : Ie.call(T, ".mjr-viewer-media")) || null;
if ((i == null ? void 0 : i.mode) === jt.SIDE_BY_SIDE)
- return ((ve = J == null ? void 0 : J.querySelector) == null ? void 0 : ve.call(J, ".mjr-viewer-media")) || null;
+ return ((Ge = J == null ? void 0 : J.querySelector) == null ? void 0 : Ge.call(J, ".mjr-viewer-media")) || null;
} catch (_e) {
- (Fe = console.debug) == null || Fe.call(console, _e);
+ (Je = console.debug) == null || Je.call(console, _e);
}
return null;
},
- getViewportRect: S,
- clearCanvas: Ue
- }), Xt = () => {
- var Fe, _e, et, tt, st, Vt, Bt, Rt, Ct, zt;
- const ae = (() => {
+ getViewportRect: h,
+ clearCanvas: Pe
+ }), kt = () => {
+ var Je, _e, Qe, et, mt, Lt, Tt, Ot, Ct, gn;
+ const re = (() => {
try {
- const gt = Number(i == null ? void 0 : i._panHintAt) || 0;
- return gt > 0 && Date.now() - gt < 900;
+ const pt = Number(i == null ? void 0 : i._panHintAt) || 0;
+ return pt > 0 && Date.now() - pt < 900;
} catch {
return !1;
}
})();
try {
- const gt = (i == null ? void 0 : i.mode) === jt.SINGLE && !!(i != null && i.hudEnabled), mn = String((i == null ? void 0 : i.scopesMode) || "off") !== "off", wt = !!(i != null && i.overlayMaskEnabled);
- P.style.display = i.gridMode === 0 && !wt && !ae && !gt && !mn ? "none" : "";
- } catch (gt) {
- (Fe = console.debug) == null || Fe.call(console, gt);
+ const pt = (i == null ? void 0 : i.mode) === jt.SINGLE && !!(i != null && i.hudEnabled), zt = String((i == null ? void 0 : i.scopesMode) || "off") !== "off", ht = !!(i != null && i.overlayMaskEnabled);
+ P.style.display = i.gridMode === 0 && !ht && !re && !pt && !zt ? "none" : "";
+ } catch (pt) {
+ (Je = console.debug) == null || Je.call(console, pt);
}
- const he = Me.ensureCanvasSize();
- if (!(he.w > 0 && he.h > 0)) return;
+ const Ie = qt.ensureCanvasSize();
+ if (!(Ie.w > 0 && Ie.h > 0)) return;
if ((() => {
- const gt = (i == null ? void 0 : i.mode) === jt.SINGLE && !!(i != null && i.hudEnabled);
- return (Number(i.gridMode) || 0) !== 0 || !!(i != null && i.overlayMaskEnabled) || gt;
+ const pt = (i == null ? void 0 : i.mode) === jt.SINGLE && !!(i != null && i.hudEnabled);
+ return (Number(i.gridMode) || 0) !== 0 || !!(i != null && i.overlayMaskEnabled) || pt;
})())
- Me.redrawGrid(he);
+ qt.redrawGrid(Ie);
else
try {
- const gt = P.getContext("2d");
- gt && Ue(gt, he.w, he.h);
- } catch (gt) {
- (_e = console.debug) == null || _e.call(console, gt);
+ const pt = P.getContext("2d");
+ pt && Pe(pt, Ie.w, Ie.h);
+ } catch (pt) {
+ (_e = console.debug) == null || _e.call(console, pt);
}
- if (ae)
+ if (re)
try {
- const gt = P.getContext("2d");
- if (gt) {
- const mn = (et = K == null ? void 0 : K.getBoundingClientRect) == null ? void 0 : et.call(K), wt = Number(i == null ? void 0 : i._panHintX), on = Number(i == null ? void 0 : i._panHintY), rn = mn && Number.isFinite(wt) ? wt - mn.left : he.w / 2, hn = mn && Number.isFinite(on) ? on - mn.top : he.h * 0.78, ln = 10, gn = Math.max(ln, Math.min(he.w - ln, rn)), nn = Math.max(ln, Math.min(he.h - ln, hn));
- gt.save(), gt.font = "12px var(--comfy-font, ui-sans-serif, system-ui)", gt.textAlign = "center", gt.textBaseline = "middle";
- const An = "Zoom in to pan", vn = gt.measureText(An), un = Math.min(he.w - 2 * ln, Math.max(140, vn.width + 26)), Mn = 26;
- gt.fillStyle = "rgba(0,0,0,0.65)", gt.strokeStyle = "rgba(255,255,255,0.18)", gt.lineWidth = 1, gt.beginPath();
- const yn = gn - un / 2, Ut = nn - Mn / 2, Jt = 10;
- gt.moveTo(yn + Jt, Ut), gt.arcTo(yn + un, Ut, yn + un, Ut + Mn, Jt), gt.arcTo(yn + un, Ut + Mn, yn, Ut + Mn, Jt), gt.arcTo(yn, Ut + Mn, yn, Ut, Jt), gt.arcTo(yn, Ut, yn + un, Ut, Jt), gt.closePath(), gt.fill(), gt.stroke(), gt.fillStyle = "rgba(255,255,255,0.92)", gt.fillText(An, gn, nn), gt.restore();
+ const pt = P.getContext("2d");
+ if (pt) {
+ const zt = (Qe = U == null ? void 0 : U.getBoundingClientRect) == null ? void 0 : Qe.call(U), ht = Number(i == null ? void 0 : i._panHintX), on = Number(i == null ? void 0 : i._panHintY), an = zt && Number.isFinite(ht) ? ht - zt.left : Ie.w / 2, hn = zt && Number.isFinite(on) ? on - zt.top : Ie.h * 0.78, cn = 10, bn = Math.max(cn, Math.min(Ie.w - cn, an)), ln = Math.max(cn, Math.min(Ie.h - cn, hn));
+ pt.save(), pt.font = "12px var(--comfy-font, ui-sans-serif, system-ui)", pt.textAlign = "center", pt.textBaseline = "middle";
+ const Wn = "Zoom in to pan", Yn = pt.measureText(Wn), In = Math.min(Ie.w - 2 * cn, Math.max(140, Yn.width + 26)), Gn = 26;
+ pt.fillStyle = "rgba(0,0,0,0.65)", pt.strokeStyle = "rgba(255,255,255,0.18)", pt.lineWidth = 1, pt.beginPath();
+ const fn = bn - In / 2, Kt = ln - Gn / 2, Jt = 10;
+ pt.moveTo(fn + Jt, Kt), pt.arcTo(fn + In, Kt, fn + In, Kt + Gn, Jt), pt.arcTo(fn + In, Kt + Gn, fn, Kt + Gn, Jt), pt.arcTo(fn, Kt + Gn, fn, Kt, Jt), pt.arcTo(fn, Kt, fn + In, Kt, Jt), pt.closePath(), pt.fill(), pt.stroke(), pt.fillStyle = "rgba(255,255,255,0.92)", pt.fillText(Wn, bn, ln), pt.restore();
}
- } catch (gt) {
- (tt = console.debug) == null || tt.call(console, gt);
+ } catch (pt) {
+ (et = console.debug) == null || et.call(console, pt);
}
try {
- const gt = String((i == null ? void 0 : i.scopesMode) || "off");
- if (gt !== "off") {
- const mn = P.getContext("2d");
- if (mn) {
- let wt = z;
- (i == null ? void 0 : i.mode) === jt.AB_COMPARE ? wt = B : (i == null ? void 0 : i.mode) === jt.SIDE_BY_SIDE && (wt = J);
- const on = ((st = wt == null ? void 0 : wt.querySelector) == null ? void 0 : st.call(wt, "canvas.mjr-viewer-media")) || ((Vt = e == null ? void 0 : e.querySelector) == null ? void 0 : Vt.call(e, "canvas.mjr-viewer-media"));
- on && on instanceof HTMLCanvasElement && ((Bt = No == null ? void 0 : No.drawScopesLight) == null || Bt.call(No, mn, { w: he.w, h: he.h }, on, {
- mode: gt,
+ const pt = String((i == null ? void 0 : i.scopesMode) || "off");
+ if (pt !== "off") {
+ const zt = P.getContext("2d");
+ if (zt) {
+ let ht = z;
+ (i == null ? void 0 : i.mode) === jt.AB_COMPARE ? ht = T : (i == null ? void 0 : i.mode) === jt.SIDE_BY_SIDE && (ht = J);
+ const on = ((mt = ht == null ? void 0 : ht.querySelector) == null ? void 0 : mt.call(ht, "canvas.mjr-viewer-media")) || ((Lt = e == null ? void 0 : e.querySelector) == null ? void 0 : Lt.call(e, "canvas.mjr-viewer-media"));
+ on && on instanceof HTMLCanvasElement && ((Tt = ko == null ? void 0 : ko.drawScopesLight) == null || Tt.call(ko, zt, { w: Ie.w, h: Ie.h }, on, {
+ mode: pt,
channel: i == null ? void 0 : i.channel
}));
}
}
- } catch (gt) {
- (Rt = console.debug) == null || Rt.call(console, gt);
+ } catch (pt) {
+ (Ot = console.debug) == null || Ot.call(console, pt);
}
if (i.mode !== jt.SINGLE) {
try {
- H.style.display = "none";
- } catch (gt) {
- (Ct = console.debug) == null || Ct.call(console, gt);
+ E.style.display = "none";
+ } catch (pt) {
+ (Ct = console.debug) == null || Ct.call(console, pt);
}
try {
$.style.display = "none";
- } catch (gt) {
- (zt = console.debug) == null || zt.call(console, gt);
+ } catch (pt) {
+ (gn = console.debug) == null || gn.call(console, pt);
}
}
- }, Mt = (ae) => {
- var he, ve, Fe, _e;
- if (ae) {
+ }, we = (re) => {
+ var Ie, Ge, Je, _e;
+ if (re) {
try {
- for (const et of Array.from(ae.childNodes || []))
+ for (const Qe of Array.from(re.childNodes || []))
try {
- (he = et == null ? void 0 : et._mjrDispose) == null || he.call(et);
- } catch (tt) {
- (ve = console.debug) == null || ve.call(console, tt);
+ (Ie = Qe == null ? void 0 : Qe._mjrDispose) == null || Ie.call(Qe);
+ } catch (et) {
+ (Ge = console.debug) == null || Ge.call(console, et);
}
- } catch (et) {
- (Fe = console.debug) == null || Fe.call(console, et);
+ } catch (Qe) {
+ (Je = console.debug) == null || Je.call(console, Qe);
}
try {
- ae.replaceChildren();
- } catch (et) {
- (_e = console.debug) == null || _e.call(console, et);
+ re.replaceChildren();
+ } catch (Qe) {
+ (_e = console.debug) == null || _e.call(console, Qe);
}
}
}, me = () => {
- var ae, he, ve, Fe;
+ var re, Ie, Ge, Je;
try {
- (he = (ae = i._genInfoAbort) == null ? void 0 : ae.abort) == null || he.call(ae);
+ (Ie = (re = i._genInfoAbort) == null ? void 0 : re.abort) == null || Ie.call(re);
} catch (_e) {
- (ve = console.debug) == null || ve.call(console, _e);
+ (Ge = console.debug) == null || Ge.call(console, _e);
}
i._genInfoAbort = null;
try {
i._genInfoReqId = (Number(i._genInfoReqId) || 0) + 1;
} catch (_e) {
- (Fe = console.debug) == null || Fe.call(console, _e);
+ (Je = console.debug) == null || Je.call(console, _e);
}
- }, Pe = async (ae, { signal: he } = {}) => {
- var ve;
+ }, He = async (re, { signal: Ie } = {}) => {
+ var Ge;
try {
- return await ((ve = vi == null ? void 0 : vi.ensureViewerMetadataAsset) == null ? void 0 : ve.call(vi, ae, {
+ return await ((Ge = vi == null ? void 0 : vi.ensureViewerMetadataAsset) == null ? void 0 : Ge.call(vi, re, {
getAssetMetadata: gl,
- getFileMetadataScoped: Eg,
+ getFileMetadataScoped: Hg,
metadataCache: ge,
- signal: he
+ signal: Ie
}));
} catch {
- return ae;
+ return re;
}
- }, Le = (ae) => {
+ }, Ye = (re) => {
try {
- if (!ae || typeof ae != "object" || ae != null && ae.geninfo || ae != null && ae.prompt || ae != null && ae.workflow || ae != null && ae.metadata) return !1;
- if (String((ae == null ? void 0 : ae.mime) || (ae == null ? void 0 : ae.mimetype) || (ae == null ? void 0 : ae.type) || "").toLowerCase().startsWith("video/")) return !0;
- const Fe = String(
- (ae == null ? void 0 : ae.filepath) || (ae == null ? void 0 : ae.path) || (ae == null ? void 0 : ae.filename) || (ae == null ? void 0 : ae.name) || ""
+ if (!re || typeof re != "object" || re != null && re.geninfo || re != null && re.prompt || re != null && re.workflow || re != null && re.metadata) return !1;
+ if (String((re == null ? void 0 : re.mime) || (re == null ? void 0 : re.mimetype) || (re == null ? void 0 : re.type) || "").toLowerCase().startsWith("video/")) return !0;
+ const Je = String(
+ (re == null ? void 0 : re.filepath) || (re == null ? void 0 : re.path) || (re == null ? void 0 : re.filename) || (re == null ? void 0 : re.name) || ""
).toLowerCase().split(".").pop() || "";
- return ["mp4", "webm", "mov", "mkv", "avi", "m4v", "gif"].includes(Fe), !0;
+ return ["mp4", "webm", "mov", "mkv", "avi", "m4v", "gif"].includes(Je), !0;
} catch {
return !1;
}
- }, Ot = async () => {
- var Bt, Rt, Ct, zt, gt, mn;
- const ae = nt(), he = ut(), ve = i.mode, Fe = !!(i != null && i.genInfoOpen) && !(i != null && i.distractionFree), _e = Fe && (ve === jt.AB_COMPARE && ae || ve === jt.SIDE_BY_SIDE && he), et = _e && ve === jt.SIDE_BY_SIDE && !(i != null && i.compareAsset) && (((Bt = i == null ? void 0 : i.assets) == null ? void 0 : Bt.length) ?? 0) > 2;
+ }, Pt = async () => {
+ var Tt, Ot, Ct, gn, pt, zt;
+ const re = lt(), Ie = wt(), Ge = i.mode, Je = !!(i != null && i.genInfoOpen) && !(i != null && i.distractionFree), _e = Je && (Ge === jt.AB_COMPARE && re || Ge === jt.SIDE_BY_SIDE && Ie), Qe = _e && Ge === jt.SIDE_BY_SIDE && !(i != null && i.compareAsset) && (((Tt = i == null ? void 0 : i.assets) == null ? void 0 : Tt.length) ?? 0) > 2;
try {
- if (oe.style.display = Fe ? "flex" : "none", O.style.display = _e ? "flex" : "none", e.style.paddingRight = Fe ? Ou : "0px", e.style.paddingLeft = _e ? Ou : "0px", !Fe) {
+ if (ne.style.display = Je ? "flex" : "none", F.style.display = _e ? "flex" : "none", e.style.paddingRight = Je ? Fu : "0px", e.style.paddingLeft = _e ? Fu : "0px", !Je) {
me();
try {
- Mt(j);
- } catch (wt) {
- (Rt = console.debug) == null || Rt.call(console, wt);
+ we(v);
+ } catch (ht) {
+ (Ot = console.debug) == null || Ot.call(console, ht);
}
try {
- Mt(q);
- } catch (wt) {
- (Ct = console.debug) == null || Ct.call(console, wt);
+ we(q);
+ } catch (ht) {
+ (Ct = console.debug) == null || Ct.call(console, ht);
}
return;
}
@@ -21195,195 +21222,195 @@ function uW() {
return;
}
me();
- const tt = (Number(i == null ? void 0 : i._genInfoReqId) || 0) + 1;
+ const et = (Number(i == null ? void 0 : i._genInfoReqId) || 0) + 1;
try {
- i._genInfoReqId = tt;
- } catch (wt) {
- (zt = console.debug) == null || zt.call(console, wt);
+ i._genInfoReqId = et;
+ } catch (ht) {
+ (gn = console.debug) == null || gn.call(console, ht);
}
- const st = new AbortController();
- i._genInfoAbort = st;
- const Vt = ({ left: wt, leftExtra: on, right: rn, rightExtra: hn, single: ln }) => {
- var An, vn;
+ const mt = new AbortController();
+ i._genInfoAbort = mt;
+ const Lt = ({ left: ht, leftExtra: on, right: an, rightExtra: hn, single: cn }) => {
+ var Wn, Yn;
try {
- Mt(j);
- } catch (un) {
- (An = console.debug) == null || An.call(console, un);
+ we(v);
+ } catch (In) {
+ (Wn = console.debug) == null || Wn.call(console, In);
}
try {
- Mt(q);
- } catch (un) {
- (vn = console.debug) == null || vn.call(console, un);
+ we(q);
+ } catch (In) {
+ (Yn = console.debug) == null || Yn.call(console, In);
}
- const gn = () => {
- var un;
+ const bn = () => {
+ var In;
try {
- i != null && i.genInfoOpen || (i.genInfoOpen = !0), Ot();
- } catch (Mn) {
- (un = console.debug) == null || un.call(console, Mn);
+ i != null && i.genInfoOpen || (i.genInfoOpen = !0), Pt();
+ } catch (Gn) {
+ (In = console.debug) == null || In.call(console, Gn);
}
- }, nn = (un, Mn, yn, Ut) => {
+ }, ln = (In, Gn, fn, Kt) => {
var Jt, ro, lo, ao;
- if (un)
+ if (In)
try {
try {
- const it = (Jt = vi == null ? void 0 : vi.buildViewerMetadataBlocks) == null ? void 0 : Jt.call(vi, {
- title: Mn,
- asset: yn,
- ui: { loading: !!Ut, onRetry: gn }
+ const ot = (Jt = vi == null ? void 0 : vi.buildViewerMetadataBlocks) == null ? void 0 : Jt.call(vi, {
+ title: Gn,
+ asset: fn,
+ ui: { loading: !!Kt, onRetry: bn }
});
- if (it) {
- un.appendChild(it);
+ if (ot) {
+ In.appendChild(ot);
return;
}
- } catch (it) {
- (ro = console.debug) == null || ro.call(console, it);
+ } catch (ot) {
+ (ro = console.debug) == null || ro.call(console, ot);
}
- const hi = document.createElement("div");
- if (hi.style.cssText = "display:flex; flex-direction:column; gap:10px; margin-bottom: 14px;", Mn) {
- const it = document.createElement("div");
- it.textContent = Mn, it.style.cssText = "font-size: 12px; font-weight: 600; letter-spacing: 0.02em; color: rgba(255,255,255,0.86);", hi.appendChild(it);
+ const Ci = document.createElement("div");
+ if (Ci.style.cssText = "display:flex; flex-direction:column; gap:10px; margin-bottom: 14px;", Gn) {
+ const ot = document.createElement("div");
+ ot.textContent = Gn, ot.style.cssText = "font-size: 12px; font-weight: 600; letter-spacing: 0.02em; color: rgba(255,255,255,0.86);", Ci.appendChild(ot);
}
const Ve = document.createElement("div");
- Ve.style.cssText = "padding: 10px 12px; border-radius: 10px; border: 1px solid rgba(255,255,255,0.12); background: rgba(255,255,255,0.06); color: rgba(255,255,255,0.72);", Ve.textContent = "No generation data found for this file.", hi.appendChild(Ve);
+ Ve.style.cssText = "padding: 10px 12px; border-radius: 10px; border: 1px solid rgba(255,255,255,0.12); background: rgba(255,255,255,0.06); color: rgba(255,255,255,0.72);", Ve.textContent = "No generation data found for this file.", Ci.appendChild(Ve);
try {
- const it = yn == null ? void 0 : yn.metadata_raw;
- if (it != null) {
- const xt = document.createElement("details");
- xt.style.cssText = "border: 1px solid rgba(255,255,255,0.10); border-radius: 10px; background: rgba(255,255,255,0.04); overflow: hidden;";
- const an = document.createElement("summary");
- an.textContent = "Raw metadata", an.style.cssText = "cursor: pointer; padding: 10px 12px; color: rgba(255,255,255,0.78); user-select: none;";
- const sn = document.createElement("pre");
- sn.style.cssText = "margin:0; padding: 10px 12px; max-height: 280px; overflow:auto; font-size: 11px; line-height: 1.35; color: rgba(255,255,255,0.86);";
- let Bn = "";
+ const ot = fn == null ? void 0 : fn.metadata_raw;
+ if (ot != null) {
+ const St = document.createElement("details");
+ St.style.cssText = "border: 1px solid rgba(255,255,255,0.10); border-radius: 10px; background: rgba(255,255,255,0.04); overflow: hidden;";
+ const sn = document.createElement("summary");
+ sn.textContent = "Raw metadata", sn.style.cssText = "cursor: pointer; padding: 10px 12px; color: rgba(255,255,255,0.78); user-select: none;";
+ const un = document.createElement("pre");
+ un.style.cssText = "margin:0; padding: 10px 12px; max-height: 280px; overflow:auto; font-size: 11px; line-height: 1.35; color: rgba(255,255,255,0.86);";
+ let Kn = "";
try {
- typeof it == "string" ? Bn = it : Bn = JSON.stringify(it, null, 2);
+ typeof ot == "string" ? Kn = ot : Kn = JSON.stringify(ot, null, 2);
} catch {
- Bn = String(it);
+ Kn = String(ot);
}
- Bn.length > 4e4 && (Bn = `${Bn.slice(0, 4e4)}
-…(truncated)…`), sn.textContent = Bn, xt.appendChild(an), xt.appendChild(sn), hi.appendChild(xt);
+ Kn.length > 4e4 && (Kn = `${Kn.slice(0, 4e4)}
+…(truncated)…`), un.textContent = Kn, St.appendChild(sn), St.appendChild(un), Ci.appendChild(St);
}
- } catch (it) {
- (lo = console.debug) == null || lo.call(console, it);
+ } catch (ot) {
+ (lo = console.debug) == null || lo.call(console, ot);
}
- un.appendChild(hi);
- } catch (hi) {
- (ao = console.debug) == null || ao.call(console, hi);
+ In.appendChild(Ci);
+ } catch (Ci) {
+ (ao = console.debug) == null || ao.call(console, Ci);
}
};
- _e ? (wt && (D.textContent = wt.title || "Asset A", nn(
+ _e ? (ht && (D.textContent = ht.title || "Asset A", ln(
q,
on ? "Asset A" : "",
- wt.asset,
- wt.loading
- )), on && nn(q, "Asset C", on.asset, on.loading), rn && (M.textContent = rn.title || "Asset B", nn(
- j,
+ ht.asset,
+ ht.loading
+ )), on && ln(q, "Asset C", on.asset, on.loading), an && (M.textContent = an.title || "Asset B", ln(
+ v,
hn ? "Asset B" : "",
- rn.asset,
- rn.loading
- )), hn && nn(j, "Asset D", hn.asset, hn.loading)) : ln && (M.textContent = ln.title || "Generation Info", nn(j, "", ln.asset, ln.loading));
+ an.asset,
+ an.loading
+ )), hn && ln(v, "Asset D", hn.asset, hn.loading)) : cn && (M.textContent = cn.title || "Generation Info", ln(v, "", cn.asset, cn.loading));
};
try {
- const wt = ((gt = i == null ? void 0 : i.assets) == null ? void 0 : gt[i == null ? void 0 : i.currentIndex]) || null;
- if (!wt) {
- Vt({});
+ const ht = ((pt = i == null ? void 0 : i.assets) == null ? void 0 : pt[i == null ? void 0 : i.currentIndex]) || null;
+ if (!ht) {
+ Lt({});
return;
}
- let on = null, rn = null, hn = null, ln = null, gn = null;
- _e ? ve === jt.SIDE_BY_SIDE ? i != null && i.compareAsset ? (on = wt, rn = i.compareAsset) : (on = i.assets[0] || null, rn = i.assets[1] || null, et && (hn = i.assets[2] || null, ln = i.assets[3] || null)) : (on = wt, rn = (i == null ? void 0 : i.compareAsset) || (i.assets.length === 2 ? i.assets[1 - i.currentIndex] : null)) : gn = wt;
- const nn = (An) => {
- var vn, un;
- return An ? ((un = (vn = ge == null ? void 0 : ge.getCached) == null ? void 0 : vn.call(ge, An.id)) == null ? void 0 : un.data) || An : null;
+ let on = null, an = null, hn = null, cn = null, bn = null;
+ _e ? Ge === jt.SIDE_BY_SIDE ? i != null && i.compareAsset ? (on = ht, an = i.compareAsset) : (on = i.assets[0] || null, an = i.assets[1] || null, Qe && (hn = i.assets[2] || null, cn = i.assets[3] || null)) : (on = ht, an = (i == null ? void 0 : i.compareAsset) || (i.assets.length === 2 ? i.assets[1 - i.currentIndex] : null)) : bn = ht;
+ const ln = (Wn) => {
+ var Yn, In;
+ return Wn ? ((In = (Yn = ge == null ? void 0 : ge.getCached) == null ? void 0 : Yn.call(ge, Wn.id)) == null ? void 0 : In.data) || Wn : null;
};
- if (Vt({
+ if (Lt({
left: _e ? {
- title: et ? "Assets A & C" : "Asset A",
- asset: nn(on),
- loading: Le(nn(on))
+ title: Qe ? "Assets A & C" : "Asset A",
+ asset: ln(on),
+ loading: Ye(ln(on))
} : null,
- leftExtra: et && hn ? {
- asset: nn(hn),
- loading: Le(nn(hn))
+ leftExtra: Qe && hn ? {
+ asset: ln(hn),
+ loading: Ye(ln(hn))
} : null,
right: _e ? {
- title: et ? "Assets B & D" : "Asset B",
- asset: nn(rn),
- loading: Le(nn(rn))
+ title: Qe ? "Assets B & D" : "Asset B",
+ asset: ln(an),
+ loading: Ye(ln(an))
} : null,
- rightExtra: et && ln ? {
- asset: nn(ln),
- loading: Le(nn(ln))
+ rightExtra: Qe && cn ? {
+ asset: ln(cn),
+ loading: Ye(ln(cn))
} : null,
single: _e ? null : {
title: "Generation Info",
- asset: nn(gn),
- loading: Le(nn(gn))
+ asset: ln(bn),
+ loading: Ye(ln(bn))
}
- }), i._genInfoReqId !== tt) return;
+ }), i._genInfoReqId !== et) return;
if (_e) {
- const An = on ? await Pe(on, { signal: st.signal }) : null, vn = rn ? await Pe(rn, { signal: st.signal }) : null, un = hn ? await Pe(hn, { signal: st.signal }) : null, Mn = ln ? await Pe(ln, { signal: st.signal }) : null;
- if (i._genInfoReqId !== tt) return;
- Vt({
+ const Wn = on ? await He(on, { signal: mt.signal }) : null, Yn = an ? await He(an, { signal: mt.signal }) : null, In = hn ? await He(hn, { signal: mt.signal }) : null, Gn = cn ? await He(cn, { signal: mt.signal }) : null;
+ if (i._genInfoReqId !== et) return;
+ Lt({
left: {
- title: et ? "Assets A & C" : "Asset A",
- asset: An,
+ title: Qe ? "Assets A & C" : "Asset A",
+ asset: Wn,
loading: !1
},
- leftExtra: et && un ? { asset: un, loading: !1 } : null,
+ leftExtra: Qe && In ? { asset: In, loading: !1 } : null,
right: {
- title: et ? "Assets B & D" : "Asset B",
- asset: vn,
+ title: Qe ? "Assets B & D" : "Asset B",
+ asset: Yn,
loading: !1
},
- rightExtra: et && Mn ? { asset: Mn, loading: !1 } : null
+ rightExtra: Qe && Gn ? { asset: Gn, loading: !1 } : null
});
} else {
- const An = gn ? await Pe(gn, { signal: st.signal }) : null;
- if (i._genInfoReqId !== tt) return;
- Vt({
+ const Wn = bn ? await He(bn, { signal: mt.signal }) : null;
+ if (i._genInfoReqId !== et) return;
+ Lt({
single: {
title: "Generation Info",
- asset: An,
+ asset: Wn,
loading: !1
}
});
}
- } catch (wt) {
- (mn = console.debug) == null || mn.call(console, wt);
+ } catch (ht) {
+ (zt = console.debug) == null || zt.call(console, ht);
}
};
- let Xe = null;
- function Ee(ae) {
- var he, ve;
+ let ke = null;
+ function Ee(re) {
+ var Ie, Ge;
try {
- return !Xe && Na && (Xe = Na.createFrameExporter({
+ return !ke && Ra && (ke = Ra.createFrameExporter({
state: i,
VIEWER_MODES: jt,
singleView: z,
- abView: B,
+ abView: T,
sideView: J
- })), (he = Xe == null ? void 0 : Xe.exportCurrentFrame) == null ? void 0 : he.call(Xe, ae);
- } catch (Fe) {
- (ve = console.debug) == null || ve.call(console, Fe);
+ })), (Ie = ke == null ? void 0 : ke.exportCurrentFrame) == null ? void 0 : Ie.call(ke, re);
+ } catch (Je) {
+ (Ge = console.debug) == null || Ge.call(console, Je);
}
}
const Ke = () => {
- var tt, st, Vt, Bt, Rt, Ct, zt, gt, mn;
- const ae = (wt) => {
+ var et, mt, Lt, Tt, Ot, Ct, gn, pt, zt;
+ const re = (ht) => {
var on;
try {
- wt && wt.replaceChildren();
- } catch (rn) {
- (on = console.debug) == null || on.call(console, rn);
+ ht && ht.replaceChildren();
+ } catch (an) {
+ (on = console.debug) == null || on.call(console, an);
}
};
- ae(W), ae(X);
- const he = (wt, { showName: on } = {}) => {
- var An, vn, un, Mn;
- if (!wt) return null;
- const rn = document.createElement("div");
- rn.className = "mjr-viewer-asset-pill", rn.style.cssText = `
+ re(Z), re(X);
+ const Ie = (ht, { showName: on } = {}) => {
+ var Wn, Yn, In, Gn;
+ if (!ht) return null;
+ const an = document.createElement("div");
+ an.className = "mjr-viewer-asset-pill", an.style.cssText = `
display: inline-flex;
align-items: center;
gap: 8px;
@@ -21396,247 +21423,247 @@ function uW() {
overflow: hidden;
`;
const hn = document.createElement("span");
- hn.textContent = String(wt.filename || ""), hn.style.cssText = "max-width:200px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; opacity:0.95;";
- const ln = bZ(
- wt.filename,
- wt.kind,
- !!(wt != null && wt._mjrNameCollision)
+ hn.textContent = String(ht.filename || ""), hn.style.cssText = "max-width:200px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; opacity:0.95;";
+ const cn = bZ(
+ ht.filename,
+ ht.kind,
+ !!(ht != null && ht._mjrNameCollision)
);
try {
- ln.style.position = "static", ln.style.top = "", ln.style.left = "", ln.style.padding = "2px 6px", ln.style.fontSize = "10px", ln.style.borderRadius = "6px", ln.style.pointerEvents = "none";
- } catch (yn) {
- (An = console.debug) == null || An.call(console, yn);
+ cn.style.position = "static", cn.style.top = "", cn.style.left = "", cn.style.padding = "2px 6px", cn.style.fontSize = "10px", cn.style.borderRadius = "6px", cn.style.pointerEvents = "none";
+ } catch (fn) {
+ (Wn = console.debug) == null || Wn.call(console, fn);
}
- const gn = Ya(wt.rating || 0);
- if (gn)
+ const bn = Xa(ht.rating || 0);
+ if (bn)
try {
- gn.style.position = "static", gn.style.top = "", gn.style.right = "", gn.style.padding = "2px 6px", gn.style.fontSize = "12px";
- } catch (yn) {
- (vn = console.debug) == null || vn.call(console, yn);
+ bn.style.position = "static", bn.style.top = "", bn.style.right = "", bn.style.padding = "2px 6px", bn.style.fontSize = "12px";
+ } catch (fn) {
+ (Yn = console.debug) == null || Yn.call(console, fn);
}
- const nn = JI(Array.isArray(wt.tags) ? wt.tags : []);
- if (nn)
+ const ln = JI(Array.isArray(ht.tags) ? ht.tags : []);
+ if (ln)
try {
- nn.style.position = "static", nn.style.bottom = "", nn.style.left = "", nn.style.maxWidth = "220px", nn.style.pointerEvents = "none";
- } catch (yn) {
- (un = console.debug) == null || un.call(console, yn);
+ ln.style.position = "static", ln.style.bottom = "", ln.style.left = "", ln.style.maxWidth = "220px", ln.style.pointerEvents = "none";
+ } catch (fn) {
+ (In = console.debug) == null || In.call(console, fn);
}
- rn.appendChild(ln), on && rn.appendChild(hn), gn && rn.appendChild(gn), nn && nn.style.display !== "none" && rn.appendChild(nn);
+ an.appendChild(cn), on && an.appendChild(hn), bn && an.appendChild(bn), ln && ln.style.display !== "none" && an.appendChild(ln);
try {
- wt.filepath && (rn.title = String(wt.filepath));
- } catch (yn) {
- (Mn = console.debug) == null || Mn.call(console, yn);
+ ht.filepath && (an.title = String(ht.filepath));
+ } catch (fn) {
+ (Gn = console.debug) == null || Gn.call(console, fn);
}
- return rn;
- }, ve = i.mode === jt.SINGLE, Fe = i.mode === jt.AB_COMPARE && nt(), _e = i.mode === jt.SIDE_BY_SIDE && ut();
- if ((Fe || _e) && X) {
- const wt = ((tt = i.assets) == null ? void 0 : tt[i.currentIndex]) || null, on = _e && i.compareAsset != null, rn = Fe ? i.compareAsset != null ? wt : ((st = i.assets) == null ? void 0 : st[0]) || null : on ? wt : ((Vt = i.assets) == null ? void 0 : Vt[0]) || null, hn = Fe ? i.compareAsset != null ? i.compareAsset : ((Bt = i.assets) == null ? void 0 : Bt[1]) || null : on ? i.compareAsset : ((Ct = i.assets) == null ? void 0 : Ct[Math.max(0, (((Rt = i.assets) == null ? void 0 : Rt.length) || 1) - 1)]) || null, ln = he(rn, { showName: !1 }), gn = he(hn, { showName: !1 });
+ return an;
+ }, Ge = i.mode === jt.SINGLE, Je = i.mode === jt.AB_COMPARE && lt(), _e = i.mode === jt.SIDE_BY_SIDE && wt();
+ if ((Je || _e) && X) {
+ const ht = ((et = i.assets) == null ? void 0 : et[i.currentIndex]) || null, on = _e && i.compareAsset != null, an = Je ? i.compareAsset != null ? ht : ((mt = i.assets) == null ? void 0 : mt[0]) || null : on ? ht : ((Lt = i.assets) == null ? void 0 : Lt[0]) || null, hn = Je ? i.compareAsset != null ? i.compareAsset : ((Tt = i.assets) == null ? void 0 : Tt[1]) || null : on ? i.compareAsset : ((Ct = i.assets) == null ? void 0 : Ct[Math.max(0, (((Ot = i.assets) == null ? void 0 : Ot.length) || 1) - 1)]) || null, cn = Ie(an, { showName: !1 }), bn = Ie(hn, { showName: !1 });
try {
- ln && W.appendChild(ln);
- } catch (nn) {
- (zt = console.debug) == null || zt.call(console, nn);
+ cn && Z.appendChild(cn);
+ } catch (ln) {
+ (gn = console.debug) == null || gn.call(console, ln);
}
try {
- gn && X.appendChild(gn);
- } catch (nn) {
- (gt = console.debug) == null || gt.call(console, nn);
+ bn && X.appendChild(bn);
+ } catch (ln) {
+ (pt = console.debug) == null || pt.call(console, ln);
}
return;
}
- const et = ve ? [i.assets[i.currentIndex]].filter(Boolean) : Array.isArray(i.assets) ? i.assets.slice(0, 4) : [];
- for (const wt of et) {
- const on = he(wt, { showName: !ve });
+ const Qe = Ge ? [i.assets[i.currentIndex]].filter(Boolean) : Array.isArray(i.assets) ? i.assets.slice(0, 4) : [];
+ for (const ht of Qe) {
+ const on = Ie(ht, { showName: !Ge });
if (on)
try {
- W.appendChild(on);
- } catch (rn) {
- (mn = console.debug) == null || mn.call(console, rn);
+ Z.appendChild(on);
+ } catch (an) {
+ (zt = console.debug) == null || zt.call(console, an);
}
}
};
- function nt() {
- return (i.assets.length === 2 || i.compareAsset != null) && !se();
+ function lt() {
+ return (i.assets.length === 2 || i.compareAsset != null) && !de();
}
- function ut() {
- const ae = i.assets.length;
- return ae >= 2 && ae <= 4 || ae >= 1 && i.compareAsset != null;
+ function wt() {
+ const re = i.assets.length;
+ return re >= 2 && re <= 4 || re >= 1 && i.compareAsset != null;
}
- function It() {
- var he, ve, Fe, _e;
- const ae = !!(i != null && i.distractionFree);
+ function at() {
+ var Ie, Ge, Je, _e;
+ const re = !!(i != null && i.distractionFree);
try {
- h.style.display = ae ? "none" : "";
- } catch (et) {
- (he = console.debug) == null || he.call(console, et);
+ C.style.display = re ? "none" : "";
+ } catch (Qe) {
+ (Ie = console.debug) == null || Ie.call(console, Qe);
}
try {
- ee.style.display = ae ? "none" : "";
- } catch (et) {
- (ve = console.debug) == null || ve.call(console, et);
+ ee.style.display = re ? "none" : "";
+ } catch (Qe) {
+ (Ge = console.debug) == null || Ge.call(console, Qe);
}
try {
- e.classList.toggle("mjr-viewer-focus", ae);
- } catch (et) {
- (Fe = console.debug) == null || Fe.call(console, et);
+ e.classList.toggle("mjr-viewer-focus", re);
+ } catch (Qe) {
+ (Je = console.debug) == null || Je.call(console, Qe);
}
try {
- ae && (e.style.paddingRight = "0px", e.style.paddingLeft = "0px", oe.style.display = "none", O.style.display = "none");
- } catch (et) {
- (_e = console.debug) == null || _e.call(console, et);
+ re && (e.style.paddingRight = "0px", e.style.paddingLeft = "0px", ne.style.display = "none", F.style.display = "none");
+ } catch (Qe) {
+ (_e = console.debug) == null || _e.call(console, Qe);
}
}
- function dt() {
- var Vt, Bt, Rt, Ct, zt, gt, mn, wt, on, rn, hn, ln, gn, nn, An, vn, un, Mn, yn;
+ function tt() {
+ var Lt, Tt, Ot, Ct, gn, pt, zt, ht, on, an, hn, cn, bn, ln, Wn, Yn, In, Gn, fn;
i.zoom = 1, i.panX = 0, i.panY = 0, i.targetZoom = 1;
try {
i.mode !== jt.AB_COMPARE && i.mode !== jt.SIDE_BY_SIDE && i.compareAsset != null && (i.compareAsset = null);
- } catch (Ut) {
- (Vt = console.debug) == null || Vt.call(console, Ut);
+ } catch (Kt) {
+ (Lt = console.debug) == null || Lt.call(console, Kt);
}
- const ae = i.assets[i.currentIndex], he = i.mode === jt.AB_COMPARE && nt(), ve = i.mode === jt.SIDE_BY_SIDE && ut(), Fe = he && i.compareAsset != null, _e = ve && i.compareAsset != null, et = he ? (Fe ? ae : (Bt = i.assets) == null ? void 0 : Bt[0]) || null : ve ? (_e ? ae : (Rt = i.assets) == null ? void 0 : Rt[0]) || null : ae || null, tt = he ? (Fe ? i.compareAsset : (Ct = i.assets) == null ? void 0 : Ct[1]) || null : ve ? _e ? i.compareAsset : Array.isArray(i.assets) && i.assets.length >= 2 ? i.assets[i.assets.length - 1] : null : null;
+ const re = i.assets[i.currentIndex], Ie = i.mode === jt.AB_COMPARE && lt(), Ge = i.mode === jt.SIDE_BY_SIDE && wt(), Je = Ie && i.compareAsset != null, _e = Ge && i.compareAsset != null, Qe = Ie ? (Je ? re : (Tt = i.assets) == null ? void 0 : Tt[0]) || null : Ge ? (_e ? re : (Ot = i.assets) == null ? void 0 : Ot[0]) || null : re || null, et = Ie ? (Je ? i.compareAsset : (Ct = i.assets) == null ? void 0 : Ct[1]) || null : Ge ? _e ? i.compareAsset : Array.isArray(i.assets) && i.assets.length >= 2 ? i.assets[i.assets.length - 1] : null : null;
try {
- G.textContent = (et == null ? void 0 : et.filename) || "";
- } catch (Ut) {
- (zt = console.debug) == null || zt.call(console, Ut);
+ G.textContent = (Qe == null ? void 0 : Qe.filename) || "";
+ } catch (Kt) {
+ (gn = console.debug) == null || gn.call(console, Kt);
}
try {
- x && f && tt && tt !== et ? (x.style.display = "flex", T && (T.style.display = "flex"), f.textContent = (tt == null ? void 0 : tt.filename) || "", v && w && Y && (v.style.display = "flex", w.appendChild(Y), Y.style.justifyContent = "flex-start"), V && (V.style.justifyContent = "center", V.style.paddingLeft = "84px"), R && (R.style.flex = "0 0 auto"), F && (F.style.flex = "0 0 auto"), G && (G.style.textAlign = "left")) : x && f && (x.style.display = "none", T && (T.style.display = "none"), f.textContent = "", v && (v.style.display = "none"), F && Y && N && (F.insertBefore(Y, N), Y.style.justifyContent = "center"), V && (V.style.justifyContent = "center", V.style.paddingLeft = "12px"), R && (R.style.flex = "1 1 auto"), F && (F.style.flex = ""), G && (G.style.textAlign = "center"));
- } catch (Ut) {
- (gt = console.debug) == null || gt.call(console, Ut);
+ x && f && et && et !== Qe ? (x.style.display = "flex", K && (K.style.display = "flex"), f.textContent = (et == null ? void 0 : et.filename) || "", j && w && V && (j.style.display = "flex", w.appendChild(V), V.style.justifyContent = "flex-start"), Y && (Y.style.justifyContent = "center", Y.style.paddingLeft = "84px"), R && (R.style.flex = "0 0 auto"), O && (O.style.flex = "0 0 auto"), G && (G.style.textAlign = "left")) : x && f && (x.style.display = "none", K && (K.style.display = "none"), f.textContent = "", j && (j.style.display = "none"), O && V && k && (O.insertBefore(V, k), V.style.justifyContent = "center"), Y && (Y.style.justifyContent = "center", Y.style.paddingLeft = "12px"), R && (R.style.flex = "1 1 auto"), O && (O.style.flex = ""), G && (G.style.textAlign = "center"));
+ } catch (Kt) {
+ (pt = console.debug) == null || pt.call(console, Kt);
}
- i.mode === jt.AB_COMPARE && nt() ? ue.textContent = "2 selected" : i.mode === jt.SIDE_BY_SIDE && ut() ? ue.textContent = i.compareAsset != null ? "2 selected" : `${i.assets.length} selected` : ue.textContent = `${i.currentIndex + 1} / ${i.assets.length}`, i.mode === jt.AB_COMPARE && !nt() && (i.mode = ut() ? jt.SIDE_BY_SIDE : jt.SINGLE), i.mode === jt.SIDE_BY_SIDE && !ut() && (i.mode = jt.SINGLE);
+ i.mode === jt.AB_COMPARE && lt() ? ue.textContent = "2 selected" : i.mode === jt.SIDE_BY_SIDE && wt() ? ue.textContent = i.compareAsset != null ? "2 selected" : `${i.assets.length} selected` : ue.textContent = `${i.currentIndex + 1} / ${i.assets.length}`, i.mode === jt.AB_COMPARE && !lt() && (i.mode = wt() ? jt.SIDE_BY_SIDE : jt.SINGLE), i.mode === jt.SIDE_BY_SIDE && !wt() && (i.mode = jt.SINGLE);
try {
- (mn = b == null ? void 0 : b.syncModeButtons) == null || mn.call(b, { canAB: nt, canSide: ut });
- } catch (Ut) {
- (wt = console.debug) == null || wt.call(console, Ut);
+ (zt = b == null ? void 0 : b.syncModeButtons) == null || zt.call(b, { canAB: lt, canSide: wt });
+ } catch (Kt) {
+ (ht = console.debug) == null || ht.call(console, Kt);
}
- z.style.display = i.mode === jt.SINGLE ? "flex" : "none", B.style.display = i.mode === jt.AB_COMPARE ? "block" : "none", J.style.display = i.mode === jt.SIDE_BY_SIDE ? "flex" : "none";
+ z.style.display = i.mode === jt.SINGLE ? "flex" : "none", T.style.display = i.mode === jt.AB_COMPARE ? "block" : "none", J.style.display = i.mode === jt.SIDE_BY_SIDE ? "flex" : "none";
try {
i.mode !== jt.SINGLE && (di(z), z.replaceChildren());
- } catch (Ut) {
- (on = console.debug) == null || on.call(console, Ut);
+ } catch (Kt) {
+ (on = console.debug) == null || on.call(console, Kt);
}
try {
- i.mode !== jt.AB_COMPARE && (di(B), B.replaceChildren());
- } catch (Ut) {
- (rn = console.debug) == null || rn.call(console, Ut);
+ i.mode !== jt.AB_COMPARE && (di(T), T.replaceChildren());
+ } catch (Kt) {
+ (an = console.debug) == null || an.call(console, Kt);
}
try {
i.mode !== jt.SIDE_BY_SIDE && (di(J), J.replaceChildren());
- } catch (Ut) {
- (hn = console.debug) == null || hn.call(console, Ut);
+ } catch (Kt) {
+ (hn = console.debug) == null || hn.call(console, Kt);
}
Ke();
- const st = i.mode === jt.AB_COMPARE && nt() || i.mode === jt.SIDE_BY_SIDE && ut();
+ const mt = i.mode === jt.AB_COMPARE && lt() || i.mode === jt.SIDE_BY_SIDE && wt();
try {
- ce.style.display = st ? "none" : "", U.style.display = st ? "none" : "";
- } catch (Ut) {
- (ln = console.debug) == null || ln.call(console, Ut);
+ ae.style.display = mt ? "none" : "", B.style.display = mt ? "none" : "";
+ } catch (Kt) {
+ (cn = console.debug) == null || cn.call(console, Kt);
}
- Re(), Wt(i.assets, i.currentIndex), yt();
+ Oe(), Rt(i.assets, i.currentIndex), dt();
try {
- (gn = b == null ? void 0 : b.syncToolsUIFromState) == null || gn.call(b);
- } catch (Ut) {
- (nn = console.debug) == null || nn.call(console, Ut);
+ (bn = b == null ? void 0 : b.syncToolsUIFromState) == null || bn.call(b);
+ } catch (Kt) {
+ (ln = console.debug) == null || ln.call(console, Kt);
}
try {
- It();
- } catch (Ut) {
- (An = console.debug) == null || An.call(console, Ut);
+ at();
+ } catch (Kt) {
+ (Wn = console.debug) == null || Wn.call(console, Kt);
}
try {
- pe == null || pe();
- } catch (Ut) {
- (vn = console.debug) == null || vn.call(console, Ut);
+ ye == null || ye();
+ } catch (Kt) {
+ (Yn = console.debug) == null || Yn.call(console, Kt);
}
- Oe();
+ rt();
try {
- Ot();
- } catch (Ut) {
- (un = console.debug) == null || un.call(console, Ut);
+ Pt();
+ } catch (Kt) {
+ (In = console.debug) == null || In.call(console, Kt);
}
try {
qe().then(() => {
- var Ut;
+ var Kt;
try {
Ke();
} catch (Jt) {
- (Ut = console.debug) == null || Ut.call(console, Jt);
+ (Kt = console.debug) == null || Kt.call(console, Jt);
}
});
- } catch (Ut) {
- (Mn = console.debug) == null || Mn.call(console, Ut);
+ } catch (Kt) {
+ (Gn = console.debug) == null || Gn.call(console, Kt);
}
try {
- const Ut = i.mode === jt.SINGLE;
- le.sync({ isSingle: Ut });
- } catch (Ut) {
- (yn = console.debug) == null || yn.call(console, Ut);
+ const Kt = i.mode === jt.SINGLE;
+ le.sync({ isSingle: Kt });
+ } catch (Kt) {
+ (fn = console.debug) == null || fn.call(console, Kt);
}
}
- function Re() {
- var ve, Fe, _e, et, tt;
- const ae = i.assets[i.currentIndex];
- if (!ae) return;
- const he = Ki(ae);
- if (!he) {
+ function Oe() {
+ var Ge, Je, _e, Qe, et;
+ const re = i.assets[i.currentIndex];
+ if (!re) return;
+ const Ie = Ui(re);
+ if (!Ie) {
try {
di(z);
- } catch (st) {
- (ve = console.debug) == null || ve.call(console, st);
+ } catch (mt) {
+ (Ge = console.debug) == null || Ge.call(console, mt);
}
try {
z.replaceChildren();
- const st = document.createElement("div");
- st.className = "mjr-viewer-media", st.style.cssText = "color:#ff9a9a; font-size:13px; padding:16px; text-align:center;", st.textContent = "Cannot open asset: missing or invalid filename/path.", z.appendChild(st);
- } catch (st) {
- (Fe = console.debug) == null || Fe.call(console, st);
+ const mt = document.createElement("div");
+ mt.className = "mjr-viewer-media", mt.style.cssText = "color:#ff9a9a; font-size:13px; padding:16px; text-align:center;", mt.textContent = "Cannot open asset: missing or invalid filename/path.", z.appendChild(mt);
+ } catch (mt) {
+ (Je = console.debug) == null || Je.call(console, mt);
}
return;
}
if (i.mode === jt.SINGLE) {
try {
di(z);
- } catch (Vt) {
- (_e = console.debug) == null || _e.call(console, Vt);
+ } catch (Lt) {
+ (_e = console.debug) == null || _e.call(console, Lt);
}
z.innerHTML = "", i._mediaW = 0, i._mediaH = 0;
- const st = g(ae, he);
- z.appendChild(st);
- } else i.mode === jt.AB_COMPARE ? nt() && ((et = ko == null ? void 0 : ko.renderABCompareView) == null || et.call(ko, {
- abView: B,
+ const mt = g(re, Ie);
+ z.appendChild(mt);
+ } else i.mode === jt.AB_COMPARE ? lt() && ((Qe = Xo == null ? void 0 : Xo.renderABCompareView) == null || Qe.call(Xo, {
+ abView: T,
state: i,
- currentAsset: ae,
- viewUrl: he,
- buildAssetViewURL: Ki,
- createCompareMediaElement: A,
+ currentAsset: re,
+ viewUrl: Ie,
+ buildAssetViewURL: Ui,
+ createCompareMediaElement: y,
destroyMediaProcessorsIn: di
- })) : i.mode === jt.SIDE_BY_SIDE && ut() && ((tt = Xo == null ? void 0 : Xo.renderSideBySideView) == null || tt.call(Xo, {
+ })) : i.mode === jt.SIDE_BY_SIDE && wt() && ((et = No == null ? void 0 : No.renderSideBySideView) == null || et.call(No, {
sideView: J,
state: i,
- currentAsset: ae,
- viewUrl: he,
- buildAssetViewURL: Ki,
+ currentAsset: re,
+ viewUrl: Ie,
+ buildAssetViewURL: Ui,
createMediaElement: g,
destroyMediaProcessorsIn: di
}));
s(), u();
}
const {
- preloadAdjacentAssets: Wt
+ preloadAdjacentAssets: Rt
} = qA({
- buildAssetViewURL: Ki,
+ buildAssetViewURL: Ui,
IMAGE_PRELOAD_EXTENSIONS: o,
state: i
- }), { destroyPlayerBar: lt, syncPlayerBar: qt } = QA({
+ }), { destroyPlayerBar: nt, syncPlayerBar: Mt } = QA({
state: i,
- APP_CONFIG: fe,
+ APP_CONFIG: he,
VIEWER_MODES: jt,
overlay: e,
navBar: Q,
playerBarHost: _,
singleView: z,
- abView: B,
+ abView: T,
sideView: J,
metadataHydrator: ge,
isPlayableViewerKind: QZ,
@@ -21645,227 +21672,227 @@ function uW() {
mountUnifiedMediaControls: eA,
installFollowerVideoSync: mA,
getViewerInfo: Dg,
- scheduleOverlayRedraw: Oe,
- viewerInfoCacheGet: Je,
- viewerInfoCacheSet: $e
- }), yt = () => qt(), mt = fe.VIEWER_MAX_PROC_PIXELS ?? 12e6, kt = () => ({
+ scheduleOverlayRedraw: rt,
+ viewerInfoCacheGet: Fe,
+ viewerInfoCacheSet: it
+ }), dt = () => Mt(), bt = he.VIEWER_MAX_PROC_PIXELS ?? 12e6, Yt = () => ({
exposureEV: Number(i.exposureEV) || 0,
gamma: Math.max(0.1, Math.min(3, Number(i.gamma) || 1)),
channel: i.channel || "rgb",
analysisMode: i.analysisMode || "none",
zebraThreshold: Math.max(0, Math.min(1, Number(i.zebraThreshold) || 0.95))
}), $t = () => {
- var he, ve, Fe, _e;
- const ae = kt();
+ var Ie, Ge, Je, _e;
+ const re = Yt();
try {
- const et = e.querySelectorAll(".mjr-viewer-media");
- for (const tt of et)
+ const Qe = e.querySelectorAll(".mjr-viewer-media");
+ for (const et of Qe)
try {
- const st = tt == null ? void 0 : tt._mjrProc;
- st != null && st.setParams && st.setParams(ae);
- } catch (st) {
- (he = console.debug) == null || he.call(console, st);
+ const mt = et == null ? void 0 : et._mjrProc;
+ mt != null && mt.setParams && mt.setParams(re);
+ } catch (mt) {
+ (Ie = console.debug) == null || Ie.call(console, mt);
}
- } catch (et) {
- (ve = console.debug) == null || ve.call(console, et);
+ } catch (Qe) {
+ (Ge = console.debug) == null || Ge.call(console, Qe);
}
try {
- (i == null ? void 0 : i.mode) === jt.AB_COMPARE && ((Fe = B == null ? void 0 : B._mjrDiffRequest) == null || Fe.call(B));
- } catch (et) {
- (_e = console.debug) == null || _e.call(console, et);
+ (i == null ? void 0 : i.mode) === jt.AB_COMPARE && ((Je = T == null ? void 0 : T._mjrDiffRequest) == null || Je.call(T));
+ } catch (Qe) {
+ (_e = console.debug) == null || _e.call(console, Qe);
}
- }, Tt = (ae) => {
+ }, nn = (re) => {
try {
- if (!ae) return !0;
- const he = Number(ae.exposureEV) || 0, ve = Number(ae.gamma) || 1, Fe = String(ae.channel || "rgb"), _e = String(ae.analysisMode || "none");
- return Math.abs(he) < 1e-4 && Math.abs(ve - 1) < 1e-4 && Fe === "rgb" && _e === "none";
+ if (!re) return !0;
+ const Ie = Number(re.exposureEV) || 0, Ge = Number(re.gamma) || 1, Je = String(re.channel || "rgb"), _e = String(re.analysisMode || "none");
+ return Math.abs(Ie) < 1e-4 && Math.abs(Ge - 1) < 1e-4 && Je === "rgb" && _e === "none";
} catch {
return !0;
}
- }, te = fe.VIEWER_MAX_PROC_PIXELS_VIDEO ?? 3e6, ye = fe.VIEWER_VIDEO_GRADE_THROTTLE_FPS ?? 15;
+ }, ie = he.VIEWER_MAX_PROC_PIXELS_VIDEO ?? 3e6, pe = he.VIEWER_VIDEO_GRADE_THROTTLE_FPS ?? 15;
try {
- l = HA({
+ l = EA({
overlay: e,
state: i,
mediaTransform: a,
- updateMediaNaturalSize: C,
+ updateMediaNaturalSize: W,
clampPanToBounds: c,
applyTransform: s,
- scheduleOverlayRedraw: Oe,
- getGradeParams: kt,
- isDefaultGrade: Tt,
+ scheduleOverlayRedraw: rt,
+ getGradeParams: Yt,
+ isDefaultGrade: nn,
tonemap: null,
- maxProcPixels: mt,
- maxProcPixelsVideo: te,
- disableWebGL: !!fe.VIEWER_DISABLE_WEBGL_VIDEO,
- videoGradeThrottleFps: ye,
- safeAddListener: Qe,
- safeCall: bt
+ maxProcPixels: bt,
+ maxProcPixelsVideo: ie,
+ disableWebGL: !!he.VIEWER_DISABLE_WEBGL_VIDEO,
+ videoGradeThrottleFps: pe,
+ safeAddListener: $e,
+ safeCall: It
});
} catch {
l = null;
}
n.push(
- Qe(ce, "click", () => {
- i.currentIndex > 0 && (i.currentIndex--, dt());
+ $e(ae, "click", () => {
+ i.currentIndex > 0 && (i.currentIndex--, tt());
})
), n.push(
- Qe(U, "click", () => {
- i.currentIndex < i.assets.length - 1 && (i.currentIndex++, dt());
+ $e(B, "click", () => {
+ i.currentIndex < i.assets.length - 1 && (i.currentIndex++, tt());
})
);
- let We = null;
- const pe = () => {
- var ae;
+ let Ce = null;
+ const ye = () => {
+ var re;
try {
- if (We != null) return;
- We = requestAnimationFrame(() => {
- var he;
- We = null;
+ if (Ce != null) return;
+ Ce = requestAnimationFrame(() => {
+ var Ie;
+ Ce = null;
try {
$t();
- } catch (ve) {
- (he = console.debug) == null || he.call(console, ve);
+ } catch (Ge) {
+ (Ie = console.debug) == null || Ie.call(console, Ge);
}
});
- } catch (he) {
- (ae = console.debug) == null || ae.call(console, he);
+ } catch (Ie) {
+ (re = console.debug) == null || re.call(console, Ie);
}
}, De = () => {
- var ae, he;
+ var re, Ie;
try {
- (ae = b == null ? void 0 : b.syncToolsUIFromState) == null || ae.call(b);
- } catch (ve) {
- (he = console.debug) == null || he.call(console, ve);
+ (re = b == null ? void 0 : b.syncToolsUIFromState) == null || re.call(b);
+ } catch (Ge) {
+ (Ie = console.debug) == null || Ie.call(console, Ge);
}
- }, ot = (ae) => {
+ }, ut = (re) => {
if (!Array.isArray(i.assets) || i.assets.length === 0)
return !1;
- const he = i.currentIndex + ae;
- return he < 0 || he >= i.assets.length ? !1 : (i.currentIndex = he, dt(), !0);
- }, Zt = (ae) => {
- var et, tt, st, Vt, Bt, Rt;
+ const Ie = i.currentIndex + re;
+ return Ie < 0 || Ie >= i.assets.length ? !1 : (i.currentIndex = Ie, tt(), !0);
+ }, At = (re) => {
+ var Qe, et, mt, Lt, Tt, Ot;
if (e.style.display === "none") return;
try {
- const Ct = ae.target;
+ const Ct = re.target;
if (Ct && (Ct.tagName === "INPUT" || Ct.tagName === "TEXTAREA" || Ct.tagName === "SELECT" || Ct.isContentEditable))
return;
+ } catch (Ct) {
+ (Qe = console.debug) == null || Qe.call(console, Ct);
+ }
+ try {
+ if (!U.contains(re.target)) return;
} catch (Ct) {
(et = console.debug) == null || et.call(console, Ct);
}
try {
- if (!K.contains(ae.target)) return;
+ if ((mt = ti == null ? void 0 : ti.isModel3DInteractionTarget) != null && mt.call(ti, re == null ? void 0 : re.target)) return;
} catch (Ct) {
- (tt = console.debug) == null || tt.call(console, Ct);
+ (Lt = console.debug) == null || Lt.call(console, Ct);
}
try {
- if ((st = ti == null ? void 0 : ti.isModel3DInteractionTarget) != null && st.call(ti, ae == null ? void 0 : ae.target)) return;
+ re.preventDefault(), re.stopPropagation(), (Tt = re.stopImmediatePropagation) == null || Tt.call(re);
} catch (Ct) {
- (Vt = console.debug) == null || Vt.call(console, Ct);
+ (Ot = console.debug) == null || Ot.call(console, Ct);
}
+ const Ie = Number(re.deltaX) || 0, Ge = Number(re.deltaY) || 0;
+ if (re.shiftKey && Ge) {
+ const Ct = Ge > 0 ? 1 : -1;
+ if (ut(Ct)) return;
+ }
+ if (Math.abs(Ie) > Math.abs(Ge) && Math.abs(Ie) > 30) {
+ const Ct = Ie > 0 ? 1 : -1;
+ if (ut(Ct)) return;
+ }
+ if (!Ge) return;
+ const Je = Math.exp(-Ge * 15e-4), _e = (Number(i.zoom) || 1) * Je;
+ d(_e, { clientX: re.clientX, clientY: re.clientY });
+ }, Ht = (re, Ie, Ge, { offsetX: Je = 16, offsetY: _e = 16 } = {}) => {
+ var Qe;
try {
- ae.preventDefault(), ae.stopPropagation(), (Bt = ae.stopImmediatePropagation) == null || Bt.call(ae);
- } catch (Ct) {
- (Rt = console.debug) == null || Rt.call(console, Ct);
+ const et = h();
+ if (!et) return;
+ const mt = U.getBoundingClientRect(), Lt = (Number(Ie) || 0) - mt.left, Tt = (Number(Ge) || 0) - mt.top, Ot = Number(re.offsetWidth) || 0, Ct = Number(re.offsetHeight) || 0;
+ let gn = Lt + Je, pt = Tt + _e;
+ const zt = 10;
+ gn = Math.max(zt, Math.min(gn, et.width - Ot - zt)), pt = Math.max(zt, Math.min(pt, et.height - Ct - zt)), re.style.left = `${Math.round(gn)}px`, re.style.top = `${Math.round(pt)}px`;
+ } catch (et) {
+ (Qe = console.debug) == null || Qe.call(console, et);
}
- const he = Number(ae.deltaX) || 0, ve = Number(ae.deltaY) || 0;
- if (ae.shiftKey && ve) {
- const Ct = ve > 0 ? 1 : -1;
- if (ot(Ct)) return;
- }
- if (Math.abs(he) > Math.abs(ve) && Math.abs(he) > 30) {
- const Ct = he > 0 ? 1 : -1;
- if (ot(Ct)) return;
- }
- if (!ve) return;
- const Fe = Math.exp(-ve * 15e-4), _e = (Number(i.zoom) || 1) * Fe;
- d(_e, { clientX: ae.clientX, clientY: ae.clientY });
- }, tn = (ae, he, ve, { offsetX: Fe = 16, offsetY: _e = 16 } = {}) => {
- var et;
- try {
- const tt = S();
- if (!tt) return;
- const st = K.getBoundingClientRect(), Vt = (Number(he) || 0) - st.left, Bt = (Number(ve) || 0) - st.top, Rt = Number(ae.offsetWidth) || 0, Ct = Number(ae.offsetHeight) || 0;
- let zt = Vt + Fe, gt = Bt + _e;
- const mn = 10;
- zt = Math.max(mn, Math.min(zt, tt.width - Rt - mn)), gt = Math.max(mn, Math.min(gt, tt.height - Ct - mn)), ae.style.left = `${Math.round(zt)}px`, ae.style.top = `${Math.round(gt)}px`;
- } catch (tt) {
- (et = console.debug) == null || et.call(console, tt);
- }
- }, Pt = bA({
+ }, Qt = bA({
state: i,
- loupeCanvas: E,
+ loupeCanvas: H,
loupeWrap: $,
- getMediaNaturalSize: y,
- positionOverlayBox: tn
- }), vt = IA({
+ getMediaNaturalSize: A,
+ positionOverlayBox: Ht
+ }), xt = IA({
overlay: e,
- content: K,
+ content: U,
state: i,
VIEWER_MODES: jt,
getPrimaryMedia: I,
- getMediaNaturalSize: y,
- getViewportRect: S,
- positionOverlayBox: tn,
- probeTooltip: H,
+ getMediaNaturalSize: A,
+ getViewportRect: h,
+ positionOverlayBox: Ht,
+ probeTooltip: E,
loupeWrap: $,
- onLoupeRedraw: Pt.redraw,
+ onLoupeRedraw: Qt.redraw,
lifecycle: t
});
try {
- if (!K._mjrOverlayResizeBound && "ResizeObserver" in window) {
+ if (!U._mjrOverlayResizeBound && "ResizeObserver" in window) {
try {
- (Yn = (Qt = e._mjrResizeObserver) == null ? void 0 : Qt.disconnect) == null || Yn.call(Qt);
- } catch (he) {
- (wn = console.debug) == null || wn.call(console, he);
+ (Xt = (_t = e._mjrResizeObserver) == null ? void 0 : _t.disconnect) == null || Xt.call(_t);
+ } catch (Ie) {
+ (tn = console.debug) == null || tn.call(console, Ie);
}
- const ae = new ResizeObserver(() => {
- var he;
+ const re = new ResizeObserver(() => {
+ var Ie;
try {
i._viewportCache = null;
- } catch (ve) {
- (he = console.debug) == null || he.call(console, ve);
+ } catch (Ge) {
+ (Ie = console.debug) == null || Ie.call(console, Ge);
}
- Oe();
+ rt();
});
try {
- ae.observe(K);
- } catch (he) {
- (xn = console.debug) == null || xn.call(console, he);
+ re.observe(U);
+ } catch (Ie) {
+ (Ln = console.debug) == null || Ln.call(console, Ie);
}
- e._mjrResizeObserver = ae, n.push(() => {
- var he;
+ e._mjrResizeObserver = re, n.push(() => {
+ var Ie;
try {
- ae.disconnect();
- } catch (ve) {
- (he = console.debug) == null || he.call(console, ve);
+ re.disconnect();
+ } catch (Ge) {
+ (Ie = console.debug) == null || Ie.call(console, Ge);
}
- }), K._mjrOverlayResizeBound = !0;
+ }), U._mjrOverlayResizeBound = !0;
}
- } catch (ae) {
- (en = console.debug) == null || en.call(console, ae);
+ } catch (re) {
+ (Mn = console.debug) == null || Mn.call(console, re);
}
- const re = dA({
+ const Gt = dA({
overlay: e,
- content: K,
+ content: U,
singleView: z,
state: i,
VIEWER_MODES: jt,
- computeOneToOneZoom: Z,
+ computeOneToOneZoom: S,
setZoom: d,
- scheduleOverlayRedraw: Oe,
- scheduleApplyGrade: pe,
+ scheduleOverlayRedraw: rt,
+ scheduleApplyGrade: ye,
syncToolsUIFromState: De,
- applyDistractionFreeUI: It,
- navigateViewerAssets: ot,
- closeViewer: He,
+ applyDistractionFreeUI: at,
+ navigateViewerAssets: ut,
+ closeViewer: fe,
renderBadges: Ke,
- updateAssetRating: Ho,
+ updateAssetRating: Eo,
safeDispatchCustomEvent: oi,
- ASSET_RATING_CHANGED_EVENT: Fi,
- probeTooltip: H,
+ ASSET_RATING_CHANGED_EVENT: Oi,
+ probeTooltip: E,
loupeWrap: $,
- renderGenInfoPanel: Ot,
+ renderGenInfoPanel: Pt,
getVideoControls: () => {
try {
return (i == null ? void 0 : i._videoControlsMounted) || null;
@@ -21875,239 +21902,239 @@ function uW() {
},
lifecycle: t
});
- let ne = [];
- const Ie = () => {
- var ae, he, ve;
+ let je = [];
+ const oe = () => {
+ var re, Ie, Ge;
try {
- for (const Fe of ne) bt(Fe);
- } catch (Fe) {
- (ae = console.debug) == null || ae.call(console, Fe);
+ for (const Je of je) It(Je);
+ } catch (Je) {
+ (re = console.debug) == null || re.call(console, Je);
}
- ne = [];
+ je = [];
try {
- (he = re == null ? void 0 : re.unbind) == null || he.call(re);
- } catch (Fe) {
- (ve = console.debug) == null || ve.call(console, Fe);
+ (Ie = Gt == null ? void 0 : Gt.unbind) == null || Ie.call(Gt);
+ } catch (Je) {
+ (Ge = console.debug) == null || Ge.call(console, Je);
}
- }, Ne = () => {
- var ae, he, ve, Fe, _e, et;
- Ie();
+ }, se = () => {
+ var re, Ie, Ge, Je, _e, Qe;
+ oe();
try {
- ne.push(
- Qe(e, "click", (tt) => {
- var st;
+ je.push(
+ $e(e, "click", (et) => {
+ var mt;
try {
- if (tt.target !== e) return;
- } catch (Vt) {
- (st = console.debug) == null || st.call(console, Vt);
+ if (et.target !== e) return;
+ } catch (Lt) {
+ (mt = console.debug) == null || mt.call(console, Lt);
}
- He();
+ fe();
})
);
- } catch (tt) {
- (ae = console.debug) == null || ae.call(console, tt);
+ } catch (et) {
+ (re = console.debug) == null || re.call(console, et);
}
try {
- ne.push(
- Qe(K, "wheel", Zt, { passive: !1, capture: !0 })
+ je.push(
+ $e(U, "wheel", At, { passive: !1, capture: !0 })
);
- } catch (tt) {
- (he = console.debug) == null || he.call(console, tt);
+ } catch (et) {
+ (Ie = console.debug) == null || Ie.call(console, et);
}
try {
- let tt = null;
- const st = 60, Vt = 80;
- ne.push(
- Qe(K, "touchstart", (Bt) => {
- var Rt, Ct;
+ let et = null;
+ const mt = 60, Lt = 80;
+ je.push(
+ $e(U, "touchstart", (Tt) => {
+ var Ot, Ct;
try {
- if (((Rt = Bt.touches) == null ? void 0 : Rt.length) !== 1) return;
- const zt = Bt.touches[0];
- tt = { x: zt.clientX, y: zt.clientY, t: Date.now() };
- } catch (zt) {
- (Ct = console.debug) == null || Ct.call(console, zt);
+ if (((Ot = Tt.touches) == null ? void 0 : Ot.length) !== 1) return;
+ const gn = Tt.touches[0];
+ et = { x: gn.clientX, y: gn.clientY, t: Date.now() };
+ } catch (gn) {
+ (Ct = console.debug) == null || Ct.call(console, gn);
}
}, { passive: !0 })
- ), ne.push(
- Qe(K, "touchend", (Bt) => {
- var Rt, Ct;
+ ), je.push(
+ $e(U, "touchend", (Tt) => {
+ var Ot, Ct;
try {
- if (!tt) return;
- if (((Rt = Bt.changedTouches) == null ? void 0 : Rt.length) !== 1) {
- tt = null;
+ if (!et) return;
+ if (((Ot = Tt.changedTouches) == null ? void 0 : Ot.length) !== 1) {
+ et = null;
return;
}
- const zt = Bt.changedTouches[0], gt = zt.clientX - tt.x, mn = zt.clientY - tt.y, wt = Date.now() - tt.t;
- if (tt = null, wt > 600 || Math.abs(mn) > Vt) return;
- if (Math.abs(gt) >= st) {
- const on = gt < 0 ? 1 : -1;
- ot(on);
+ const gn = Tt.changedTouches[0], pt = gn.clientX - et.x, zt = gn.clientY - et.y, ht = Date.now() - et.t;
+ if (et = null, ht > 600 || Math.abs(zt) > Lt) return;
+ if (Math.abs(pt) >= mt) {
+ const on = pt < 0 ? 1 : -1;
+ ut(on);
}
- } catch (zt) {
- (Ct = console.debug) == null || Ct.call(console, zt);
+ } catch (gn) {
+ (Ct = console.debug) == null || Ct.call(console, gn);
}
}, { passive: !0 })
- ), ne.push(
- Qe(K, "touchcancel", () => {
- tt = null;
+ ), je.push(
+ $e(U, "touchcancel", () => {
+ et = null;
}, { passive: !0 })
);
- } catch (tt) {
- (ve = console.debug) == null || ve.call(console, tt);
+ } catch (et) {
+ (Ge = console.debug) == null || Ge.call(console, et);
}
try {
- ne.push(
- Qe(
- K,
+ je.push(
+ $e(
+ U,
"mousemove",
- (tt) => {
- var st;
+ (et) => {
+ var mt;
try {
- i._lastPointerX = tt.clientX, i._lastPointerY = tt.clientY;
- } catch (Vt) {
- (st = console.debug) == null || st.call(console, Vt);
+ i._lastPointerX = et.clientX, i._lastPointerY = et.clientY;
+ } catch (Lt) {
+ (mt = console.debug) == null || mt.call(console, Lt);
}
},
{ passive: !0, capture: !0 }
)
);
- } catch (tt) {
- (Fe = console.debug) == null || Fe.call(console, tt);
+ } catch (et) {
+ (Je = console.debug) == null || Je.call(console, et);
}
try {
- (_e = re == null ? void 0 : re.bind) == null || _e.call(re);
- } catch (tt) {
- (et = console.debug) == null || et.call(console, tt);
+ (_e = Gt == null ? void 0 : Gt.bind) == null || _e.call(Gt);
+ } catch (et) {
+ (Qe = console.debug) == null || Qe.call(console, et);
}
};
try {
if (!e._mjrBadgeSyncBound) {
- const ae = (ve) => {
- var Fe, _e, et, tt, st;
+ const re = (Ge) => {
+ var Je, _e, Qe, et, mt;
try {
- const Vt = (Fe = ve == null ? void 0 : ve.detail) == null ? void 0 : Fe.assetId, Bt = (_e = ve == null ? void 0 : ve.detail) == null ? void 0 : _e.rating;
- if (Vt == null) return;
- for (const Rt of i.assets || [])
- (Rt == null ? void 0 : Rt.id) != null && String(Rt.id) === String(Vt) && (Rt.rating = Bt);
+ const Lt = (Je = Ge == null ? void 0 : Ge.detail) == null ? void 0 : Je.assetId, Tt = (_e = Ge == null ? void 0 : Ge.detail) == null ? void 0 : _e.rating;
+ if (Lt == null) return;
+ for (const Ot of i.assets || [])
+ (Ot == null ? void 0 : Ot.id) != null && String(Ot.id) === String(Lt) && (Ot.rating = Tt);
try {
- (et = ge == null ? void 0 : ge.deleteCached) == null || et.call(ge, Vt);
- } catch (Rt) {
- (tt = console.debug) == null || tt.call(console, Rt);
+ (Qe = ge == null ? void 0 : ge.deleteCached) == null || Qe.call(ge, Lt);
+ } catch (Ot) {
+ (et = console.debug) == null || et.call(console, Ot);
}
Ke();
- } catch (Vt) {
- (st = console.debug) == null || st.call(console, Vt);
+ } catch (Lt) {
+ (mt = console.debug) == null || mt.call(console, Lt);
}
- }, he = (ve) => {
- var Fe, _e, et, tt, st;
+ }, Ie = (Ge) => {
+ var Je, _e, Qe, et, mt;
try {
- const Vt = (Fe = ve == null ? void 0 : ve.detail) == null ? void 0 : Fe.assetId, Bt = (_e = ve == null ? void 0 : ve.detail) == null ? void 0 : _e.tags;
- if (Vt == null) return;
- for (const Rt of i.assets || [])
- (Rt == null ? void 0 : Rt.id) != null && String(Rt.id) === String(Vt) && (Rt.tags = Bt);
+ const Lt = (Je = Ge == null ? void 0 : Ge.detail) == null ? void 0 : Je.assetId, Tt = (_e = Ge == null ? void 0 : Ge.detail) == null ? void 0 : _e.tags;
+ if (Lt == null) return;
+ for (const Ot of i.assets || [])
+ (Ot == null ? void 0 : Ot.id) != null && String(Ot.id) === String(Lt) && (Ot.tags = Tt);
try {
- (et = ge == null ? void 0 : ge.deleteCached) == null || et.call(ge, Vt);
- } catch (Rt) {
- (tt = console.debug) == null || tt.call(console, Rt);
+ (Qe = ge == null ? void 0 : ge.deleteCached) == null || Qe.call(ge, Lt);
+ } catch (Ot) {
+ (et = console.debug) == null || et.call(console, Ot);
}
Ke();
- } catch (Vt) {
- (st = console.debug) == null || st.call(console, Vt);
+ } catch (Lt) {
+ (mt = console.debug) == null || mt.call(console, Lt);
}
};
n.push(
- Qe(window, Fi, ae, {
+ $e(window, Oi, re, {
passive: !0
})
), n.push(
- Qe(window, Do, he, { passive: !0 })
+ $e(window, Do, Ie, { passive: !0 })
), e._mjrBadgeSyncBound = !0;
}
- } catch (ae) {
- (Vn = console.debug) == null || Vn.call(console, ae);
+ } catch (re) {
+ (Xn = console.debug) == null || Xn.call(console, re);
}
- function He() {
- var he, ve, Fe, _e, et, tt, st, Vt, Bt, Rt, Ct, zt, gt, mn, wt, on, rn, hn, ln, gn, nn, An, vn, un, Mn, yn, Ut, Jt, ro, lo, ao, hi, Ve, it, xt, an, sn, Bn, Yi, ki, Ji, ci, Ci, Yr, kr, Xr;
+ function fe() {
+ var Ie, Ge, Je, _e, Qe, et, mt, Lt, Tt, Ot, Ct, gn, pt, zt, ht, on, an, hn, cn, bn, ln, Wn, Yn, In, Gn, fn, Kt, Jt, ro, lo, ao, Ci, Ve, ot, St, sn, un, Kn, Vi, Xi, Ji, ci, hi, Vr, Xr, Nr;
try {
- i.distractionFree = !1, It();
- } catch (Ht) {
- (he = console.debug) == null || he.call(console, Ht);
+ i.distractionFree = !1, at();
+ } catch (Et) {
+ (Ie = console.debug) == null || Ie.call(console, Et);
}
try {
- (ve = ge == null ? void 0 : ge.abort) == null || ve.call(ge);
- } catch (Ht) {
- (Fe = console.debug) == null || Fe.call(console, Ht);
+ (Ge = ge == null ? void 0 : ge.abort) == null || Ge.call(ge);
+ } catch (Et) {
+ (Je = console.debug) == null || Je.call(console, Et);
}
try {
- lt();
- } catch (Ht) {
- (_e = console.debug) == null || _e.call(console, Ht);
+ nt();
+ } catch (Et) {
+ (_e = console.debug) == null || _e.call(console, Et);
}
try {
- (tt = (et = i._scopesVideoAbort) == null ? void 0 : et.abort) == null || tt.call(et);
- } catch (Ht) {
- (st = console.debug) == null || st.call(console, Ht);
+ (et = (Qe = i._scopesVideoAbort) == null ? void 0 : Qe.abort) == null || et.call(Qe);
+ } catch (Et) {
+ (mt = console.debug) == null || mt.call(console, Et);
}
i._scopesVideoAbort = null;
try {
i._panHintTimer && clearTimeout(i._panHintTimer);
- } catch (Ht) {
- (Vt = console.debug) == null || Vt.call(console, Ht);
+ } catch (Et) {
+ (Lt = console.debug) == null || Lt.call(console, Et);
}
i._panHintTimer = null;
try {
i._panHintAt = 0;
- } catch (Ht) {
- (Bt = console.debug) == null || Bt.call(console, Ht);
+ } catch (Et) {
+ (Tt = console.debug) == null || Tt.call(console, Et);
}
try {
- (Ct = (Rt = B == null ? void 0 : B._mjrSyncAbort) == null ? void 0 : Rt.abort) == null || Ct.call(Rt);
- } catch (Ht) {
- (zt = console.debug) == null || zt.call(console, Ht);
+ (Ct = (Ot = T == null ? void 0 : T._mjrSyncAbort) == null ? void 0 : Ot.abort) == null || Ct.call(Ot);
+ } catch (Et) {
+ (gn = console.debug) == null || gn.call(console, Et);
}
try {
- (mn = (gt = B == null ? void 0 : B._mjrDiffAbort) == null ? void 0 : gt.abort) == null || mn.call(gt);
- } catch (Ht) {
- (wt = console.debug) == null || wt.call(console, Ht);
+ (zt = (pt = T == null ? void 0 : T._mjrDiffAbort) == null ? void 0 : pt.abort) == null || zt.call(pt);
+ } catch (Et) {
+ (ht = console.debug) == null || ht.call(console, Et);
}
try {
- B._mjrSyncAbort = null;
- } catch (Ht) {
- (on = console.debug) == null || on.call(console, Ht);
+ T._mjrSyncAbort = null;
+ } catch (Et) {
+ (on = console.debug) == null || on.call(console, Et);
}
try {
- B._mjrDiffAbort = null;
- } catch (Ht) {
- (rn = console.debug) == null || rn.call(console, Ht);
+ T._mjrDiffAbort = null;
+ } catch (Et) {
+ (an = console.debug) == null || an.call(console, Et);
}
try {
- (ln = (hn = J == null ? void 0 : J._mjrSyncAbort) == null ? void 0 : hn.abort) == null || ln.call(hn);
- } catch (Ht) {
- (gn = console.debug) == null || gn.call(console, Ht);
+ (cn = (hn = J == null ? void 0 : J._mjrSyncAbort) == null ? void 0 : hn.abort) == null || cn.call(hn);
+ } catch (Et) {
+ (bn = console.debug) == null || bn.call(console, Et);
}
try {
J._mjrSyncAbort = null;
- } catch (Ht) {
- (nn = console.debug) == null || nn.call(console, Ht);
+ } catch (Et) {
+ (ln = console.debug) == null || ln.call(console, Et);
}
try {
- (vn = (An = B == null ? void 0 : B._mjrSliderAbort) == null ? void 0 : An.abort) == null || vn.call(An);
- } catch (Ht) {
- (un = console.debug) == null || un.call(console, Ht);
+ (Yn = (Wn = T == null ? void 0 : T._mjrSliderAbort) == null ? void 0 : Wn.abort) == null || Yn.call(Wn);
+ } catch (Et) {
+ (In = console.debug) == null || In.call(console, Et);
}
try {
- B._mjrSliderAbort = null;
- } catch (Ht) {
- (Mn = console.debug) == null || Mn.call(console, Ht);
+ T._mjrSliderAbort = null;
+ } catch (Et) {
+ (Gn = console.debug) == null || Gn.call(console, Et);
}
try {
- const Ht = (yn = e.querySelectorAll) == null ? void 0 : yn.call(e, "video, audio");
- if (Ht && Ht.length)
- for (const $n of Ht) {
+ const Et = (fn = e.querySelectorAll) == null ? void 0 : fn.call(e, "video, audio");
+ if (Et && Et.length)
+ for (const $n of Et) {
try {
$n.muted = !0;
} catch (qn) {
- (Ut = console.debug) == null || Ut.call(console, qn);
+ (Kt = console.debug) == null || Kt.call(console, qn);
}
try {
(Jt = $n.pause) == null || Jt.call($n);
@@ -22122,65 +22149,65 @@ function uW() {
try {
const qn = (ao = $n.querySelectorAll) == null ? void 0 : ao.call($n, "source");
if (qn && qn.length)
- for (const Sl of qn)
+ for (const Gl of qn)
try {
- Sl.remove();
- } catch (Gl) {
- (hi = console.debug) == null || hi.call(console, Gl);
+ Gl.remove();
+ } catch (Sl) {
+ (Ci = console.debug) == null || Ci.call(console, Sl);
}
} catch (qn) {
(Ve = console.debug) == null || Ve.call(console, qn);
}
try {
- (it = $n.removeAttribute) == null || it.call($n, "src");
+ (ot = $n.removeAttribute) == null || ot.call($n, "src");
} catch (qn) {
- (xt = console.debug) == null || xt.call(console, qn);
+ (St = console.debug) == null || St.call(console, qn);
}
try {
- (an = $n.load) == null || an.call($n);
+ (sn = $n.load) == null || sn.call($n);
} catch (qn) {
- (sn = console.debug) == null || sn.call(console, qn);
+ (un = console.debug) == null || un.call(console, qn);
}
}
- } catch (Ht) {
- (Bn = console.debug) == null || Bn.call(console, Ht);
+ } catch (Et) {
+ (Kn = console.debug) == null || Kn.call(console, Et);
}
try {
di(z), z.replaceChildren();
- } catch (Ht) {
- (Yi = console.debug) == null || Yi.call(console, Ht);
+ } catch (Et) {
+ (Vi = console.debug) == null || Vi.call(console, Et);
}
try {
- di(B), B.replaceChildren();
- } catch (Ht) {
- (ki = console.debug) == null || ki.call(console, Ht);
+ di(T), T.replaceChildren();
+ } catch (Et) {
+ (Xi = console.debug) == null || Xi.call(console, Et);
}
try {
di(J), J.replaceChildren();
- } catch (Ht) {
- (Ji = console.debug) == null || Ji.call(console, Ht);
+ } catch (Et) {
+ (Ji = console.debug) == null || Ji.call(console, Et);
}
try {
i.genInfoOpen = !1;
- } catch (Ht) {
- (ci = console.debug) == null || ci.call(console, Ht);
+ } catch (Et) {
+ (ci = console.debug) == null || ci.call(console, Et);
}
try {
me();
- } catch (Ht) {
- (Ci = console.debug) == null || Ci.call(console, Ht);
+ } catch (Et) {
+ (hi = console.debug) == null || hi.call(console, Et);
}
try {
- oe.style.display = "none", Mt(j);
- } catch (Ht) {
- (Yr = console.debug) == null || Yr.call(console, Ht);
+ ne.style.display = "none", we(v);
+ } catch (Et) {
+ (Vr = console.debug) == null || Vr.call(console, Et);
}
try {
- O.style.display = "none", Mt(q);
- } catch (Ht) {
- (kr = console.debug) == null || kr.call(console, Ht);
+ F.style.display = "none", we(q);
+ } catch (Et) {
+ (Xr = console.debug) == null || Xr.call(console, Et);
}
- e.style.display = "none", e.style.pointerEvents = "none", Ie();
+ e.style.display = "none", e.style.pointerEvents = "none", oe();
try {
document.body.style.overflow = i._prevBodyOverflow ?? "";
} catch {
@@ -22188,37 +22215,37 @@ function uW() {
}
try {
i._prevFocusedElement && typeof i._prevFocusedElement.focus == "function" && i._prevFocusedElement.focus(), i._prevFocusedElement = null;
- } catch (Ht) {
- (Xr = console.debug) == null || Xr.call(console, Ht);
+ } catch (Et) {
+ (Nr = console.debug) == null || Nr.call(console, Et);
}
- const ae = i == null ? void 0 : i._prevHotkeyScope;
- wr(ae || "panel"), i._prevHotkeyScope = null;
+ const re = i == null ? void 0 : i._prevHotkeyScope;
+ wr(re || "panel"), i._prevHotkeyScope = null;
}
- const rt = {
- open(ae, he = 0, ve = null) {
- var Fe, _e, et, tt, st, Vt;
- Ne(), i.assets = Array.isArray(ae) ? ae : [ae], i.currentIndex = Math.max(0, Math.min(he, i.assets.length - 1)), i.distractionFree = !1;
+ const Be = {
+ open(re, Ie = 0, Ge = null) {
+ var Je, _e, Qe, et, mt, Lt;
+ se(), i.assets = Array.isArray(re) ? re : [re], i.currentIndex = Math.max(0, Math.min(Ie, i.assets.length - 1)), i.distractionFree = !1;
try {
le.rebuild();
- } catch (Bt) {
- (Fe = console.debug) == null || Fe.call(console, Bt);
+ } catch (Tt) {
+ (Je = console.debug) == null || Je.call(console, Tt);
}
i.zoom = 1, i.panX = 0, i.panY = 0, i.targetZoom = 1, i._userInteracted = !1, i._panHintAt = 0;
try {
i._panHintTimer && clearTimeout(i._panHintTimer);
- } catch (Bt) {
- (_e = console.debug) == null || _e.call(console, Bt);
+ } catch (Tt) {
+ (_e = console.debug) == null || _e.call(console, Tt);
}
- i._panHintTimer = null, i._lastPointerX = null, i._lastPointerY = null, i._mediaW = 0, i._mediaH = 0, i.compareAsset = ve, i.gridMode = 0, me(), i._probe = null;
+ i._panHintTimer = null, i._lastPointerX = null, i._lastPointerY = null, i._mediaW = 0, i._mediaH = 0, i.compareAsset = Ge, i.gridMode = 0, me(), i._probe = null;
try {
- H.style.display = "none";
- } catch (Bt) {
- (et = console.debug) == null || et.call(console, Bt);
+ E.style.display = "none";
+ } catch (Tt) {
+ (Qe = console.debug) == null || Qe.call(console, Tt);
}
try {
$.style.display = "none";
- } catch (Bt) {
- (tt = console.debug) == null || tt.call(console, Bt);
+ } catch (Tt) {
+ (et = console.debug) == null || et.call(console, Tt);
}
e.style.display = "flex", e.style.pointerEvents = "auto";
try {
@@ -22232,49 +22259,49 @@ function uW() {
} catch {
i._prevBodyOverflow = "";
}
- document.body.style.overflow = "hidden", i._prevHotkeyScope = Mo().scope || null, wr("viewer"), dt();
+ document.body.style.overflow = "hidden", i._prevHotkeyScope = Mo().scope || null, wr("viewer"), tt();
try {
De();
- } catch (Bt) {
- (st = console.debug) == null || st.call(console, Bt);
+ } catch (Tt) {
+ (mt = console.debug) == null || mt.call(console, Tt);
}
try {
- pe();
- } catch (Bt) {
- (Vt = console.debug) == null || Vt.call(console, Bt);
+ ye();
+ } catch (Tt) {
+ (Lt = console.debug) == null || Lt.call(console, Tt);
}
- Oe();
+ rt();
},
close() {
- He();
+ fe();
},
- setMode(ae) {
- Object.values(jt).includes(ae) && (i.mode = ae, dt());
+ setMode(re) {
+ Object.values(jt).includes(re) && (i.mode = re, tt());
},
- setCompareAsset(ae) {
- i.compareAsset = ae, dt();
+ setCompareAsset(re) {
+ i.compareAsset = re, tt();
},
dispose() {
- var ae, he, ve, Fe, _e, et, tt, st, Vt, Bt, Rt, Ct, zt, gt, mn, wt, on, rn, hn, ln, gn, nn, An, vn, un, Mn, yn, Ut;
+ var re, Ie, Ge, Je, _e, Qe, et, mt, Lt, Tt, Ot, Ct, gn, pt, zt, ht, on, an, hn, cn, bn, ln, Wn, Yn, In, Gn, fn, Kt;
try {
- He();
+ fe();
} catch (Jt) {
- (ae = console.debug) == null || ae.call(console, Jt);
+ (re = console.debug) == null || re.call(console, Jt);
}
try {
- ke.clear();
+ Xe.clear();
} catch (Jt) {
- (he = console.debug) == null || he.call(console, Jt);
+ (Ie = console.debug) == null || Ie.call(console, Jt);
}
try {
di(z);
} catch (Jt) {
- (ve = console.debug) == null || ve.call(console, Jt);
+ (Ge = console.debug) == null || Ge.call(console, Jt);
}
try {
- di(B);
+ di(T);
} catch (Jt) {
- (Fe = console.debug) == null || Fe.call(console, Jt);
+ (Je = console.debug) == null || Je.call(console, Jt);
}
try {
di(J);
@@ -22282,98 +22309,98 @@ function uW() {
(_e = console.debug) == null || _e.call(console, Jt);
}
try {
- Te != null && cancelAnimationFrame(Te);
+ Re != null && cancelAnimationFrame(Re);
+ } catch (Jt) {
+ (Qe = console.debug) == null || Qe.call(console, Jt);
+ }
+ try {
+ Ce != null && cancelAnimationFrame(Ce);
} catch (Jt) {
(et = console.debug) == null || et.call(console, Jt);
}
try {
- We != null && cancelAnimationFrame(We);
+ (mt = xt == null ? void 0 : xt.dispose) == null || mt.call(xt);
} catch (Jt) {
- (tt = console.debug) == null || tt.call(console, Jt);
+ (Lt = console.debug) == null || Lt.call(console, Jt);
}
try {
- (st = vt == null ? void 0 : vt.dispose) == null || st.call(vt);
+ (Tt = Gt == null ? void 0 : Gt.dispose) == null || Tt.call(Gt);
} catch (Jt) {
- (Vt = console.debug) == null || Vt.call(console, Jt);
+ (Ot = console.debug) == null || Ot.call(console, Jt);
}
try {
- (Bt = re == null ? void 0 : re.dispose) == null || Bt.call(re);
+ (gn = (Ct = e._mjrResizeObserver) == null ? void 0 : Ct.disconnect) == null || gn.call(Ct);
} catch (Jt) {
- (Rt = console.debug) == null || Rt.call(console, Jt);
- }
- try {
- (zt = (Ct = e._mjrResizeObserver) == null ? void 0 : Ct.disconnect) == null || zt.call(Ct);
- } catch (Jt) {
- (gt = console.debug) == null || gt.call(console, Jt);
+ (pt = console.debug) == null || pt.call(console, Jt);
}
try {
e._mjrResizeObserver = null;
} catch (Jt) {
- (mn = console.debug) == null || mn.call(console, Jt);
+ (zt = console.debug) == null || zt.call(console, Jt);
}
try {
- (wt = ge == null ? void 0 : ge.dispose) == null || wt.call(ge);
+ (ht = ge == null ? void 0 : ge.dispose) == null || ht.call(ge);
} catch (Jt) {
(on = console.debug) == null || on.call(console, Jt);
}
try {
JZ(e);
} catch (Jt) {
- (rn = console.debug) == null || rn.call(console, Jt);
+ (an = console.debug) == null || an.call(console, Jt);
}
try {
- for (const Jt of e._mjrViewerUnsubs || []) bt(Jt);
+ for (const Jt of e._mjrViewerUnsubs || []) It(Jt);
} catch (Jt) {
(hn = console.debug) == null || hn.call(console, Jt);
}
try {
e._mjrViewerUnsubs = [];
} catch (Jt) {
- (ln = console.debug) == null || ln.call(console, Jt);
+ (cn = console.debug) == null || cn.call(console, Jt);
}
try {
- (nn = (gn = i._preloadRefs) == null ? void 0 : gn.clear) == null || nn.call(gn);
+ (ln = (bn = i._preloadRefs) == null ? void 0 : bn.clear) == null || ln.call(bn);
} catch (Jt) {
- (An = console.debug) == null || An.call(console, Jt);
+ (Wn = console.debug) == null || Wn.call(console, Jt);
}
try {
- (un = (vn = i._preloadedAssetKeys) == null ? void 0 : vn.clear) == null || un.call(vn);
+ (In = (Yn = i._preloadedAssetKeys) == null ? void 0 : Yn.clear) == null || In.call(Yn);
} catch (Jt) {
- (Mn = console.debug) == null || Mn.call(console, Jt);
+ (Gn = console.debug) == null || Gn.call(console, Jt);
}
try {
- (yn = e.remove) == null || yn.call(e);
+ (fn = e.remove) == null || fn.call(e);
} catch (Jt) {
- (Ut = console.debug) == null || Ut.call(console, Jt);
+ (Kt = console.debug) == null || Kt.call(console, Jt);
}
}
};
try {
- L = () => rt.close();
- } catch (ae) {
- (pn = console.debug) == null || pn.call(console, ae);
+ L = () => Be.close();
+ } catch (re) {
+ (rn = console.debug) == null || rn.call(console, re);
}
- e._mjrViewerAPI = rt;
+ e._mjrViewerAPI = Be;
try {
zZ({
overlayEl: e,
getCurrentAsset: () => i.assets[i.currentIndex],
- getCurrentViewUrl: (ae) => Ki(ae),
+ getCurrentViewUrl: (re) => Ui(re),
onAssetChanged: () => {
- var ae;
+ var re;
try {
Ke();
- } catch (he) {
- (ae = console.debug) == null || ae.call(console, he);
+ } catch (Ie) {
+ (re = console.debug) == null || re.call(console, Ie);
}
}
});
- } catch (ae) {
- (Nn = console.debug) == null || Nn.call(console, ae);
+ } catch (re) {
+ (vn = console.debug) == null || vn.call(console, re);
}
return e;
}
-function ms() {
+function gs() {
return PA(uW);
}
function mW(e) {
@@ -22384,14 +22411,14 @@ function gW(e, t) {
const n = Array.isArray(e) ? e.filter(Boolean) : [];
return n.length ? n : t ? [t] : [];
}
-function tc({ assets: e = [], asset: t = null, index: n = 0, mode: i = "" } = {}) {
+function nc({ assets: e = [], asset: t = null, index: n = 0, mode: i = "" } = {}) {
var a, c, s;
const o = gW(e, t);
if (!o.length) return !1;
const r = Math.max(0, Math.min(Number(n) || 0, o.length - 1)), l = mW(i);
try {
return window.dispatchEvent(
- new CustomEvent(ht.OPEN_VIEWER, {
+ new CustomEvent(ft.OPEN_VIEWER, {
detail: {
assets: o,
index: r,
@@ -22403,7 +22430,7 @@ function tc({ assets: e = [], asset: t = null, index: n = 0, mode: i = "" } = {}
(a = console.debug) == null || a.call(console, d);
}
try {
- const d = ms();
+ const d = gs();
return d.open(o, r), l && ((c = d.setMode) == null || c.call(d, l)), !0;
} catch (d) {
(s = console.debug) == null || s.call(console, d);
@@ -22429,120 +22456,120 @@ function IW(e, t) {
function lb(e) {
const t = /* @__PURE__ */ new Map();
let n = null, i = 0, o = [], r = !1, l = !1, a = !1, c = new AbortController(), s = new AbortController(), d = !1;
- const u = 8, I = 8, y = 200, S = 360, Z = 280, C = 80, g = 140, A = (k, K = "y") => {
+ const u = 8, I = 8, A = 200, h = 360, S = 280, W = 80, g = 140, y = (N, U = "y") => {
var J;
- if (!k) return !1;
- const z = (J = globalThis.getComputedStyle) == null ? void 0 : J.call(globalThis, k), B = String(K === "x" ? (z == null ? void 0 : z.overflowX) || (z == null ? void 0 : z.overflow) || "" : (z == null ? void 0 : z.overflowY) || (z == null ? void 0 : z.overflow) || "");
- return /(auto|scroll|overlay)/i.test(B) ? K === "x" ? Number(k.scrollWidth || 0) > Number(k.clientWidth || 0) + 1 : Number(k.scrollHeight || 0) > Number(k.clientHeight || 0) + 1 : !1;
- }, p = (k, K) => {
- let z = k instanceof HTMLElement ? k : K;
- for (; z && z !== K; ) {
- if (A(z, "y") || A(z, "x")) return z;
+ if (!N) return !1;
+ const z = (J = globalThis.getComputedStyle) == null ? void 0 : J.call(globalThis, N), T = String(U === "x" ? (z == null ? void 0 : z.overflowX) || (z == null ? void 0 : z.overflow) || "" : (z == null ? void 0 : z.overflowY) || (z == null ? void 0 : z.overflow) || "");
+ return /(auto|scroll|overlay)/i.test(T) ? U === "x" ? Number(N.scrollWidth || 0) > Number(N.clientWidth || 0) + 1 : Number(N.scrollHeight || 0) > Number(N.clientHeight || 0) + 1 : !1;
+ }, p = (N, U) => {
+ let z = N instanceof HTMLElement ? N : U;
+ for (; z && z !== U; ) {
+ if (y(z, "y") || y(z, "x")) return z;
z = z.parentElement;
}
- return A(K, "y") || A(K, "x") ? K : null;
- }, b = (k) => {
- var B;
- if (!k || k._mjrInteractionGuardsBound) return;
- const K = (J) => {
+ return y(U, "y") || y(U, "x") ? U : null;
+ }, b = (N) => {
+ var T;
+ if (!N || N._mjrInteractionGuardsBound) return;
+ const U = (J) => {
var P;
try {
J.stopPropagation();
- } catch (H) {
- (P = console.debug) == null || P.call(console, H);
+ } catch (E) {
+ (P = console.debug) == null || P.call(console, E);
}
}, z = (J) => {
- var E, oe;
- const P = p(J == null ? void 0 : J.target, k), H = Number((J == null ? void 0 : J.deltaX) || 0), $ = Number((J == null ? void 0 : J.deltaY) || 0);
+ var H, ne;
+ const P = p(J == null ? void 0 : J.target, N), E = Number((J == null ? void 0 : J.deltaX) || 0), $ = Number((J == null ? void 0 : J.deltaY) || 0);
if (P)
try {
- $ && (P.scrollTop = Number(P.scrollTop || 0) + $), H && (P.scrollLeft = Number(P.scrollLeft || 0) + H);
+ $ && (P.scrollTop = Number(P.scrollTop || 0) + $), E && (P.scrollLeft = Number(P.scrollLeft || 0) + E);
} catch (M) {
- (E = console.debug) == null || E.call(console, M);
+ (H = console.debug) == null || H.call(console, M);
}
try {
J.preventDefault();
} catch (M) {
- (oe = console.debug) == null || oe.call(console, M);
+ (ne = console.debug) == null || ne.call(console, M);
}
- K(J);
+ U(J);
};
try {
- k.addEventListener("wheel", z, { passive: !1, capture: !0 }), k.addEventListener("mousedown", K), k.addEventListener("touchmove", K, { passive: !0 }), k._mjrInteractionGuardsBound = !0;
+ N.addEventListener("wheel", z, { passive: !1, capture: !0 }), N.addEventListener("mousedown", U), N.addEventListener("touchmove", U, { passive: !0 }), N._mjrInteractionGuardsBound = !0;
} catch (J) {
- (B = console.debug) == null || B.call(console, J);
+ (T = console.debug) == null || T.call(console, J);
}
- }, L = (k) => {
- var K;
- if (!(!k || !(k instanceof HTMLElement))) {
- b(k), k._mjrPortal || (k._mjrPortal = {
- parent: k.parentNode,
- nextSibling: k.nextSibling
- }), k.classList.add("mjr-popover-portal");
+ }, L = (N) => {
+ var U;
+ if (!(!N || !(N instanceof HTMLElement))) {
+ b(N), N._mjrPortal || (N._mjrPortal = {
+ parent: N.parentNode,
+ nextSibling: N.nextSibling
+ }), N.classList.add("mjr-popover-portal");
try {
- k.parentNode !== document.body && document.body.appendChild(k);
+ N.parentNode !== document.body && document.body.appendChild(N);
} catch (z) {
- (K = console.debug) == null || K.call(console, z);
+ (U = console.debug) == null || U.call(console, z);
}
}
- }, h = (k) => {
+ }, C = (N) => {
var z;
- const K = k == null ? void 0 : k._mjrPortal;
- if (K) {
- k.classList.remove("mjr-popover-portal");
+ const U = N == null ? void 0 : N._mjrPortal;
+ if (U) {
+ N.classList.remove("mjr-popover-portal");
try {
- const B = K.parent;
- B && B instanceof HTMLElement && (K.nextSibling && K.nextSibling.parentNode === B ? B.insertBefore(k, K.nextSibling) : B.appendChild(k));
- } catch (B) {
- (z = console.debug) == null || z.call(console, B);
+ const T = U.parent;
+ T && T instanceof HTMLElement && (U.nextSibling && U.nextSibling.parentNode === T ? T.insertBefore(N, U.nextSibling) : T.appendChild(N));
+ } catch (T) {
+ (z = console.debug) == null || z.call(console, T);
}
}
- }, G = (k, K) => {
+ }, G = (N, U) => {
var z;
- if (!(!k || !K))
+ if (!(!N || !U))
try {
- const B = K.getBoundingClientRect(), J = e.getBoundingClientRect();
- L(k), k.style.position = "fixed", k.style.margin = "0";
+ const T = U.getBoundingClientRect(), J = e.getBoundingClientRect();
+ L(N), N.style.position = "fixed", N.style.margin = "0";
const P = Math.max(
- y,
+ A,
Math.min(
- S,
+ h,
J.width - I * 2,
window.innerWidth - I * 2
)
);
- k.style.maxWidth = `${P}px`;
- const H = k.offsetWidth || Math.min(Z, P), $ = k.offsetHeight || 1;
- let E = B.left;
- E = Math.max(
+ N.style.maxWidth = `${P}px`;
+ const E = N.offsetWidth || Math.min(S, P), $ = N.offsetHeight || 1;
+ let H = T.left;
+ H = Math.max(
J.left + I,
- Math.min(E, J.right - H - I)
+ Math.min(H, J.right - E - I)
);
- let oe = B.bottom + u;
- const M = Math.min(J.bottom, window.innerHeight) - I, j = Math.max(J.top, 0) + I;
- oe + $ > M && B.top - u - $ >= j && (oe = B.top - u - $), oe = Math.max(j, Math.min(oe, M - C));
- const O = M - oe;
- k.style.maxHeight = `${Math.max(g, O)}px`, k.style.overflowX = "hidden", k.style.overflowY = "auto", k.style.overscrollBehavior = "contain", k.style.left = `${Math.round(E)}px`, k.style.top = `${Math.round(oe)}px`;
- } catch (B) {
- (z = console.debug) == null || z.call(console, B);
+ let ne = T.bottom + u;
+ const M = Math.min(J.bottom, window.innerHeight) - I, v = Math.max(J.top, 0) + I;
+ ne + $ > M && T.top - u - $ >= v && (ne = T.top - u - $), ne = Math.max(v, Math.min(ne, M - W));
+ const F = M - ne;
+ N.style.maxHeight = `${Math.max(g, F)}px`, N.style.overflowX = "hidden", N.style.overflowY = "auto", N.style.overscrollBehavior = "contain", N.style.left = `${Math.round(H)}px`, N.style.top = `${Math.round(ne)}px`;
+ } catch (T) {
+ (z = console.debug) == null || z.call(console, T);
}
- }, W = () => {
+ }, Z = () => {
t.size && (i && cancelAnimationFrame(i), i = requestAnimationFrame(() => {
i = 0;
- for (const k of t.values()) G(k.popover, k.anchor);
+ for (const N of t.values()) G(N.popover, N.anchor);
}));
- }, f = (k) => {
- IW(k == null ? void 0 : k.target, t) || W();
+ }, f = (N) => {
+ IW(N == null ? void 0 : N.target, t) || Z();
}, X = () => {
- var k, K, z, B;
+ var N, U, z, T;
if (t.size) {
try {
- a || (window.addEventListener("resize", W, {
+ a || (window.addEventListener("resize", Z, {
passive: !0,
signal: c.signal
}), a = !0);
} catch (J) {
- (k = console.debug) == null || k.call(console, J);
+ (N = console.debug) == null || N.call(console, J);
}
try {
l || (window.addEventListener("scroll", f, {
@@ -22551,132 +22578,132 @@ function lb(e) {
signal: c.signal
}), l = !0);
} catch (J) {
- (K = console.debug) == null || K.call(console, J);
+ (U = console.debug) == null || U.call(console, J);
}
try {
- n || (n = new ResizeObserver(W), n.observe(e));
+ n || (n = new ResizeObserver(Z), n.observe(e));
} catch (J) {
(z = console.debug) == null || z.call(console, J);
}
try {
r || (e.addEventListener("scroll", f, { passive: !0 }), r = !0);
} catch (J) {
- (B = console.debug) == null || B.call(console, J);
+ (T = console.debug) == null || T.call(console, J);
}
}
}, x = () => {
- var k, K, z, B, J, P;
+ var N, U, z, T, J, P;
if (!t.size) {
try {
- a && window.removeEventListener("resize", W);
- } catch (H) {
- (k = console.debug) == null || k.call(console, H);
+ a && window.removeEventListener("resize", Z);
+ } catch (E) {
+ (N = console.debug) == null || N.call(console, E);
}
a = !1;
try {
l && window.removeEventListener("scroll", f, { capture: !0 });
- } catch (H) {
- (K = console.debug) == null || K.call(console, H);
+ } catch (E) {
+ (U = console.debug) == null || U.call(console, E);
}
try {
l && window.removeEventListener("scroll", f, !0);
- } catch (H) {
- (z = console.debug) == null || z.call(console, H);
+ } catch (E) {
+ (z = console.debug) == null || z.call(console, E);
}
l = !1;
try {
r && e.removeEventListener("scroll", f);
- } catch (H) {
- (B = console.debug) == null || B.call(console, H);
+ } catch (E) {
+ (T = console.debug) == null || T.call(console, E);
}
r = !1;
try {
n && n.disconnect();
- } catch (H) {
- (J = console.debug) == null || J.call(console, H);
+ } catch (E) {
+ (J = console.debug) == null || J.call(console, E);
}
n = null;
try {
c.abort();
- } catch (H) {
- (P = console.debug) == null || P.call(console, H);
+ } catch (E) {
+ (P = console.debug) == null || P.call(console, E);
}
d || (c = new AbortController());
}
- }, T = (k) => {
- var K, z;
- if (k) {
+ }, K = (N) => {
+ var U, z;
+ if (N) {
try {
- k.style.display = "none";
- } catch (B) {
- (K = console.debug) == null || K.call(console, B);
+ N.style.display = "none";
+ } catch (T) {
+ (U = console.debug) == null || U.call(console, T);
}
try {
- h(k);
- } catch (B) {
- (z = console.debug) == null || z.call(console, B);
+ C(N);
+ } catch (T) {
+ (z = console.debug) == null || z.call(console, T);
}
- t.delete(k), x();
+ t.delete(N), x();
}
- }, v = (k, K) => {
- !k || !K || (t.set(k, { popover: k, anchor: K }), X(), G(k, K), W());
- }, w = (k, K) => {
- if (!k || !K) return;
- const B = t.has(k) || k.style.display === "block" ? "none" : "block";
- k.style.display = B, B !== "none" ? v(k, K) : T(k);
+ }, j = (N, U) => {
+ !N || !U || (t.set(N, { popover: N, anchor: U }), X(), G(N, U), Z());
+ }, w = (N, U) => {
+ if (!N || !U) return;
+ const T = t.has(N) || N.style.display === "block" ? "none" : "block";
+ N.style.display = T, T !== "none" ? j(N, U) : K(N);
}, R = () => {
- var k;
- for (const K of t.values())
+ var N;
+ for (const U of t.values())
try {
- h(K.popover);
+ C(U.popover);
} catch (z) {
- (k = console.debug) == null || k.call(console, z);
+ (N = console.debug) == null || N.call(console, z);
}
- for (const K of Array.from(t.keys())) T(K);
+ for (const U of Array.from(t.keys())) K(U);
t.clear(), x();
- }, Y = (k) => {
- o = Array.isArray(k) ? k.filter(Boolean) : [];
- }, F = (k) => {
- var z, B, J;
- const K = k.target;
- if (K) {
+ }, V = (N) => {
+ o = Array.isArray(N) ? N.filter(Boolean) : [];
+ }, O = (N) => {
+ var z, T, J;
+ const U = N.target;
+ if (U) {
for (const P of t.values()) {
try {
- if (P != null && P.popover && P.popover.contains(K)) return;
- } catch (H) {
- (z = console.debug) == null || z.call(console, H);
+ if (P != null && P.popover && P.popover.contains(U)) return;
+ } catch (E) {
+ (z = console.debug) == null || z.call(console, E);
}
try {
- if (P != null && P.anchor && P.anchor.contains(K)) return;
- } catch (H) {
- (B = console.debug) == null || B.call(console, H);
+ if (P != null && P.anchor && P.anchor.contains(U)) return;
+ } catch (E) {
+ (T = console.debug) == null || T.call(console, E);
}
}
for (const P of o)
try {
- if (P && typeof P.contains == "function" && P.contains(K)) return;
- } catch (H) {
- (J = console.debug) == null || J.call(console, H);
+ if (P && typeof P.contains == "function" && P.contains(U)) return;
+ } catch (E) {
+ (J = console.debug) == null || J.call(console, E);
}
R();
}
- }, N = () => {
- var k, K;
+ }, k = () => {
+ var N, U;
try {
- (k = s == null ? void 0 : s.abort) == null || k.call(s);
+ (N = s == null ? void 0 : s.abort) == null || N.call(s);
} catch (z) {
- (K = console.debug) == null || K.call(console, z);
+ (U = console.debug) == null || U.call(console, z);
}
- s = new AbortController(), document.addEventListener("mousedown", F, {
+ s = new AbortController(), document.addEventListener("mousedown", O, {
signal: s.signal
});
- }, V = () => {
- var k, K, z, B, J;
+ }, Y = () => {
+ var N, U, z, T, J;
d = !0;
try {
- (k = s == null ? void 0 : s.abort) == null || k.call(s);
+ (N = s == null ? void 0 : s.abort) == null || N.call(s);
} catch (P) {
- (K = console.debug) == null || K.call(console, P);
+ (U = console.debug) == null || U.call(console, P);
}
s = null;
try {
@@ -22687,7 +22714,7 @@ function lb(e) {
try {
c.abort();
} catch (P) {
- (B = console.debug) == null || B.call(console, P);
+ (T = console.debug) == null || T.call(console, P);
}
c = null;
try {
@@ -22696,14 +22723,14 @@ function lb(e) {
(J = console.debug) == null || J.call(console, P);
}
};
- return N(), {
- open: v,
- close: T,
+ return k(), {
+ open: j,
+ close: K,
toggle: w,
closeAll: R,
- scheduleReposition: W,
- setDismissWhitelist: Y,
- dispose: V
+ scheduleReposition: Z,
+ setDismissWhitelist: V,
+ dispose: Y
};
}
const Rn = {
@@ -22752,14 +22779,14 @@ function Jn(e, t) {
const n = e.key.toLowerCase() === t.key.toLowerCase() || e.key === t.key, i = !!t.ctrl === (e.ctrlKey || e.metaKey), o = !!t.shift === e.shiftKey, r = !!t.alt === e.altKey;
return n && i && o && r;
}
-const Bo = /* @__PURE__ */ new Map();
+const Ko = /* @__PURE__ */ new Map();
function Qo(e, t, n) {
var l, a;
const i = e == null ? void 0 : e.id;
if (!i) return;
const o = String(i);
try {
- const c = Bo.get(o);
+ const c = Ko.get(o);
c && clearTimeout(c);
} catch (c) {
(l = console.debug) == null || l.call(console, c);
@@ -22771,22 +22798,22 @@ function Qo(e, t, n) {
}
const r = setTimeout(async () => {
try {
- Bo.delete(o);
- const c = await Ho(i, t);
+ Ko.delete(o);
+ const c = await Eo(i, t);
if (!(c != null && c.ok)) {
- Ze((c == null ? void 0 : c.error) || m("toast.ratingUpdateFailed"), "error");
+ Ae((c == null ? void 0 : c.error) || m("toast.ratingUpdateFailed"), "error");
return;
}
- Ze(m("toast.ratingSetN", { n: t }), "success", 1500), oi(
- Fi,
+ Ae(m("toast.ratingSetN", { n: t }), "success", 1500), oi(
+ Oi,
{ assetId: String(i), rating: t },
{ warnPrefix: "[GridKeyboard]" }
);
} catch (c) {
- console.error("[GridKeyboard] Rating update failed:", c), Ze(m("toast.ratingUpdateError"), "error");
+ console.error("[GridKeyboard] Rating update failed:", c), Ae(m("toast.ratingUpdateError"), "error");
}
}, 350);
- Bo.set(o, r);
+ Ko.set(o, r);
}
function ab({
gridContainer: e,
@@ -22808,11 +22835,11 @@ function ab({
} };
let c = null, s = null, d = !1;
const u = ({ assets: f = [], index: X = 0, mode: x = "" } = {}) => {
- tc({ assets: f, index: X, mode: x });
+ nc({ assets: f, index: X, mode: x });
}, I = () => {
var f, X;
try {
- Ds(e);
+ ja(e);
} catch (x) {
(f = console.debug) == null || f.call(console, x);
}
@@ -22821,13 +22848,13 @@ function ab({
} catch (x) {
(X = console.debug) == null || X.call(console, x);
}
- }, y = () => {
+ }, A = () => {
try {
return n() || [];
} catch {
return [];
}
- }, S = () => {
+ }, h = () => {
var f;
try {
if (typeof (e == null ? void 0 : e._mjrGetRenderedCards) == "function") {
@@ -22842,66 +22869,66 @@ function ab({
} catch {
return [];
}
- }, Z = () => {
+ }, S = () => {
try {
const f = i();
- return f || y()[0] || null;
+ return f || A()[0] || null;
} catch {
return null;
}
- }, C = () => {
+ }, W = () => {
var f, X, x;
try {
if (Array.isArray((f = t == null ? void 0 : t()) == null ? void 0 : f.assets) && t().assets.length)
return t().assets;
- } catch (T) {
- (X = console.debug) == null || X.call(console, T);
+ } catch (K) {
+ (X = console.debug) == null || X.call(console, K);
}
try {
if (typeof (e == null ? void 0 : e._mjrGetAssets) == "function") {
- const T = e._mjrGetAssets();
- if (Array.isArray(T) && T.length) return T;
+ const K = e._mjrGetAssets();
+ if (Array.isArray(K) && K.length) return K;
}
- } catch (T) {
- (x = console.debug) == null || x.call(console, T);
+ } catch (K) {
+ (x = console.debug) == null || x.call(console, K);
}
try {
- return S().map((T) => T == null ? void 0 : T._mjrAsset).filter(Boolean);
+ return h().map((K) => K == null ? void 0 : K._mjrAsset).filter(Boolean);
} catch {
return [];
}
}, g = () => {
var f;
try {
- const X = S();
+ const X = h();
if (X.length >= 2) {
- const x = Math.round(X[0].getBoundingClientRect().top), T = X.filter((v) => {
+ const x = Math.round(X[0].getBoundingClientRect().top), K = X.filter((j) => {
try {
- return Math.abs(Math.round(v.getBoundingClientRect().top) - x) <= 4;
+ return Math.abs(Math.round(j.getBoundingClientRect().top) - x) <= 4;
} catch {
return !1;
}
});
- if (T.length >= 1) return Math.max(1, T.length);
+ if (K.length >= 1) return Math.max(1, K.length);
}
if (X.length >= 1) {
- const x = X[0].getBoundingClientRect(), T = e.getBoundingClientRect(), v = Math.max(1, Math.round(x.width)), w = Math.max(1, Math.round(T.width));
- return Math.max(1, Math.floor(w / v));
+ const x = X[0].getBoundingClientRect(), K = e.getBoundingClientRect(), j = Math.max(1, Math.round(x.width)), w = Math.max(1, Math.round(K.width));
+ return Math.max(1, Math.floor(w / j));
}
} catch (X) {
(f = console.debug) == null || f.call(console, X);
}
return 1;
- }, A = (f, X) => {
- var v;
- const x = Array.isArray(f) ? f.map(String).filter(Boolean) : [], T = String(X || x[0] || "");
+ }, y = (f, X) => {
+ var j;
+ const x = Array.isArray(f) ? f.map(String).filter(Boolean) : [], K = String(X || x[0] || "");
try {
- typeof (e == null ? void 0 : e._mjrSetSelection) == "function" ? e._mjrSetSelection(x, T) : (e.dataset.mjrSelectedAssetIds = JSON.stringify(x), e.dataset.mjrSelectedAssetId = T);
+ typeof (e == null ? void 0 : e._mjrSetSelection) == "function" ? e._mjrSetSelection(x, K) : (e.dataset.mjrSelectedAssetIds = JSON.stringify(x), e.dataset.mjrSelectedAssetId = K);
} catch (w) {
- (v = console.debug) == null || v.call(console, w);
+ (j = console.debug) == null || j.call(console, w);
}
}, p = (f) => {
- var x, T, v;
+ var x, K, j;
const X = String(f || "").trim();
if (X) {
try {
@@ -22914,54 +22941,54 @@ function ab({
}
try {
const w = typeof CSS < "u" && (CSS != null && CSS.escape) ? CSS.escape(X) : X.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1"), R = e.querySelector(`.mjr-asset-card[data-mjr-asset-id="${w}"]`);
- (T = R == null ? void 0 : R.scrollIntoView) == null || T.call(R, { block: "nearest", inline: "nearest" });
+ (K = R == null ? void 0 : R.scrollIntoView) == null || K.call(R, { block: "nearest", inline: "nearest" });
} catch (w) {
- (v = console.debug) == null || v.call(console, w);
+ (j = console.debug) == null || j.call(console, w);
}
}
}, b = (f) => {
- var K, z, B;
+ var U, z, T;
const X = String(f.key || "");
if (!(X === "ArrowLeft" || X === "ArrowRight" || X === "ArrowUp" || X === "ArrowDown") && !(X === "Home" || X === "End") || f.ctrlKey || f.altKey || f.metaKey) return !1;
- const v = C();
- if (!Array.isArray(v) || v.length === 0) return !1;
- const w = Z(), R = String(
- (w == null ? void 0 : w.id) || ((K = e == null ? void 0 : e.dataset) == null ? void 0 : K.mjrSelectedAssetId) || ""
+ const j = W();
+ if (!Array.isArray(j) || j.length === 0) return !1;
+ const w = S(), R = String(
+ (w == null ? void 0 : w.id) || ((U = e == null ? void 0 : e.dataset) == null ? void 0 : U.mjrSelectedAssetId) || ""
);
- let Y = v.findIndex((J) => String((J == null ? void 0 : J.id) || "") === R);
- const F = Y >= 0;
- Y < 0 && (Y = 0);
- const N = Math.max(1, g());
- let V = Y;
- if (X === "ArrowLeft" ? V -= 1 : X === "ArrowRight" ? V += 1 : X === "ArrowUp" ? V -= N : X === "ArrowDown" ? V += N : X === "Home" ? V = 0 : X === "End" && (V = v.length - 1), V = Math.max(0, Math.min(v.length - 1, V)), F && V === Y && X !== "Home" && X !== "End")
+ let V = j.findIndex((J) => String((J == null ? void 0 : J.id) || "") === R);
+ const O = V >= 0;
+ V < 0 && (V = 0);
+ const k = Math.max(1, g());
+ let Y = V;
+ if (X === "ArrowLeft" ? Y -= 1 : X === "ArrowRight" ? Y += 1 : X === "ArrowUp" ? Y -= k : X === "ArrowDown" ? Y += k : X === "Home" ? Y = 0 : X === "End" && (Y = j.length - 1), Y = Math.max(0, Math.min(j.length - 1, Y)), O && Y === V && X !== "Home" && X !== "End")
return !1;
- const k = String(((z = v[V]) == null ? void 0 : z.id) || "");
- if (!k) return !1;
+ const N = String(((z = j[Y]) == null ? void 0 : z.id) || "");
+ if (!N) return !1;
if (I(), f.shiftKey) {
let J = String((e == null ? void 0 : e._mjrSelectionAnchorId) || "");
- J || (J = R || k);
- const P = v.findIndex((M) => String((M == null ? void 0 : M.id) || "") === J), H = P >= 0 ? P : Y, $ = Math.min(H, V), E = Math.max(H, V), oe = v.slice($, E + 1).map((M) => String((M == null ? void 0 : M.id) || "")).filter(Boolean);
- A(oe, k);
+ J || (J = R || N);
+ const P = j.findIndex((M) => String((M == null ? void 0 : M.id) || "") === J), E = P >= 0 ? P : V, $ = Math.min(E, Y), H = Math.max(E, Y), ne = j.slice($, H + 1).map((M) => String((M == null ? void 0 : M.id) || "")).filter(Boolean);
+ y(ne, N);
} else
- e._mjrSelectionAnchorId = k, A([k], k);
- p(k);
+ e._mjrSelectionAnchorId = N, y([N], N);
+ p(N);
try {
l == null || l();
} catch (J) {
- (B = console.debug) == null || B.call(console, J);
+ (T = console.debug) == null || T.call(console, J);
}
return !0;
}, L = async (f) => {
- var Y, F, N, V, k, K, z, B, J, P, H, $, E, oe, M;
+ var V, O, k, Y, N, U, z, T, J, P, E, $, H, ne, M;
const X = f.target;
if (X && (X.tagName === "INPUT" || X.tagName === "TEXTAREA" || X.isContentEditable) || Mo().scope === "viewer") return;
if (document.activeElement !== document.body) {
- const j = document.activeElement, O = e.contains(j), D = j && j.contains && j.contains(e), q = (Y = j == null ? void 0 : j.closest) == null ? void 0 : Y.call(j, ".mjr-asset-card");
- if (!O && !D && !q)
+ const v = document.activeElement, F = e.contains(v), D = v && v.contains && v.contains(e), q = (V = v == null ? void 0 : v.closest) == null ? void 0 : V.call(v, ".mjr-asset-card");
+ if (!F && !D && !q)
return;
} else {
- const j = So();
- if (j && j !== e)
+ const v = Go();
+ if (v && v !== e)
return;
}
const x = () => {
@@ -22972,107 +22999,107 @@ function ab({
x();
return;
}
- } catch (j) {
- (F = console.debug) == null || F.call(console, j);
+ } catch (v) {
+ (O = console.debug) == null || O.call(console, v);
}
- const T = y(), v = Z(), w = t(), R = !!Mo().ratingHotkeysActive;
+ const K = A(), j = S(), w = t(), R = !!Mo().ratingHotkeysActive;
if (!f.ctrlKey && !f.altKey && !f.metaKey && !f.shiftKey) {
- if (!R && Jn(f, Rn.RATING_1) && v != null && v.id) {
- x(), Qo(v, 1, a);
+ if (!R && Jn(f, Rn.RATING_1) && j != null && j.id) {
+ x(), Qo(j, 1, a);
return;
}
- if (!R && Jn(f, Rn.RATING_2) && v != null && v.id) {
- x(), Qo(v, 2, a);
+ if (!R && Jn(f, Rn.RATING_2) && j != null && j.id) {
+ x(), Qo(j, 2, a);
return;
}
- if (!R && Jn(f, Rn.RATING_3) && v != null && v.id) {
- x(), Qo(v, 3, a);
+ if (!R && Jn(f, Rn.RATING_3) && j != null && j.id) {
+ x(), Qo(j, 3, a);
return;
}
- if (!R && Jn(f, Rn.RATING_4) && v != null && v.id) {
- x(), Qo(v, 4, a);
+ if (!R && Jn(f, Rn.RATING_4) && j != null && j.id) {
+ x(), Qo(j, 4, a);
return;
}
- if (!R && Jn(f, Rn.RATING_5) && v != null && v.id) {
- x(), Qo(v, 5, a);
+ if (!R && Jn(f, Rn.RATING_5) && j != null && j.id) {
+ x(), Qo(j, 5, a);
return;
}
- if (!R && Jn(f, Rn.RATING_RESET) && v != null && v.id) {
- x(), Qo(v, 0, a);
+ if (!R && Jn(f, Rn.RATING_RESET) && j != null && j.id) {
+ x(), Qo(j, 0, a);
return;
}
}
- if ((Jn(f, Rn.OPEN_VIEWER) || Jn(f, Rn.OPEN_VIEWER_ALT)) && T.length > 0) {
+ if ((Jn(f, Rn.OPEN_VIEWER) || Jn(f, Rn.OPEN_VIEWER_ALT)) && K.length > 0) {
x();
try {
- if (T.length >= 2 && T.length <= 4)
- u({ assets: T, index: 0 });
+ if (K.length >= 2 && K.length <= 4)
+ u({ assets: K, index: 0 });
else {
- let j = [];
+ let v = [];
if (Array.isArray(w == null ? void 0 : w.assets) && w.assets.length)
- j = w.assets;
+ v = w.assets;
else if (typeof (e == null ? void 0 : e._mjrGetAssets) == "function") {
const D = e._mjrGetAssets();
- Array.isArray(D) && D.length && (j = D);
+ Array.isArray(D) && D.length && (v = D);
} else
- j = S().map((q) => q._mjrAsset).filter(Boolean);
- const O = j.findIndex((D) => String(D == null ? void 0 : D.id) === String(v == null ? void 0 : v.id));
- u({ assets: j, index: Math.max(0, O) });
+ v = h().map((q) => q._mjrAsset).filter(Boolean);
+ const F = v.findIndex((D) => String(D == null ? void 0 : D.id) === String(j == null ? void 0 : j.id));
+ u({ assets: v, index: Math.max(0, F) });
}
- } catch (j) {
- console.error("[GridKeyboard] Open viewer failed:", j);
+ } catch (v) {
+ console.error("[GridKeyboard] Open viewer failed:", v);
}
return;
}
- if (Jn(f, Rn.METADATA_PANEL) && v) {
- x(), o(v);
+ if (Jn(f, Rn.METADATA_PANEL) && j) {
+ x(), o(j);
return;
}
- if (Jn(f, Rn.COMPARE_AB) && T.length === 2) {
+ if (Jn(f, Rn.COMPARE_AB) && K.length === 2) {
x();
try {
- u({ assets: T, index: 0, mode: "ab" });
- } catch (j) {
- (N = console.debug) == null || N.call(console, j);
+ u({ assets: K, index: 0, mode: "ab" });
+ } catch (v) {
+ (k = console.debug) == null || k.call(console, v);
}
return;
}
- if (Jn(f, Rn.SIDE_BY_SIDE) && T.length >= 2 && T.length <= 4) {
+ if (Jn(f, Rn.SIDE_BY_SIDE) && K.length >= 2 && K.length <= 4) {
x();
try {
- u({ assets: T, index: 0, mode: "sidebyside" });
- } catch (j) {
- (V = console.debug) == null || V.call(console, j);
+ u({ assets: K, index: 0, mode: "sidebyside" });
+ } catch (v) {
+ (Y = console.debug) == null || Y.call(console, v);
}
return;
}
- if (Jn(f, Rn.EDIT_TAGS) && v != null && v.id) {
- x(), r(v);
+ if (Jn(f, Rn.EDIT_TAGS) && j != null && j.id) {
+ x(), r(j);
return;
}
- if (Jn(f, Rn.ADD_TO_COLLECTION) && (T.length > 0 || v)) {
+ if (Jn(f, Rn.ADD_TO_COLLECTION) && (K.length > 0 || j)) {
x();
- const j = T.length > 0 ? T : [v], O = e.getBoundingClientRect();
+ const v = K.length > 0 ? K : [j], F = e.getBoundingClientRect();
await rd({
- x: O.left + O.width / 2,
- y: O.top + O.height / 2,
- assets: j
+ x: F.left + F.width / 2,
+ y: F.top + F.height / 2,
+ assets: v
});
return;
}
if (Jn(f, Rn.REMOVE_FROM_COLLECTION)) {
- const j = w == null ? void 0 : w.collectionId;
- if (j && (T.length > 0 || v)) {
+ const v = w == null ? void 0 : w.collectionId;
+ if (v && (K.length > 0 || j)) {
x();
try {
- const D = (T.length > 0 ? T : [v]).map(
+ const D = (K.length > 0 ? K : [j]).map(
(ee) => {
- var ce;
- return String((ee == null ? void 0 : ee.filepath) || (ee == null ? void 0 : ee.path) || ((ce = ee == null ? void 0 : ee.file_info) == null ? void 0 : ce.filepath) || "").trim();
+ var ae;
+ return String((ee == null ? void 0 : ee.filepath) || (ee == null ? void 0 : ee.path) || ((ae = ee == null ? void 0 : ee.file_info) == null ? void 0 : ae.filepath) || "").trim();
}
).filter(Boolean);
if (!D.length) {
- Ze(
+ Ae(
m(
"toast.removeFromCollectionFailed",
"No valid files to remove from collection"
@@ -23081,9 +23108,9 @@ function ab({
);
return;
}
- const q = await Og(j, D);
+ const q = await Fg(v, D);
if (!(q != null && q.ok)) {
- Ze(
+ Ae(
(q == null ? void 0 : q.error) || m(
"toast.removeFromCollectionFailed",
"Failed to remove from collection"
@@ -23099,19 +23126,19 @@ function ab({
})
);
} catch (ee) {
- (k = console.debug) == null || k.call(console, ee);
+ (N = console.debug) == null || N.call(console, ee);
}
- Ze(
+ Ae(
m("toast.removedFromCollection", "Removed from collection"),
"success",
1400
);
- } catch (O) {
- Ze(
+ } catch (F) {
+ Ae(
m(
"toast.removeFromCollectionError",
"Error removing from collection: {error}",
- { error: (O == null ? void 0 : O.message) || String(O || "") }
+ { error: (F == null ? void 0 : F.message) || String(F || "") }
),
"error"
);
@@ -23119,55 +23146,55 @@ function ab({
return;
}
}
- if (Jn(f, Rn.COPY_PATH) && v != null && v.filepath) {
+ if (Jn(f, Rn.COPY_PATH) && j != null && j.filepath) {
x();
try {
- await navigator.clipboard.writeText(v.filepath), Ze(m("toast.pathCopied"), "success", 2e3);
+ await navigator.clipboard.writeText(j.filepath), Ae(m("toast.pathCopied"), "success", 2e3);
} catch {
- Ze(m("toast.pathCopyFailed"), "error");
+ Ae(m("toast.pathCopyFailed"), "error");
}
return;
}
- if (Jn(f, Rn.DOWNLOAD) && v != null && v.filepath) {
+ if (Jn(f, Rn.DOWNLOAD) && j != null && j.filepath) {
x();
- const j = Ea(v.filepath), O = document.createElement("a");
- O.href = j, O.download = v.filename || "download", document.body.appendChild(O), O.click(), document.body.removeChild(O), Ze(
+ const v = Ea(j.filepath), F = document.createElement("a");
+ F.href = v, F.download = j.filename || "download", document.body.appendChild(F), F.click(), document.body.removeChild(F), Ae(
m("toast.downloadingFile", "Downloading {filename}...", {
- filename: v.filename
+ filename: j.filename
}),
"info",
3e3
);
return;
}
- if (Jn(f, Rn.OPEN_IN_FOLDER) && v != null && v.id) {
+ if (Jn(f, Rn.OPEN_IN_FOLDER) && j != null && j.id) {
x();
- const j = await zs(v.id);
- j != null && j.ok ? Ze(m("toast.openedInFolder"), "info", 2e3) : Ze((j == null ? void 0 : j.error) || m("toast.openFolderFailed"), "error");
+ const v = await Js(j.id);
+ v != null && v.ok ? Ae(m("toast.openedInFolder"), "info", 2e3) : Ae((v == null ? void 0 : v.error) || m("toast.openFolderFailed"), "error");
return;
}
- if (Jn(f, Rn.RENAME) && v != null && v.id) {
+ if (Jn(f, Rn.RENAME) && j != null && j.id) {
x();
- const j = v.filename || "", O = await Vi(
+ const v = j.filename || "", F = await Yi(
m("dialog.rename.title", "Rename file"),
- j
- ), D = ad(O, j);
- if (D && D !== j) {
+ v
+ ), D = ad(F, v);
+ if (D && D !== v) {
const q = ld(D);
if (!q.valid) {
- Ze(q.reason, "error");
+ Ae(q.reason, "error");
return;
}
try {
- const ee = await Js(v, D);
+ const ee = await Ts(j, D);
if (ee != null && ee.ok) {
- const ce = (K = ee == null ? void 0 : ee.data) == null ? void 0 : K.asset;
- ce && typeof ce == "object" ? Object.assign(v, ce) : (v.filename = D, v.filepath = (z = v.filepath) == null ? void 0 : z.replace(/[^\\/]+$/, D), v.path && (v.path = String(v.path).replace(/[^\\/]+$/, D)), v.file_info && typeof v.file_info == "object" && (v.file_info.filename = D, v.file_info.filepath && (v.file_info.filepath = String(
- v.file_info.filepath
- ).replace(/[^\\/]+$/, D)), v.file_info.path && (v.file_info.path = String(v.file_info.path).replace(
+ const ae = (U = ee == null ? void 0 : ee.data) == null ? void 0 : U.asset;
+ ae && typeof ae == "object" ? Object.assign(j, ae) : (j.filename = D, j.filepath = (z = j.filepath) == null ? void 0 : z.replace(/[^\\/]+$/, D), j.path && (j.path = String(j.path).replace(/[^\\/]+$/, D)), j.file_info && typeof j.file_info == "object" && (j.file_info.filename = D, j.file_info.filepath && (j.file_info.filepath = String(
+ j.file_info.filepath
+ ).replace(/[^\\/]+$/, D)), j.file_info.path && (j.file_info.path = String(j.file_info.path).replace(
/[^\\/]+$/,
D
- )))), Ze(m("toast.fileRenamedSuccess"), "success");
+ )))), Ae(m("toast.fileRenamedSuccess"), "success");
try {
window.dispatchEvent(
new CustomEvent("mjr:reload-grid", {
@@ -23175,13 +23202,13 @@ function ab({
})
);
} catch (ue) {
- (B = console.debug) == null || B.call(console, ue);
+ (T = console.debug) == null || T.call(console, ue);
}
a();
} else
- Ze((ee == null ? void 0 : ee.error) || m("toast.fileRenameFailed"), "error");
+ Ae((ee == null ? void 0 : ee.error) || m("toast.fileRenameFailed"), "error");
} catch (ee) {
- Ze(
+ Ae(
m("toast.errorRenaming", "Error renaming file: {error}", {
error: (ee == null ? void 0 : ee.message) || String(ee || "")
}),
@@ -23191,16 +23218,16 @@ function ab({
}
return;
}
- if ((Jn(f, Rn.DELETE) || Jn(f, Rn.DELETE_ALT)) && (v != null && v.id || T.length > 0)) {
+ if ((Jn(f, Rn.DELETE) || Jn(f, Rn.DELETE_ALT)) && (j != null && j.id || K.length > 0)) {
x();
- const j = T.length > 0 ? T : [v];
- let O = 0, D = 0;
+ const v = K.length > 0 ? K : [j];
+ let F = 0, D = 0;
const q = [];
- for (const ee of j)
+ for (const ee of v)
if (ee != null && ee.id)
try {
- const ce = await Sa(ee.id);
- ce != null && ce.ok ? (O++, q.push(String(ee.id))) : D++;
+ const ae = await Ga(ee.id);
+ ae != null && ae.ok ? (F++, q.push(String(ee.id))) : D++;
} catch {
D++;
}
@@ -23210,66 +23237,66 @@ function ab({
if (typeof ee == "function")
ee(q);
else
- for (const ce of q) {
+ for (const ae of q) {
const ue = e.querySelector(
- `[data-mjr-asset-id="${ce}"]`
+ `[data-mjr-asset-id="${ae}"]`
);
(J = ue == null ? void 0 : ue.remove) == null || J.call(ue);
}
} catch (ee) {
(P = console.debug) == null || P.call(console, ee);
}
- D === 0 ? Ze(
- O === 1 ? m("toast.filesDeletedShort", "{n} files deleted", { n: O }) : m("toast.filesDeletedShort", "{n} files deleted", {
- n: O
+ D === 0 ? Ae(
+ F === 1 ? m("toast.filesDeletedShort", "{n} files deleted", { n: F }) : m("toast.filesDeletedShort", "{n} files deleted", {
+ n: F
}),
"success"
- ) : Ze(
+ ) : Ae(
m("toast.filesDeletedShortPartial", "{success} deleted, {failed} failed", {
- success: O,
+ success: F,
failed: D
}),
"warning"
);
try {
if (typeof (e == null ? void 0 : e._mjrSetSelection) == "function") {
- const ee = T.filter((ce) => !q.includes(String((ce == null ? void 0 : ce.id) || ""))).map((ce) => String((ce == null ? void 0 : ce.id) || "")).filter(Boolean);
+ const ee = K.filter((ae) => !q.includes(String((ae == null ? void 0 : ae.id) || ""))).map((ae) => String((ae == null ? void 0 : ae.id) || "")).filter(Boolean);
e._mjrSetSelection(ee, ee[0] || "");
}
} catch (ee) {
- (H = console.debug) == null || H.call(console, ee);
+ (E = console.debug) == null || E.call(console, ee);
}
l();
return;
}
if (Jn(f, Rn.SELECT_ALL)) {
x();
- let j = [];
+ let v = [];
try {
if (Array.isArray(w == null ? void 0 : w.assets) && w.assets.length)
- j = w.assets.map((O) => String((O == null ? void 0 : O.id) || "")).filter(Boolean);
+ v = w.assets.map((F) => String((F == null ? void 0 : F.id) || "")).filter(Boolean);
else if (typeof (e == null ? void 0 : e._mjrGetAssets) == "function") {
- const O = e._mjrGetAssets();
- Array.isArray(O) && (j = O.map((D) => String((D == null ? void 0 : D.id) || "")).filter(Boolean));
+ const F = e._mjrGetAssets();
+ Array.isArray(F) && (v = F.map((D) => String((D == null ? void 0 : D.id) || "")).filter(Boolean));
}
- } catch (O) {
- ($ = console.debug) == null || $.call(console, O);
+ } catch (F) {
+ ($ = console.debug) == null || $.call(console, F);
}
- if (!j.length)
+ if (!v.length)
try {
- j = S().map((O) => {
+ v = h().map((F) => {
var D;
- return String(((D = O == null ? void 0 : O._mjrAsset) == null ? void 0 : D.id) || "");
+ return String(((D = F == null ? void 0 : F._mjrAsset) == null ? void 0 : D.id) || "");
}).filter(Boolean);
- } catch (O) {
- (E = console.debug) == null || E.call(console, O);
+ } catch (F) {
+ (H = console.debug) == null || H.call(console, F);
}
try {
- typeof (e == null ? void 0 : e._mjrSetSelection) == "function" ? e._mjrSetSelection(j, j[0] || "") : (S().forEach((D) => {
+ typeof (e == null ? void 0 : e._mjrSetSelection) == "function" ? e._mjrSetSelection(v, v[0] || "") : (h().forEach((D) => {
D.classList.add("is-selected"), D.setAttribute("aria-selected", "true");
- }), e.dataset.mjrSelectedAssetIds = JSON.stringify(j), e.dataset.mjrSelectedAssetId = String(j[0] || ""));
- } catch (O) {
- (oe = console.debug) == null || oe.call(console, O);
+ }), e.dataset.mjrSelectedAssetIds = JSON.stringify(v), e.dataset.mjrSelectedAssetId = String(v[0] || ""));
+ } catch (F) {
+ (ne = console.debug) == null || ne.call(console, F);
}
l();
return;
@@ -23277,52 +23304,52 @@ function ab({
if (Jn(f, Rn.DESELECT_ALL)) {
x();
try {
- typeof (e == null ? void 0 : e._mjrSetSelection) == "function" ? e._mjrSetSelection([], "") : (S().filter(
- (O) => {
+ typeof (e == null ? void 0 : e._mjrSetSelection) == "function" ? e._mjrSetSelection([], "") : (h().filter(
+ (F) => {
var D, q;
- return (q = (D = O == null ? void 0 : O.classList) == null ? void 0 : D.contains) == null ? void 0 : q.call(D, "is-selected");
+ return (q = (D = F == null ? void 0 : F.classList) == null ? void 0 : D.contains) == null ? void 0 : q.call(D, "is-selected");
}
- ).forEach((O) => {
- O.classList.remove("is-selected"), O.setAttribute("aria-selected", "false");
+ ).forEach((F) => {
+ F.classList.remove("is-selected"), F.setAttribute("aria-selected", "false");
}), delete e.dataset.mjrSelectedAssetIds, delete e.dataset.mjrSelectedAssetId);
- } catch (j) {
- (M = console.debug) == null || M.call(console, j);
+ } catch (v) {
+ (M = console.debug) == null || M.call(console, v);
}
l();
return;
}
- }, h = () => {
+ }, C = () => {
d || (c = L, s = () => I(), document.addEventListener("keydown", c, !0), e.addEventListener("pointerdown", s, !0), e.addEventListener("focusin", s, !0), d = !0);
}, G = () => {
var f;
if (!(!d || !c)) {
document.removeEventListener("keydown", c, !0), s && (e.removeEventListener("pointerdown", s, !0), e.removeEventListener("focusin", s, !0)), c = null, s = null, d = !1;
- for (const X of Bo.values())
+ for (const X of Ko.values())
try {
clearTimeout(X);
} catch (x) {
(f = console.debug) == null || f.call(console, x);
}
- Bo.clear();
+ Ko.clear();
}
};
- return { bind: h, unbind: G, dispose: () => {
+ return { bind: C, unbind: G, dispose: () => {
var f;
G();
- for (const X of Bo.values())
+ for (const X of Ko.values())
try {
clearTimeout(X);
} catch (x) {
(f = console.debug) == null || f.call(console, x);
}
- Bo.clear();
+ Ko.clear();
} };
}
-function Gi(e) {
+function Si(e) {
const t = Rn[e];
return t ? bW(t) : "";
}
-function Bu() {
+function Ku() {
return {
open: !1,
x: 0,
@@ -23331,11 +23358,11 @@ function Bu() {
title: ""
};
}
-const Dt = Vs({
+const Ut = Vs({
portalOwnerId: "",
mountedPortalIds: [],
- main: Bu(),
- submenu: Bu(),
+ main: Ku(),
+ submenu: Ku(),
tags: {
open: !1,
x: 0,
@@ -23360,38 +23387,38 @@ function yW(e = "") {
}
function fW() {
const e = `mjr-grid-context-menu-portal-${pW++}`;
- return Dt.mountedPortalIds.push(e), Dt.portalOwnerId || (Dt.portalOwnerId = e), e;
-}
-function hW(e) {
- const t = Dt.mountedPortalIds.filter((n) => n !== e);
- Dt.mountedPortalIds.splice(
- 0,
- Dt.mountedPortalIds.length,
- ...t
- ), Dt.portalOwnerId === e && (Dt.portalOwnerId = Dt.mountedPortalIds[0] || "");
+ return Ut.mountedPortalIds.push(e), Ut.portalOwnerId || (Ut.portalOwnerId = e), e;
}
function CW(e) {
- return String(Dt.portalOwnerId || "") === String(e || "");
+ const t = Ut.mountedPortalIds.filter((n) => n !== e);
+ Ut.mountedPortalIds.splice(
+ 0,
+ Ut.mountedPortalIds.length,
+ ...t
+ ), Ut.portalOwnerId === e && (Ut.portalOwnerId = Ut.mountedPortalIds[0] || "");
}
-function Uu({ x: e = 0, y: t = 0, items: n = [], title: i = "" } = {}) {
- yW("grid"), db(), Ir(), Dt.main.open = !0, Dt.main.x = Number(e) || 0, Dt.main.y = Number(t) || 0, Dt.main.items = Array.isArray(n) ? n.filter(Boolean) : [], Dt.main.title = String(i || "");
+function hW(e) {
+ return String(Ut.portalOwnerId || "") === String(e || "");
+}
+function Bu({ x: e = 0, y: t = 0, items: n = [], title: i = "" } = {}) {
+ yW("grid"), db(), Ir(), Ut.main.open = !0, Ut.main.x = Number(e) || 0, Ut.main.y = Number(t) || 0, Ut.main.items = Array.isArray(n) ? n.filter(Boolean) : [], Ut.main.title = String(i || "");
}
function sb() {
- cb(Dt.main), Ir();
+ cb(Ut.main), Ir();
}
function ZW({ x: e = 0, y: t = 0, items: n = [], title: i = "" } = {}) {
- Dt.submenu.open = !0, Dt.submenu.x = Number(e) || 0, Dt.submenu.y = Number(t) || 0, Dt.submenu.items = Array.isArray(n) ? n.filter(Boolean) : [], Dt.submenu.title = String(i || "");
+ Ut.submenu.open = !0, Ut.submenu.x = Number(e) || 0, Ut.submenu.y = Number(t) || 0, Ut.submenu.items = Array.isArray(n) ? n.filter(Boolean) : [], Ut.submenu.title = String(i || "");
}
function Ir() {
- cb(Dt.submenu);
+ cb(Ut.submenu);
}
function AW({ x: e = 0, y: t = 0, asset: n = null, onChanged: i = null } = {}) {
- sb(), Dt.tags.open = !!n, Dt.tags.x = Number(e) || 0, Dt.tags.y = Number(t) || 0, Dt.tags.asset = n || null, Dt.tags.onChanged = typeof i == "function" ? i : null;
+ sb(), Ut.tags.open = !!n, Ut.tags.x = Number(e) || 0, Ut.tags.y = Number(t) || 0, Ut.tags.asset = n || null, Ut.tags.onChanged = typeof i == "function" ? i : null;
}
function db() {
- Dt.tags.open = !1, Dt.tags.x = 0, Dt.tags.y = 0, Dt.tags.asset = null, Dt.tags.onChanged = null;
+ Ut.tags.open = !1, Ut.tags.x = 0, Ut.tags.y = 0, Ut.tags.asset = null, Ut.tags.onChanged = null;
}
-function Vo() {
+function Yo() {
sb(), db();
}
let ub = 1;
@@ -23523,7 +23550,7 @@ const WW = (e) => {
} catch (I) {
(u = console.debug) == null || u.call(console, I);
}
-}, SW = (e) => {
+}, GW = (e) => {
var n, i;
const t = [];
if (!e) return t;
@@ -23546,7 +23573,7 @@ const WW = (e) => {
(i = console.debug) == null || i.call(console, o);
}
return t;
-}, GW = (e, t) => {
+}, SW = (e, t) => {
try {
const n = String(t ?? "");
return (e || []).findIndex((i) => String((i == null ? void 0 : i.id) ?? "") === n);
@@ -23574,7 +23601,7 @@ function ll(e, t = null) {
}
return n;
}
-const Hi = (e) => {
+const Ei = (e) => {
var t, n;
try {
const i = e ? "grid-contextmenu" : "grid-contextmenu-global";
@@ -23593,7 +23620,7 @@ async function xW(e, t) {
root_id: String(e.root_id || e.rootId || ((o = e == null ? void 0 : e.file_info) == null ? void 0 : o.root_id) || "").trim() || void 0
};
if (!n.filename) return { ok: !1, error: "Missing filename" };
- const i = await Et(ct.INDEX_FILES, { files: [n], incremental: !1 });
+ const i = await Dt(st.INDEX_FILES, { files: [n], incremental: !1 });
if (!(i != null && i.ok)) return i || { ok: !1, error: "Index refresh failed" };
if ((e == null ? void 0 : e.id) != null)
try {
@@ -23602,14 +23629,14 @@ async function xW(e, t) {
Object.assign(e, a.data);
const c = ll(e, a.data), s = (r = c == null ? void 0 : c.querySelector) == null ? void 0 : r.call(c, ".mjr-workflow-dot");
if (s) {
- const d = ec(c._mjrAsset);
+ const d = tc(c._mjrAsset);
d && s.replaceWith(d);
}
}
} catch (a) {
(l = console.debug) == null || l.call(console, a);
}
- return Hi(t), { ok: !0, data: { refreshed: !0 } };
+ return Ei(t), { ok: !0, data: { refreshed: !0 } };
}
function $o(e, t, n) {
var o, r;
@@ -23625,28 +23652,28 @@ function $o(e, t, n) {
(r = console.debug) == null || r.call(console, l);
}
if (i) {
- KI(String(i), t, {
+ UI(String(i), t, {
successMessage: t > 0 ? `Rating set to ${t} stars` : "Rating cleared",
errorMessage: "Failed to update rating",
warnPrefix: "[GridContextMenu]",
onSuccess: () => {
oi(
- Fi,
+ Oi,
{ assetId: String(i), rating: t },
{ warnPrefix: "[GridContextMenu]" }
);
},
onFailure: (l) => {
ai(l, "[GridContextMenu] Rating update", {
- showToast: fe.DEBUG_VERBOSE_ERRORS
+ showToast: he.DEBUG_VERBOSE_ERRORS
});
}
});
return;
}
- Ho(e, t).catch((l) => {
+ Eo(e, t).catch((l) => {
ai(l, "[GridContextMenu] Rating update", {
- showToast: fe.DEBUG_VERBOSE_ERRORS
+ showToast: he.DEBUG_VERBOSE_ERRORS
});
});
}
@@ -23706,23 +23733,23 @@ function LW({ currentPath: e, gridContainer: t }) {
null,
async () => {
try {
- const n = await Vi(m("dialog.newFolderName", "New folder name"), ""), i = String(n || "").trim();
+ const n = await Yi(m("dialog.newFolderName", "New folder name"), ""), i = String(n || "").trim();
if (!i) return;
- const o = await Hr({
+ const o = await Er({
op: "create",
path: e,
name: i
});
if (!(o != null && o.ok)) {
- Ze((o == null ? void 0 : o.error) || "Failed to create folder", "error");
+ Ae((o == null ? void 0 : o.error) || "Failed to create folder", "error");
return;
}
- Hi(t), Ze(
+ Ei(t), Ae(
m("toast.folderCreated", "Folder created: {name}", { name: i }),
"success"
);
} catch (n) {
- Ze(
+ Ae(
m("toast.createFolderFailedDetail", "Create folder failed: {error}", {
error: (n == null ? void 0 : n.message) || String(n || "")
}),
@@ -23733,7 +23760,7 @@ function LW({ currentPath: e, gridContainer: t }) {
)
];
}
-function VW({ asset: e, gridContainer: t, panelState: n }) {
+function YW({ asset: e, gridContainer: t, panelState: n }) {
const i = String((e == null ? void 0 : e.filepath) || "").trim(), o = [
jn(m("ctx.openFolder", "Open folder"), "pi pi-folder-open", null, () => {
var r;
@@ -23751,21 +23778,21 @@ function VW({ asset: e, gridContainer: t, panelState: n }) {
jn(m("ctx.pinAsBrowserRoot"), "pi pi-bookmark", null, async () => {
var a, c;
if (!i) {
- Ze(m("toast.unableResolveFolderPath"), "error");
+ Ae(m("toast.unableResolveFolderPath"), "error");
return;
}
- const r = await Vi(
+ const r = await Yi(
m("dialog.browserRootLabelOptional"),
String((e == null ? void 0 : e.filename) || "")
- ), l = await Et(ct.CUSTOM_ROOTS, {
+ ), l = await Dt(st.CUSTOM_ROOTS, {
path: i,
label: String(r || "").trim() || void 0
});
if (!(l != null && l.ok)) {
- Ze((l == null ? void 0 : l.error) || m("toast.pinFolderFailed"), "error");
+ Ae((l == null ? void 0 : l.error) || m("toast.pinFolderFailed"), "error");
return;
}
- Ze(m("toast.folderPinnedAsBrowserRoot"), "success");
+ Ae(m("toast.folderPinnedAsBrowserRoot"), "success");
try {
window.dispatchEvent(
new CustomEvent("mjr:custom-roots-changed", {
@@ -23781,20 +23808,20 @@ function VW({ asset: e, gridContainer: t, panelState: n }) {
rl(),
jn(m("ctx.createFolderHere"), "pi pi-plus", null, async () => {
try {
- const r = await Vi(m("dialog.newFolderName"), ""), l = String(r || "").trim();
+ const r = await Yi(m("dialog.newFolderName"), ""), l = String(r || "").trim();
if (!l) return;
- const a = await Hr({
+ const a = await Er({
op: "create",
path: i,
name: l
});
if (!(a != null && a.ok)) {
- Ze((a == null ? void 0 : a.error) || m("toast.createFolderFailed"), "error");
+ Ae((a == null ? void 0 : a.error) || m("toast.createFolderFailed"), "error");
return;
}
- Hi(t), Ze(m("toast.folderCreated", { name: l }), "success");
+ Ei(t), Ae(m("toast.folderCreated", { name: l }), "success");
} catch (r) {
- Ze(
+ Ae(
m("toast.createFolderFailedDetail", {
error: (r == null ? void 0 : r.message) || String(r || "")
}),
@@ -23804,20 +23831,20 @@ function VW({ asset: e, gridContainer: t, panelState: n }) {
}),
jn(m("ctx.renameFolder"), "pi pi-pencil", null, async () => {
try {
- const r = String((e == null ? void 0 : e.filename) || "").trim(), l = await Vi(m("dialog.renameFolder"), r), a = String(l || "").trim();
+ const r = String((e == null ? void 0 : e.filename) || "").trim(), l = await Yi(m("dialog.renameFolder"), r), a = String(l || "").trim();
if (!a || a === r) return;
- const c = await Hr({
+ const c = await Er({
op: "rename",
path: i,
name: a
});
if (!(c != null && c.ok)) {
- Ze((c == null ? void 0 : c.error) || m("toast.renameFolderFailed"), "error");
+ Ae((c == null ? void 0 : c.error) || m("toast.renameFolderFailed"), "error");
return;
}
- Hi(t), Ze(m("toast.folderRenamed"), "success");
+ Ei(t), Ae(m("toast.folderRenamed"), "success");
} catch (r) {
- Ze(
+ Ae(
m("toast.renameFolderFailedDetail", {
error: (r == null ? void 0 : r.message) || String(r || "")
}),
@@ -23827,23 +23854,23 @@ function VW({ asset: e, gridContainer: t, panelState: n }) {
}),
jn(m("ctx.moveFolder"), "pi pi-arrow-right", null, async () => {
try {
- const r = await Vi(
+ const r = await Yi(
m("dialog.destinationDirectoryPath"),
""
), l = String(r || "").trim();
if (!l) return;
- const a = await Hr({
+ const a = await Er({
op: "move",
path: i,
destination: l
});
if (!(a != null && a.ok)) {
- Ze((a == null ? void 0 : a.error) || m("toast.moveFolderFailed"), "error");
+ Ae((a == null ? void 0 : a.error) || m("toast.moveFolderFailed"), "error");
return;
}
- Hi(t), Ze(m("toast.folderMoved"), "success");
+ Ei(t), Ae(m("toast.folderMoved"), "success");
} catch (r) {
- Ze(
+ Ae(
m("toast.moveFolderFailedDetail", {
error: (r == null ? void 0 : r.message) || String(r || "")
}),
@@ -23859,18 +23886,18 @@ function VW({ asset: e, gridContainer: t, panelState: n }) {
if (!await yi(
m("dialog.deleteFolderRecursive", { name: r })
)) return;
- const a = await Hr({
+ const a = await Er({
op: "delete",
path: i,
recursive: !0
});
if (!(a != null && a.ok)) {
- Ze((a == null ? void 0 : a.error) || m("toast.deleteFolderFailed"), "error");
+ Ae((a == null ? void 0 : a.error) || m("toast.deleteFolderFailed"), "error");
return;
}
- Hi(t), Ze(m("toast.folderDeleted"), "success");
+ Ei(t), Ae(m("toast.folderDeleted"), "success");
} catch (r) {
- Ze(
+ Ae(
m("toast.deleteFolderFailedDetail", {
error: (r == null ? void 0 : r.message) || String(r || "")
}),
@@ -23880,7 +23907,7 @@ function VW({ asset: e, gridContainer: t, panelState: n }) {
})
), o;
}
-function YW({
+function VW({
asset: e,
card: t,
gridContainer: n,
@@ -23894,9 +23921,9 @@ function YW({
effectiveSelectionCount: c,
isMultiSelected: s,
hasSelection: d
- } = l, u = [], I = ({ assets: g = [], index: A = 0, mode: p = "" } = {}) => tc({ assets: g, index: A, mode: p });
+ } = l, u = [], I = ({ assets: g = [], index: y = 0, mode: p = "" } = {}) => nc({ assets: g, index: y, mode: p });
u.push(
- jn("Open Viewer", "pi pi-image", Gi("OPEN_VIEWER"), () => {
+ jn("Open Viewer", "pi pi-image", Si("OPEN_VIEWER"), () => {
var g;
try {
const p = (d ? da(n) : []).filter((G) => !ua(G)), b = p.length;
@@ -23904,63 +23931,63 @@ function YW({
I({ assets: p, index: 0 });
return;
}
- const L = SW(n).filter(
+ const L = GW(n).filter(
(G) => !ua(G)
- ), h = GW(L, e == null ? void 0 : e.id);
- if (!L.length || h < 0) return;
- I({ assets: L, index: Math.max(0, h) });
- } catch (A) {
- (g = console.debug) == null || g.call(console, A);
+ ), C = SW(L, e == null ? void 0 : e.id);
+ if (!L.length || C < 0) return;
+ I({ assets: L, index: Math.max(0, C) });
+ } catch (y) {
+ (g = console.debug) == null || g.call(console, y);
}
}),
jn(
m("ctx.showMetadataPanel", "Show metadata panel"),
"pi pi-info-circle",
- Gi("METADATA_PANEL"),
+ Si("METADATA_PANEL"),
() => {
var g;
try {
MW(n, t, e, i);
- const A = n == null ? void 0 : n._mjrOpenDetails;
- typeof A == "function" && A();
- } catch (A) {
- (g = console.debug) == null || g.call(console, A);
+ const y = n == null ? void 0 : n._mjrOpenDetails;
+ typeof y == "function" && y();
+ } catch (y) {
+ (g = console.debug) == null || g.call(console, y);
}
}
)
);
- const y = (d ? a : []).filter(
+ const A = (d ? a : []).filter(
(g) => !ua(g)
- ), S = y.length;
- S === 2 && u.push(
+ ), h = A.length;
+ h === 2 && u.push(
jn(
"Compare A/B (2 selected)",
"pi pi-clone",
- Gi("COMPARE_AB"),
+ Si("COMPARE_AB"),
() => {
var g;
try {
- I({ assets: y, index: 0, mode: "ab" });
- } catch (A) {
- (g = console.debug) == null || g.call(console, A);
+ I({ assets: A, index: 0, mode: "ab" });
+ } catch (y) {
+ (g = console.debug) == null || g.call(console, y);
}
}
)
- ), S >= 2 && S <= 4 && u.push(
+ ), h >= 2 && h <= 4 && u.push(
jn(
- `Side-by-side (2x2) (${S} selected)`,
+ `Side-by-side (2x2) (${h} selected)`,
"pi pi-table",
- Gi("SIDE_BY_SIDE"),
+ Si("SIDE_BY_SIDE"),
() => {
var g;
try {
I({
- assets: y,
+ assets: A,
index: 0,
mode: "sidebyside"
});
- } catch (A) {
- (g = console.debug) == null || g.call(console, A);
+ } catch (y) {
+ (g = console.debug) == null || g.call(console, y);
}
}
)
@@ -23968,39 +23995,39 @@ function YW({
jn(
m("ctx.openInFolder", "Open in folder"),
"pi pi-folder-open",
- Gi("OPEN_IN_FOLDER"),
+ Si("OPEN_IN_FOLDER"),
async () => {
- const g = await zs(e);
- g != null && g.ok ? Ze(m("toast.openedInFolder"), "info", 2e3) : Ze((g == null ? void 0 : g.error) || m("toast.openFolderFailed"), "error");
+ const g = await Js(e);
+ g != null && g.ok ? Ae(m("toast.openedInFolder"), "info", 2e3) : Ae((g == null ? void 0 : g.error) || m("toast.openFolderFailed"), "error");
},
{ disabled: !(e != null && e.id || _o(e)) }
),
jn(
m("ctx.copyPath", "Copy path"),
"pi pi-copy",
- Gi("COPY_PATH"),
+ Si("COPY_PATH"),
async () => {
const g = e != null && e.filepath ? String(e.filepath) : "";
if (!g) {
- Ze(m("toast.noFilePath"), "error");
+ Ae(m("toast.noFilePath"), "error");
return;
}
try {
- await navigator.clipboard.writeText(g), Ze(m("toast.pathCopied"), "success", 2e3);
- } catch (A) {
- console.warn(m("log.clipboardCopyFailed", "Clipboard copy failed"), A), Ze(m("toast.pathCopyFailed"), "error");
+ await navigator.clipboard.writeText(g), Ae(m("toast.pathCopied"), "success", 2e3);
+ } catch (y) {
+ console.warn(m("log.clipboardCopyFailed", "Clipboard copy failed"), y), Ae(m("toast.pathCopyFailed"), "error");
}
}
),
jn(
m("ctx.download", "Download"),
"pi pi-download",
- Gi("DOWNLOAD"),
+ Si("DOWNLOAD"),
() => {
if (!(e != null && e.filepath)) return;
- const g = Ea(e.filepath), A = e.filename || "download", p = document.createElement("a");
- p.href = g, p.download = A, document.body.appendChild(p), p.click(), document.body.removeChild(p), Ze(
- m("toast.downloadingFile", "Downloading {filename}...", { filename: A }),
+ const g = Ea(e.filepath), y = e.filename || "download", p = document.createElement("a");
+ p.href = g, p.download = y, document.body.appendChild(p), p.click(), document.body.removeChild(p), Ae(
+ m("toast.downloadingFile", "Downloading {filename}...", { filename: y }),
"info",
3e3
);
@@ -24010,38 +24037,38 @@ function YW({
jn(
"Add to collection...",
"pi pi-bookmark",
- Gi("ADD_TO_COLLECTION"),
+ Si("ADD_TO_COLLECTION"),
async () => {
- const g = da(n), A = g.length ? g : [e];
- await rd({ x: o, y: r, assets: A });
+ const g = da(n), y = g.length ? g : [e];
+ await rd({ x: o, y: r, assets: y });
}
)
);
- const Z = String((i == null ? void 0 : i.collectionId) || "").trim();
- if (Z) {
+ const S = String((i == null ? void 0 : i.collectionId) || "").trim();
+ if (S) {
const g = da(n), p = (g.length ? g : [e]).map(_o).filter(Boolean), b = p.length > 1 ? `Remove from collection (${p.length})` : "Remove from collection";
u.push(
jn(b, "pi pi-bookmark", null, async () => {
if (!p.length) {
- Ze(m("toast.noFilePath"), "error");
+ Ae(m("toast.noFilePath"), "error");
return;
}
- const L = await Og(Z, p);
+ const L = await Fg(S, p);
if (!(L != null && L.ok)) {
- Ze((L == null ? void 0 : L.error) || m("toast.removeFromCollectionFailed"), "error");
+ Ae((L == null ? void 0 : L.error) || m("toast.removeFromCollectionFailed"), "error");
return;
}
- Hi(n);
+ Ei(n);
})
);
}
- const C = !!(e != null && e.id || _o(e));
+ const W = !!(e != null && e.id || _o(e));
return u.push(
rl(),
jn(
m("ctx.editTags", "Edit tags"),
"pi pi-tags",
- Gi("EDIT_TAGS"),
+ Si("EDIT_TAGS"),
() => {
Ib(o + 6, r + 6, e, () => {
ll(e, {
@@ -24058,9 +24085,9 @@ function YW({
"1-5 >",
null,
{
- disabled: !C,
+ disabled: !W,
closeOnSelect: !1,
- submenu: vW(e, C)
+ submenu: vW(e, W)
}
),
rl(),
@@ -24070,21 +24097,21 @@ function YW({
null,
async () => {
if (e != null && e.filename || e != null && e.id) {
- Ze(m("toast.rescanningFile", "Rescanning file..."), "info", 1600);
+ Ae(m("toast.rescanningFile", "Rescanning file..."), "info", 1600);
try {
const g = await xW(e, n);
- g != null && g.ok ? Ze(
+ g != null && g.ok ? Ae(
m("toast.metadataRefreshed", "Metadata refreshed{suffix}", {
suffix: ""
}),
"success",
1800
- ) : Ze(
+ ) : Ae(
(g == null ? void 0 : g.error) || m("toast.resetFailed", "Failed to reset index"),
"error"
);
} catch (g) {
- Ze(
+ Ae(
`${m("toast.resetFailed", "Failed to reset index")}: ${(g == null ? void 0 : g.message) || String(g || "")}`,
"error"
);
@@ -24096,28 +24123,28 @@ function YW({
jn(
"Rename...",
"pi pi-pencil",
- Gi("RENAME"),
+ Si("RENAME"),
async () => {
- var L, h;
+ var L, C;
if (!(e != null && e.id || _o(e))) return;
- const g = e.filename || "", A = await Vi(
+ const g = e.filename || "", y = await Yi(
m("dialog.rename.title", "Rename file"),
g
- ), p = ad(A, g);
+ ), p = ad(y, g);
if (!p || p === g) return;
const b = ld(p);
if (!b.valid) {
- Ze(b.reason, "error");
+ Ae(b.reason, "error");
return;
}
try {
- const G = await Js(e, p);
+ const G = await Ts(e, p);
if (!(G != null && G.ok)) {
- Ze((G == null ? void 0 : G.error) || m("toast.fileRenameFailed"), "error");
+ Ae((G == null ? void 0 : G.error) || m("toast.fileRenameFailed"), "error");
return;
}
- const W = (L = G == null ? void 0 : G.data) == null ? void 0 : L.asset;
- W && typeof W == "object" ? (Object.assign(e, W), ll(e, W)) : (e.filename = p, e.filepath && (e.filepath = String(e.filepath).replace(/[^\\/]+$/, p)), e.path && (e.path = String(e.path).replace(/[^\\/]+$/, p)), e.file_info && typeof e.file_info == "object" && (e.file_info.filename = p, e.file_info.filepath && (e.file_info.filepath = String(e.file_info.filepath).replace(
+ const Z = (L = G == null ? void 0 : G.data) == null ? void 0 : L.asset;
+ Z && typeof Z == "object" ? (Object.assign(e, Z), ll(e, Z)) : (e.filename = p, e.filepath && (e.filepath = String(e.filepath).replace(/[^\\/]+$/, p)), e.path && (e.path = String(e.path).replace(/[^\\/]+$/, p)), e.file_info && typeof e.file_info == "object" && (e.file_info.filename = p, e.file_info.filepath && (e.file_info.filepath = String(e.file_info.filepath).replace(
/[^\\/]+$/,
p
)), e.file_info.path && (e.file_info.path = String(e.file_info.path).replace(
@@ -24129,10 +24156,10 @@ function YW({
path: e.path,
file_info: e.file_info
}));
- const f = mb(e.id), X = (h = f == null ? void 0 : f.querySelector) == null ? void 0 : h.call(f, ".mjr-filename");
- X && (X.textContent = e.filename || p), Ze(m("toast.fileRenamedSuccess"), "success"), Hi(n);
+ const f = mb(e.id), X = (C = f == null ? void 0 : f.querySelector) == null ? void 0 : C.call(f, ".mjr-filename");
+ X && (X.textContent = e.filename || p), Ae(m("toast.fileRenamedSuccess"), "success"), Ei(n);
} catch (G) {
- Ze(
+ Ae(
m("toast.errorRenaming", "Error renaming file: {error}", {
error: (G == null ? void 0 : G.message) || String(G || "")
}),
@@ -24146,39 +24173,39 @@ function YW({
jn(
`Delete ${c} files...`,
"pi pi-trash",
- Gi("DELETE"),
+ Si("DELETE"),
async () => {
- if (await cs(Number(c) || 0))
+ if (await ss(Number(c) || 0))
try {
- let A = 0, p = 0;
+ let y = 0, p = 0;
const b = [];
let L = 0;
- const h = a.length ? a : [e];
- for (const G of h) {
- const W = await Sa(G);
- W != null && W.ok ? (A += 1, (G == null ? void 0 : G.id) != null ? b.push(String(G.id)) : L += 1) : p += 1;
+ const C = a.length ? a : [e];
+ for (const G of C) {
+ const Z = await Ga(G);
+ Z != null && Z.ok ? (y += 1, (G == null ? void 0 : G.id) != null ? b.push(String(G.id)) : L += 1) : p += 1;
}
if (b.length) {
- const G = ls(n, b);
+ const G = as(n, b);
i && Array.isArray(G == null ? void 0 : G.selectedIds) && (i.selectedAssetIds = G.selectedIds, i.activeAssetId = G.selectedIds[0] || "");
}
- L > 0 && Hi(n), p === 0 ? Ze(
+ L > 0 && Ei(n), p === 0 ? Ae(
m("toast.filesDeletedSuccessN", "{n} files deleted successfully!", {
- n: A
+ n: y
}),
"success"
- ) : Ze(
+ ) : Ae(
m(
"toast.filesDeletedPartial",
"{success} files deleted, {failed} failed.",
- { success: A, failed: p }
+ { success: y, failed: p }
),
"warning"
);
- } catch (A) {
- Ze(
+ } catch (y) {
+ Ae(
m("toast.errorDeleting", "Error deleting file: {error}", {
- error: (A == null ? void 0 : A.message) || String(A || "")
+ error: (y == null ? void 0 : y.message) || String(y || "")
}),
"error"
);
@@ -24189,25 +24216,25 @@ function YW({
jn(
m("ctx.delete", "Delete"),
"pi pi-trash",
- Gi("DELETE"),
+ Si("DELETE"),
async () => {
- if (await cs(1, e == null ? void 0 : e.filename))
+ if (await ss(1, e == null ? void 0 : e.filename))
try {
- const A = await Sa(e);
- if (!(A != null && A.ok)) {
- Ze((A == null ? void 0 : A.error) || m("toast.fileDeleteFailed"), "error");
+ const y = await Ga(e);
+ if (!(y != null && y.ok)) {
+ Ae((y == null ? void 0 : y.error) || m("toast.fileDeleteFailed"), "error");
return;
}
if (e != null && e.id) {
- const p = ls(n, [String(e.id)]);
+ const p = as(n, [String(e.id)]);
i && Array.isArray(p == null ? void 0 : p.selectedIds) && (i.selectedAssetIds = p.selectedIds, i.activeAssetId = p.selectedIds[0] || "");
} else
- Hi(n);
- Ze(m("toast.fileDeletedSuccess"), "success");
- } catch (A) {
- Ze(
+ Ei(n);
+ Ae(m("toast.fileDeletedSuccess"), "success");
+ } catch (y) {
+ Ae(
m("toast.errorDeleting", "Error deleting file: {error}", {
- error: (A == null ? void 0 : A.message) || String(A || "")
+ error: (y == null ? void 0 : y.message) || String(y || "")
}),
"error"
);
@@ -24245,7 +24272,7 @@ function sd({
if (!gb(r)) return;
const u = String(((d = e == null ? void 0 : e.dataset) == null ? void 0 : d.mjrSubfolder) || "").trim();
if (!u) return;
- o.preventDefault(), o.stopPropagation(), Uu({
+ o.preventDefault(), o.stopPropagation(), Bu({
x: o.clientX,
y: o.clientY,
items: LW({ currentPath: u, gridContainer: e })
@@ -24255,7 +24282,7 @@ function sd({
o.preventDefault(), o.stopPropagation();
const a = l._mjrAsset;
if (!a) return;
- const c = jW(e), s = ua(a) ? VW({ asset: a, gridContainer: e, panelState: r }) : YW({
+ const c = jW(e), s = ua(a) ? YW({ asset: a, gridContainer: e, panelState: r }) : VW({
asset: a,
card: l,
gridContainer: e,
@@ -24264,7 +24291,7 @@ function sd({
pointerY: o.clientY,
selection: c
});
- Uu({
+ Bu({
x: o.clientX,
y: o.clientY,
items: s
@@ -24294,20 +24321,20 @@ function sd({
(l = console.debug) == null || l.call(console, s);
}
try {
- UI();
+ BI();
} catch (s) {
(a = console.debug) == null || a.call(console, s);
}
try {
- Vo();
+ Yo();
} catch (s) {
(c = console.debug) == null || c.call(console, s);
}
};
return e._mjrGridContextMenuUnbind = i, i;
}
-const Ku = Fi;
-function kW(e) {
+const Uu = Oi;
+function XW(e) {
var n;
const t = String(e ?? "");
try {
@@ -24318,7 +24345,7 @@ function kW(e) {
}
return t.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1");
}
-function XW(e, t = null) {
+function NW(e, t = null) {
var n, i, o;
if (!e) return [];
try {
@@ -24349,7 +24376,7 @@ function Du(e, t, n) {
(o = console.debug) == null || o.call(console, r);
}
}
-async function NW(e, t, n = 5) {
+async function kW(e, t, n = 5) {
const i = Math.max(1, Number(n) || 1);
let o = 0;
const r = [], l = async () => {
@@ -24374,14 +24401,14 @@ function bb({ gridContainer: e, createRatingBadge: t } = {}) {
const d = c == null ? void 0 : c._mjrAsset, u = d == null ? void 0 : d.id;
if (u != null) {
try {
- const I = await Ho(u, s);
+ const I = await Eo(u, s);
if (!(I != null && I.ok)) {
- Ze((I == null ? void 0 : I.error) || m("toast.ratingUpdateFailed"), "error");
+ Ae((I == null ? void 0 : I.error) || m("toast.ratingUpdateFailed"), "error");
return;
}
- Ze(m("toast.ratingSetN", { n: s }), "success", 1500);
+ Ae(m("toast.ratingSetN", { n: s }), "success", 1500);
} catch {
- Ze(m("toast.ratingUpdateError"), "error");
+ Ae(m("toast.ratingUpdateError"), "error");
return;
}
Du(c, t, s);
@@ -24391,27 +24418,27 @@ function bb({ gridContainer: e, createRatingBadge: t } = {}) {
var c, s;
if (!(n || !e)) {
n = !0, yu(!0), i = async (d) => {
- var C;
+ var W;
if (Mo().scope === "viewer" || d.defaultPrevented) return;
const u = String(d.key || "");
if (u !== "0" && u !== "1" && u !== "2" && u !== "3" && u !== "4" && u !== "5") return;
const I = document.querySelector(".mjr-viewer-overlay");
if (I && I.style.display !== "none" || !(e.contains(d.target) || e === d.target)) return;
- const S = u === "0" ? 0 : Number(u);
- if (!Number.isFinite(S)) return;
- const Z = XW(e, d.target);
- Z.length && (Z.length > 0 && (d.preventDefault(), d.stopPropagation(), (C = d.stopImmediatePropagation) == null || C.call(d)), await NW(Z, (g) => r(g, S), 5));
+ const h = u === "0" ? 0 : Number(u);
+ if (!Number.isFinite(h)) return;
+ const S = NW(e, d.target);
+ S.length && (S.length > 0 && (d.preventDefault(), d.stopPropagation(), (W = d.stopImmediatePropagation) == null || W.call(d)), await kW(S, (g) => r(g, h), 5));
}, o = (d) => {
- var S;
- const u = (d == null ? void 0 : d.detail) || {}, I = u.assetId ?? u.id ?? null, y = Number(u.rating);
- if (!(!I || !Number.isFinite(y)))
+ var h;
+ const u = (d == null ? void 0 : d.detail) || {}, I = u.assetId ?? u.id ?? null, A = Number(u.rating);
+ if (!(!I || !Number.isFinite(A)))
try {
- const Z = e.querySelector(
- `.mjr-asset-card[data-mjr-asset-id="${kW(I)}"]`
+ const S = e.querySelector(
+ `.mjr-asset-card[data-mjr-asset-id="${XW(I)}"]`
);
- Z && Du(Z, t, y);
- } catch (Z) {
- (S = console.debug) == null || S.call(console, Z);
+ S && Du(S, t, A);
+ } catch (S) {
+ (h = console.debug) == null || h.call(console, S);
}
};
try {
@@ -24420,7 +24447,7 @@ function bb({ gridContainer: e, createRatingBadge: t } = {}) {
(c = console.debug) == null || c.call(console, d);
}
try {
- window.addEventListener(Ku, o);
+ window.addEventListener(Uu, o);
} catch (d) {
(s = console.debug) == null || s.call(console, d);
}
@@ -24435,7 +24462,7 @@ function bb({ gridContainer: e, createRatingBadge: t } = {}) {
(c = console.debug) == null || c.call(console, d);
}
try {
- window.removeEventListener(Ku, o);
+ window.removeEventListener(Uu, o);
} catch (d) {
(s = console.debug) == null || s.call(console, d);
}
@@ -24467,12 +24494,12 @@ function RW(e) {
var t;
return String(((t = e == null ? void 0 : e.dataset) == null ? void 0 : t.mjrGroupStacks) || "") === "1";
}
-function FW(e) {
+function OW(e) {
const t = String((e == null ? void 0 : e.stack_id) || "").trim();
return t ? `stack:${t}` : "";
}
-function OW(e, t, n) {
- return RW(e) && FW(t) || n;
+function FW(e, t, n) {
+ return RW(e) && OW(t) || n;
}
function zW(e) {
var t, n, i;
@@ -24500,7 +24527,7 @@ function JW(e, t, n) {
if (!s || !d) return;
const u = Array.isArray(d._mjrDupMembers) ? d._mjrDupMembers : [d], I = u.length;
s.dispatchEvent(
- new CustomEvent(ht.OPEN_STACK_GROUP, {
+ new CustomEvent(ft.OPEN_STACK_GROUP, {
bubbles: !0,
detail: {
asset: d,
@@ -24518,10 +24545,10 @@ function JW(e, t, n) {
r.title = `${l} — click to compare all copies`, r.innerHTML = `${o}`;
}
function yb(e, t = void 0) {
- const n = Up(), i = Kp(e, t);
+ const n = Bp(), i = Up(e, t);
return i.use(n), { app: i, pinia: n };
}
-const Ra = /* @__PURE__ */ new Map();
+const Oa = /* @__PURE__ */ new Map();
function TW(e, t, n) {
try {
window.dispatchEvent(
@@ -24536,26 +24563,26 @@ function TW(e, t, n) {
} catch {
}
}
-function BW(e) {
+function KW(e) {
const t = document.createElement("div");
return t.dataset.mjrKeepAliveHost = String(e || "_mjrVueApp"), t.style.height = "100%", t.style.width = "100%", t.style.minHeight = "0", t.style.display = "flex", t.style.flexDirection = "column", t.style.overflow = "hidden", t;
}
-function UW(e, t) {
+function BW(e, t) {
var n;
!e || !t || (e.style.height = "100%", e.style.minHeight = "0", e.style.display = "flex", e.style.flexDirection = "column", e.style.overflow = "hidden", !(e.firstChild === t && e.childNodes.length === 1) && (e.replaceChildren(t), TW((n = t == null ? void 0 : t.dataset) == null ? void 0 : n.mjrKeepAliveHost, t, e)));
}
function dd(e, t, n = "_mjrVueApp") {
if (!e) return !1;
- let i = Ra.get(n), o = !1;
+ let i = Oa.get(n), o = !1;
if (!i) {
- const r = BW(n), { app: l } = yb(t);
- l.mount(r), i = { app: l, host: r, container: null }, Ra.set(n, i), o = !0;
+ const r = KW(n), { app: l } = yb(t);
+ l.mount(r), i = { app: l, host: r, container: null }, Oa.set(n, i), o = !0;
}
- return UW(e, i.host), i.container = e, o;
+ return BW(e, i.host), i.container = e, o;
}
function ud(e, t = "_mjrVueApp") {
var i, o;
- const n = Ra.get(t);
+ const n = Oa.get(t);
if (n != null && n.app) {
try {
n.app.unmount();
@@ -24565,7 +24592,7 @@ function ud(e, t = "_mjrVueApp") {
(o = (i = n.host) == null ? void 0 : i.remove) == null || o.call(i);
} catch {
}
- Ra.delete(t);
+ Oa.delete(t);
}
}
function er(e, t, n) {
@@ -24575,24 +24602,24 @@ function er(e, t, n) {
let d;
n.key && ((a = n.debug) != null && a.call(n)) && (d = Date.now());
const u = e();
- if (!(u.length !== i.length || u.some((S, Z) => i[Z] !== S)))
+ if (!(u.length !== i.length || u.some((h, S) => i[S] !== h)))
return o;
i = u;
- let y;
- if (n.key && ((c = n.debug) != null && c.call(n)) && (y = Date.now()), o = t(...u), n.key && ((s = n.debug) != null && s.call(n))) {
- const S = Math.round((Date.now() - d) * 100) / 100, Z = Math.round((Date.now() - y) * 100) / 100, C = Z / 16, g = (A, p) => {
- for (A = String(A); A.length < p; )
- A = " " + A;
- return A;
+ let A;
+ if (n.key && ((c = n.debug) != null && c.call(n)) && (A = Date.now()), o = t(...u), n.key && ((s = n.debug) != null && s.call(n))) {
+ const h = Math.round((Date.now() - d) * 100) / 100, S = Math.round((Date.now() - A) * 100) / 100, W = S / 16, g = (y, p) => {
+ for (y = String(y); y.length < p; )
+ y = " " + y;
+ return y;
};
console.info(
- `%c⏱ ${g(Z, 5)} /${g(S, 5)} ms`,
+ `%c⏱ ${g(S, 5)} /${g(h, 5)} ms`,
`
font-size: .6rem;
font-weight: bold;
color: hsl(${Math.max(
0,
- Math.min(120 - 120 * C, 120)
+ Math.min(120 - 120 * W, 120)
)}deg 100% 31%);`,
n == null ? void 0 : n.key
);
@@ -24603,20 +24630,20 @@ function er(e, t, n) {
i = a;
}, l;
}
-function Eu(e, t) {
+function Hu(e, t) {
if (e === void 0)
throw new Error("Unexpected undefined");
return e;
}
-const KW = (e, t) => Math.abs(e - t) < 1.01, DW = (e, t, n) => {
+const UW = (e, t) => Math.abs(e - t) < 1.01, DW = (e, t, n) => {
let i;
return function(...o) {
e.clearTimeout(i), i = e.setTimeout(() => t.apply(this, o), n);
};
-}, Hu = (e) => {
+}, Eu = (e) => {
const { offsetWidth: t, offsetHeight: n } = e;
return { width: t, height: n };
-}, EW = (e) => e, HW = (e) => {
+}, HW = (e) => e, EW = (e) => {
const t = Math.max(e.startIndex - e.overscan, 0), n = Math.min(e.endIndex + e.overscan, e.count - 1), i = [];
for (let o = t; o <= n; o++)
i.push(o);
@@ -24632,7 +24659,7 @@ const KW = (e, t) => Math.abs(e - t) < 1.01, DW = (e, t, n) => {
const { width: a, height: c } = l;
t({ width: Math.round(a), height: Math.round(c) });
};
- if (o(Hu(n)), !i.ResizeObserver)
+ if (o(Eu(n)), !i.ResizeObserver)
return () => {
};
const r = new i.ResizeObserver((l) => {
@@ -24645,7 +24672,7 @@ const KW = (e, t) => Math.abs(e - t) < 1.01, DW = (e, t, n) => {
return;
}
}
- o(Hu(n));
+ o(Eu(n));
};
e.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(a) : a();
});
@@ -24747,8 +24774,8 @@ class _W {
scrollPaddingStart: 0,
scrollPaddingEnd: 0,
horizontal: !1,
- getItemKey: EW,
- rangeExtractor: HW,
+ getItemKey: HW,
+ rangeExtractor: EW,
onChange: () => {
},
measureElement: fb,
@@ -24863,29 +24890,29 @@ class _W {
void 0
);
for (let I = 0; I < s; I++) {
- const y = d[I];
- y && (u[y.lane] = I);
+ const A = d[I];
+ A && (u[A.lane] = I);
}
for (let I = s; I < n; I++) {
- const y = r(I), S = this.laneAssignments.get(I);
- let Z, C;
- if (S !== void 0 && this.options.lanes > 1) {
- Z = S;
- const b = u[Z], L = b !== void 0 ? d[b] : void 0;
- C = L ? L.end + this.options.gap : i + o;
+ const A = r(I), h = this.laneAssignments.get(I);
+ let S, W;
+ if (h !== void 0 && this.options.lanes > 1) {
+ S = h;
+ const b = u[S], L = b !== void 0 ? d[b] : void 0;
+ W = L ? L.end + this.options.gap : i + o;
} else {
const b = this.options.lanes === 1 ? d[I - 1] : this.getFurthestMeasurement(d, I);
- C = b ? b.end + this.options.gap : i + o, Z = b ? b.lane : I % this.options.lanes, this.options.lanes > 1 && this.laneAssignments.set(I, Z);
+ W = b ? b.end + this.options.gap : i + o, S = b ? b.lane : I % this.options.lanes, this.options.lanes > 1 && this.laneAssignments.set(I, S);
}
- const g = c.get(y), A = typeof g == "number" ? g : this.options.estimateSize(I), p = C + A;
+ const g = c.get(A), y = typeof g == "number" ? g : this.options.estimateSize(I), p = W + y;
d[I] = {
index: I,
- start: C,
- size: A,
+ start: W,
+ size: y,
end: p,
- key: y,
- lane: Z
- }, u[Z] = I;
+ key: A,
+ lane: S
+ }, u[S] = I;
}
return this.measurementsCache = d, d;
},
@@ -24988,11 +25015,11 @@ class _W {
), this.getVirtualItemForOffset = (n) => {
const i = this.getMeasurements();
if (i.length !== 0)
- return Eu(
- i[hb(
+ return Hu(
+ i[Cb(
0,
i.length - 1,
- (o) => Eu(i[o]).start,
+ (o) => Hu(i[o]).start,
n
)]
);
@@ -25111,7 +25138,7 @@ class _W {
return;
}
const i = this.scrollState.index != null ? this.getOffsetForIndex(this.scrollState.index, this.scrollState.align) : void 0, o = i ? i[0] : this.scrollState.lastTargetOffset, r = 1, l = o !== this.scrollState.lastTargetOffset;
- if (!l && KW(o, this.getScrollOffset())) {
+ if (!l && UW(o, this.getScrollOffset())) {
if (this.scrollState.stableFrames++, this.scrollState.stableFrames >= r) {
this.scrollState = null;
return;
@@ -25124,7 +25151,7 @@ class _W {
this.scheduleScrollReconcile();
}
}
-const hb = (e, t, n, i) => {
+const Cb = (e, t, n, i) => {
for (; e <= t; ) {
const o = (e + t) / 2 | 0, r = n(o);
if (r < i)
@@ -25148,7 +25175,7 @@ function $W({
startIndex: 0,
endIndex: o
};
- let l = hb(
+ let l = Cb(
0,
o,
r,
@@ -25173,17 +25200,17 @@ function $W({
return { startIndex: l, endIndex: a };
}
function e1(e) {
- const t = new _W(xe(e)), n = Ys(t), i = t._didMount();
- return cn(
- () => xe(e).getScrollElement(),
+ const t = new _W(ve(e)), n = Xs(t), i = t._didMount();
+ return dn(
+ () => ve(e).getScrollElement(),
(o) => {
o && t._willUpdate();
},
{
immediate: !0
}
- ), cn(
- () => xe(e),
+ ), dn(
+ () => ve(e),
(o) => {
t.setOptions({
...o,
@@ -25204,11 +25231,11 @@ function t1(e) {
observeElementRect: qW,
observeElementOffset: PW,
scrollToFn: QW,
- ...xe(e)
+ ...ve(e)
}))
);
}
-const Qr = "application/x-mjr-asset", Cb = /* @__PURE__ */ new Set([".png", ".jpg", ".jpeg", ".webp", ".gif", ".bmp", ".avif"]), Zb = /* @__PURE__ */ new Set([".mp4", ".mov", ".mkv", ".webm", ".avi"]), Ab = /* @__PURE__ */ new Set([".wav", ".mp3", ".flac", ".ogg", ".m4a", ".aac", ".opus"]), Wb = /* @__PURE__ */ new Set([
+const Qr = "application/x-mjr-asset", hb = /* @__PURE__ */ new Set([".png", ".jpg", ".jpeg", ".webp", ".gif", ".bmp", ".avif"]), Zb = /* @__PURE__ */ new Set([".mp4", ".mov", ".mkv", ".webm", ".avi"]), Ab = /* @__PURE__ */ new Set([".wav", ".mp3", ".flac", ".ogg", ".m4a", ".aac", ".opus"]), Wb = /* @__PURE__ */ new Set([
".obj",
".fbx",
".glb",
@@ -25257,7 +25284,7 @@ const Qr = "application/x-mjr-asset", Cb = /* @__PURE__ */ new Set([".png", ".jp
}, r1 = (e) => {
if (!e) return !1;
const t = e.lastIndexOf(".");
- return t === -1 ? !1 : Cb.has(e.slice(t).toLowerCase());
+ return t === -1 ? !1 : hb.has(e.slice(t).toLowerCase());
}, l1 = (e) => e ? String(e.kind || "").toLowerCase() === "image" ? !0 : r1(e.filename) : !1, a1 = (e) => {
if (!e) return !1;
const t = e.lastIndexOf(".");
@@ -25290,50 +25317,50 @@ const Qr = "application/x-mjr-asset", Cb = /* @__PURE__ */ new Set([".png", ".jp
if (!n) return !1;
const i = (n.split(/[?#]/)[0].split(".").pop() || "").toLowerCase();
return i ? t && i === String(t).toLowerCase() ? !0 : Zb.has(`.${i}`) : !1;
-}, nc = (e, t, n) => {
+}, ic = (e, t, n) => {
if (!e || e.type !== "combo" || !e.options) return !1;
const i = Array.isArray(e.options.values) && e.options.values || e.options.values && Array.isArray(e.options.values.values) && e.options.values.values || null;
return Array.isArray(i) ? i.some((o) => {
const r = typeof o == "string" ? o : (o == null ? void 0 : o.content) ?? (o == null ? void 0 : o.value) ?? (o == null ? void 0 : o.text);
return n(r, t);
}) : !1;
-}, b1 = (e, t) => nc(e, t, wb), Mb = (e, t) => {
+}, b1 = (e, t) => ic(e, t, wb), Mb = (e, t) => {
if (typeof e != "string") return !1;
const n = e.trim().toLowerCase();
if (!n) return !1;
const i = (n.split(/[?#]/)[0].split(".").pop() || "").toLowerCase();
- return i ? t && i === String(t).toLowerCase() ? !0 : Cb.has(`.${i}`) : !1;
-}, p1 = (e, t) => nc(e, t, Mb), Sb = (e, t) => {
+ return i ? t && i === String(t).toLowerCase() ? !0 : hb.has(`.${i}`) : !1;
+}, p1 = (e, t) => ic(e, t, Mb), Gb = (e, t) => {
if (typeof e != "string") return !1;
const n = e.trim().toLowerCase();
if (!n) return !1;
const i = (n.split(/[?#]/)[0].split(".").pop() || "").toLowerCase();
return i ? t && i === String(t).toLowerCase() ? !0 : Ab.has(`.${i}`) : !1;
-}, y1 = (e, t) => nc(e, t, Sb), Gb = (e, t) => {
+}, y1 = (e, t) => ic(e, t, Gb), Sb = (e, t) => {
if (typeof e != "string") return !1;
const n = e.trim().toLowerCase();
if (!n) return !1;
const i = (n.split(/[?#]/)[0].split(".").pop() || "").toLowerCase();
return i ? t && i === String(t).toLowerCase() ? !0 : Wb.has(`.${i}`) : !1;
-}, f1 = (e, t) => nc(e, t, Gb), Fa = /* @__PURE__ */ new WeakMap();
-let Oa = !1;
-function h1(e) {
+}, f1 = (e, t) => ic(e, t, Sb), Fa = /* @__PURE__ */ new WeakMap();
+let za = !1;
+function C1(e) {
return e && Fa.get(e) || null;
}
-function C1(e, t) {
+function h1(e, t) {
return e ? typeof t == "function" ? (Fa.set(e, t), t) : (Fa.delete(e), null) : null;
}
function Z1(e) {
e && Fa.delete(e);
}
function A1() {
- Oa = !0;
+ za = !0;
}
function W1() {
- return Oa ? (Oa = !1, !0) : !1;
+ return za ? (za = !1, !0) : !1;
}
function $u() {
- Oa = !1;
+ za = !1;
}
const w1 = (e) => {
var n;
@@ -25344,7 +25371,7 @@ const w1 = (e) => {
if (!n) return !1;
const i = t.clientX, o = t.clientY;
return i >= n.left && i <= n.right && o >= n.top && o <= n.bottom;
-}, Yo = (e) => {
+}, Vo = (e) => {
var t, n, i, o, r, l;
try {
(n = (t = e == null ? void 0 : e.graph) == null ? void 0 : t.setDirtyCanvas) == null || n.call(t, !0, !0);
@@ -25356,13 +25383,13 @@ const w1 = (e) => {
} catch (a) {
(l = console.debug) == null || l.call(console, a);
}
-}, gs = (e) => {
+}, Is = (e) => {
try {
return new URL(String(e || ""), window.location.href).href;
} catch {
return String(e || "");
}
-}, M1 = () => Qp("mjr_", 24), S1 = (e) => {
+}, M1 = () => Qp("mjr_", 24), G1 = (e) => {
const t = e && typeof e == "object" ? e : null;
if (!t) return null;
const n = t.filename || t.name;
@@ -25416,11 +25443,11 @@ const w1 = (e) => {
!d || typeof d != "object" || n.push(d);
}
return n;
-}, G1 = /* @__PURE__ */ new Set([".png", ".jpg", ".jpeg", ".webp", ".avif", ".mp4", ".mov"]), x1 = (e) => {
+}, S1 = /* @__PURE__ */ new Set([".png", ".jpg", ".jpeg", ".webp", ".avif", ".mp4", ".mov"]), x1 = (e) => {
if (!e || typeof e != "object") return !1;
if (e.has_workflow || e.has_generation_data) return !0;
const t = String(e.ext || e.filename || "").toLowerCase(), n = t.includes(".") ? t.slice(t.lastIndexOf(".")) : `.${t}`;
- return G1.has(n);
+ return S1.has(n);
}, j1 = (e) => {
var n;
if (!e || typeof e != "object") return "";
@@ -25438,7 +25465,7 @@ const w1 = (e) => {
if (!r) continue;
const l = document.createElement("a");
try {
- l.href = gs(r), l.download = i.filename || i.name || "download", l.style.display = "none", document.body.appendChild(l), l.click(), setTimeout(() => {
+ l.href = Is(r), l.download = i.filename || i.name || "download", l.style.display = "none", document.body.appendChild(l), l.click(), setTimeout(() => {
try {
l.remove();
} catch {
@@ -25457,26 +25484,26 @@ const w1 = (e) => {
if (!e || !t) return;
const r = xb(n, i);
if (Array.isArray(r) && r.length > 1) {
- const I = r.map(S1).filter(Boolean);
+ const I = r.map(G1).filter(Boolean);
if (I.length > 1) {
- let y = "";
+ let A = "";
try {
- y = M1();
- } catch (S) {
- console.warn("[DragOut] failed to create secure batch token", S);
+ A = M1();
+ } catch (h) {
+ console.warn("[DragOut] failed to create secure batch token", h);
}
- if (y) {
+ if (A) {
try {
- Et(ct.BATCH_ZIP_CREATE, { token: y, items: I }).catch(() => {
+ Dt(st.BATCH_ZIP_CREATE, { token: A, items: I }).catch(() => {
});
- } catch (C) {
- (s = console.debug) == null || s.call(console, C);
+ } catch (W) {
+ (s = console.debug) == null || s.call(console, W);
}
- const S = gs(iy(y)), Z = `Majoor_Batch_${I.length}.zip`;
+ const h = Is(iy(A)), S = `Majoor_Batch_${I.length}.zip`;
try {
- e.setData("text/uri-list", S), e.setData("DownloadURL", `application/zip:${Z}:${S}`), e.effectAllowed = "copy";
- } catch (C) {
- (d = console.debug) == null || d.call(console, C);
+ e.setData("text/uri-list", h), e.setData("DownloadURL", `application/zip:${S}:${h}`), e.effectAllowed = "copy";
+ } catch (W) {
+ (d = console.debug) == null || d.call(console, W);
}
return;
}
@@ -25484,13 +25511,13 @@ const w1 = (e) => {
}
const l = t.filename || t.name;
if (!l) return;
- const a = gs(o), c = I1(l);
+ const a = Is(o), c = I1(l);
try {
e.setData("text/uri-list", a), e.setData("DownloadURL", `${c}:${l}:${a}`), e.effectAllowed = "copy";
} catch (I) {
(u = console.debug) == null || u.call(console, I);
}
-}, V1 = (e, { asset: t, containerEl: n, card: i }) => {
+}, Y1 = (e, { asset: t, containerEl: n, card: i }) => {
var o, r;
if (!(!e || !t))
try {
@@ -25501,13 +25528,13 @@ const w1 = (e) => {
const d = c.length, u = t.filename || t.name || "file", I = m(
"dialog.stripMetadataBody",
"Would you like to download a clean copy with ComfyUI workflow and generation metadata removed?"
- ), y = d > 1 ? `${m("dialog.stripMetadataBatchHeader", `You dragged ${d} files outside ComfyUI.`)}
+ ), A = d > 1 ? `${m("dialog.stripMetadataBatchHeader", `You dragged ${d} files outside ComfyUI.`)}
${I}` : `${m("dialog.stripMetadataHeader", `You dragged "${u}" outside ComfyUI.`)}
${I}`;
- yi(y, m("dialog.stripMetadataTitle", "Strip ComfyUI Metadata?")).then((S) => {
- S && v1(c);
+ yi(A, m("dialog.stripMetadataTitle", "Strip ComfyUI Metadata?")).then((h) => {
+ h && v1(c);
}).catch(() => {
});
} catch (l) {
@@ -25519,8 +25546,8 @@ ${I}`;
let t = tm.get(e);
return t || (t = { node: null, prev: null }, tm.set(e, t)), t;
}, nm = (e, t, n) => {
- var S, Z, C;
- const i = ((S = e == null ? void 0 : e.canvas) == null ? void 0 : S.canvas) || document.querySelector("canvas"), o = (Z = e == null ? void 0 : e.canvas) == null ? void 0 : Z.graph, r = (C = e == null ? void 0 : e.canvas) == null ? void 0 : C.ds;
+ var h, S, W;
+ const i = ((h = e == null ? void 0 : e.canvas) == null ? void 0 : h.canvas) || document.querySelector("canvas"), o = (S = e == null ? void 0 : e.canvas) == null ? void 0 : S.graph, r = (W = e == null ? void 0 : e.canvas) == null ? void 0 : W.ds;
if (!i || !o || !r) return null;
const l = i.getBoundingClientRect();
if (t < l.left || t > l.right || n < l.top || n > l.bottom)
@@ -25528,17 +25555,17 @@ ${I}`;
const a = Number(r.scale) || 1, c = r.offset || [0, 0], s = Array.isArray(c) ? Number(c[0]) || 0 : Number(c == null ? void 0 : c.x) || 0, d = Array.isArray(c) ? Number(c[1]) || 0 : Number(c == null ? void 0 : c.y) || 0, u = (t - l.left) / a - s, I = (n - l.top) / a - d;
if (typeof o.getNodeOnPos == "function")
return o.getNodeOnPos(u, I);
- const y = o._nodes || [];
- for (let g = y.length - 1; g >= 0; g--) {
- const A = y[g];
- if (!(A != null && A.pos) || !(A != null && A.size)) continue;
- const p = A.size[0];
- let b = A.size[1];
- if (A.flags && A.flags.collapsed && (b = 30), u >= A.pos[0] && I >= A.pos[1] && u <= A.pos[0] + p && I <= A.pos[1] + b)
- return A;
+ const A = o._nodes || [];
+ for (let g = A.length - 1; g >= 0; g--) {
+ const y = A[g];
+ if (!(y != null && y.pos) || !(y != null && y.size)) continue;
+ const p = y.size[0];
+ let b = y.size[1];
+ if (y.flags && y.flags.collapsed && (b = 30), u >= y.pos[0] && I >= y.pos[1] && u <= y.pos[0] + p && I <= y.pos[1] + b)
+ return y;
}
return null;
-}, Y1 = (e, t, n) => {
+}, V1 = (e, t, n) => {
const i = jb(e);
!t || i.node === t || (br(e, n), i.node = t, i.prev = { color: t.color, bgcolor: t.bgcolor }, t.bgcolor = "#3355ff", t.color = "#a9c4ff", n(e));
}, br = (e, t) => {
@@ -25552,7 +25579,7 @@ ${I}`;
}
n.node = null, n.prev = null, t(e);
}
-}, k1 = (e, t) => {
+}, X1 = (e, t) => {
if (!e || e.type !== "combo" || !e.options) return;
let n = e.options.values, i = e.options;
if (typeof n == "function")
@@ -25563,7 +25590,7 @@ ${I}`;
else
return;
n.some((r) => typeof r == "string" ? r === t : ((r == null ? void 0 : r.content) ?? (r == null ? void 0 : r.value) ?? (r == null ? void 0 : r.text)) === t) || (n.length === 0 || typeof n[0] == "string" ? n.unshift(t) : n.unshift({ content: t, text: t, value: t }), i.values = n);
-}, X1 = /* @__PURE__ */ new Set(["number", "int", "float", "boolean", "toggle", "checkbox"]), N1 = ["output", "save", "export", "folder", "dir"], R1 = ["file", "path"], F1 = ["path", "file", "input", "src", "source"], O1 = (e, t, n) => {
+}, N1 = /* @__PURE__ */ new Set(["number", "int", "float", "boolean", "toggle", "checkbox"]), k1 = ["output", "save", "export", "folder", "dir"], R1 = ["file", "path"], O1 = ["path", "file", "input", "src", "source"], F1 = (e, t, n) => {
var s;
const i = e == null ? void 0 : e.widgets;
if (!Array.isArray(i) || !i.length) return null;
@@ -25571,19 +25598,19 @@ ${I}`;
for (const d of i) {
if (!d) continue;
const u = String((d == null ? void 0 : d.type) || "").toLowerCase(), I = d == null ? void 0 : d.value;
- if (X1.has(u) || typeof I == "number" || typeof I == "boolean") continue;
- const y = u === "text" || u === "string" || u === "combo", S = typeof (d == null ? void 0 : d.callback) == "function" && typeof I == "string";
- if (!y && !S) continue;
- const Z = String((d == null ? void 0 : d.name) || (d == null ? void 0 : d.label) || "").toLowerCase().trim();
- let C = 0;
- n.exactNames.has(Z) && (C += 100), Z === "file" && l && u === "combo" && n.comboChecker(d, o) && (C += 100);
- const g = n.mediaTerms.some((b) => Z.includes(b)), A = F1.some((b) => Z.includes(b));
- g && A && (C += 80), R1.some((b) => Z.includes(b)) && (C += 35);
+ if (N1.has(u) || typeof I == "number" || typeof I == "boolean") continue;
+ const A = u === "text" || u === "string" || u === "combo", h = typeof (d == null ? void 0 : d.callback) == "function" && typeof I == "string";
+ if (!A && !h) continue;
+ const S = String((d == null ? void 0 : d.name) || (d == null ? void 0 : d.label) || "").toLowerCase().trim();
+ let W = 0;
+ n.exactNames.has(S) && (W += 100), S === "file" && l && u === "combo" && n.comboChecker(d, o) && (W += 100);
+ const g = n.mediaTerms.some((b) => S.includes(b)), y = O1.some((b) => S.includes(b));
+ g && y && (W += 80), R1.some((b) => S.includes(b)) && (W += 35);
for (const { terms: b, score: L } of n.extraTerms)
- b.some((h) => Z.includes(h)) && (C += L);
- N1.some((b) => Z.includes(b)) && (C -= 90), n.exactSingleNames.has(Z) && (typeof I == "string" && I.trim() === "" || n.looksLikeFn(I, o) ? C += 25 : C -= 10), l && (C += 15);
+ b.some((C) => S.includes(C)) && (W += L);
+ k1.some((b) => S.includes(b)) && (W -= 90), n.exactSingleNames.has(S) && (typeof I == "string" && I.trim() === "" || n.looksLikeFn(I, o) ? W += 25 : W -= 10), l && (W += 15);
const p = typeof I == "string" && I.trim() === "";
- p && (C += 3), u === "combo" && n.comboChecker(d, o) && (C += 12), a.push({ w: d, score: C, emptyValue: p, combo: u === "combo" });
+ p && (W += 3), u === "combo" && n.comboChecker(d, o) && (W += 12), a.push({ w: d, score: W, emptyValue: p, combo: u === "combo" });
}
if (!a.length) return null;
a.sort((d, u) => u.score !== d.score ? u.score - d.score : u.emptyValue !== d.emptyValue ? u.emptyValue ? 1 : -1 : u.combo !== d.combo ? u.combo ? 1 : -1 : 0);
@@ -25619,10 +25646,10 @@ ${I}`;
mediaTerms: ["audio", "sound", "music"],
extraTerms: [{ terms: ["media", "track"], score: 45 }],
exactSingleNames: /* @__PURE__ */ new Set(["audio"]),
- looksLikeFn: Sb,
+ looksLikeFn: Gb,
comboChecker: y1,
scoreKey: "__mjrAudioPickScore"
-}, B1 = {
+}, K1 = {
exactNames: /* @__PURE__ */ new Set([
"model_path",
"input_model",
@@ -25653,13 +25680,13 @@ ${I}`;
mediaTerms: ["model", "mesh", "geometry", "scene", "object", "point", "cloud", "splat"],
extraTerms: [{ terms: ["asset", "resource"], score: 30 }],
exactSingleNames: /* @__PURE__ */ new Set(["model", "mesh", "geometry"]),
- looksLikeFn: Gb,
+ looksLikeFn: Sb,
comboChecker: f1,
scoreKey: "__mjrModel3DPickScore"
}, im = (e, t, n) => {
const i = String((t == null ? void 0 : t.kind) || "").toLowerCase();
- return O1(e, n, i === "model3d" ? B1 : i === "audio" ? T1 : i === "image" ? J1 : z1);
-}, U1 = async ({ post: e, endpoint: t, payload: n, index: i = !0, purpose: o = null }) => {
+ return F1(e, n, i === "model3d" ? K1 : i === "audio" ? T1 : i === "image" ? J1 : z1);
+}, B1 = async ({ post: e, endpoint: t, payload: n, index: i = !0, purpose: o = null }) => {
const r = {
index: !!i,
files: [
@@ -25681,7 +25708,7 @@ ${I}`;
purpose: o = null
}) => {
var c;
- const r = await U1({ post: e, endpoint: t, payload: n, index: i, purpose: o });
+ const r = await B1({ post: e, endpoint: t, payload: n, index: i, purpose: o });
if (!(r != null && r.ok))
return console.warn("Majoor: stage-to-input failed", (r == null ? void 0 : r.error) || r), null;
const l = Array.isArray((c = r.data) == null ? void 0 : c.staged) ? r.data.staged[0] : null;
@@ -25691,13 +25718,13 @@ ${I}`;
name: (l == null ? void 0 : l.name) || null,
subfolder: (l == null ? void 0 : l.subfolder) || ""
} : null;
-}, K1 = async ({ post: e, endpoint: t, payload: n, index: i = !0, purpose: o = null }) => {
+}, U1 = async ({ post: e, endpoint: t, payload: n, index: i = !0, purpose: o = null }) => {
const r = await vb({ post: e, endpoint: t, payload: n, index: i, purpose: o });
return (r == null ? void 0 : r.relativePath) || null;
}, al = () => {
const e = Qn();
return e && typeof e == "object" ? e : null;
-}, D1 = (e) => i1(e, { buildCustomViewURL: mg, buildViewURL: ul }), po = /* @__PURE__ */ new Map(), Lb = 6e4, om = 20, E1 = 5 * 1024 * 1024, H1 = 5e3, q1 = 2e4, P1 = 256, Q1 = 8192, _1 = /[\u0000-\u001f\u007f]/, $1 = /\u0000/, ew = (e) => _1.test(String(e || "")), tw = (e) => $1.test(String(e || "")), nw = (e) => {
+}, D1 = (e) => i1(e, { buildCustomViewURL: mg, buildViewURL: ul }), po = /* @__PURE__ */ new Map(), Lb = 6e4, om = 20, H1 = 5 * 1024 * 1024, E1 = 5e3, q1 = 2e4, P1 = 256, Q1 = 8192, _1 = /[\u0000-\u001f\u007f]/, $1 = /\u0000/, ew = (e) => _1.test(String(e || "")), tw = (e) => $1.test(String(e || "")), nw = (e) => {
if (!e || typeof e != "object" || Array.isArray(e)) return !1;
const t = Number(e.id);
if (!Number.isFinite(t)) return !1;
@@ -25719,10 +25746,10 @@ ${I}`;
}
return !1;
}, rm = (e) => {
- if (!e || typeof e != "object" || !Array.isArray(e.nodes) || !Array.isArray(e.links) || e.nodes.length > H1 || e.links.length > q1 || !e.nodes.every(nw) || !e.links.every(iw)) return !1;
+ if (!e || typeof e != "object" || !Array.isArray(e.nodes) || !Array.isArray(e.links) || e.nodes.length > E1 || e.links.length > q1 || !e.nodes.every(nw) || !e.links.every(iw)) return !1;
try {
const t = JSON.stringify(e).length;
- if (!Number.isFinite(t) || t <= 0 || t > E1) return !1;
+ if (!Number.isFinite(t) || t <= 0 || t > H1) return !1;
} catch {
return !1;
}
@@ -25750,67 +25777,67 @@ ${I}`;
(o = console.debug) == null || o.call(console, r);
}
}, rw = async (e, t = null) => {
- var a, c, s, d, u, I, y, S, Z, C, g, A, p, b, L;
+ var a, c, s, d, u, I, A, h, S, W, g, y, p, b, L;
const n = e && typeof e == "object" ? e : null, i = Mi(n), o = (n == null ? void 0 : n.filename) || (t ? String(t).split(/[\\/]/).pop() : null), r = al(), l = n != null && n.filename ? `${n.type || "output"}:${n.filename}:${n.subfolder || ""}:${i}` : t ? `path:${t}` : null;
if (l) {
- const h = po.get(l), G = Date.now();
- if (h && G - (h.at || 0) < Lb) {
- if (h.workflow && rm(h.workflow))
+ const C = po.get(l), G = Date.now();
+ if (C && G - (C.at || 0) < Lb) {
+ if (C.workflow && rm(C.workflow))
try {
if (typeof (r == null ? void 0 : r.loadGraphData) == "function")
- return r.loadGraphData(h.workflow), nr(r, o), !0;
+ return r.loadGraphData(C.workflow), nr(r, o), !0;
if (typeof ((c = (a = r == null ? void 0 : r.canvas) == null ? void 0 : a.graph) == null ? void 0 : c.configure) == "function") {
- r.canvas.graph.configure(h.workflow), nr(r, o);
+ r.canvas.graph.configure(C.workflow), nr(r, o);
try {
(d = (s = r.canvas).setDirty) == null || d.call(s, !0, !0);
- } catch (W) {
- (u = console.debug) == null || u.call(console, W);
+ } catch (Z) {
+ (u = console.debug) == null || u.call(console, Z);
}
return !0;
}
if (typeof ((I = r == null ? void 0 : r.graph) == null ? void 0 : I.configure) == "function")
- return r.graph.configure(h.workflow), nr(r, o), !0;
- } catch (W) {
- (y = console.debug) == null || y.call(console, W);
+ return r.graph.configure(C.workflow), nr(r, o), !0;
+ } catch (Z) {
+ (A = console.debug) == null || A.call(console, Z);
}
return !1;
}
}
try {
- let h = null, G = null;
+ let C = null, G = null;
if (n != null && n.filename) {
- const W = `${ct.WORKFLOW_QUICK}?type=${encodeURIComponent(n.type || "output")}&filename=${encodeURIComponent(n.filename)}&subfolder=${encodeURIComponent(n.subfolder || "")}` + (i ? `&root_id=${encodeURIComponent(i)}` : ""), f = await Ft(W);
- f != null && f.ok && f.workflow && (G = f.workflow), G || (h = `${ct.METADATA}?workflow_only=1&type=${encodeURIComponent(n.type || "output")}&filename=${encodeURIComponent(n.filename)}&subfolder=${encodeURIComponent(n.subfolder || "")}&root_id=${encodeURIComponent(i)}`);
- } else t && (h = `${ct.METADATA}?workflow_only=1&path=${encodeURIComponent(String(t))}`);
- if (!G && h) {
- const W = await Ft(h);
- if (!(W != null && W.ok) || !W.data)
+ const Z = `${st.WORKFLOW_QUICK}?type=${encodeURIComponent(n.type || "output")}&filename=${encodeURIComponent(n.filename)}&subfolder=${encodeURIComponent(n.subfolder || "")}` + (i ? `&root_id=${encodeURIComponent(i)}` : ""), f = await Ft(Z);
+ f != null && f.ok && f.workflow && (G = f.workflow), G || (C = `${st.METADATA}?workflow_only=1&type=${encodeURIComponent(n.type || "output")}&filename=${encodeURIComponent(n.filename)}&subfolder=${encodeURIComponent(n.subfolder || "")}&root_id=${encodeURIComponent(i)}`);
+ } else t && (C = `${st.METADATA}?workflow_only=1&path=${encodeURIComponent(String(t))}`);
+ if (!G && C) {
+ const Z = await Ft(C);
+ if (!(Z != null && Z.ok) || !Z.data)
return !1;
- G = (S = W.data) == null ? void 0 : S.workflow;
+ G = (h = Z.data) == null ? void 0 : h.workflow;
}
if (!rm(G))
return !1;
if (l && (po.set(l, { workflow: G, at: Date.now() }), ow()), typeof (r == null ? void 0 : r.loadGraphData) == "function")
return r.loadGraphData(G), nr(r, o), !0;
- if (typeof ((C = (Z = r == null ? void 0 : r.canvas) == null ? void 0 : Z.graph) == null ? void 0 : C.configure) == "function") {
+ if (typeof ((W = (S = r == null ? void 0 : r.canvas) == null ? void 0 : S.graph) == null ? void 0 : W.configure) == "function") {
r.canvas.graph.configure(G), nr(r, o);
try {
- (A = (g = r.canvas).setDirty) == null || A.call(g, !0, !0);
- } catch (W) {
- (p = console.debug) == null || p.call(console, W);
+ (y = (g = r.canvas).setDirty) == null || y.call(g, !0, !0);
+ } catch (Z) {
+ (p = console.debug) == null || p.call(console, Z);
}
return !0;
}
if (typeof ((b = r == null ? void 0 : r.graph) == null ? void 0 : b.configure) == "function")
return r.graph.configure(G), nr(r, o), !0;
- } catch (h) {
- (L = console.debug) == null || L.call(console, h);
+ } catch (C) {
+ (L = console.debug) == null || L.call(console, C);
}
return !1;
};
function lw(e) {
return (t) => {
- var s, d, u, I, y;
+ var s, d, u, I, A;
const n = t == null ? void 0 : t.dataTransfer;
if (!n) return;
const i = (d = (s = t == null ? void 0 : t.target) == null ? void 0 : s.closest) == null ? void 0 : d.call(s, ".mjr-asset-card");
@@ -25826,39 +25853,39 @@ function lw(e) {
};
try {
n.setData(Qr, JSON.stringify(a)), n.setData("text/plain", String(o.filename || ""));
- const S = D1(a);
- L1({ dt: n, asset: o, containerEl: e, card: i, viewUrl: S });
- } catch (S) {
- (u = console.debug) == null || u.call(console, S);
+ const h = D1(a);
+ L1({ dt: n, asset: o, containerEl: e, card: i, viewUrl: h });
+ } catch (h) {
+ (u = console.debug) == null || u.call(console, h);
}
try {
i.addEventListener(
"dragend",
- (S) => {
- V1(S, { asset: o, containerEl: e, card: i });
+ (h) => {
+ Y1(h, { asset: o, containerEl: e, card: i });
},
{ once: !0 }
);
- } catch (S) {
- (I = console.debug) == null || I.call(console, S);
+ } catch (h) {
+ (I = console.debug) == null || I.call(console, h);
}
const c = i.querySelector("img") || i.querySelector("video") || i.querySelector("canvas");
if (c && c instanceof HTMLElement)
try {
n.setDragImage(c, 10, 10);
- } catch (S) {
- (y = console.debug) == null || y.call(console, S);
+ } catch (h) {
+ (A = console.debug) == null || A.call(console, h);
}
};
}
const aw = (e) => {
if (!e) return () => {
};
- const t = h1(e);
+ const t = C1(e);
if (typeof t == "function")
return t;
const n = lw(e);
- return e.addEventListener("dragstart", n, !0), C1(e, () => {
+ return e.addEventListener("dragstart", n, !0), h1(e, () => {
var o;
try {
e.removeEventListener("dragstart", n, !0);
@@ -25879,13 +25906,13 @@ function cw() {
if (!_u(l)) return;
const a = nm(o, i.clientX, i.clientY), c = String((l == null ? void 0 : l.filename) || "").split(".").pop() || "", s = a ? im(a, l, c) : null;
if (a && s) {
- i.preventDefault(), (u = i.stopImmediatePropagation) == null || u.call(i), i.stopPropagation(), Y1(o, a, Yo), i.dataTransfer.dropEffect = "copy", tr("dragover", { node: a == null ? void 0 : a.title, widget: s == null ? void 0 : s.name });
+ i.preventDefault(), (u = i.stopImmediatePropagation) == null || u.call(i), i.stopPropagation(), V1(o, a, Vo), i.dataTransfer.dropEffect = "copy", tr("dragover", { node: a == null ? void 0 : a.title, widget: s == null ? void 0 : s.name });
return;
}
- br(o, Yo), em(o, i) && (i.preventDefault(), i.dataTransfer.dropEffect = "copy");
+ br(o, Vo), em(o, i) && (i.preventDefault(), i.dataTransfer.dropEffect = "copy");
},
onDrop: async (i) => {
- var u, I, y, S, Z;
+ var u, I, A, h, S;
A1();
const o = al();
if (!Array.from(((u = i == null ? void 0 : i.dataTransfer) == null ? void 0 : u.types) || []).includes(Qr)) return;
@@ -25893,45 +25920,45 @@ function cw() {
if (!_u(l) || !em(o, i)) return;
const a = nm(o, i.clientX, i.clientY), c = String((l == null ? void 0 : l.filename) || "").split(".").pop() || "", s = a ? im(a, l, c) : null;
if (!a || !s) {
- br(o, Yo), i.preventDefault(), (I = i.stopImmediatePropagation) == null || I.call(i), i.stopPropagation();
- const C = vb({
- post: Et,
- endpoint: ct.STAGE_TO_INPUT,
+ br(o, Vo), i.preventDefault(), (I = i.stopImmediatePropagation) == null || I.call(i), i.stopPropagation();
+ const W = vb({
+ post: Dt,
+ endpoint: st.STAGE_TO_INPUT,
payload: l,
index: !1
- }), g = rw(l), [A, p] = await Promise.all([g, C]);
- if (A) {
+ }), g = rw(l), [y, p] = await Promise.all([g, W]);
+ if (y) {
tr("drop canvas loaded workflow", { file: l == null ? void 0 : l.filename });
return;
}
const b = p == null ? void 0 : p.relativePath;
if (!b) {
- tr("drop canvas stage failed"), Ze(`Failed to load file: "${l == null ? void 0 : l.filename}". Staging failed.`, "error");
+ tr("drop canvas stage failed"), Ae(`Failed to load file: "${l == null ? void 0 : l.filename}". Staging failed.`, "error");
return;
}
- tr("drop canvas staged", { value: b }), Ze(`Staged to input: ${b}`, "success", 4e3);
+ tr("drop canvas staged", { value: b }), Ae(`Staged to input: ${b}`, "success", 4e3);
return;
}
- i.preventDefault(), (y = i.stopImmediatePropagation) == null || y.call(i), i.stopPropagation(), br(o, Yo);
- const d = await K1({
- post: Et,
- endpoint: ct.STAGE_TO_INPUT,
+ i.preventDefault(), (A = i.stopImmediatePropagation) == null || A.call(i), i.stopPropagation(), br(o, Vo);
+ const d = await U1({
+ post: Dt,
+ endpoint: st.STAGE_TO_INPUT,
payload: l,
index: !1
});
if (d) {
- s.type === "combo" && k1(s, d), s.value = d;
+ s.type === "combo" && X1(s, d), s.value = d;
try {
- (S = s.callback) == null || S.call(s, s.value);
- } catch (C) {
- (Z = console.debug) == null || Z.call(console, C);
+ (h = s.callback) == null || h.call(s, s.value);
+ } catch (W) {
+ (S = console.debug) == null || S.call(console, W);
}
- Yo(o), tr("drop inject", { node: a == null ? void 0 : a.title, widget: s == null ? void 0 : s.name, value: d });
+ Vo(o), tr("drop inject", { node: a == null ? void 0 : a.title, widget: s == null ? void 0 : s.name, value: d });
}
},
onDragLeave: () => {
const i = al();
- br(i, Yo), tr("dragleave");
+ br(i, Vo), tr("dragleave");
}
};
}
@@ -25948,7 +25975,7 @@ function sw() {
(o = console.debug) == null || o.call(console, l);
}
try {
- br(al(), Yo);
+ br(al(), Vo);
} catch (l) {
(r = console.debug) == null || r.call(console, l);
}
@@ -25958,10 +25985,10 @@ function dw() {
Ro || (Ro = sw(), pr = 0), pr += 1;
let e = !1;
return ({ force: t = !1 } = {}) => {
- e || (e = !0, Vb({ force: t }));
+ e || (e = !0, Yb({ force: t }));
};
}
-function Vb({ force: e = !1 } = {}) {
+function Yb({ force: e = !1 } = {}) {
var t, n;
if (!Ro) {
pr = 0, $u();
@@ -25979,7 +26006,7 @@ function Vb({ force: e = !1 } = {}) {
}
Ro = null, $u();
}
-function Yb(e) {
+function Vb(e) {
if (!e) return null;
const t = Number(e);
if (!isNaN(t))
@@ -25987,153 +26014,153 @@ function Yb(e) {
const n = new Date(e);
return isNaN(n.getTime()) ? null : n;
}
-function za(e) {
- const t = Yb(e);
+function Ja(e) {
+ const t = Vb(e);
if (!t) return "";
const n = t.getDate().toString().padStart(2, "0"), i = (t.getMonth() + 1).toString().padStart(2, "0");
return `${n}/${i}`;
}
-function Ja(e) {
- const t = Yb(e);
+function Ta(e) {
+ const t = Vb(e);
if (!t) return "";
const n = t.getHours().toString().padStart(2, "0"), i = t.getMinutes().toString().padStart(2, "0");
return `${n}:${i}`;
}
-function kb(e) {
+function Xb(e) {
if (!e) return "";
if (e < 60) return `${Math.round(e)}s`;
const t = Math.floor(e / 60), n = Math.round(e % 60);
return `${t}m ${n}s`;
}
-const Kl = "__MJR_MEDIA_BLOB_CACHE__", lm = 2e3, Sc = 1440 * 60 * 1e3, uw = 600 * 1e3;
+const Ul = "__MJR_MEDIA_BLOB_CACHE__", lm = 2e3, Sc = 1440 * 60 * 1e3, uw = 600 * 1e3;
function mw() {
- var y;
+ var A;
const e = /* @__PURE__ */ new Map();
let t = null;
function n() {
t || (t = setInterval(i, uw));
}
function i() {
- var S;
+ var h;
try {
- const Z = Date.now();
- for (const [C, g] of e)
- g.refcount <= 0 && Z > g.expiresAt && (o(g), e.delete(C));
- } catch (Z) {
- (S = console.debug) == null || S.call(console, Z);
+ const S = Date.now();
+ for (const [W, g] of e)
+ g.refcount <= 0 && S > g.expiresAt && (o(g), e.delete(W));
+ } catch (S) {
+ (h = console.debug) == null || h.call(console, S);
}
}
- function o(S) {
- var Z, C;
+ function o(h) {
+ var S, W;
try {
- (Z = S == null ? void 0 : S.blobUrl) != null && Z.startsWith("blob:") && URL.revokeObjectURL(S.blobUrl);
+ (S = h == null ? void 0 : h.blobUrl) != null && S.startsWith("blob:") && URL.revokeObjectURL(h.blobUrl);
} catch (g) {
- (C = console.debug) == null || C.call(console, g);
+ (W = console.debug) == null || W.call(console, g);
}
}
function r() {
- let S = null, Z = 1 / 0;
- for (const [C, g] of e)
- g.refcount > 0 || g.expiresAt < Z && (Z = g.expiresAt, S = C);
- S && (o(e.get(S)), e.delete(S));
+ let h = null, S = 1 / 0;
+ for (const [W, g] of e)
+ g.refcount > 0 || g.expiresAt < S && (S = g.expiresAt, h = W);
+ h && (o(e.get(h)), e.delete(h));
}
- function l(S) {
- S.expiresAt = Date.now() + Sc;
+ function l(h) {
+ h.expiresAt = Date.now() + Sc;
}
- function a(S) {
+ function a(h) {
try {
- return String(S || "").trim();
+ return String(h || "").trim();
} catch {
return "";
}
}
- function c(S) {
- var Z;
+ function c(h) {
+ var S;
try {
- const C = a(S);
- if (!C) return;
- const g = e.get(C);
- g ? (g.hasError = !0, l(g)) : (e.size >= lm && r(), e.set(C, { blobUrl: null, refcount: 0, expiresAt: Date.now() + Sc, hasError: !0 }), n());
- } catch (C) {
- (Z = console.debug) == null || Z.call(console, C);
+ const W = a(h);
+ if (!W) return;
+ const g = e.get(W);
+ g ? (g.hasError = !0, l(g)) : (e.size >= lm && r(), e.set(W, { blobUrl: null, refcount: 0, expiresAt: Date.now() + Sc, hasError: !0 }), n());
+ } catch (W) {
+ (S = console.debug) == null || S.call(console, W);
}
}
- function s(S) {
- var Z, C;
+ function s(h) {
+ var S, W;
try {
- const g = a(S);
- return g ? !!((Z = e.get(g)) != null && Z.hasError) : !1;
+ const g = a(h);
+ return g ? !!((S = e.get(g)) != null && S.hasError) : !1;
} catch (g) {
- return (C = console.debug) == null || C.call(console, g), !1;
+ return (W = console.debug) == null || W.call(console, g), !1;
}
}
- async function d(S) {
- var Z;
+ async function d(h) {
+ var S;
try {
- const C = a(S);
- if (!C) return null;
- const g = e.get(C);
+ const W = a(h);
+ if (!W) return null;
+ const g = e.get(W);
if (g != null && g.hasError) return null;
if (g != null && g.blobUrl)
return g.refcount += 1, l(g), g.blobUrl;
- const A = await fetch(S, { credentials: "same-origin" });
- if (!A.ok)
- return c(S), null;
- const p = await A.blob(), b = URL.createObjectURL(p);
- return e.size >= lm && r(), e.set(C, { blobUrl: b, refcount: 1, expiresAt: Date.now() + Sc, hasError: !1 }), n(), b;
- } catch (C) {
- return (Z = console.debug) == null || Z.call(console, C), c(S), null;
+ const y = await fetch(h, { credentials: "same-origin" });
+ if (!y.ok)
+ return c(h), null;
+ const p = await y.blob(), b = URL.createObjectURL(p);
+ return e.size >= lm && r(), e.set(W, { blobUrl: b, refcount: 1, expiresAt: Date.now() + Sc, hasError: !1 }), n(), b;
+ } catch (W) {
+ return (S = console.debug) == null || S.call(console, W), c(h), null;
}
}
- function u(S) {
- var Z;
+ function u(h) {
+ var S;
try {
- const C = a(S);
- if (!C) return;
- const g = e.get(C);
+ const W = a(h);
+ if (!W) return;
+ const g = e.get(W);
g && (g.refcount = Math.max(0, g.refcount - 1));
- } catch (C) {
- (Z = console.debug) == null || Z.call(console, C);
+ } catch (W) {
+ (S = console.debug) == null || S.call(console, W);
}
}
function I() {
- var S;
+ var h;
try {
t && (clearInterval(t), t = null);
- for (const Z of e.values()) o(Z);
+ for (const S of e.values()) o(S);
e.clear();
- } catch (Z) {
- (S = console.debug) == null || S.call(console, Z);
+ } catch (S) {
+ (h = console.debug) == null || h.call(console, S);
}
}
try {
window.addEventListener("beforeunload", I, { once: !0 });
- } catch (S) {
- (y = console.debug) == null || y.call(console, S);
+ } catch (h) {
+ (A = console.debug) == null || A.call(console, h);
}
return { markError: c, hasError: s, acquireUrl: d, releaseUrl: u, dispose: I };
}
function gw() {
var t, n, i, o, r;
try {
- if (window[Kl]) return window[Kl];
+ if (window[Ul]) return window[Ul];
} catch (l) {
(t = console.debug) == null || t.call(console, l);
}
try {
- (i = (n = window[Kl]) == null ? void 0 : n.dispose) == null || i.call(n);
+ (i = (n = window[Ul]) == null ? void 0 : n.dispose) == null || i.call(n);
} catch (l) {
(o = console.debug) == null || o.call(console, l);
}
const e = mw();
try {
- window[Kl] = e;
+ window[Ul] = e;
} catch (l) {
(r = console.debug) == null || r.call(console, l);
}
return e;
}
-const Jr = gw(), Vr = (e, t) => {
+const Jr = gw(), Yr = (e, t) => {
const n = e.__vccOpts || e;
for (const [i, o] of t)
n[i] = o;
@@ -26154,21 +26181,21 @@ const Jr = gw(), Vr = (e, t) => {
const t = e, n = ze(() => Math.max(0, Math.min(5, Number(t.rating) || 0))), i = ze(() => n.value > 0), o = ze(
() => m("rating.title", "Rating: {n} star{n, plural, one {} other {s}}", { n: n.value })
);
- return (r, l) => i.value ? (be(), Ce("div", {
+ return (r, l) => i.value ? (be(), Ze("div", {
key: 0,
class: "mjr-rating-badge",
title: o.value
}, [
- (be(!0), Ce(Nt, null, Cn(n.value, (a) => (be(), Ce("span", {
+ (be(!0), Ze(Nt, null, Zn(n.value, (a) => (be(), Ze("span", {
key: a,
- style: Lt({
+ style: vt({
color: "var(--mjr-rating-color, var(--mjr-star-active, #FFD45A))",
marginRight: a < n.value ? "2px" : "0"
})
}, " ★ ", 4))), 128))
- ], 8, Iw)) : ft("", !0);
+ ], 8, Iw)) : yt("", !0);
}
-}, pw = /* @__PURE__ */ Vr(bw, [["__scopeId", "data-v-821bf1b1"]]), yw = ["title"], fw = {
+}, pw = /* @__PURE__ */ Yr(bw, [["__scopeId", "data-v-821bf1b1"]]), yw = ["title"], fw = {
__name: "TagsBadge",
props: {
tags: {
@@ -26196,35 +26223,35 @@ const Jr = gw(), Vr = (e, t) => {
const l = n.value;
return l.length <= 5 ? l.join(", ") : l.slice(0, 5).join(", ") + ` +${l.length - 5}`;
});
- return (l, a) => i.value ? (be(), Ce("div", {
+ return (l, a) => i.value ? (be(), Ze("div", {
key: 0,
class: "mjr-tags-badge",
title: o.value,
style: { color: "var(--mjr-tag-color, #90CAF9)" }
- }, Ye(r.value), 9, yw)) : ft("", !0);
+ }, Ne(r.value), 9, yw)) : yt("", !0);
}
-}, hw = /* @__PURE__ */ Vr(fw, [["__scopeId", "data-v-15044260"]]), Cw = ["title"], Zw = {
+}, Cw = /* @__PURE__ */ Yr(fw, [["__scopeId", "data-v-15044260"]]), hw = ["title"], Zw = {
__name: "GenTimeBadge",
props: {
genTimeMs: { type: [Number, String], default: 0 }
},
setup(e) {
const t = e, n = ze(() => od(t.genTimeMs)), i = ze(() => n.value > 0), o = ze(() => zI(n.value)), r = ze(() => id(n.value));
- return (l, a) => i.value ? (be(), Ce("div", {
+ return (l, a) => i.value ? (be(), Ze("div", {
key: 0,
class: "mjr-gentime-badge",
title: o.value.title,
- style: Lt({ color: r.value })
- }, Ye(o.value.text), 13, Cw)) : ft("", !0);
+ style: vt({ color: r.value })
+ }, Ne(o.value.text), 13, hw)) : yt("", !0);
}
-}, Aw = /* @__PURE__ */ Vr(Zw, [["__scopeId", "data-v-60fe3677"]]), Ww = {
+}, Aw = /* @__PURE__ */ Yr(Zw, [["__scopeId", "data-v-60fe3677"]]), Ww = {
key: 0,
class: "mjr-live-placeholder-wash",
"aria-hidden": "true"
}, ww = ["alt", "src"], Mw = {
key: 1,
class: "mjr-media-error-placeholder"
-}, Sw = ["data-src", "poster"], Gw = ["src"], xw = {
+}, Gw = ["data-src", "poster"], Sw = ["src"], xw = {
class: "mjr-audio-waveform-overlay",
style: { position: "absolute", inset: "0", display: "flex", "align-items": "center", "justify-content": "center", "pointer-events": "none", color: "white" }
}, jw = {
@@ -26237,22 +26264,22 @@ const Jr = gw(), Vr = (e, t) => {
key: 4,
class: "mjr-model3d-thumb-icon",
style: { position: "absolute", inset: "0", display: "flex", "align-items": "center", "justify-content": "center", color: "rgba(255,255,255,0.7)" }
-}, Vw = ["data-mjr-ext", "data-mjr-badge-bg", "title"], Yw = ["title"], kw = {
+}, Yw = ["data-mjr-ext", "data-mjr-badge-bg", "title"], Vw = ["title"], Xw = {
key: 6,
class: "mjr-card-hover-info"
-}, Xw = {
+}, Nw = {
key: 0,
class: "mjr-hover-prompt"
-}, Nw = {
+}, kw = {
key: 1,
class: "mjr-hover-gentime"
}, Rw = {
class: "mjr-card-info mjr-card-meta",
style: { position: "relative", padding: "6px 8px", "min-width": "0" }
-}, Fw = ["title"], Ow = {
+}, Ow = ["title"], Fw = {
class: "mjr-card-meta-row",
style: { "font-size": "0.85em", opacity: "0.7", "line-height": "1.4", "white-space": "nowrap", overflow: "hidden", "text-overflow": "ellipsis", "padding-right": "16px" }
-}, zw = ["title"], Jw = ["title"], Tw = ["title"], Bw = ["title"], Uw = ["title"], Kw = ["aria-label", "title"], Dw = { class: "mjr-stack-group-button-count" }, Ew = ["aria-label", "title"], Hw = { class: "mjr-dup-stack-count" }, am = {
+}, zw = ["title"], Jw = ["title"], Tw = ["title"], Kw = ["title"], Bw = ["title"], Uw = ["aria-label", "title"], Dw = { class: "mjr-stack-group-button-count" }, Hw = ["aria-label", "title"], Ew = { class: "mjr-dup-stack-count" }, am = {
__name: "AssetCardInner",
props: {
/** shallowReactive asset object from createVueCard() in GridView_impl.js */
@@ -26286,22 +26313,22 @@ const Jr = gw(), Vr = (e, t) => {
}
}
async function o(Q) {
- var _, le, de, se, ge;
+ var _, le, ce, de, ge;
if (Q)
try {
- const je = String(((_ = Q.dataset) == null ? void 0 : _.src) || "").trim();
- if (!je || Q.getAttribute("src")) return;
- if (Jr.hasError(je)) {
- Q.src = je;
+ const Le = String(((_ = Q.dataset) == null ? void 0 : _.src) || "").trim();
+ if (!Le || Q.getAttribute("src")) return;
+ if (Jr.hasError(Le)) {
+ Q.src = Le;
return;
}
- const Se = await Jr.acquireUrl(je);
- Se ? (Q.src = Se, Q._mjrCachedSrc = je) : Q.src = je, (le = Q.load) == null || le.call(Q);
- } catch (je) {
- (de = console.debug) == null || de.call(console, je);
+ const xe = await Jr.acquireUrl(Le);
+ xe ? (Q.src = xe, Q._mjrCachedSrc = Le) : Q.src = Le, (le = Q.load) == null || le.call(Q);
+ } catch (Le) {
+ (ce = console.debug) == null || ce.call(console, Le);
try {
- const Se = String(((se = Q.dataset) == null ? void 0 : se.src) || "").trim();
- Se && !Q.getAttribute("src") && (Q.src = Se, (ge = Q.load) == null || ge.call(Q));
+ const xe = String(((de = Q.dataset) == null ? void 0 : de.src) || "").trim();
+ xe && !Q.getAttribute("src") && (Q.src = xe, (ge = Q.load) == null || ge.call(Q));
} catch {
}
}
@@ -26309,27 +26336,27 @@ const Jr = gw(), Vr = (e, t) => {
function r(Q, _) {
if (!Q || !_) return;
const le = () => {
- var se, ge, je, Se;
+ var de, ge, Le, xe;
try {
- (je = (se = _.play) == null ? void 0 : (ge = se.call(_)).catch) == null || je.call(ge, () => {
+ (Le = (de = _.play) == null ? void 0 : (ge = de.call(_)).catch) == null || Le.call(ge, () => {
});
- } catch (ke) {
- (Se = console.debug) == null || Se.call(console, ke);
+ } catch (Xe) {
+ (xe = console.debug) == null || xe.call(console, Xe);
}
- }, de = () => {
- var se, ge;
+ }, ce = () => {
+ var de, ge;
try {
- (se = _.pause) == null || se.call(_), _.currentTime = 0;
- } catch (je) {
- (ge = console.debug) == null || ge.call(console, je);
+ (de = _.pause) == null || de.call(_), _.currentTime = 0;
+ } catch (Le) {
+ (ge = console.debug) == null || ge.call(console, Le);
}
};
- Q.addEventListener("mouseenter", le), Q.addEventListener("mouseleave", de), _._mjrHoverCleanup = () => {
- var se;
+ Q.addEventListener("mouseenter", le), Q.addEventListener("mouseleave", ce), _._mjrHoverCleanup = () => {
+ var de;
try {
- Q.removeEventListener("mouseenter", le), Q.removeEventListener("mouseleave", de);
+ Q.removeEventListener("mouseenter", le), Q.removeEventListener("mouseleave", ce);
} catch (ge) {
- (se = console.debug) == null || se.call(console, ge);
+ (de = console.debug) == null || de.call(console, ge);
}
};
}
@@ -26337,13 +26364,13 @@ const Jr = gw(), Vr = (e, t) => {
if (!Q) return;
const _ = new IntersectionObserver(
(le) => {
- var de, se, ge, je, Se;
- for (const ke of le)
+ var ce, de, ge, Le, xe;
+ for (const Xe of le)
try {
- ke.isIntersecting ? (ge = (de = Q.play) == null ? void 0 : (se = de.call(Q)).catch) == null || ge.call(se, () => {
- }) : ((je = Q.pause) == null || je.call(Q), Q.currentTime = 0);
- } catch (we) {
- (Se = console.debug) == null || Se.call(console, we);
+ Xe.isIntersecting ? (ge = (ce = Q.play) == null ? void 0 : (de = ce.call(Q)).catch) == null || ge.call(de, () => {
+ }) : ((Le = Q.pause) == null || Le.call(Q), Q.currentTime = 0);
+ } catch (Me) {
+ (xe = console.debug) == null || xe.call(console, Me);
}
},
{ threshold: 0.25 }
@@ -26352,18 +26379,18 @@ const Jr = gw(), Vr = (e, t) => {
var le;
try {
_.unobserve(Q), _.disconnect();
- } catch (de) {
- (le = console.debug) == null || le.call(console, de);
+ } catch (ce) {
+ (le = console.debug) == null || le.call(console, ce);
}
};
}
function a(Q) {
- var _, le, de, se;
+ var _, le, ce, de;
if (Q)
try {
- (_ = Q._mjrHoverCleanup) == null || _.call(Q), Q._mjrHoverCleanup = null, (le = Q._mjrAutoplayCleanup) == null || le.call(Q), Q._mjrAutoplayCleanup = null, (de = Q.pause) == null || de.call(Q), Q.currentTime = 0;
+ (_ = Q._mjrHoverCleanup) == null || _.call(Q), Q._mjrHoverCleanup = null, (le = Q._mjrAutoplayCleanup) == null || le.call(Q), Q._mjrAutoplayCleanup = null, (ce = Q.pause) == null || ce.call(Q), Q.currentTime = 0;
} catch (ge) {
- (se = console.debug) == null || se.call(console, ge);
+ (de = console.debug) == null || de.call(console, ge);
}
}
function c(Q, _, le) {
@@ -26372,66 +26399,66 @@ const Jr = gw(), Vr = (e, t) => {
function s(Q) {
Q && a(Q);
}
- const d = e, u = ze(() => String(d.asset.kind || "image").toLowerCase()), I = ze(() => u.value === "image"), y = ze(() => u.value === "video"), S = ze(() => u.value === "audio"), Z = ze(() => u.value === "model3d"), C = ze(() => Ki(d.asset) || ""), g = ze(
+ const d = e, u = ze(() => String(d.asset.kind || "image").toLowerCase()), I = ze(() => u.value === "image"), A = ze(() => u.value === "video"), h = ze(() => u.value === "audio"), S = ze(() => u.value === "model3d"), W = ze(() => Ui(d.asset) || ""), g = ze(
() => String(d.asset.thumbnail_url || d.asset.thumb_url || d.asset.poster || "").trim()
- ), A = ze(() => String(d.asset.filename || "")), p = ze(() => {
- const Q = A.value;
+ ), y = ze(() => String(d.asset.filename || "")), p = ze(() => {
+ const Q = y.value;
return Q.includes(".") ? Q.split(".").pop().toUpperCase() : "";
}), b = ze(() => {
- const Q = A.value;
+ const Q = y.value;
return Q.includes(".") ? Q.slice(0, Q.lastIndexOf(".")) : Q;
- }), L = ze(() => Number(d.asset.rating) || 0), h = ze(() => d.asset.tags || []), G = ze(() => {
+ }), L = ze(() => Number(d.asset.rating) || 0), C = ze(() => d.asset.tags || []), G = ze(() => {
var _;
const Q = d.asset.generation_time_ms ?? ((_ = d.asset.metadata) == null ? void 0 : _.generation_time_ms) ?? 0;
return od(Q);
- }), W = ze(() => G.value > 0), f = ze(() => zI(G.value)), X = ze(() => id(G.value)), x = ze(() => String(d.asset.positive_prompt || "").trim()), T = ze(
+ }), Z = ze(() => G.value > 0), f = ze(() => zI(G.value)), X = ze(() => id(G.value)), x = ze(() => String(d.asset.positive_prompt || "").trim()), K = ze(
() => {
var Q, _, le;
return ((Q = d.asset) == null ? void 0 : Q._mjrLivePlaceholder) === !0 || ((_ = d.asset) == null ? void 0 : _.is_live_placeholder) === !0 || String(((le = d.asset) == null ? void 0 : le.id) || "").trim().toLowerCase().startsWith("live:");
}
- ), v = ze(
+ ), j = ze(
() => {
var Q;
return String(((Q = d.asset) == null ? void 0 : Q._mjrLiveLabel) || "In progress").trim() || "In progress";
}
), w = ze(
- () => `${v.value}: waiting for indexed asset data`
+ () => `${j.value}: waiting for indexed asset data`
), R = ze(() => {
const { width: Q, height: _ } = d.asset;
return Q && _ ? `${Q}x${_}` : "";
- }), Y = ze(
- () => d.asset.duration ? kb(d.asset.duration) : ""
- ), F = ze(
+ }), V = ze(
+ () => d.asset.duration ? Xb(d.asset.duration) : ""
+ ), O = ze(
() => d.asset.generation_time || d.asset.file_creation_time || d.asset.mtime || d.asset.created_at
- ), N = ze(() => F.value ? za(F.value) : ""), V = ze(() => F.value ? Ja(F.value) : ""), k = ze(() => !!d.asset._mjrNameCollision && !d.asset._mjrDupStack), K = ze(() => k.value ? "var(--mjr-badge-duplicate-alert, #ff1744)" : {
+ ), k = ze(() => O.value ? Ja(O.value) : ""), Y = ze(() => O.value ? Ta(O.value) : ""), N = ze(() => !!d.asset._mjrNameCollision && !d.asset._mjrDupStack), U = ze(() => N.value ? "var(--mjr-badge-duplicate-alert, #ff1744)" : {
image: "var(--mjr-badge-image, #2196F3)",
video: "var(--mjr-badge-video, #F44336)",
audio: "var(--mjr-badge-audio, #4CAF50)",
model3d: "var(--mjr-badge-model3d, #9C27B0)"
- }[u.value] || "var(--mjr-badge-image, #888)"), z = Dp("mjrStackService", null), B = ze(() => !z || !String(d.asset.stack_id || "").trim() ? !1 : Number(d.asset.stack_asset_count || d.asset._mjrFeedGroupCount || 0) > 1), J = ze(
+ }[u.value] || "var(--mjr-badge-image, #888)"), z = Dp("mjrStackService", null), T = ze(() => !z || !String(d.asset.stack_id || "").trim() ? !1 : Number(d.asset.stack_asset_count || d.asset._mjrFeedGroupCount || 0) > 1), J = ze(
() => Number(d.asset.stack_asset_count || d.asset._mjrFeedGroupCount || 0) || 0
- ), P = ze(() => !!d.asset._mjrDupStack && Number(d.asset._mjrDupCount || 0) >= 2), H = ze(() => Number(d.asset._mjrDupCount || 0) || 0);
+ ), P = ze(() => !!d.asset._mjrDupStack && Number(d.asset._mjrDupCount || 0) >= 2), E = ze(() => Number(d.asset._mjrDupCount || 0) || 0);
async function $(Q) {
var _, le;
Q.preventDefault(), Q.stopPropagation();
try {
await ((_ = z == null ? void 0 : z.openStackGroup) == null ? void 0 : _.call(z, d.asset));
- } catch (de) {
- (le = console.debug) == null || le.call(console, de);
+ } catch (ce) {
+ (le = console.debug) == null || le.call(console, ce);
}
}
- function E(Q) {
+ function H(Q) {
var _, le;
Q.preventDefault(), Q.stopPropagation();
try {
(_ = z == null ? void 0 : z.openDupGroup) == null || _.call(z, d.asset);
- } catch (de) {
- (le = console.debug) == null || le.call(console, de);
+ } catch (ce) {
+ (le = console.debug) == null || le.call(console, ce);
}
}
- const oe = Ae(null), M = Ae(null), j = Ae(null), O = Ae(null), D = Ae(!1), q = Ae("");
- cn(
- () => [j.value, C.value],
+ const ne = We(null), M = We(null), v = We(null), F = We(null), D = We(!1), q = We("");
+ dn(
+ () => [v.value, W.value],
async ([Q, _]) => {
if (!(!Q || !_ || D.value))
try {
@@ -26442,42 +26469,42 @@ const Jr = gw(), Vr = (e, t) => {
},
{ immediate: !0 }
);
- const ee = Ae(fe.GRID_VIDEO_AUTOPLAY_MODE || "hover");
- function ce() {
- ee.value = fe.GRID_VIDEO_AUTOPLAY_MODE || "hover";
+ const ee = We(he.GRID_VIDEO_AUTOPLAY_MODE || "hover");
+ function ae() {
+ ee.value = he.GRID_VIDEO_AUTOPLAY_MODE || "hover";
}
Dn(() => {
- window.addEventListener("mjr-settings-changed", ce);
- }), cn(M, (Q, _) => {
+ window.addEventListener("mjr-settings-changed", ae);
+ }), dn(M, (Q, _) => {
if (_)
try {
s(_);
} catch {
}
- if (Q && oe.value)
+ if (Q && ne.value)
try {
- o(Q), c(oe.value, Q, ee.value);
+ o(Q), c(ne.value, Q, ee.value);
} catch {
}
- }), cn(ee, (Q) => {
- const _ = M.value, le = oe.value;
+ }), dn(ee, (Q) => {
+ const _ = M.value, le = ne.value;
_ && le && c(le, _, Q);
}), _n(() => {
- window.removeEventListener("mjr-settings-changed", ce);
+ window.removeEventListener("mjr-settings-changed", ae);
const Q = M.value;
if (Q)
try {
s(Q);
} catch {
}
- }), Ep(() => {
- const Q = O.value;
+ }), Hp(() => {
+ const Q = F.value;
if (!Q) return;
const _ = d.asset;
(_ == null ? void 0 : _.has_workflow) ?? (_ == null || _.hasWorkflow), (_ == null ? void 0 : _.has_generation_data) ?? (_ == null || _.hasGenerationData), (_ == null ? void 0 : _.has_ai_info) ?? (_ == null ? void 0 : _.hasAiInfo) ?? (_ == null || _.ai_indexed), (_ == null ? void 0 : _.has_ai_auto_tags) ?? (_ == null ? void 0 : _.hasAiAutoTags) ?? (_ == null ? void 0 : _.auto_tags) ?? (_ == null || _.autoTags), (_ == null ? void 0 : _.has_ai_enhanced_caption) ?? (_ == null ? void 0 : _.hasAiEnhancedCaption) ?? (_ == null ? void 0 : _.enhanced_caption) ?? (_ == null || _.enhancedCaption), (_ == null ? void 0 : _.has_ai_vector) ?? (_ == null ? void 0 : _.hasAiVector) ?? (_ == null ? void 0 : _.vector_indexed) ?? (_ == null || _.vectorIndexed);
try {
Q.textContent = "";
- const le = ec(_);
+ const le = tc(_);
le && Q.appendChild(le);
} catch {
}
@@ -26485,55 +26512,55 @@ const Jr = gw(), Vr = (e, t) => {
function ue(Q) {
D.value = !0;
try {
- Jr.markError(C.value);
+ Jr.markError(W.value);
} catch {
}
}
- function U(Q) {
- var le, de;
- if (!k.value) return;
+ function B(Q) {
+ var le, ce;
+ if (!N.value) return;
Q.preventDefault(), Q.stopPropagation();
- const _ = (de = (le = Q.target) == null ? void 0 : le.closest) == null ? void 0 : de.call(le, ".mjr-asset-card");
+ const _ = (ce = (le = Q.target) == null ? void 0 : le.closest) == null ? void 0 : ce.call(le, ".mjr-asset-card");
_ && _.dispatchEvent(
new CustomEvent("mjr:badge-duplicates-focus", {
bubbles: !0,
detail: {
- filename: A.value,
- filenameKey: A.value.toLowerCase(),
+ filename: y.value,
+ filenameKey: y.value.toLowerCase(),
count: Number(d.asset._mjrNameCollisionCount || 0),
paths: Array.isArray(d.asset._mjrNameCollisionPaths) ? d.asset._mjrNameCollisionPaths : []
}
})
);
}
- return (Q, _) => (be(), Ce(Nt, null, [
- ie("div", {
+ return (Q, _) => (be(), Ze(Nt, null, [
+ te("div", {
class: "mjr-thumb",
ref_key: "thumbRef",
- ref: oe
+ ref: ne
}, [
- T.value ? (be(), Ce("div", Ww)) : ft("", !0),
- I.value ? (be(), Ce(Nt, { key: 1 }, [
- D.value ? ft("", !0) : (be(), Ce("img", {
+ K.value ? (be(), Ze("div", Ww)) : yt("", !0),
+ I.value ? (be(), Ze(Nt, { key: 1 }, [
+ D.value ? yt("", !0) : (be(), Ze("img", {
key: 0,
ref_key: "imgRef",
- ref: j,
+ ref: v,
class: "mjr-thumb-media",
- alt: A.value,
+ alt: y.value,
loading: "lazy",
decoding: "async",
- src: q.value || C.value,
+ src: q.value || W.value,
onError: ue
}, null, 40, ww)),
- D.value ? (be(), Ce("div", Mw, [..._[12] || (_[12] = [
- ie("i", { class: "pi pi-image" }, null, -1)
- ])])) : ft("", !0)
- ], 64)) : y.value ? (be(), Ce(Nt, { key: 2 }, [
- ie("video", {
+ D.value ? (be(), Ze("div", Mw, [..._[12] || (_[12] = [
+ te("i", { class: "pi pi-image" }, null, -1)
+ ])])) : yt("", !0)
+ ], 64)) : A.value ? (be(), Ze(Nt, { key: 2 }, [
+ te("video", {
ref_key: "videoRef",
ref: M,
class: "mjr-thumb-media",
- "data-src": C.value,
+ "data-src": W.value,
poster: g.value || void 0,
muted: "",
loop: "",
@@ -26543,170 +26570,170 @@ const Jr = gw(), Vr = (e, t) => {
draggable: !1,
tabindex: -1,
style: { "pointer-events": "none" }
- }, null, 8, Sw),
- _[13] || (_[13] = ie("div", { class: "mjr-thumb-play" }, [
- ie("i", { class: "pi pi-play" })
+ }, null, 8, Gw),
+ _[13] || (_[13] = te("div", { class: "mjr-thumb-play" }, [
+ te("i", { class: "pi pi-play" })
], -1))
- ], 64)) : S.value ? (be(), Ce(Nt, { key: 3 }, [
- xe(t) ? (be(), Ce("img", {
+ ], 64)) : h.value ? (be(), Ze(Nt, { key: 3 }, [
+ ve(t) ? (be(), Ze("img", {
key: 0,
class: "mjr-thumb-media",
- src: xe(t),
+ src: ve(t),
draggable: !1,
loading: "lazy",
alt: ""
- }, null, 8, Gw)) : ft("", !0),
- ie("div", xw, [
- (be(), Ce("svg", jw, [
- (be(), Ce(Nt, null, Cn(n, ([le, de, se, ge], je) => ie("rect", {
- key: je,
+ }, null, 8, Sw)) : yt("", !0),
+ te("div", xw, [
+ (be(), Ze("svg", jw, [
+ (be(), Ze(Nt, null, Zn(n, ([le, ce, de, ge], Le) => te("rect", {
+ key: Le,
x: le,
- y: de,
- width: se,
+ y: ce,
+ width: de,
height: ge,
rx: "1.5"
}, null, 8, vw)), 64))
]))
])
- ], 64)) : Z.value ? (be(), Ce("div", Lw, [..._[14] || (_[14] = [
- ie("i", {
+ ], 64)) : S.value ? (be(), Ze("div", Lw, [..._[14] || (_[14] = [
+ te("i", {
class: "pi pi-box",
style: { "font-size": "2.5rem" }
}, null, -1)
- ])])) : ft("", !0),
- ie("div", {
+ ])])) : yt("", !0),
+ te("div", {
class: "mjr-file-badge mjr-badge-ext",
"data-mjr-ext": p.value,
- "data-mjr-badge-bg": K.value,
- style: Lt({
+ "data-mjr-badge-bg": U.value,
+ style: vt({
position: "absolute",
top: "6px",
left: "6px",
zIndex: 10,
- background: K.value,
+ background: U.value,
color: "#fff",
padding: "2px 5px",
borderRadius: "4px",
fontSize: "10px",
fontWeight: "700",
- pointerEvents: k.value ? "auto" : "none",
- cursor: k.value ? "pointer" : "default"
+ pointerEvents: N.value ? "auto" : "none",
+ cursor: N.value ? "pointer" : "default"
}),
- title: k.value ? `${p.value} — duplicate filename (${e.asset._mjrNameCollisionCount || 2} files)` : `${p.value} file`,
- onClick: U
- }, Ye(p.value) + Ye(k.value ? "+" : ""), 13, Vw),
- fn(pw, {
+ title: N.value ? `${p.value} — duplicate filename (${e.asset._mjrNameCollisionCount || 2} files)` : `${p.value} file`,
+ onClick: B
+ }, Ne(p.value) + Ne(N.value ? "+" : ""), 13, Yw),
+ Cn(pw, {
rating: L.value,
class: "mjr-badge-rating"
}, null, 8, ["rating"]),
- fn(hw, {
- tags: h.value,
+ Cn(Cw, {
+ tags: C.value,
class: "mjr-badge-tags"
}, null, 8, ["tags"]),
- fn(Aw, { "gen-time-ms": G.value }, null, 8, ["gen-time-ms"]),
- T.value ? (be(), Ce("div", {
+ Cn(Aw, { "gen-time-ms": G.value }, null, 8, ["gen-time-ms"]),
+ K.value ? (be(), Ze("div", {
key: 5,
class: "mjr-live-pill",
title: w.value
}, [
- _[15] || (_[15] = ie("span", {
+ _[15] || (_[15] = te("span", {
class: "mjr-live-pill-dot",
"aria-hidden": "true"
}, null, -1)),
- ie("span", null, Ye(v.value), 1)
- ], 8, Yw)) : ft("", !0),
- x.value || W.value ? (be(), Ce("div", kw, [
- x.value ? (be(), Ce("div", Xw, Ye(x.value), 1)) : ft("", !0),
- W.value ? (be(), Ce("div", Nw, "⏱ " + Ye(f.value.text), 1)) : ft("", !0)
- ])) : ft("", !0)
+ te("span", null, Ne(j.value), 1)
+ ], 8, Vw)) : yt("", !0),
+ x.value || Z.value ? (be(), Ze("div", Xw, [
+ x.value ? (be(), Ze("div", Nw, Ne(x.value), 1)) : yt("", !0),
+ Z.value ? (be(), Ze("div", kw, "⏱ " + Ne(f.value.text), 1)) : yt("", !0)
+ ])) : yt("", !0)
], 512),
- ie("div", Rw, [
- ie("div", {
+ te("div", Rw, [
+ te("div", {
class: "mjr-card-filename",
- title: A.value,
+ title: y.value,
style: { overflow: "hidden", "text-overflow": "ellipsis", "white-space": "nowrap", "margin-bottom": "4px", "padding-right": "12px" }
- }, Ye(b.value), 9, Fw),
- ie("div", Ow, [
- R.value ? (be(), Ce("span", {
+ }, Ne(b.value), 9, Ow),
+ te("div", Fw, [
+ R.value ? (be(), Ze("span", {
key: 0,
class: "mjr-meta-res",
title: `Resolution: ${R.value}`
- }, Ye(R.value), 9, zw)) : ft("", !0),
- Y.value ? (be(), Ce("span", {
+ }, Ne(R.value), 9, zw)) : yt("", !0),
+ V.value ? (be(), Ze("span", {
key: 1,
class: "mjr-meta-duration",
- title: `Duration: ${Y.value}`
- }, Ye(Y.value), 9, Jw)) : ft("", !0),
- N.value ? (be(), Ce("span", {
+ title: `Duration: ${V.value}`
+ }, Ne(V.value), 9, Jw)) : yt("", !0),
+ k.value ? (be(), Ze("span", {
key: 2,
class: "mjr-meta-date",
- title: `Date: ${N.value}`
- }, Ye(N.value), 9, Tw)) : ft("", !0),
- V.value ? (be(), Ce("span", {
+ title: `Date: ${k.value}`
+ }, Ne(k.value), 9, Tw)) : yt("", !0),
+ Y.value ? (be(), Ze("span", {
key: 3,
class: "mjr-meta-date mjr-meta-time-val",
- title: `Time: ${V.value}`
- }, Ye(V.value), 9, Bw)) : ft("", !0),
- W.value ? (be(), Ce("span", {
+ title: `Time: ${Y.value}`
+ }, Ne(Y.value), 9, Kw)) : yt("", !0),
+ Z.value ? (be(), Ze("span", {
key: 4,
class: "mjr-meta-gentime",
- style: Lt({ color: X.value, fontWeight: "500" }),
+ style: vt({ color: X.value, fontWeight: "500" }),
title: f.value.title
- }, Ye(f.value.text), 13, Uw)) : ft("", !0)
+ }, Ne(f.value.text), 13, Bw)) : yt("", !0)
]),
- ie("div", {
+ te("div", {
ref_key: "dotWrapperRef",
- ref: O,
+ ref: F,
class: "mjr-card-dot-wrapper",
style: { position: "absolute", right: "8px", bottom: "6px", "z-index": "2" }
}, null, 512)
]),
- B.value ? (be(), Ce("button", {
+ T.value ? (be(), Ze("button", {
key: 0,
type: "button",
class: "mjr-stack-group-button",
"aria-label": `Open generation group in grid (${J.value} assets)`,
title: `Open generation group in grid (${J.value} assets)`,
onClick: $,
- onPointerdown: _[0] || (_[0] = On(() => {
+ onPointerdown: _[0] || (_[0] = Fn(() => {
}, ["stop"])),
- onMousedown: _[1] || (_[1] = On(() => {
+ onMousedown: _[1] || (_[1] = Fn(() => {
}, ["stop", "prevent"])),
- onTouchstartPassive: _[2] || (_[2] = On(() => {
+ onTouchstartPassive: _[2] || (_[2] = Fn(() => {
}, ["stop"])),
- onDblclick: _[3] || (_[3] = On(() => {
+ onDblclick: _[3] || (_[3] = Fn(() => {
}, ["stop"])),
- onKeydown: _[4] || (_[4] = On(() => {
+ onKeydown: _[4] || (_[4] = Fn(() => {
}, ["stop"])),
- onDragstart: _[5] || (_[5] = On(() => {
+ onDragstart: _[5] || (_[5] = Fn(() => {
}, ["stop", "prevent"]))
}, [
- _[16] || (_[16] = ie("span", { class: "pi pi-clone" }, null, -1)),
- ie("span", Dw, Ye(J.value), 1)
- ], 40, Kw)) : ft("", !0),
- P.value ? (be(), Ce("button", {
+ _[16] || (_[16] = te("span", { class: "pi pi-clone" }, null, -1)),
+ te("span", Dw, Ne(J.value), 1)
+ ], 40, Uw)) : yt("", !0),
+ P.value ? (be(), Ze("button", {
key: 1,
type: "button",
class: "mjr-dup-stack-button",
- "aria-label": `${H.value} duplicate${H.value > 1 ? "s" : ""} — click to compare all copies`,
- title: `${H.value} duplicate${H.value > 1 ? "s" : ""} — click to compare all copies`,
- onClick: E,
- onPointerdown: _[6] || (_[6] = On(() => {
+ "aria-label": `${E.value} duplicate${E.value > 1 ? "s" : ""} — click to compare all copies`,
+ title: `${E.value} duplicate${E.value > 1 ? "s" : ""} — click to compare all copies`,
+ onClick: H,
+ onPointerdown: _[6] || (_[6] = Fn(() => {
}, ["stop"])),
- onMousedown: _[7] || (_[7] = On(() => {
+ onMousedown: _[7] || (_[7] = Fn(() => {
}, ["stop", "prevent"])),
- onTouchstartPassive: _[8] || (_[8] = On(() => {
+ onTouchstartPassive: _[8] || (_[8] = Fn(() => {
}, ["stop"])),
- onDblclick: _[9] || (_[9] = On(() => {
+ onDblclick: _[9] || (_[9] = Fn(() => {
}, ["stop"])),
- onKeydown: _[10] || (_[10] = On(() => {
+ onKeydown: _[10] || (_[10] = Fn(() => {
}, ["stop"])),
- onDragstart: _[11] || (_[11] = On(() => {
+ onDragstart: _[11] || (_[11] = Fn(() => {
}, ["stop", "prevent"]))
}, [
- _[17] || (_[17] = ie("span", { class: "pi pi-copy" }, null, -1)),
- ie("span", Hw, Ye(H.value), 1)
- ], 40, Ew)) : ft("", !0)
+ _[17] || (_[17] = te("span", { class: "pi pi-copy" }, null, -1)),
+ te("span", Ew, Ne(E.value), 1)
+ ], 40, Hw)) : yt("", !0)
], 64));
}
}, qw = ["data-mjr-asset-id", "data-mjr-filename-key", "data-mjr-stem", "aria-label", "aria-selected"], Pw = {
@@ -26719,8 +26746,8 @@ const Jr = gw(), Vr = (e, t) => {
selected: { type: Boolean, default: !1 }
},
setup(e) {
- return (t, n) => (be(), Ce("div", {
- class: Zn(["mjr-asset-card mjr-card mjr-folder-card", { "is-selected": e.selected }]),
+ return (t, n) => (be(), Ze("div", {
+ class: An(["mjr-asset-card mjr-card mjr-folder-card", { "is-selected": e.selected }]),
role: "button",
tabindex: 0,
draggable: "true",
@@ -26732,33 +26759,33 @@ const Jr = gw(), Vr = (e, t) => {
"aria-label": `Folder ${e.asset.filename}`,
"aria-selected": e.selected ? "true" : "false"
}, [
- n[1] || (n[1] = ie("div", {
+ n[1] || (n[1] = te("div", {
class: "mjr-thumb",
style: { display: "flex", "align-items": "center", "justify-content": "center" }
}, [
- ie("svg", {
+ te("svg", {
width: "64",
height: "64",
viewBox: "0 0 24 24",
"aria-hidden": "true"
}, [
- ie("path", {
+ te("path", {
fill: "#F4C74A",
d: "M10 4H4c-1.1 0-2 .9-2 2v1h20V8c0-1.1-.9-2-2-2h-8l-2-2z"
}),
- ie("path", {
+ te("path", {
fill: "#D9A730",
d: "M20 6H4c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2z"
})
])
], -1)),
- ie("div", Pw, [
- ie("div", {
+ te("div", Pw, [
+ te("div", {
class: "mjr-card-filename",
title: e.asset.filename,
style: { overflow: "hidden", "text-overflow": "ellipsis", "white-space": "nowrap", "margin-bottom": "4px" }
- }, Ye(e.asset.filename), 9, Qw),
- n[0] || (n[0] = ie("div", { class: "mjr-card-meta-row" }, null, -1))
+ }, Ne(e.asset.filename), 9, Qw),
+ n[0] || (n[0] = te("div", { class: "mjr-card-meta-row" }, null, -1))
])
], 10, qw));
}
@@ -26767,7 +26794,7 @@ function Dl(e) {
return Array.from(e || []).map((t) => String(t || "").trim()).filter(Boolean);
}
function _w() {
- const e = Hp({
+ const e = Ep({
query: "*",
offset: 0,
total: null,
@@ -26798,8 +26825,8 @@ function _w() {
}
};
const t = ze(() => new Set(Dl(e.selectedIds)));
- function n(I = "", { error: y = !1 } = {}) {
- e.statusMessage = String(I || ""), e.statusError = !!y;
+ function n(I = "", { error: A = !1 } = {}) {
+ e.statusMessage = String(I || ""), e.statusError = !!A;
}
function i() {
e.statusMessage = "", e.statusError = !1;
@@ -26813,33 +26840,33 @@ function _w() {
function l() {
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 = 0;
}
- function a({ query: I = "*", total: y = null, done: S = !1 } = {}) {
- e.query = String(I || "*") || "*", e.offset = 0, e.total = y == null ? null : Number(y) || 0, e.done = !!S, e.assets = [], l();
+ function a({ query: I = "*", total: A = null, done: h = !1 } = {}) {
+ e.query = String(I || "*") || "*", e.offset = 0, e.total = A == null ? null : Number(A) || 0, e.done = !!h, e.assets = [], l();
}
- function c(I, y = "", { preserveAnchor: S = !1 } = {}) {
- const Z = Array.from(new Set(Dl(I))), C = String(y || Z[0] || "").trim();
- return e.selectedIds = Z, e.activeId = C, S || (C ? e.selectionAnchorId = C : Z.length || (e.selectionAnchorId = "")), {
- selectedIds: Z,
- activeId: C
+ function c(I, A = "", { preserveAnchor: h = !1 } = {}) {
+ const S = Array.from(new Set(Dl(I))), W = String(A || S[0] || "").trim();
+ return e.selectedIds = S, e.activeId = W, h || (W ? e.selectionAnchorId = W : S.length || (e.selectionAnchorId = "")), {
+ selectedIds: S,
+ activeId: W
};
}
- function s(I, { activeId: y = "" } = {}) {
- const S = new Set(Dl(I)), Z = Dl(e.selectedIds).filter((A) => S.has(A)), C = String(y || e.activeId || Z[0] || "").trim(), g = S.has(C) ? C : Z[0] || "";
- return c(Z, g, { preserveAnchor: !0 });
+ function s(I, { activeId: A = "" } = {}) {
+ const h = new Set(Dl(I)), S = Dl(e.selectedIds).filter((y) => h.has(y)), W = String(A || e.activeId || S[0] || "").trim(), g = h.has(W) ? W : S[0] || "";
+ return c(S, g, { preserveAnchor: !0 });
}
function d() {
const I = t.value;
return (Array.isArray(e.assets) ? e.assets : []).filter(
- (y) => I.has(String((y == null ? void 0 : y.id) || ""))
+ (A) => I.has(String((A == null ? void 0 : A.id) || ""))
);
}
function u() {
const I = String(e.activeId || "").trim();
if (I) {
- const y = (Array.isArray(e.assets) ? e.assets : []).find(
- (S) => String((S == null ? void 0 : S.id) || "") === I
+ const A = (Array.isArray(e.assets) ? e.assets : []).find(
+ (h) => String((h == null ? void 0 : h.id) || "") === I
);
- if (y) return y;
+ if (A) return A;
}
return d()[0] || null;
}
@@ -26866,7 +26893,7 @@ function $w(e) {
return (t = console.debug) == null || t.call(console, n), !1;
}
}
-function Xb(e, { requireClientRect: t = !0 } = {}) {
+function Nb(e, { requireClientRect: t = !0 } = {}) {
var n, i, o, r;
if (!e || typeof e != "object") return !1;
try {
@@ -26897,12 +26924,12 @@ function Xb(e, { requireClientRect: t = !0 } = {}) {
return t ? $w(e) : !0;
}
function e0(e) {
- return Xb(e, { requireClientRect: !0 });
+ return Nb(e, { requireClientRect: !0 });
}
function md(e, t = null) {
var o;
const n = t || e;
- if (!e0(n) || e && e !== n && !Xb(e, { requireClientRect: !1 }))
+ if (!e0(n) || e && e !== n && !Nb(e, { requireClientRect: !1 }))
return !1;
try {
const r = Number((n == null ? void 0 : n.clientWidth) || 0) || 0, l = Number((n == null ? void 0 : n.clientHeight) || 0) || 0;
@@ -26914,13 +26941,13 @@ function md(e, t = null) {
const t0 = {
__name: "FloatingViewerHost",
setup(e) {
- const t = Ae(null);
+ const t = We(null);
let n = null;
return Dn(() => {
- n = XC(t.value);
+ n = Nh(t.value);
}), _n(() => {
n == null || n(), n = null;
- }), (i, o) => (be(), Ce("div", {
+ }), (i, o) => (be(), Ze("div", {
ref_key: "hostRef",
ref: t,
class: "mjr-viewer-runtime-host mjr-viewer-runtime-host--floating",
@@ -26930,13 +26957,13 @@ const t0 = {
}, n0 = {
__name: "ViewerOverlayHost",
setup(e) {
- const t = Ae(null);
+ const t = We(null);
let n = null;
return Dn(() => {
- n = YC(t.value);
+ n = Vh(t.value);
}), _n(() => {
n == null || n(), n = null;
- }), (i, o) => (be(), Ce("div", {
+ }), (i, o) => (be(), Ze("div", {
ref_key: "hostRef",
ref: t,
class: "mjr-viewer-runtime-host mjr-viewer-runtime-host--main",
@@ -26964,290 +26991,290 @@ const t0 = {
},
emits: ["update:modelValue", "tags-change"],
setup(e, { emit: t }) {
- var N;
- function n(V) {
+ var k;
+ function n(Y) {
try {
- const k = String(V ?? "").trim();
- if (!k || k.length > u0) return null;
- for (let K = 0; K < k.length; K += 1) {
- const z = k.charCodeAt(K);
+ const N = String(Y ?? "").trim();
+ if (!N || N.length > u0) return null;
+ for (let U = 0; U < N.length; U += 1) {
+ const z = N.charCodeAt(U);
if (z <= 31 || z === 127) return null;
}
- return /[;,]/.test(k) ? null : k;
+ return /[;,]/.test(N) ? null : N;
} catch {
return null;
}
}
- function i(V) {
+ function i(Y) {
try {
- return String(V ?? "").replace(/[\x00-\x1f\x7f]/g, "").trim() || null;
+ return String(Y ?? "").replace(/[\x00-\x1f\x7f]/g, "").trim() || null;
} catch {
return null;
}
}
- function o(V) {
- const k = i(V);
- return k ? k.toLowerCase() : "";
+ function o(Y) {
+ const N = i(Y);
+ return N ? N.toLowerCase() : "";
}
- function r(V) {
- const k = [], K = /* @__PURE__ */ new Set();
- for (const z of Array.isArray(V) ? V : []) {
- const B = i(z);
- if (!B) continue;
- const J = B.toLowerCase();
- if (!K.has(J) && (K.add(J), k.push(B), k.length >= sm))
+ function r(Y) {
+ const N = [], U = /* @__PURE__ */ new Set();
+ for (const z of Array.isArray(Y) ? Y : []) {
+ const T = i(z);
+ if (!T) continue;
+ const J = T.toLowerCase();
+ if (!U.has(J) && (U.add(J), N.push(T), N.length >= sm))
break;
}
- return k;
+ return N;
}
- function l(V) {
- if (Array.isArray(V))
- return r(V);
- if (typeof V == "string") {
- const k = V.trim();
- if (!k) return [];
+ function l(Y) {
+ if (Array.isArray(Y))
+ return r(Y);
+ if (typeof Y == "string") {
+ const N = Y.trim();
+ if (!N) return [];
try {
- const K = JSON.parse(k);
- if (Array.isArray(K)) return r(K);
+ const U = JSON.parse(N);
+ if (Array.isArray(U)) return r(U);
} catch {
- return r(k.split(","));
+ return r(N.split(","));
}
}
return [];
}
- function a(V, k) {
- if (!Array.isArray(V) || !Array.isArray(k) || V.length !== k.length) return !1;
- for (let K = 0; K < V.length; K += 1)
- if (V[K] !== k[K]) return !1;
+ function a(Y, N) {
+ if (!Array.isArray(Y) || !Array.isArray(N) || Y.length !== N.length) return !1;
+ for (let U = 0; U < Y.length; U += 1)
+ if (Y[U] !== N[U]) return !1;
return !0;
}
- const c = e, s = t, d = l(((N = c.asset) == null ? void 0 : N.tags) ?? c.modelValue ?? []), u = Ae([...d]), I = Ae(null), y = Ae(""), S = Ae(!1), Z = Ae(-1), C = Ae([]), g = Ae(!1);
- let A = !1, p = !1, b = null, L = [...d];
- const h = (V) => Math.min(100 * 2 ** Math.max(0, V - 1), 2e3), G = (V) => new Promise((k) => setTimeout(k, V)), W = () => setTimeout(() => S.value = !1, 200), f = ze(() => {
- const V = y.value.toLowerCase().trim();
- if (!V) return [];
- const k = new Set(u.value.map((K) => o(K)).filter(Boolean));
- return C.value.filter((K) => {
- const z = o(K);
- return K.toLowerCase().includes(V) && (!z || !k.has(z));
+ const c = e, s = t, d = l(((k = c.asset) == null ? void 0 : k.tags) ?? c.modelValue ?? []), u = We([...d]), I = We(null), A = We(""), h = We(!1), S = We(-1), W = We([]), g = We(!1);
+ let y = !1, p = !1, b = null, L = [...d];
+ const C = (Y) => Math.min(100 * 2 ** Math.max(0, Y - 1), 2e3), G = (Y) => new Promise((N) => setTimeout(N, Y)), Z = () => setTimeout(() => h.value = !1, 200), f = ze(() => {
+ const Y = A.value.toLowerCase().trim();
+ if (!Y) return [];
+ const N = new Set(u.value.map((U) => o(U)).filter(Boolean));
+ return W.value.filter((U) => {
+ const z = o(U);
+ return U.toLowerCase().includes(Y) && (!z || !N.has(z));
}).slice(0, 10);
}), X = ze(() => f.value.length > 0);
- function x(V) {
- if (A) return;
- const k = l(V);
- L = [...k], a(k, u.value) || (u.value = [...k]);
+ function x(Y) {
+ if (y) return;
+ const N = l(Y);
+ L = [...N], a(N, u.value) || (u.value = [...N]);
}
- function T(V) {
- var z, B;
- const k = [...V], K = ((z = c.asset) == null ? void 0 : z.id) != null ? String(c.asset.id) : "";
- s("update:modelValue", k), s("tags-change", { assetId: (B = c.asset) == null ? void 0 : B.id, tags: k }), oi(Do, {
- assetId: K,
- tags: k
+ function K(Y) {
+ var z, T;
+ const N = [...Y], U = ((z = c.asset) == null ? void 0 : z.id) != null ? String(c.asset.id) : "";
+ s("update:modelValue", N), s("tags-change", { assetId: (T = c.asset) == null ? void 0 : T.id, tags: N }), oi(Do, {
+ assetId: U,
+ tags: N
});
}
- async function v() {
- var k, K, z, B, J, P, H;
+ async function j() {
+ var N, U, z, T, J, P, E;
if (c.disabled) return;
- if (A) {
+ if (y) {
p = !0;
try {
- (k = b == null ? void 0 : b.abort) == null || k.call(b);
+ (N = b == null ? void 0 : b.abort) == null || N.call(b);
} catch ($) {
- (K = console.debug) == null || K.call(console, $);
+ (U = console.debug) == null || U.call(console, $);
}
return;
}
- A = !0, g.value = !0;
- let V = 0;
- for (; V < 10; ) {
- V > 0 && await G(h(V)), V += 1;
- const $ = l(u.value), E = typeof AbortController < "u" ? new AbortController() : null;
- b = E;
- let oe = null;
+ y = !0, g.value = !0;
+ let Y = 0;
+ for (; Y < 10; ) {
+ Y > 0 && await G(C(Y)), Y += 1;
+ const $ = l(u.value), H = typeof AbortController < "u" ? new AbortController() : null;
+ b = H;
+ let ne = null;
try {
- oe = await mh(c.asset, $, E ? { signal: E.signal } : {});
- } catch (j) {
- console.error("Failed to update tags:", j);
+ ne = await mC(c.asset, $, H ? { signal: H.signal } : {});
+ } catch (v) {
+ console.error("Failed to update tags:", v);
}
- if (!(oe != null && oe.ok)) {
- if ((oe == null ? void 0 : oe.code) === "ABORTED") {
+ if (!(ne != null && ne.ok)) {
+ if ((ne == null ? void 0 : ne.code) === "ABORTED") {
if (p) {
p = !1;
continue;
}
break;
}
- const j = [...L];
- u.value = j, s("update:modelValue", j), Ze((oe == null ? void 0 : oe.error) || m("toast.tagsUpdateFailed", "Failed to update tags"), "error"), A = !1, b = null, g.value = !1;
+ const v = [...L];
+ u.value = v, s("update:modelValue", v), Ae((ne == null ? void 0 : ne.error) || m("toast.tagsUpdateFailed", "Failed to update tags"), "error"), y = !1, b = null, g.value = !1;
return;
}
try {
- const j = ((z = oe == null ? void 0 : oe.data) == null ? void 0 : z.asset_id) ?? null;
- j != null && !fi(c.asset.id) && (c.asset.id = j);
- } catch (j) {
- (B = console.debug) == null || B.call(console, j);
+ const v = ((z = ne == null ? void 0 : ne.data) == null ? void 0 : z.asset_id) ?? null;
+ v != null && !fi(c.asset.id) && (c.asset.id = v);
+ } catch (v) {
+ (T = console.debug) == null || T.call(console, v);
}
const M = l(
- Array.isArray((J = oe == null ? void 0 : oe.data) == null ? void 0 : J.tags) ? oe.data.tags : $
+ Array.isArray((J = ne == null ? void 0 : ne.data) == null ? void 0 : J.tags) ? ne.data.tags : $
);
L = [...M];
try {
c.asset.tags = [...M];
- } catch (j) {
- (P = console.debug) == null || P.call(console, j);
+ } catch (v) {
+ (P = console.debug) == null || P.call(console, v);
}
- if (p || (u.value = [...M]), T(M), Ze(m("toast.tagsUpdated", "Tags updated"), "success", 1e3), !p) break;
+ if (p || (u.value = [...M]), K(M), Ae(m("toast.tagsUpdated", "Tags updated"), "success", 1e3), !p) break;
p = !1;
}
- if (V >= 10) {
+ if (Y >= 10) {
const $ = [...L];
u.value = $;
try {
c.asset.tags = [...$];
- } catch (E) {
- (H = console.debug) == null || H.call(console, E);
+ } catch (H) {
+ (E = console.debug) == null || E.call(console, H);
}
- s("update:modelValue", $), Ze(m("toast.tagsUpdateFailed", "Failed to update tags"), "error");
+ s("update:modelValue", $), Ae(m("toast.tagsUpdateFailed", "Failed to update tags"), "error");
}
- A = !1, b = null, g.value = !1;
+ y = !1, b = null, g.value = !1;
}
Dn(async () => {
try {
- const V = await gh();
- V != null && V.ok && Array.isArray(V == null ? void 0 : V.data) && (C.value = r(V.data));
- } catch (V) {
- console.warn("Failed to load available tags:", V);
+ const Y = await gC();
+ Y != null && Y.ok && Array.isArray(Y == null ? void 0 : Y.data) && (W.value = r(Y.data));
+ } catch (Y) {
+ console.warn("Failed to load available tags:", Y);
}
}), xr(() => {
- var V, k;
+ var Y, N;
try {
- (V = b == null ? void 0 : b.abort) == null || V.call(b);
- } catch (K) {
- (k = console.debug) == null || k.call(console, K);
+ (Y = b == null ? void 0 : b.abort) == null || Y.call(b);
+ } catch (U) {
+ (N = console.debug) == null || N.call(console, U);
}
});
- function w(V) {
+ function w(Y) {
if (c.disabled) return;
- const k = n(V);
- if (!k) return;
- const K = o(k);
- if (K && !u.value.some((z) => o(z) === K)) {
+ const N = n(Y);
+ if (!N) return;
+ const U = o(N);
+ if (U && !u.value.some((z) => o(z) === U)) {
if (u.value.length >= sm) {
- Ze(m("toast.maxTagsReached", "Maximum number of tags reached"), "warning");
+ Ae(m("toast.maxTagsReached", "Maximum number of tags reached"), "warning");
return;
}
- u.value = [...u.value, k], v();
+ u.value = [...u.value, N], j();
}
}
- function R(V) {
- if (c.disabled || V < 0 || V >= u.value.length) return;
- const k = [...u.value];
- k.splice(V, 1), u.value = k, v();
+ function R(Y) {
+ if (c.disabled || Y < 0 || Y >= u.value.length) return;
+ const N = [...u.value];
+ N.splice(Y, 1), u.value = N, j();
}
- function Y(V) {
- if (V.key === "Enter" || V.key === ",") {
- V.preventDefault();
- const k = y.value.trim();
- k && (w(k), y.value = "", S.value = !1, Z.value = -1);
+ function V(Y) {
+ if (Y.key === "Enter" || Y.key === ",") {
+ Y.preventDefault();
+ const N = A.value.trim();
+ N && (w(N), A.value = "", h.value = !1, S.value = -1);
return;
}
- if (V.key === "Escape") {
- S.value = !1, Z.value = -1;
+ if (Y.key === "Escape") {
+ h.value = !1, S.value = -1;
return;
}
- if (V.key === "ArrowDown") {
- V.preventDefault(), X.value && (Z.value = Math.min(
- Z.value + 1,
+ if (Y.key === "ArrowDown") {
+ Y.preventDefault(), X.value && (S.value = Math.min(
+ S.value + 1,
f.value.length - 1
));
return;
}
- if (V.key === "ArrowUp") {
- V.preventDefault(), Z.value = Math.max(Z.value - 1, 0);
+ if (Y.key === "ArrowUp") {
+ Y.preventDefault(), S.value = Math.max(S.value - 1, 0);
return;
}
- if (V.key === "Tab" && X.value) {
- V.preventDefault();
- const k = f.value[Z.value] || f.value[0];
- k && (y.value = k);
+ if (Y.key === "Tab" && X.value) {
+ Y.preventDefault();
+ const N = f.value[S.value] || f.value[0];
+ N && (A.value = N);
}
}
- function F(V) {
- var k;
- w(V), y.value = "", S.value = !1, Z.value = -1, (k = I.value) == null || k.focus();
+ function O(Y) {
+ var N;
+ w(Y), A.value = "", h.value = !1, S.value = -1, (N = I.value) == null || N.focus();
}
- return cn(
+ return dn(
() => c.modelValue,
- (V) => {
- x(V);
+ (Y) => {
+ x(Y);
}
- ), cn(
+ ), dn(
() => {
- var V;
- return (V = c.asset) == null ? void 0 : V.tags;
+ var Y;
+ return (Y = c.asset) == null ? void 0 : Y.tags;
},
- (V) => {
- x(V);
+ (Y) => {
+ x(Y);
}
- ), (V, k) => (be(), Ce("div", {
- class: Zn(["mjr-tags-editor", { "is-disabled": e.disabled }]),
+ ), (Y, N) => (be(), Ze("div", {
+ class: An(["mjr-tags-editor", { "is-disabled": e.disabled }]),
"aria-busy": g.value
}, [
- ie("div", {
+ te("div", {
class: "mjr-tags-display",
role: "list",
- "aria-label": xe(m)("tags.label", "Tags")
+ "aria-label": ve(m)("tags.label", "Tags")
}, [
- u.value.length === 0 ? (be(), Ce("span", r0, Ye(xe(m)("msg.noTagsYet", "No tags yet...")), 1)) : (be(!0), Ce(Nt, { key: 1 }, Cn(u.value, (K, z) => (be(), Ce("div", {
- key: K,
+ u.value.length === 0 ? (be(), Ze("span", r0, Ne(ve(m)("msg.noTagsYet", "No tags yet...")), 1)) : (be(!0), Ze(Nt, { key: 1 }, Zn(u.value, (U, z) => (be(), Ze("div", {
+ key: U,
class: "mjr-tag-chip",
role: "listitem"
}, [
- qp(Ye(K) + " ", 1),
- ie("button", {
+ qp(Ne(U) + " ", 1),
+ te("button", {
type: "button",
class: "mjr-tag-chip-remove",
- "aria-label": xe(m)("tags.remove", "Remove tag"),
+ "aria-label": ve(m)("tags.remove", "Remove tag"),
disabled: e.disabled,
- onClick: (B) => R(z)
+ onClick: (T) => R(z)
}, " × ", 8, l0)
]))), 128))
], 8, o0),
- ie("div", a0, [
- Ko(ie("input", {
+ te("div", a0, [
+ Uo(te("input", {
ref_key: "inputRef",
ref: I,
- "onUpdate:modelValue": k[0] || (k[0] = (K) => y.value = K),
+ "onUpdate:modelValue": N[0] || (N[0] = (U) => A.value = U),
type: "text",
class: "mjr-tag-input",
- placeholder: xe(m)("sidebar.addTag", "Add tag..."),
+ placeholder: ve(m)("sidebar.addTag", "Add tag..."),
disabled: e.disabled,
- "aria-label": xe(m)("tags.addLabel", "Add tag"),
+ "aria-label": ve(m)("tags.addLabel", "Add tag"),
"aria-autocomplete": X.value ? "list" : "none",
- "aria-expanded": S.value,
+ "aria-expanded": h.value,
"aria-haspopup": X.value ? "listbox" : void 0,
- onFocus: k[1] || (k[1] = (K) => S.value = y.value.length > 0),
- onInput: k[2] || (k[2] = (K) => S.value = y.value.length > 0),
- onKeydown: Y,
- onBlur: W
+ onFocus: N[1] || (N[1] = (U) => h.value = A.value.length > 0),
+ onInput: N[2] || (N[2] = (U) => h.value = A.value.length > 0),
+ onKeydown: V,
+ onBlur: Z
}, null, 40, c0), [
- [Pp, y.value]
+ [Pp, A.value]
]),
- Ko(ie("div", {
+ Uo(te("div", {
class: "mjr-tags-dropdown",
role: "listbox",
- "aria-label": xe(m)("tags.suggestions", "Tag suggestions")
+ "aria-label": ve(m)("tags.suggestions", "Tag suggestions")
}, [
- (be(!0), Ce(Nt, null, Cn(f.value, (K, z) => (be(), Ce("div", {
- key: K,
- class: Zn(["mjr-tag-suggestion", { "is-active": z === Z.value }]),
+ (be(!0), Ze(Nt, null, Zn(f.value, (U, z) => (be(), Ze("div", {
+ key: U,
+ class: An(["mjr-tag-suggestion", { "is-active": z === S.value }]),
role: "option",
- "aria-selected": z === Z.value,
- onClick: (B) => F(K),
- onMouseenter: (B) => Z.value = z
- }, Ye(K), 43, d0))), 128))
+ "aria-selected": z === S.value,
+ onClick: (T) => O(U),
+ onMouseenter: (T) => S.value = z
+ }, Ne(U), 43, d0))), 128))
], 8, s0), [
- [yr, S.value && X.value]
+ [yr, h.value && X.value]
])
])
], 10, i0));
@@ -27264,22 +27291,22 @@ const t0 = {
}, f0 = {
key: 0,
class: "mjr-context-menu-separator"
-}, h0 = ["aria-disabled", "tabindex", "onClick"], C0 = { class: "mjr-context-menu-item-left" }, Z0 = {
+}, C0 = ["aria-disabled", "tabindex", "onClick"], h0 = { class: "mjr-context-menu-item-left" }, Z0 = {
key: 0,
class: "mjr-context-menu-hint"
}, A0 = {
__name: "ViewerContextMenu",
setup(e) {
- const t = Ae(null), n = Ae(null), i = Ae(null);
+ const t = We(null), n = We(null), i = We(null);
let o = null, r = null;
- const l = ze(() => s(Kt.main, 10041)), a = ze(() => s(Kt.submenu, 10042)), c = ze(() => s(Kt.tags, 10043));
- function s(x, T) {
+ const l = ze(() => s(Bt.main, 10041)), a = ze(() => s(Bt.submenu, 10042)), c = ze(() => s(Bt.tags, 10043));
+ function s(x, K) {
return {
position: "fixed",
left: `${Math.round(Number(x == null ? void 0 : x.x) || 0)}px`,
top: `${Math.round(Number(x == null ? void 0 : x.y) || 0)}px`,
display: "block",
- zIndex: String(T)
+ zIndex: String(K)
};
}
function d() {
@@ -27290,43 +27317,43 @@ const t0 = {
gr();
}, 180);
}
- function I(x, T) {
- if (!(x != null && x.open) || !T) return;
- const v = T.getBoundingClientRect(), w = Number(window.innerWidth || 0), R = Number(window.innerHeight || 0);
- let Y = Number(x.x) || 0, F = Number(x.y) || 0;
- Y + v.width > w && (Y = Math.max(8, w - v.width - 10)), F + v.height > R && (F = Math.max(8, R - v.height - 10)), Y < 8 && (Y = 8), F < 8 && (F = 8), x.x = Y, x.y = F;
+ function I(x, K) {
+ if (!(x != null && x.open) || !K) return;
+ const j = K.getBoundingClientRect(), w = Number(window.innerWidth || 0), R = Number(window.innerHeight || 0);
+ let V = Number(x.x) || 0, O = Number(x.y) || 0;
+ V + j.width > w && (V = Math.max(8, w - j.width - 10)), O + j.height > R && (O = Math.max(8, R - j.height - 10)), V < 8 && (V = 8), O < 8 && (O = 8), x.x = V, x.y = O;
}
- async function y(x, T) {
- await wo(), I(x, (T == null ? void 0 : T.value) || null);
+ async function A(x, K) {
+ await wo(), I(x, (K == null ? void 0 : K.value) || null);
}
- function S(x) {
- var T, v, w, R, Y;
+ function h(x) {
+ var K, j, w, R, V;
try {
- (R = (w = (v = (T = x == null ? void 0 : x.value) == null ? void 0 : T.querySelector) == null ? void 0 : v.call(T, '.mjr-context-menu-item:not([aria-disabled="true"])')) == null ? void 0 : w.focus) == null || R.call(w);
- } catch (F) {
- (Y = console.debug) == null || Y.call(console, F);
+ (R = (w = (j = (K = x == null ? void 0 : x.value) == null ? void 0 : K.querySelector) == null ? void 0 : j.call(K, '.mjr-context-menu-item:not([aria-disabled="true"])')) == null ? void 0 : w.focus) == null || R.call(w);
+ } catch (O) {
+ (V = console.debug) == null || V.call(console, O);
}
}
- function Z(x, T) {
+ function S(x, K) {
var R;
if (!Array.isArray(x == null ? void 0 : x.submenu) || !x.submenu.length) {
gr();
return;
}
d();
- const v = T == null ? void 0 : T.currentTarget, w = (R = v == null ? void 0 : v.getBoundingClientRect) == null ? void 0 : R.call(v);
- YZ({
- x: Math.round(((w == null ? void 0 : w.right) || Kt.main.x || 0) + 6),
- y: Math.round(((w == null ? void 0 : w.top) || Kt.main.y || 0) - 4),
+ const j = K == null ? void 0 : K.currentTarget, w = (R = j == null ? void 0 : j.getBoundingClientRect) == null ? void 0 : R.call(j);
+ VZ({
+ x: Math.round(((w == null ? void 0 : w.right) || Bt.main.x || 0) + 6),
+ y: Math.round(((w == null ? void 0 : w.top) || Bt.main.y || 0) - 4),
items: x.submenu,
title: x.label || ""
});
}
- async function C(x, T, v = "main") {
+ async function W(x, K, j = "main") {
var w;
if (!(!x || x.type !== "item" || x.disabled)) {
if (Array.isArray(x.submenu) && x.submenu.length) {
- Z(x, T);
+ S(x, K);
return;
}
try {
@@ -27334,18 +27361,18 @@ const t0 = {
} catch (R) {
console.error("[ViewerContextMenu.vue] Action failed:", R);
} finally {
- x.closeOnSelect !== !1 ? Lo() : v === "submenu" && gr();
+ x.closeOnSelect !== !1 ? Lo() : j === "submenu" && gr();
}
}
}
- function g(x, T) {
+ function g(x, K) {
if (Array.isArray(x == null ? void 0 : x.submenu) && x.submenu.length) {
- Z(x, T);
+ S(x, K);
return;
}
gr();
}
- function A(x) {
+ function y(x) {
Array.isArray(x == null ? void 0 : x.submenu) && x.submenu.length && u();
}
function p() {
@@ -27355,47 +27382,47 @@ const t0 = {
u();
}
function L(x) {
- var w, R, Y, F, N, V;
- const T = x == null ? void 0 : x.target;
- ((R = (w = t.value) == null ? void 0 : w.contains) == null ? void 0 : R.call(w, T)) || ((F = (Y = n.value) == null ? void 0 : Y.contains) == null ? void 0 : F.call(Y, T)) || ((V = (N = i.value) == null ? void 0 : N.contains) == null ? void 0 : V.call(N, T)) || Lo();
+ var w, R, V, O, k, Y;
+ const K = x == null ? void 0 : x.target;
+ ((R = (w = t.value) == null ? void 0 : w.contains) == null ? void 0 : R.call(w, K)) || ((O = (V = n.value) == null ? void 0 : V.contains) == null ? void 0 : O.call(V, K)) || ((Y = (k = i.value) == null ? void 0 : k.contains) == null ? void 0 : Y.call(k, K)) || Lo();
}
- function h(x) {
+ function C(x) {
(x == null ? void 0 : x.key) === "Escape" && Lo();
}
function G() {
Lo();
}
- function W(x) {
- var T;
- String(((T = x == null ? void 0 : x.detail) == null ? void 0 : T.source) || "") !== "viewer" && Lo();
+ function Z(x) {
+ var K;
+ String(((K = x == null ? void 0 : x.detail) == null ? void 0 : K.source) || "") !== "viewer" && Lo();
}
function f(x) {
- const T = Kt.tags.asset;
- T && (T.tags = Array.isArray(x) ? [...x] : []);
+ const K = Bt.tags.asset;
+ K && (K.tags = Array.isArray(x) ? [...x] : []);
}
function X(x) {
- var v, w, R;
- const T = Array.isArray(x == null ? void 0 : x.tags) ? x.tags : [];
+ var j, w, R;
+ const K = Array.isArray(x == null ? void 0 : x.tags) ? x.tags : [];
try {
- (w = (v = Kt.tags).onChanged) == null || w.call(v, T);
- } catch (Y) {
- (R = console.debug) == null || R.call(console, Y);
+ (w = (j = Bt.tags).onChanged) == null || w.call(j, K);
+ } catch (V) {
+ (R = console.debug) == null || R.call(console, V);
}
}
- return cn(
- () => Kt.main.open,
+ return dn(
+ () => Bt.main.open,
async (x) => {
- x && (await y(Kt.main, t), S(t));
+ x && (await A(Bt.main, t), h(t));
}
- ), cn(
- () => Kt.submenu.open,
+ ), dn(
+ () => Bt.submenu.open,
async (x) => {
- x && (await y(Kt.submenu, n), S(n));
+ x && (await A(Bt.submenu, n), h(n));
}
- ), cn(
- () => Kt.tags.open,
+ ), dn(
+ () => Bt.tags.open,
async (x) => {
- x && await y(Kt.tags, i);
+ x && await A(Bt.tags, i);
}
), Dn(() => {
r = new AbortController();
@@ -27404,13 +27431,13 @@ const t0 = {
passive: !0,
signal: r.signal
};
- window.addEventListener("pointerdown", L, x), window.addEventListener("keydown", h, {
+ window.addEventListener("pointerdown", L, x), window.addEventListener("keydown", C, {
capture: !0,
signal: r.signal
}), window.addEventListener("scroll", G, x), window.addEventListener("wheel", G, x), window.addEventListener("resize", G, {
passive: !0,
signal: r.signal
- }), window.addEventListener("mjr-close-all-menus", W, {
+ }), window.addEventListener("mjr-close-all-menus", Z, {
signal: r.signal
});
}), _n(() => {
@@ -27418,113 +27445,113 @@ const t0 = {
d();
try {
r == null || r.abort();
- } catch (T) {
- (x = console.debug) == null || x.call(console, T);
+ } catch (K) {
+ (x = console.debug) == null || x.call(console, K);
}
r = null, Lo();
- }), (x, T) => {
- var v;
- return be(), Pi(ks, { to: "body" }, [
- xe(Kt).main.open ? (be(), Ce("div", {
+ }), (x, K) => {
+ var j;
+ return be(), Pi(Ns, { to: "body" }, [
+ ve(Bt).main.open ? (be(), Ze("div", {
key: 0,
ref_key: "mainMenuRef",
ref: t,
class: "mjr-viewer-context-menu mjr-context-menu",
- style: Lt(l.value),
+ style: vt(l.value),
role: "menu",
"aria-label": "Viewer context menu"
}, [
- (be(!0), Ce(Nt, null, Cn(xe(Kt).main.items, (w) => (be(), Ce(Nt, {
+ (be(!0), Ze(Nt, null, Zn(ve(Bt).main.items, (w) => (be(), Ze(Nt, {
key: w.id
}, [
- w.type === "separator" ? (be(), Ce("div", m0)) : (be(), Ce("button", {
+ w.type === "separator" ? (be(), Ze("div", m0)) : (be(), Ze("button", {
key: 1,
type: "button",
- class: Zn(["mjr-context-menu-item", {
+ class: An(["mjr-context-menu-item", {
"is-disabled": w.disabled,
"has-submenu": Array.isArray(w.submenu) && w.submenu.length
}]),
role: "menuitem",
"aria-disabled": w.disabled ? "true" : "false",
tabindex: w.disabled ? -1 : 0,
- onClick: (R) => C(w, R),
+ onClick: (R) => W(w, R),
onMouseenter: (R) => g(w, R),
- onMouseleave: (R) => A(w)
+ onMouseleave: (R) => y(w)
}, [
- ie("span", I0, [
- w.iconClass ? (be(), Ce("i", {
+ te("span", I0, [
+ w.iconClass ? (be(), Ze("i", {
key: 0,
- class: Zn(w.iconClass)
- }, null, 2)) : ft("", !0),
- ie("span", null, Ye(w.label), 1)
+ class: An(w.iconClass)
+ }, null, 2)) : yt("", !0),
+ te("span", null, Ne(w.label), 1)
]),
- ie("span", b0, [
- w.rightHint ? (be(), Ce("span", p0, Ye(w.rightHint), 1)) : ft("", !0),
- Array.isArray(w.submenu) && w.submenu.length ? (be(), Ce("span", y0, " > ")) : ft("", !0)
+ te("span", b0, [
+ w.rightHint ? (be(), Ze("span", p0, Ne(w.rightHint), 1)) : yt("", !0),
+ Array.isArray(w.submenu) && w.submenu.length ? (be(), Ze("span", y0, " > ")) : yt("", !0)
])
], 42, g0))
], 64))), 128))
- ], 4)) : ft("", !0),
- xe(Kt).submenu.open ? (be(), Ce("div", {
+ ], 4)) : yt("", !0),
+ ve(Bt).submenu.open ? (be(), Ze("div", {
key: 1,
ref_key: "submenuRef",
ref: n,
class: "mjr-viewer-rating-submenu mjr-context-menu",
- style: Lt(a.value),
+ style: vt(a.value),
role: "menu",
"aria-label": "Viewer context submenu",
onMouseenter: p,
onMouseleave: b
}, [
- (be(!0), Ce(Nt, null, Cn(xe(Kt).submenu.items, (w) => (be(), Ce(Nt, {
+ (be(!0), Ze(Nt, null, Zn(ve(Bt).submenu.items, (w) => (be(), Ze(Nt, {
key: w.id
}, [
- w.type === "separator" ? (be(), Ce("div", f0)) : (be(), Ce("button", {
+ w.type === "separator" ? (be(), Ze("div", f0)) : (be(), Ze("button", {
key: 1,
type: "button",
- class: Zn(["mjr-context-menu-item", { "is-disabled": w.disabled }]),
+ class: An(["mjr-context-menu-item", { "is-disabled": w.disabled }]),
role: "menuitem",
"aria-disabled": w.disabled ? "true" : "false",
tabindex: w.disabled ? -1 : 0,
- onClick: (R) => C(w, R, "submenu")
+ onClick: (R) => W(w, R, "submenu")
}, [
- ie("span", C0, [
- w.iconClass ? (be(), Ce("i", {
+ te("span", h0, [
+ w.iconClass ? (be(), Ze("i", {
key: 0,
- class: Zn(w.iconClass)
- }, null, 2)) : ft("", !0),
- ie("span", null, Ye(w.label), 1)
+ class: An(w.iconClass)
+ }, null, 2)) : yt("", !0),
+ te("span", null, Ne(w.label), 1)
]),
- w.rightHint ? (be(), Ce("span", Z0, Ye(w.rightHint), 1)) : ft("", !0)
- ], 10, h0))
+ w.rightHint ? (be(), Ze("span", Z0, Ne(w.rightHint), 1)) : yt("", !0)
+ ], 10, C0))
], 64))), 128))
- ], 36)) : ft("", !0),
- xe(Kt).tags.open && xe(Kt).tags.asset ? (be(), Ce("div", {
+ ], 36)) : yt("", !0),
+ ve(Bt).tags.open && ve(Bt).tags.asset ? (be(), Ze("div", {
key: 2,
ref_key: "tagsPopoverRef",
ref: i,
class: "mjr-viewer-popover",
- style: Lt(c.value)
+ style: vt(c.value)
}, [
- fn(gd, {
- asset: xe(Kt).tags.asset,
- "model-value": ((v = xe(Kt).tags.asset) == null ? void 0 : v.tags) || [],
+ Cn(gd, {
+ asset: ve(Bt).tags.asset,
+ "model-value": ((j = ve(Bt).tags.asset) == null ? void 0 : j.tags) || [],
"onUpdate:modelValue": f,
onTagsChange: X
}, null, 8, ["asset", "model-value"])
- ], 4)) : ft("", !0)
+ ], 4)) : yt("", !0)
]);
};
}
}, W0 = {
__name: "ViewerContextMenuPortal",
setup(e) {
- const t = Ae(""), n = ze(() => LZ(t.value));
+ const t = We(""), n = ze(() => LZ(t.value));
return Dn(() => {
t.value = jZ();
}), _n(() => {
vZ(t.value), t.value = "";
- }), (i, o) => n.value ? (be(), Pi(A0, { key: 0 })) : ft("", !0);
+ }), (i, o) => n.value ? (be(), Pi(A0, { key: 0 })) : yt("", !0);
}
}, w0 = {
__name: "ViewerPortal",
@@ -27536,7 +27563,7 @@ const t0 = {
if (!r.length) return;
const l = Math.max(0, Math.min(Number(o == null ? void 0 : o.index) || 0, r.length - 1)), a = String((o == null ? void 0 : o.mode) || "").trim().toLowerCase();
try {
- t || (t = ms()), (c = t.open) == null || c.call(t, r, l), (a === "ab" || a === "sidebyside") && ((s = t.setMode) == null || s.call(t, a));
+ t || (t = gs()), (c = t.open) == null || c.call(t, r, l), (a === "ab" || a === "sidebyside") && ((s = t.setMode) == null || s.call(t, a));
} catch (u) {
(d = console.debug) == null || d.call(console, u);
}
@@ -27549,19 +27576,19 @@ const t0 = {
(i = console.debug) == null || i.call(console, l);
}
try {
- t = ms();
+ t = gs();
} catch (l) {
(o = console.debug) == null || o.call(console, l);
}
try {
- window.addEventListener(ht.OPEN_VIEWER, n);
+ window.addEventListener(ft.OPEN_VIEWER, n);
} catch (l) {
(r = console.debug) == null || r.call(console, l);
}
}), _n(() => {
var i, o, r, l;
try {
- window.removeEventListener(ht.OPEN_VIEWER, n);
+ window.removeEventListener(ft.OPEN_VIEWER, n);
} catch (a) {
(i = console.debug) == null || i.call(console, a);
}
@@ -27576,10 +27603,10 @@ const t0 = {
(l = console.debug) == null || l.call(console, a);
}
t = null;
- }), (i, o) => (be(), Ce(Nt, null, [
- fn(n0),
- fn(t0),
- fn(W0)
+ }), (i, o) => (be(), Ze(Nt, null, [
+ Cn(n0),
+ Cn(t0),
+ Cn(W0)
], 64));
}
};
@@ -27599,19 +27626,19 @@ function M0() {
(t = console.debug) == null || t.call(console, i);
}
try {
- Vb({ force: !0 });
+ Yb({ force: !0 });
} catch (i) {
(n = console.debug) == null || n.call(console, i);
}
e = null;
});
}
-const S0 = {
+const G0 = {
__name: "GlobalRuntime",
setup(e) {
return M0(), (t, n) => (be(), Pi(w0));
}
-}, G0 = !1, dn = {
+}, S0 = !1, mn = {
gridRenderCount: 0,
gridRenderTotalMs: 0,
searchQueryCount: 0,
@@ -27622,23 +27649,23 @@ const S0 = {
thumbnailLoadCount: 0,
thumbnailLoadFailures: 0,
errorCounts: {}
-}, hl = /* @__PURE__ */ new Map();
-function Is(e) {
+}, Cl = /* @__PURE__ */ new Map();
+function bs(e) {
const t = performance.now();
- hl.set(e, t);
+ Cl.set(e, t);
try {
performance.mark(`${e}-start`);
} catch {
}
}
-function Nb(e, t) {
- const n = hl.get(e);
+function kb(e, t) {
+ const n = Cl.get(e);
if (!n)
return console.warn(`[Majoor Metrics] Timer not found: ${e}`), 0;
const i = performance.now() - n;
- if (hl.delete(e), t) {
+ if (Cl.delete(e), t) {
const o = `${t}Count`, r = `${t}TotalMs`;
- typeof dn[o] == "number" && (dn[o]++, dn[r] += i);
+ typeof mn[o] == "number" && (mn[o]++, mn[r] += i);
}
i > 100 && console.log(`[Majoor Metrics] ${e}: ${i.toFixed(2)}ms`);
try {
@@ -27648,7 +27675,7 @@ function Nb(e, t) {
return i;
}
function x0(e) {
- return hl.has(e);
+ return Cl.has(e);
}
function Rb(e) {
try {
@@ -27661,51 +27688,51 @@ function j0(e) {
try {
performance.mark(`${e}-end`), performance.measure(e, `${e}-start`, `${e}-end`);
const i = ((t = performance.getEntriesByName(e)[0]) == null ? void 0 : t.duration) || 0;
- return (G0 || i > 100) && console.log(`[Majoor Metrics] Measure ${e}: ${i.toFixed(2)}ms`), i;
+ return (S0 || i > 100) && console.log(`[Majoor Metrics] Measure ${e}: ${i.toFixed(2)}ms`), i;
} catch {
return null;
}
}
function v0(e, t = !1) {
- dn.apiCallCount++, dn.apiCallTotalMs += e, t && dn.apiErrorCount++;
+ mn.apiCallCount++, mn.apiCallTotalMs += e, t && mn.apiErrorCount++;
}
-function Fb(e) {
- dn.gridRenderCount++, dn.gridRenderTotalMs += e;
+function Ob(e) {
+ mn.gridRenderCount++, mn.gridRenderTotalMs += e;
}
function L0(e) {
- dn.searchQueryCount++, dn.searchQueryTotalMs += e;
+ mn.searchQueryCount++, mn.searchQueryTotalMs += e;
}
-function V0(e) {
- dn.thumbnailLoadCount++, e || dn.thumbnailLoadFailures++;
+function Y0(e) {
+ mn.thumbnailLoadCount++, e || mn.thumbnailLoadFailures++;
}
-function Y0(e, t) {
- dn.errorCounts[e] = (dn.errorCounts[e] || 0) + 1;
+function V0(e, t) {
+ mn.errorCounts[e] = (mn.errorCounts[e] || 0) + 1;
}
-function Ob() {
+function Fb() {
return {
- ...dn,
+ ...mn,
averages: {
- gridRenderMs: dn.gridRenderCount > 0 ? dn.gridRenderTotalMs / dn.gridRenderCount : 0,
- searchQueryMs: dn.searchQueryCount > 0 ? dn.searchQueryTotalMs / dn.searchQueryCount : 0,
- apiCallMs: dn.apiCallCount > 0 ? dn.apiCallTotalMs / dn.apiCallCount : 0
+ gridRenderMs: mn.gridRenderCount > 0 ? mn.gridRenderTotalMs / mn.gridRenderCount : 0,
+ searchQueryMs: mn.searchQueryCount > 0 ? mn.searchQueryTotalMs / mn.searchQueryCount : 0,
+ apiCallMs: mn.apiCallCount > 0 ? mn.apiCallTotalMs / mn.apiCallCount : 0
},
rates: {
- apiErrorRate: dn.apiCallCount > 0 ? (dn.apiErrorCount / dn.apiCallCount * 100).toFixed(2) + "%" : "0%",
- thumbnailFailureRate: dn.thumbnailLoadCount > 0 ? (dn.thumbnailLoadFailures / dn.thumbnailLoadCount * 100).toFixed(2) + "%" : "0%"
+ apiErrorRate: mn.apiCallCount > 0 ? (mn.apiErrorCount / mn.apiCallCount * 100).toFixed(2) + "%" : "0%",
+ thumbnailFailureRate: mn.thumbnailLoadCount > 0 ? (mn.thumbnailLoadFailures / mn.thumbnailLoadCount * 100).toFixed(2) + "%" : "0%"
}
};
}
-function k0(e) {
- const t = `${e}Count`, n = `${e}TotalMs`, i = dn[t], o = dn[n];
+function X0(e) {
+ const t = `${e}Count`, n = `${e}TotalMs`, i = mn[t], o = mn[n];
return i > 0 ? o / i : 0;
}
-function X0() {
- Object.keys(dn).forEach((e) => {
- typeof dn[e] == "number" ? dn[e] = 0 : typeof dn[e] == "object" && (dn[e] = {});
- }), hl.clear(), console.log("[Majoor Metrics] Metrics reset");
-}
function N0() {
- const e = Ob();
+ Object.keys(mn).forEach((e) => {
+ typeof mn[e] == "number" ? mn[e] = 0 : typeof mn[e] == "object" && (mn[e] = {});
+ }), Cl.clear(), console.log("[Majoor Metrics] Metrics reset");
+}
+function k0() {
+ const e = Fb();
console.group("[Majoor Assets Manager] Performance Metrics"), console.table({
"Grid Renders": e.gridRenderCount,
"Avg Grid Render": `${e.averages.gridRenderMs.toFixed(2)}ms`,
@@ -27718,23 +27745,23 @@ function N0() {
"Thumbnail Loads": e.thumbnailLoadCount,
"Thumbnail Failures": e.thumbnailLoadFailures,
"Failure Rate": e.rates.thumbnailFailureRate
- }), Object.keys(dn.errorCounts).length > 0 && console.log("Error Counts:", dn.errorCounts), console.groupEnd();
+ }), Object.keys(mn.errorCounts).length > 0 && console.log("Error Counts:", mn.errorCounts), console.groupEnd();
}
typeof window < "u" && (window.MajoorMetrics = {
- startTimer: Is,
- endTimer: Nb,
+ startTimer: bs,
+ endTimer: kb,
hasTimer: x0,
mark: Rb,
measure: j0,
trackApiCall: v0,
- trackGridRender: Fb,
+ trackGridRender: Ob,
trackSearchQuery: L0,
- trackThumbnailLoad: V0,
- trackError: Y0,
- getMetricsReport: Ob,
- getAverageDuration: k0,
- resetMetrics: X0,
- exportMetrics: N0
+ trackThumbnailLoad: Y0,
+ trackError: V0,
+ getMetricsReport: Fb,
+ getAverageDuration: X0,
+ resetMetrics: N0,
+ exportMetrics: k0
});
const zb = [
{
@@ -27748,7 +27775,7 @@ const zb = [
hintKey: "tool.ffprobe.hint"
}
];
-let Gr = !1, dm = null, um = null;
+let Sr = !1, dm = null, um = null;
const Jb = "__MJR_STATUS_DOT_CACHE__", gi = {
ACTIVE: "active",
COOLDOWN: "cooldown",
@@ -27760,14 +27787,14 @@ const Jb = "__MJR_STATUS_DOT_CACHE__", gi = {
};
function ui(e) {
var t;
- Gr = !!e;
+ Sr = !!e;
try {
- globalThis._mjrMaintenanceActive = Gr;
+ globalThis._mjrMaintenanceActive = Sr;
} catch (n) {
(t = console.debug) == null || t.call(console, n);
}
}
-function bs(e) {
+function ps(e) {
const t = Number(e);
if (!Number.isFinite(t) || t <= 0) return "0 B";
const n = ["B", "KB", "MB", "GB", "TB"];
@@ -27777,7 +27804,7 @@ function bs(e) {
const r = i >= 100 ? 0 : i >= 10 ? 1 : 2;
return `${i.toFixed(r)} ${n[o]}`;
}
-function Cl(e, t, n = null) {
+function hl(e, t, n = null) {
if (!e) return;
if (e.replaceChildren(), (Array.isArray(t) ? t.filter((o) => o != null && String(o).trim() !== "") : []).forEach((o, r) => {
r > 0 && e.appendChild(document.createElement("br")), e.appendChild(document.createTextNode(String(o)));
@@ -27793,7 +27820,7 @@ function Wi(e, t, n) {
const i = document.createElement("span");
i.style.fontSize = "11px", i.style.opacity = "0.7", i.textContent = String(n || ""), e.appendChild(i);
}
-function Wn(e, t = "neutral", n = {}) {
+function wn(e, t = "neutral", n = {}) {
var a, c;
if (!e) return;
const i = (n == null ? void 0 : n.toast) !== !1, o = {
@@ -27840,9 +27867,9 @@ function Wn(e, t = "neutral", n = {}) {
browser: m("status.toast.browser", "Index status: browser scope")
}, I = t === "error" ? "error" : t === "warning" ? "warning" : t === "success" ? "success" : "info";
try {
- Ze(u[t] || u.info, I, 1800, { noHistory: !0 });
- } catch (y) {
- (c = console.debug) == null || c.call(console, y);
+ Ae(u[t] || u.info, I, 1800, { noHistory: !0 });
+ } catch (A) {
+ (c = console.debug) == null || c.call(console, A);
}
}
}
@@ -27851,7 +27878,7 @@ function ma(e) {
const t = String(e || "").toLowerCase();
return t === "all" ? m("scope.allFull", "All (Inputs + Outputs)") : t === "input" || t === "inputs" ? m("scope.input", "Inputs") : t === "custom" ? m("scope.custom", "Browser") : m("scope.output", "Outputs");
}
-function F0(e, t = "") {
+function O0(e, t = "") {
if (!e || typeof e != "object")
return t ? m("status.watcher.disabledScoped", "Watcher: disabled ({scope})", {
scope: ma(t)
@@ -27881,7 +27908,7 @@ function mm(e = "") {
try {
(t = window == null ? void 0 : window.dispatchEvent) == null || t.call(
window,
- new CustomEvent(ht.OPEN_MESSAGE_HISTORY, {
+ new CustomEvent(ft.OPEN_MESSAGE_HISTORY, {
detail: { reason: String(e || "status-action") }
})
);
@@ -27901,12 +27928,12 @@ Cancel = continue without vectors`
e || m("dialog.vectorsReset.title", "AI vectors")
);
}
-function O0(e = {}) {
- var x, T;
+function F0(e = {}) {
+ var x, K;
const t = typeof (e == null ? void 0 : e.getScanContext) == "function" ? e.getScanContext : null;
ui(!1);
const n = document.createElement("div");
- n.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;", Wn(n, "info", { toast: !1 });
+ n.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;", wn(n, "info", { toast: !1 });
const i = document.createElement("div");
i.style.cssText = "display: flex; align-items: center; gap: 10px; margin-bottom: 8px;";
const o = document.createElement("span");
@@ -27935,40 +27962,40 @@ function O0(e = {}) {
background: rgba(255,255,255,0.04);
color: inherit;
`, I.title = m("status.dbBackupSelectHint", "Select a DB backup to restore");
- let y = !1, S = null;
- const Z = (v) => {
+ let A = !1, h = null;
+ const S = (j) => {
I.replaceChildren();
const w = document.createElement("option");
- w.value = "", w.textContent = String(v || ""), w.disabled = !0, w.selected = !0, I.appendChild(w), y = !1, I.disabled = !0, S && (S.disabled = !0);
+ w.value = "", w.textContent = String(j || ""), w.disabled = !0, w.selected = !0, I.appendChild(w), A = !1, I.disabled = !0, h && (h.disabled = !0);
};
- Z(m("status.dbBackupLoading", "Loading DB backups..."));
- const C = async (v = "") => {
+ S(m("status.dbBackupLoading", "Loading DB backups..."));
+ const W = async (j = "") => {
var w;
try {
const R = await zf();
if (!(R != null && R.ok)) {
- Z(m("status.dbBackupNone", "No DB backup found"));
+ S(m("status.dbBackupNone", "No DB backup found"));
return;
}
- const Y = Array.isArray((w = R == null ? void 0 : R.data) == null ? void 0 : w.items) ? R.data.items : [];
- if (!Y.length) {
- Z(m("status.dbBackupNone", "No DB backup found"));
+ const V = Array.isArray((w = R == null ? void 0 : R.data) == null ? void 0 : w.items) ? R.data.items : [];
+ if (!V.length) {
+ S(m("status.dbBackupNone", "No DB backup found"));
return;
}
I.replaceChildren();
- let F = !1;
- for (const N of Y) {
- const V = String((N == null ? void 0 : N.name) || "");
- if (!V) continue;
- const k = Number((N == null ? void 0 : N.mtime) || 0), K = Number((N == null ? void 0 : N.size_bytes) || 0), z = k > 0 ? new Date(k * 1e3).toLocaleString() : "", B = `${V}${z ? ` (${z}` : ""}${K > 0 ? `, ${bs(K)}` : ""}${z ? ")" : ""}`, J = document.createElement("option");
- J.value = V, J.textContent = B, v && v === V && (J.selected = !0, F = !0), I.appendChild(J);
+ let O = !1;
+ for (const k of V) {
+ const Y = String((k == null ? void 0 : k.name) || "");
+ if (!Y) continue;
+ const N = Number((k == null ? void 0 : k.mtime) || 0), U = Number((k == null ? void 0 : k.size_bytes) || 0), z = N > 0 ? new Date(N * 1e3).toLocaleString() : "", T = `${Y}${z ? ` (${z}` : ""}${U > 0 ? `, ${ps(U)}` : ""}${z ? ")" : ""}`, J = document.createElement("option");
+ J.value = Y, J.textContent = T, j && j === Y && (J.selected = !0, O = !0), I.appendChild(J);
}
- y = I.childNodes.length > 0, I.disabled = !y, y && !F && I.childNodes[0] && (I.value = String(I.childNodes[0].value || "")), S && (S.disabled = !y);
+ A = I.childNodes.length > 0, I.disabled = !A, A && !O && I.childNodes[0] && (I.value = String(I.childNodes[0].value || "")), h && (h.disabled = !A);
} catch {
- Z(m("status.dbBackupNone", "No DB backup found"));
+ S(m("status.dbBackupNone", "No DB backup found"));
}
};
- C(), u.appendChild(I);
+ W(), u.appendChild(I);
const g = document.createElement("button");
g.type = "button", g.textContent = m("btn.dbSave", "Save DB"), g.title = m("status.dbSaveHint", "Save a DB snapshot into archive folder"), g.style.cssText = `
padding: 5px 10px;
@@ -27978,46 +28005,46 @@ function O0(e = {}) {
background: transparent;
color: inherit;
cursor: pointer;
- `, g.onclick = async (v) => {
- var Y, F, N;
- v.stopPropagation(), ui(!0);
- const w = g.textContent, R = !!(S != null && S.disabled);
- g.disabled = !0, S && (S.disabled = !0), g.textContent = m("btn.saving", "Saving..."), o.style.background = "var(--mjr-status-info, #64B5F6)", Wn(n, "info");
+ `, g.onclick = async (j) => {
+ var V, O, k;
+ j.stopPropagation(), ui(!0);
+ const w = g.textContent, R = !!(h != null && h.disabled);
+ g.disabled = !0, h && (h.disabled = !0), g.textContent = m("btn.saving", "Saving..."), o.style.background = "var(--mjr-status-info, #64B5F6)", wn(n, "info");
try {
- const V = await Jf();
- if (V != null && V.ok) {
- const k = String(((Y = V == null ? void 0 : V.data) == null ? void 0 : Y.name) || "").trim(), K = Number(((F = V == null ? void 0 : V.data) == null ? void 0 : F.size_bytes) || 0);
- Ze(m("toast.dbSaveSuccess", "Database backup saved"), "success", 2200, {
+ const Y = await Jf();
+ if (Y != null && Y.ok) {
+ const N = String(((V = Y == null ? void 0 : Y.data) == null ? void 0 : V.name) || "").trim(), U = Number(((O = Y == null ? void 0 : Y.data) == null ? void 0 : O.size_bytes) || 0);
+ Ae(m("toast.dbSaveSuccess", "Database backup saved"), "success", 2200, {
history: {
title: m("btn.dbSave", "Save DB"),
- detail: k ? `${k}${K > 0 ? ` | ${bs(K)}` : ""}` : m("toast.dbSaveSuccess", "Database backup saved"),
+ detail: N ? `${N}${U > 0 ? ` | ${ps(U)}` : ""}` : m("toast.dbSaveSuccess", "Database backup saved"),
operation: "save_db",
- source: k || "archive",
+ source: N || "archive",
forceStore: !0
}
- }), await C(k);
+ }), await W(N);
} else
- Ze(
- (V == null ? void 0 : V.error) || m("toast.dbSaveFailed", "Failed to save DB backup"),
+ Ae(
+ (Y == null ? void 0 : Y.error) || m("toast.dbSaveFailed", "Failed to save DB backup"),
"error"
);
- } catch (V) {
- Ze(
- (V == null ? void 0 : V.message) || m("toast.dbSaveFailed", "Failed to save DB backup"),
+ } catch (Y) {
+ Ae(
+ (Y == null ? void 0 : Y.message) || m("toast.dbSaveFailed", "Failed to save DB backup"),
"error"
);
} finally {
- ui(!1), g.disabled = !1, S && (S.disabled = R || !y), g.textContent = w;
+ ui(!1), g.disabled = !1, h && (h.disabled = R || !A), g.textContent = w;
try {
- const V = t ? t() : null;
- await Ni(o, c, s, V, null, {
+ const Y = t ? t() : null;
+ await ki(o, c, s, Y, null, {
force: !0
});
- } catch (V) {
- (N = console.debug) == null || N.call(console, V);
+ } catch (Y) {
+ (k = console.debug) == null || k.call(console, Y);
}
}
- }, u.appendChild(g), S = document.createElement("button"), S.type = "button", S.textContent = m("btn.dbRestore", "Restore"), S.title = m("status.dbRestoreHint", "Restore selected DB backup"), S.style.cssText = `
+ }, u.appendChild(g), h = document.createElement("button"), h.type = "button", h.textContent = m("btn.dbRestore", "Restore"), h.title = m("status.dbRestoreHint", "Restore selected DB backup"), h.style.cssText = `
padding: 5px 10px;
font-size: 11px;
border-radius: 6px;
@@ -28025,12 +28052,12 @@ function O0(e = {}) {
background: transparent;
color: inherit;
cursor: pointer;
- `, S.onclick = async (v) => {
- var N, V;
- v.stopPropagation();
+ `, h.onclick = async (j) => {
+ var k, Y;
+ j.stopPropagation();
const w = String(I.value || "");
if (!w) {
- Ze(m("toast.dbRestoreSelect", "Select a DB backup first"), "warning", 2e3);
+ Ae(m("toast.dbRestoreSelect", "Select a DB backup first"), "warning", 2e3);
return;
}
if (!await yi(
@@ -28042,7 +28069,7 @@ function O0(e = {}) {
${w}`,
m("btn.dbRestore", "Restore DB")
)) return;
- Ze(m("toast.dbRestoreStarted", "DB restore started"), "info", 1800, {
+ Ae(m("toast.dbRestoreStarted", "DB restore started"), "info", 1800, {
history: {
trackId: "maintenance:restore_db",
title: m("btn.dbRestore", "Restore DB"),
@@ -28053,37 +28080,37 @@ ${w}`,
forceStore: !0
}
}), ui(!0);
- const Y = S.textContent, F = !!g.disabled;
- S.disabled = !0, g.disabled = !0, I.disabled = !0, S.textContent = m("btn.restoring", "Restoring..."), o.style.background = "var(--mjr-status-warning, #FFA726)", Wn(n, "warning");
+ const V = h.textContent, O = !!g.disabled;
+ h.disabled = !0, g.disabled = !0, I.disabled = !0, h.textContent = m("btn.restoring", "Restoring..."), o.style.background = "var(--mjr-status-warning, #FFA726)", wn(n, "warning");
try {
- const k = await Tf({ name: w, useLatest: !1 });
- k != null && k.ok ? await C(String(((N = k == null ? void 0 : k.data) == null ? void 0 : N.name) || w || "")) : Ze(
- (k == null ? void 0 : k.error) || m("toast.dbRestoreFailed", "Failed to restore DB backup"),
+ const N = await Tf({ name: w, useLatest: !1 });
+ N != null && N.ok ? await W(String(((k = N == null ? void 0 : N.data) == null ? void 0 : k.name) || w || "")) : Ae(
+ (N == null ? void 0 : N.error) || m("toast.dbRestoreFailed", "Failed to restore DB backup"),
"error"
);
- } catch (k) {
- Ze(
- (k == null ? void 0 : k.message) || m("toast.dbRestoreFailed", "Failed to restore DB backup"),
+ } catch (N) {
+ Ae(
+ (N == null ? void 0 : N.message) || m("toast.dbRestoreFailed", "Failed to restore DB backup"),
"error"
);
} finally {
- ui(!1), S.disabled = !y, g.disabled = F, I.disabled = !y, S.textContent = Y, _r("db-restore");
+ ui(!1), h.disabled = !A, g.disabled = O, I.disabled = !A, h.textContent = V, _r("db-restore");
try {
- const k = t ? t() : null;
- await Ni(o, c, s, k, null, {
+ const N = t ? t() : null;
+ await ki(o, c, s, N, null, {
force: !0
});
- } catch (k) {
- (V = console.debug) == null || V.call(console, k);
+ } catch (N) {
+ (Y = console.debug) == null || Y.call(console, N);
}
}
- }, u.appendChild(S), a.appendChild(u);
- const A = document.createElement("div");
- A.style.cssText = "margin-top: 10px; display: flex; justify-content: flex-end; gap: 8px;";
+ }, u.appendChild(h), a.appendChild(u);
+ const y = document.createElement("div");
+ y.style.cssText = "margin-top: 10px; display: flex; justify-content: flex-end; gap: 8px;";
const p = document.createElement("div");
p.style.cssText = "margin-top: 8px; font-size: 11px; opacity: 0.9; line-height: 1.35; white-space: pre-wrap;", p.textContent = "";
- const b = (v, w = "neutral") => {
- const R = String(v || "").trim();
+ const b = (j, w = "neutral") => {
+ const R = String(j || "").trim();
if (p.textContent = R, !R) {
p.style.color = "inherit", p.style.opacity = "0.9";
return;
@@ -28118,9 +28145,9 @@ ${w}`,
L.style.borderColor = "rgba(255,255,255,0.6)", L.style.background = "rgba(255,255,255,0.08)";
}, L.onmouseleave = () => {
L.style.borderColor = "rgba(255,255,255,0.25)", L.style.background = "transparent";
- }, L.onclick = async (v) => {
- var F;
- v.stopPropagation();
+ }, L.onclick = async (j) => {
+ var O;
+ j.stopPropagation();
const w = await gm(m("btn.resetIndex", "Reset index"));
if (!await yi(
w ? m(
@@ -28135,15 +28162,15 @@ Continue?`
m("dialog.resetIndex.title", "Reset index?")
)) return;
mm("reset-index"), ui(!0);
- const Y = L.textContent;
- L.disabled = !0, L.textContent = m("btn.resetting"), o.style.background = "var(--mjr-status-info, #64B5F6)", Wn(n, "info");
+ const V = L.textContent;
+ L.disabled = !0, L.textContent = m("btn.resetting"), o.style.background = "var(--mjr-status-info, #64B5F6)", wn(n, "info");
try {
- const N = t ? t() : {}, V = String((N == null ? void 0 : N.scope) || "output").toLowerCase(), k = (N == null ? void 0 : N.customRootId) || (N == null ? void 0 : N.custom_root_id) || (N == null ? void 0 : N.root_id) || null, K = V === "custom" && !k, J = await _d({
- scope: K ? "all" : V,
- customRootId: K ? null : k,
+ const k = t ? t() : {}, Y = String((k == null ? void 0 : k.scope) || "output").toLowerCase(), N = (k == null ? void 0 : k.customRootId) || (k == null ? void 0 : k.custom_root_id) || (k == null ? void 0 : k.root_id) || null, U = Y === "custom" && !N, J = await _d({
+ scope: U ? "all" : Y,
+ customRootId: U ? null : N,
reindex: !0,
maintenance_force: !0,
- hard_reset_db: V === "all" && !w,
+ hard_reset_db: Y === "all" && !w,
clear_scan_journal: !0,
clear_metadata_cache: !0,
clear_asset_metadata: !0,
@@ -28151,23 +28178,23 @@ Continue?`
preserve_vectors: w,
rebuild_fts: !0
});
- J != null && J.ok ? (o.style.background = "var(--mjr-status-success, #4CAF50)", Wn(n, "success")) : (o.style.background = "var(--mjr-status-error, #f44336)", Wn(n, "error"));
+ J != null && J.ok ? (o.style.background = "var(--mjr-status-success, #4CAF50)", wn(n, "success")) : (o.style.background = "var(--mjr-status-error, #f44336)", wn(n, "error"));
} catch {
- o.style.background = "var(--mjr-status-error, #f44336)", Wn(n, "error");
+ o.style.background = "var(--mjr-status-error, #f44336)", wn(n, "error");
} finally {
- ui(!1), L.disabled = !1, L.textContent = Y, _r("index-reset");
+ ui(!1), L.disabled = !1, L.textContent = V, _r("index-reset");
try {
- const N = t ? t() : null;
- await Ni(o, c, s, N, null, {
+ const k = t ? t() : null;
+ await ki(o, c, s, k, null, {
force: !0
});
- } catch (N) {
- (F = console.debug) == null || F.call(console, N);
+ } catch (k) {
+ (O = console.debug) == null || O.call(console, k);
}
}
};
- const h = document.createElement("button");
- h.type = "button", h.textContent = "Backfill vectors", h.title = "Compute missing AI vector embeddings for existing assets.", h.style.cssText = `
+ const C = document.createElement("button");
+ C.type = "button", C.textContent = "Backfill vectors", C.title = "Compute missing AI vector embeddings for existing assets.", C.style.cssText = `
padding: 5px 12px;
font-size: 11px;
border-radius: 6px;
@@ -28176,18 +28203,18 @@ Continue?`
color: inherit;
cursor: pointer;
transition: border 0.2s, background 0.2s;
- `, h.onmouseenter = () => {
- h.style.borderColor = "rgba(0, 188, 212, 0.8)", h.style.background = "rgba(0, 188, 212, 0.12)";
- }, h.onmouseleave = () => {
- h.style.borderColor = "rgba(0, 188, 212, 0.45)", h.style.background = "transparent";
- }, h.onclick = async (v) => {
- var B, J, P, H, $, E, oe, M, j;
- v.stopPropagation();
- const w = t ? t() : {}, R = String((w == null ? void 0 : w.scope) || "output").toLowerCase(), Y = String(
+ `, C.onmouseenter = () => {
+ C.style.borderColor = "rgba(0, 188, 212, 0.8)", C.style.background = "rgba(0, 188, 212, 0.12)";
+ }, C.onmouseleave = () => {
+ C.style.borderColor = "rgba(0, 188, 212, 0.45)", C.style.background = "transparent";
+ }, C.onclick = async (j) => {
+ var T, J, P, E, $, H, ne, M, v;
+ j.stopPropagation();
+ const w = t ? t() : {}, R = String((w == null ? void 0 : w.scope) || "output").toLowerCase(), V = String(
(w == null ? void 0 : w.customRootId) || (w == null ? void 0 : w.custom_root_id) || (w == null ? void 0 : w.root_id) || ""
).trim();
- if (R === "custom" && !Y) {
- Ze(
+ if (R === "custom" && !V) {
+ Ae(
m(
"status.customBrowserScanDisabledHint",
"Use Outputs, Inputs, or All to run indexing scans"
@@ -28200,71 +28227,71 @@ Continue?`
);
return;
}
- const N = R || "output", V = ma(N);
+ const k = R || "output", Y = ma(k);
mm("vector-backfill");
- const k = {
+ const N = {
history: {
- trackId: `vector-backfill:status:${N}:${Y || "default"}`,
+ trackId: `vector-backfill:status:${k}:${V || "default"}`,
title: "Vector Backfill",
- source: V,
+ source: Y,
operation: "vector_backfill",
forceStore: !0
}
};
ui(!0);
- const K = h.textContent, z = L.textContent;
- h.disabled = !0, L.disabled = !0, h.textContent = "Backfilling...", b(`Backfill started (${V})...`, "info"), tl(
- { summary: "Vector Backfill", detail: `Started (${V})` },
+ const U = C.textContent, z = L.textContent;
+ C.disabled = !0, L.disabled = !0, C.textContent = "Backfilling...", b(`Backfill started (${Y})...`, "info"), tl(
+ { summary: "Vector Backfill", detail: `Started (${Y})` },
"info",
0,
- { history: { ...k.history, status: "started", detail: `Started (${V})` } }
- ), o.style.background = "var(--mjr-status-info, #64B5F6)", Wn(n, "info");
+ { history: { ...N.history, status: "started", detail: `Started (${Y})` } }
+ ), o.style.background = "var(--mjr-status-info, #64B5F6)", wn(n, "info");
try {
- const O = {
- scope: N,
+ const F = {
+ scope: k,
onProgress: (q) => {
- const ee = String((q == null ? void 0 : q.status) || "").toLowerCase(), ce = (q == null ? void 0 : q.progress) || (q == null ? void 0 : q.result) || {}, ue = Number((ce == null ? void 0 : ce.candidates) || (ce == null ? void 0 : ce.processed) || 0), U = Number((ce == null ? void 0 : ce.candidate_total) || ue || 0), Q = Number((ce == null ? void 0 : ce.eligible_total) || (ce == null ? void 0 : ce.total_assets) || 0), _ = Number((ce == null ? void 0 : ce.indexed) || 0), le = Number((ce == null ? void 0 : ce.skipped) || 0), de = Number((ce == null ? void 0 : ce.errors) || 0);
+ const ee = String((q == null ? void 0 : q.status) || "").toLowerCase(), ae = (q == null ? void 0 : q.progress) || (q == null ? void 0 : q.result) || {}, ue = Number((ae == null ? void 0 : ae.candidates) || (ae == null ? void 0 : ae.processed) || 0), B = Number((ae == null ? void 0 : ae.candidate_total) || ue || 0), Q = Number((ae == null ? void 0 : ae.eligible_total) || (ae == null ? void 0 : ae.total_assets) || 0), _ = Number((ae == null ? void 0 : ae.indexed) || 0), le = Number((ae == null ? void 0 : ae.skipped) || 0), ce = Number((ae == null ? void 0 : ae.errors) || 0);
if (ee === "queued") {
b("Backfill queued…", "info"), tl(
- { summary: "Vector Backfill", detail: `Queued (${V})` },
+ { summary: "Vector Backfill", detail: `Queued (${Y})` },
"info",
0,
{
history: {
- ...k.history,
+ ...N.history,
status: "queued",
- detail: `Queued (${V})`,
+ detail: `Queued (${Y})`,
progress: { current: 0, total: 1, percent: 0, label: "queued" }
}
}
);
return;
}
- if (ee === "running" || ue > 0 || U > 0 || Q > 0 || _ > 0 || le > 0 || de > 0) {
- const se = Q > 0 ? `Indexed ${_}/${Q} assets, candidates ${U}, skipped ${le}, errors ${de}` : `Candidates ${ue}, indexed ${_}, skipped ${le}, errors ${de}`;
+ if (ee === "running" || ue > 0 || B > 0 || Q > 0 || _ > 0 || le > 0 || ce > 0) {
+ const de = Q > 0 ? `Indexed ${_}/${Q} assets, candidates ${B}, skipped ${le}, errors ${ce}` : `Candidates ${ue}, indexed ${_}, skipped ${le}, errors ${ce}`;
b(
- Q > 0 ? `Backfill running — indexed ${_}/${Q} assets, candidates ${U}, skipped ${le}, errors ${de}` : `Backfill running — candidates ${ue}, indexed ${_}, skipped ${le}, errors ${de}`,
+ Q > 0 ? `Backfill running — indexed ${_}/${Q} assets, candidates ${B}, skipped ${le}, errors ${ce}` : `Backfill running — candidates ${ue}, indexed ${_}, skipped ${le}, errors ${ce}`,
"info"
), tl(
- { summary: "Vector Backfill", detail: se },
+ { summary: "Vector Backfill", detail: de },
"info",
0,
{
history: {
- ...k.history,
+ ...N.history,
status: "running",
- detail: se,
+ detail: de,
progress: {
- current: Q > 0 ? _ : _ + le + de,
- total: Q > 0 ? Q : Math.max(ue, _ + le + de),
- percent: Q > 0 ? Math.round(_ / Q * 100) : Math.max(ue, _ + le + de) > 0 ? Math.round(
- (_ + le + de) / Math.max(ue, _ + le + de) * 100
+ current: Q > 0 ? _ : _ + le + ce,
+ total: Q > 0 ? Q : Math.max(ue, _ + le + ce),
+ percent: Q > 0 ? Math.round(_ / Q * 100) : Math.max(ue, _ + le + ce) > 0 ? Math.round(
+ (_ + le + ce) / Math.max(ue, _ + le + ce) * 100
) : null,
eligible_total: Q > 0 ? Q : void 0,
- candidate_total: U > 0 ? U : void 0,
+ candidate_total: B > 0 ? B : void 0,
indexed: _,
skipped: le,
- errors: de,
+ errors: ce,
label: "running"
}
}
@@ -28273,56 +28300,56 @@ Continue?`
}
}
};
- N === "custom" && Y && (O.customRootId = Y);
- const D = await Tg(64, O);
+ k === "custom" && V && (F.customRootId = V);
+ const D = await Tg(64, F);
if (D != null && D.ok) {
- const q = String(((B = D == null ? void 0 : D.data) == null ? void 0 : B.status) || "").toLowerCase(), ee = !!((J = D == null ? void 0 : D.data) != null && J.pending) || ["queued", "running", "pending"].includes(q), ce = ((P = D == null ? void 0 : D.data) == null ? void 0 : P.progress) || {}, ue = Number(((H = D == null ? void 0 : D.data) == null ? void 0 : H.processed) ?? (ce == null ? void 0 : ce.candidates) ?? 0), U = Number((($ = D == null ? void 0 : D.data) == null ? void 0 : $.indexed) ?? (ce == null ? void 0 : ce.indexed) ?? 0), Q = Number(((E = D == null ? void 0 : D.data) == null ? void 0 : E.skipped) ?? (ce == null ? void 0 : ce.skipped) ?? 0), _ = Number(((oe = D == null ? void 0 : D.data) == null ? void 0 : oe.errors) ?? (ce == null ? void 0 : ce.errors) ?? 0);
+ const q = String(((T = D == null ? void 0 : D.data) == null ? void 0 : T.status) || "").toLowerCase(), ee = !!((J = D == null ? void 0 : D.data) != null && J.pending) || ["queued", "running", "pending"].includes(q), ae = ((P = D == null ? void 0 : D.data) == null ? void 0 : P.progress) || {}, ue = Number(((E = D == null ? void 0 : D.data) == null ? void 0 : E.processed) ?? (ae == null ? void 0 : ae.candidates) ?? 0), B = Number((($ = D == null ? void 0 : D.data) == null ? void 0 : $.indexed) ?? (ae == null ? void 0 : ae.indexed) ?? 0), Q = Number(((H = D == null ? void 0 : D.data) == null ? void 0 : H.skipped) ?? (ae == null ? void 0 : ae.skipped) ?? 0), _ = Number(((ne = D == null ? void 0 : D.data) == null ? void 0 : ne.errors) ?? (ae == null ? void 0 : ae.errors) ?? 0);
if (ee) {
- const le = String(((M = D == null ? void 0 : D.data) == null ? void 0 : M.backfill_id) || "").trim(), de = m(
+ const le = String(((M = D == null ? void 0 : D.data) == null ? void 0 : M.backfill_id) || "").trim(), ce = m(
"toast.vectorBackfillRunning",
"Vector backfill still running in background{job}.",
{ job: le ? ` (${le.slice(0, 8)})` : "" }
);
- Ze(de, "info", 4200, {
+ Ae(ce, "info", 4200, {
history: {
- ...k.history,
+ ...N.history,
status: "running",
detail: `Running in background${le ? ` (${le.slice(0, 8)})` : ""}.`,
progress: {
- current: U + Q + _,
- total: Math.max(ue, U + Q + _),
- percent: Math.max(ue, U + Q + _) > 0 ? Math.round(
- (U + Q + _) / Math.max(ue, U + Q + _) * 100
+ current: B + Q + _,
+ total: Math.max(ue, B + Q + _),
+ percent: Math.max(ue, B + Q + _) > 0 ? Math.round(
+ (B + Q + _) / Math.max(ue, B + Q + _) * 100
) : null,
- indexed: U,
+ indexed: B,
skipped: Q,
errors: _,
label: "running"
}
}
}), b(
- `Backfill running in background — candidates ${ue}, indexed ${U}, skipped ${Q}, errors ${_}`,
+ `Backfill running in background — candidates ${ue}, indexed ${B}, skipped ${Q}, errors ${_}`,
"info"
- ), o.style.background = "var(--mjr-status-info, #64B5F6)", Wn(n, "info");
+ ), o.style.background = "var(--mjr-status-info, #64B5F6)", wn(n, "info");
} else
- Ze(
+ Ae(
m(
"toast.vectorBackfillComplete",
"Vector backfill complete! Processed: {processed}, Indexed: {indexed}, Skipped: {skipped}",
- { processed: ue, indexed: U, skipped: Q }
+ { processed: ue, indexed: B, skipped: Q }
),
"success",
3e3,
{
history: {
- ...k.history,
+ ...N.history,
status: "succeeded",
- detail: `Processed ${ue}, indexed ${U}, skipped ${Q}`,
+ detail: `Processed ${ue}, indexed ${B}, skipped ${Q}`,
progress: {
current: ue,
total: ue,
percent: ue > 0 ? 100 : null,
- indexed: U,
+ indexed: B,
skipped: Q,
errors: _,
label: "done"
@@ -28330,46 +28357,46 @@ Continue?`
}
}
), b(
- `Backfill OK — processed ${ue}, indexed ${U}, skipped ${Q}`,
+ `Backfill OK — processed ${ue}, indexed ${B}, skipped ${Q}`,
"success"
- ), o.style.background = "var(--mjr-status-success, #4CAF50)", Wn(n, "success");
+ ), o.style.background = "var(--mjr-status-success, #4CAF50)", wn(n, "success");
} else {
const q = String(
(D == null ? void 0 : D.error) || m("toast.vectorBackfillFailedGeneric", "Backfill failed")
- ), ee = String((D == null ? void 0 : D.code) || "").trim(), ce = Number((D == null ? void 0 : D.status) || 0) || 0, ue = [ee ? `code=${ee}` : "", ce ? `status=${ce}` : "", q].filter(Boolean).join(" | ");
- Ze(ue, "error", 4500, {
+ ), ee = String((D == null ? void 0 : D.code) || "").trim(), ae = Number((D == null ? void 0 : D.status) || 0) || 0, ue = [ee ? `code=${ee}` : "", ae ? `status=${ae}` : "", q].filter(Boolean).join(" | ");
+ Ae(ue, "error", 4500, {
history: {
- ...k.history,
+ ...N.history,
status: "failed",
detail: ue,
progress: { label: "failed", errors: 1 }
}
}), b(`Backfill ERROR — ${ue}
-See console for full payload.`, "error"), console.error("[Majoor] Vector backfill failed response", D), o.style.background = "var(--mjr-status-error, #f44336)", Wn(n, "error");
+See console for full payload.`, "error"), console.error("[Majoor] Vector backfill failed response", D), o.style.background = "var(--mjr-status-error, #f44336)", wn(n, "error");
}
- } catch (O) {
- const D = String((O == null ? void 0 : O.message) || O || "Backfill failed");
- Ze(D, "error", 4500, {
+ } catch (F) {
+ const D = String((F == null ? void 0 : F.message) || F || "Backfill failed");
+ Ae(D, "error", 4500, {
history: {
- ...k.history,
+ ...N.history,
status: "failed",
detail: D,
progress: { label: "failed", errors: 1 }
}
}), b(`Backfill EXCEPTION — ${D}
-See console for stack trace.`, "error"), console.error("[Majoor] Vector backfill exception", O), o.style.background = "var(--mjr-status-error, #f44336)", Wn(n, "error");
+See console for stack trace.`, "error"), console.error("[Majoor] Vector backfill exception", F), o.style.background = "var(--mjr-status-error, #f44336)", wn(n, "error");
} finally {
- ui(!1), h.disabled = !1, L.disabled = !1, h.textContent = K, L.textContent = z, _r("vector-backfill");
+ ui(!1), C.disabled = !1, L.disabled = !1, C.textContent = U, L.textContent = z, _r("vector-backfill");
try {
- const O = t ? t() : null;
- await Ni(o, c, s, O, null, {
+ const F = t ? t() : null;
+ await ki(o, c, s, F, null, {
force: !0
});
- } catch (O) {
- (j = console.debug) == null || j.call(console, O);
+ } catch (F) {
+ (v = console.debug) == null || v.call(console, F);
}
}
- }, A.appendChild(h), A.appendChild(L), a.appendChild(p);
+ }, y.appendChild(C), y.appendChild(L), a.appendChild(p);
const G = document.createElement("button");
G.type = "button", G.textContent = m("btn.deleteDb"), G.title = m("tooltip.deleteDb", "Force-delete database and rebuild from scratch"), G.style.cssText = `
padding: 5px 12px;
@@ -28384,9 +28411,9 @@ See console for stack trace.`, "error"), console.error("[Majoor] Vector backfill
G.style.borderColor = "rgba(255,80,80,0.8)", G.style.background = "rgba(255,80,80,0.12)";
}, G.onmouseleave = () => {
G.style.borderColor = "rgba(255,80,80,0.4)", G.style.background = "transparent";
- }, G.onclick = async (v) => {
- var F;
- v.stopPropagation();
+ }, G.onclick = async (j) => {
+ var O;
+ j.stopPropagation();
const w = await gm(m("btn.deleteDb", "Delete DB"));
if (!await yi(
w ? m(
@@ -28403,10 +28430,10 @@ Continue?`
m("btn.deleteDb", "Delete DB")
)) return;
ui(!0);
- const Y = G.textContent;
- G.disabled = !0, G.textContent = w ? m("btn.resetting", "Resetting...") : m("btn.deletingDb"), L.disabled = !0, o.style.background = "var(--mjr-status-info, #64B5F6)", Wn(n, "info");
+ const V = G.textContent;
+ G.disabled = !0, G.textContent = w ? m("btn.resetting", "Resetting...") : m("btn.deletingDb"), L.disabled = !0, o.style.background = "var(--mjr-status-info, #64B5F6)", wn(n, "info");
try {
- const N = w ? await _d({
+ const k = w ? await _d({
scope: "all",
reindex: !0,
maintenance_force: !0,
@@ -28417,27 +28444,27 @@ Continue?`
clear_assets: !1,
preserve_vectors: !0,
rebuild_fts: !0
- }) : await Of();
- N != null && N.ok ? (globalThis._mjrCorruptToastShown = !1, o.style.background = "var(--mjr-status-success, #4CAF50)", Wn(n, "success")) : (o.style.background = "var(--mjr-status-error, #f44336)", Wn(n, "error"));
+ }) : await Ff();
+ k != null && k.ok ? (globalThis._mjrCorruptToastShown = !1, o.style.background = "var(--mjr-status-success, #4CAF50)", wn(n, "success")) : (o.style.background = "var(--mjr-status-error, #f44336)", wn(n, "error"));
} catch {
- o.style.background = "var(--mjr-status-error, #f44336)", Wn(n, "error");
+ o.style.background = "var(--mjr-status-error, #f44336)", wn(n, "error");
} finally {
- ui(!1), G.disabled = !1, G.textContent = Y, L.disabled = !1, _r(
+ ui(!1), G.disabled = !1, G.textContent = V, L.disabled = !1, _r(
w ? "index-reset-preserve-vectors" : "db-force-delete"
);
try {
- const N = t ? t() : null;
- await Ni(o, c, s, N, null, {
+ const k = t ? t() : null;
+ await ki(o, c, s, k, null, {
force: !0
});
- } catch (N) {
- (F = console.debug) == null || F.call(console, N);
+ } catch (k) {
+ (O = console.debug) == null || O.call(console, k);
}
}
- }, A.appendChild(G), a.appendChild(A), n.appendChild(i), n.appendChild(a);
- const W = n.querySelector("#mjr-status-title");
- W && W.addEventListener("click", (v) => {
- v.stopPropagation();
+ }, y.appendChild(G), a.appendChild(y), n.appendChild(i), n.appendChild(a);
+ const Z = n.querySelector("#mjr-status-title");
+ Z && Z.addEventListener("click", (j) => {
+ j.stopPropagation();
const w = n.querySelector("#mjr-status-body");
if (!w) return;
const R = w.style.display === "none";
@@ -28445,106 +28472,106 @@ Continue?`
}), bm(n, !0), n.onmouseenter = () => {
n.style.transform = "translateY(-1px)";
}, n.onmouseleave = () => {
- var v;
- n.style.transform = "", Wn(n, ((v = n.dataset) == null ? void 0 : v.mjrStatusTone) || "neutral", {
+ var j;
+ n.style.transform = "", wn(n, ((j = n.dataset) == null ? void 0 : j.mjrStatusTone) || "neutral", {
toast: !1
});
};
- const f = async (v) => {
+ const f = async (j) => {
var w, R;
try {
- const Y = (v == null ? void 0 : v.detail) || {}, F = String((Y == null ? void 0 : Y.step) || "");
- if (!F) return;
- const N = F === "started" || F === "stopping_workers" || F === "resetting_db" || F === "delete_db" || F === "recreate_db" || F === "replacing_files" || F === "restarting_scan";
- if (N ? ui(!0) : (F === "failed" || F === "done") && ui(!1), !(n != null && n.isConnected) || !(o != null && o.isConnected) || !(c != null && c.isConnected))
+ const V = (j == null ? void 0 : j.detail) || {}, O = String((V == null ? void 0 : V.step) || "");
+ if (!O) return;
+ const k = O === "started" || O === "stopping_workers" || O === "resetting_db" || O === "delete_db" || O === "recreate_db" || O === "replacing_files" || O === "restarting_scan";
+ if (k ? ui(!0) : (O === "failed" || O === "done") && ui(!1), !(n != null && n.isConnected) || !(o != null && o.isConnected) || !(c != null && c.isConnected))
return;
- if (N) {
- o.style.background = "var(--mjr-status-info, #64B5F6)", Wn(n, "info", { toast: !1 }), Wi(
+ if (k) {
+ o.style.background = "var(--mjr-status-info, #64B5F6)", wn(n, "info", { toast: !1 }), Wi(
c,
m("status.pending", "Pending..."),
m("status.dbRestoreInProgress", "Database restore in progress")
);
return;
}
- if (F === "failed") {
- o.style.background = "var(--mjr-status-error, #f44336)", Wn(n, "error", { toast: !1 }), Cl(c, [
+ if (O === "failed") {
+ o.style.background = "var(--mjr-status-error, #f44336)", wn(n, "error", { toast: !1 }), hl(c, [
m("status.error", "Error"),
String(
- (Y == null ? void 0 : Y.message) || m("toast.dbRestoreFailed", "Failed to restore DB backup")
+ (V == null ? void 0 : V.message) || m("toast.dbRestoreFailed", "Failed to restore DB backup")
)
]);
return;
}
- if (F === "done") {
- o.style.background = "var(--mjr-status-success, #4CAF50)", Wn(n, "success", { toast: !1 });
- const V = String((Y == null ? void 0 : Y.operation) || ""), k = V === "delete_db" ? m(
+ if (O === "done") {
+ o.style.background = "var(--mjr-status-success, #4CAF50)", wn(n, "success", { toast: !1 });
+ const Y = String((V == null ? void 0 : V.operation) || ""), N = Y === "delete_db" ? m(
"toast.dbDeleteSuccess",
"Database deleted and rebuilt. Files are being reindexed."
- ) : V === "reset_index" ? m(
+ ) : Y === "reset_index" ? m(
"toast.resetStarted",
"Index reset started. Files will be reindexed in the background."
) : m("toast.dbRestoreSuccess", "Database backup restored");
- Wi(c, m("status.ready", "Ready"), k);
+ Wi(c, m("status.ready", "Ready"), N);
try {
- const K = t ? t() : null;
+ const U = t ? t() : null;
setTimeout(() => {
- Ni(o, c, s, K, null, {
+ ki(o, c, s, U, null, {
force: !0
});
}, 600);
- } catch (K) {
- (w = console.debug) == null || w.call(console, K);
+ } catch (U) {
+ (w = console.debug) == null || w.call(console, U);
}
}
- } catch (Y) {
- (R = console.debug) == null || R.call(console, Y);
+ } catch (V) {
+ (R = console.debug) == null || R.call(console, V);
}
};
try {
- const v = dm;
- typeof v == "function" && window.removeEventListener("mjr-db-restore-status", v), dm = f, n._mjrDbRestoreStatusHandler = f, window.addEventListener("mjr-db-restore-status", f);
- } catch (v) {
- (x = console.debug) == null || x.call(console, v);
+ const j = dm;
+ typeof j == "function" && window.removeEventListener("mjr-db-restore-status", j), dm = f, n._mjrDbRestoreStatusHandler = f, window.addEventListener("mjr-db-restore-status", f);
+ } catch (j) {
+ (x = console.debug) == null || x.call(console, j);
}
- const X = (v) => {
+ const X = (j) => {
var w, R;
try {
- const Y = (v == null ? void 0 : v.detail) || {}, F = Number(Y == null ? void 0 : Y.queue_remaining), N = Number(Y == null ? void 0 : Y.progress_value), V = Number(Y == null ? void 0 : Y.progress_max), k = Array.isArray(Y == null ? void 0 : Y.cached_nodes) ? Y.cached_nodes.length : 0, K = String((Y == null ? void 0 : Y.active_prompt_id) || "").trim(), z = Number.isFinite(N) && Number.isFinite(V) && V > 0 ? m("status.runtimeProgress", "Runtime progress: {value}/{max}", {
- value: N,
- max: V
- }) : "", B = Number.isFinite(F) ? m("status.queueRemaining", "Queue remaining: {count}", {
- count: Math.max(0, F)
- }) : "", J = k > 0 ? m("status.executionCached", "Cached nodes reused: {count}", {
- count: k
- }) : "", P = K ? m("status.activePrompt", "Active prompt: {id}", { id: K }) : "", H = [z, B, J, P].filter(Boolean);
- if (!H.length) return;
+ const V = (j == null ? void 0 : j.detail) || {}, O = Number(V == null ? void 0 : V.queue_remaining), k = Number(V == null ? void 0 : V.progress_value), Y = Number(V == null ? void 0 : V.progress_max), N = Array.isArray(V == null ? void 0 : V.cached_nodes) ? V.cached_nodes.length : 0, U = String((V == null ? void 0 : V.active_prompt_id) || "").trim(), z = Number.isFinite(k) && Number.isFinite(Y) && Y > 0 ? m("status.runtimeProgress", "Runtime progress: {value}/{max}", {
+ value: k,
+ max: Y
+ }) : "", T = Number.isFinite(O) ? m("status.queueRemaining", "Queue remaining: {count}", {
+ count: Math.max(0, O)
+ }) : "", J = N > 0 ? m("status.executionCached", "Cached nodes reused: {count}", {
+ count: N
+ }) : "", P = U ? m("status.activePrompt", "Active prompt: {id}", { id: U }) : "", E = [z, T, J, P].filter(Boolean);
+ if (!E.length) return;
const $ = (w = c == null ? void 0 : c.querySelector) == null ? void 0 : w.call(c, "span");
- $ ? $.textContent = H.join(" | ") : Wi(c, m("status.ready", "Ready"), H.join(" | "));
- } catch (Y) {
- (R = console.debug) == null || R.call(console, Y);
+ $ ? $.textContent = E.join(" | ") : Wi(c, m("status.ready", "Ready"), E.join(" | "));
+ } catch (V) {
+ (R = console.debug) == null || R.call(console, V);
}
};
try {
- const v = um;
- typeof v == "function" && window.removeEventListener(ht.RUNTIME_STATUS, v), um = X, window.addEventListener(ht.RUNTIME_STATUS, X);
- } catch (v) {
- (T = console.debug) == null || T.call(console, v);
+ const j = um;
+ typeof j == "function" && window.removeEventListener(ft.RUNTIME_STATUS, j), um = X, window.addEventListener(ft.RUNTIME_STATUS, X);
+ } catch (j) {
+ (K = console.debug) == null || K.call(console, j);
}
return n;
}
async function Tb(e, t, n = null, i = null) {
- var g, A, p, b, L, h;
- if (Gr) {
- Ze(
+ var g, y, p, b, L, C;
+ if (Sr) {
+ Ae(
m("status.maintenanceBusy", "Database maintenance in progress. Please wait."),
"warning",
2200
);
return;
}
- const o = ((A = (g = t == null ? void 0 : t.closest) == null ? void 0 : g.call(t, "#mjr-status-body")) == null ? void 0 : A.parentElement) || ((p = t == null ? void 0 : t.closest) == null ? void 0 : p.call(t, "div")), r = String((i == null ? void 0 : i.scope) || "output").toLowerCase(), l = (i == null ? void 0 : i.customRootId) || (i == null ? void 0 : i.custom_root_id) || (i == null ? void 0 : i.root_id) || null;
+ const o = ((y = (g = t == null ? void 0 : t.closest) == null ? void 0 : g.call(t, "#mjr-status-body")) == null ? void 0 : y.parentElement) || ((p = t == null ? void 0 : t.closest) == null ? void 0 : p.call(t, "div")), r = String((i == null ? void 0 : i.scope) || "output").toLowerCase(), l = (i == null ? void 0 : i.customRootId) || (i == null ? void 0 : i.custom_root_id) || (i == null ? void 0 : i.root_id) || null;
if (r === "custom" && !l) {
- e.style.background = "var(--mjr-status-info, #64B5F6)", Wn(o, "info"), Wi(
+ e.style.background = "var(--mjr-status-info, #64B5F6)", wn(o, "info"), Wi(
t,
m("status.customBrowserScanDisabled", "Custom browser mode: scan is disabled"),
m(
@@ -28555,9 +28582,9 @@ async function Tb(e, t, n = null, i = null) {
return;
}
try {
- const G = Date.now(), W = globalThis == null ? void 0 : globalThis._mjrScanInFlight;
- if (W && typeof W == "object") {
- const f = G - Number(W.at || 0);
+ const G = Date.now(), Z = globalThis == null ? void 0 : globalThis._mjrScanInFlight;
+ if (Z && typeof Z == "object") {
+ const f = G - Number(Z.at || 0);
if (f >= 0 && f < 10 * 6e4) {
Wi(
t,
@@ -28579,21 +28606,21 @@ async function Tb(e, t, n = null, i = null) {
var G;
try {
globalThis != null && globalThis._mjrScanInFlight && (globalThis._mjrScanInFlight = null);
- } catch (W) {
- (G = console.debug) == null || G.call(console, W);
+ } catch (Z) {
+ (G = console.debug) == null || G.call(console, Z);
}
}, s = !0;
let d = null;
try {
- const G = await Ft(ct.ROOTS);
+ const G = await Ft(st.ROOTS);
G.ok && (d = G.data);
} catch (G) {
(L = console.debug) == null || L.call(console, G);
}
if (!d) {
- const G = await Ft(ct.CONFIG);
+ const G = await Ft(st.CONFIG);
if (!G.ok) {
- e.style.background = "var(--mjr-status-error, #f44336)", Wn(o, "error"), t.textContent = m("status.errorGetConfig"), c();
+ e.style.background = "var(--mjr-status-error, #f44336)", wn(o, "error"), t.textContent = m("status.errorGetConfig"), c();
return;
}
d = { output_directory: G.data.output_directory };
@@ -28603,10 +28630,10 @@ async function Tb(e, t, n = null, i = null) {
if (r === "input")
I = d != null && d.input_directory ? ` (${d.input_directory})` : "";
else if (r === "custom") {
- const G = Array.isArray(d == null ? void 0 : d.custom_roots) ? d.custom_roots : [], W = l ? G.find((f) => (f == null ? void 0 : f.id) === l) : null;
- I = W != null && W.path ? ` (${W.path})` : "";
+ const G = Array.isArray(d == null ? void 0 : d.custom_roots) ? d.custom_roots : [], Z = l ? G.find((f) => (f == null ? void 0 : f.id) === l) : null;
+ I = Z != null && Z.path ? ` (${Z.path})` : "";
} else r === "output" && (I = d != null && d.output_directory ? ` (${d.output_directory})` : "");
- e.style.background = "var(--mjr-status-info, #64B5F6)", Wn(o, "info"), Wi(
+ e.style.background = "var(--mjr-status-info, #64B5F6)", wn(o, "info"), Wi(
t,
m("status.scanningScope", `Scanning ${u}${I}...`, {
scope: u,
@@ -28614,29 +28641,29 @@ async function Tb(e, t, n = null, i = null) {
}),
m("status.scanningHint", "This may take a while")
);
- const y = Xn(), S = !!(((h = y == null ? void 0 : y.scan) == null ? void 0 : h.fastMode) ?? !0), Z = {
+ const A = kn(), h = !!(((C = A == null ? void 0 : A.scan) == null ? void 0 : C.fastMode) ?? !0), S = {
scope: r,
recursive: !0,
incremental: s,
- fast: S,
+ fast: h,
background_metadata: !0
};
if (r === "custom") {
if (!l) {
- e.style.background = "var(--mjr-status-error, #f44336)", Wn(o, "error"), t.textContent = m("status.selectCustomFolder"), c();
+ e.style.background = "var(--mjr-status-error, #f44336)", wn(o, "error"), t.textContent = m("status.selectCustomFolder"), c();
return;
}
- Z.custom_root_id = l;
+ S.custom_root_id = l;
}
- let C;
+ let W;
try {
- C = await Et(ct.SCAN, Z);
+ W = await Dt(st.SCAN, S);
} finally {
c();
}
- if (C != null && C.ok) {
- const G = C.data;
- e.style.background = "var(--mjr-status-success, #4CAF50)", Wn(o, "success"), Wi(
+ if (W != null && W.ok) {
+ const G = W.data;
+ e.style.background = "var(--mjr-status-success, #4CAF50)", wn(o, "success"), Wi(
t,
m("toast.scanComplete"),
m(
@@ -28649,13 +28676,13 @@ async function Tb(e, t, n = null, i = null) {
}
)
), _r("scan-complete"), setTimeout(() => {
- Ni(e, t, n);
+ ki(e, t, n);
}, 2e3);
} else
- e.style.background = "var(--mjr-status-error, #f44336)", Wn(o, "error"), Cl(t, [
- m("toast.scanFailed") + `: ${(C == null ? void 0 : C.error) || "Unknown error"}`
+ e.style.background = "var(--mjr-status-error, #f44336)", wn(o, "error"), hl(t, [
+ m("toast.scanFailed") + `: ${(W == null ? void 0 : W.error) || "Unknown error"}`
]), setTimeout(() => {
- Ni(e, t, n);
+ ki(e, t, n);
}, 3e3);
}
function z0(e, t, n) {
@@ -28670,7 +28697,7 @@ function z0(e, t, n) {
border: 1px solid rgba(255, 255, 255, 0.1);
`, i.textContent = `${t ? "✅" : "❌"} ${e}`, i.title = t ? m("status.toolAvailable", `${e} available`, { tool: e }) : n || m("status.toolUnavailable", `${e} unavailable`, { tool: e }), i.style.opacity = t ? "1" : "0.75", i;
}
-function ps(e, t = {}, n = {}) {
+function ys(e, t = {}, n = {}) {
if (!e) return;
if (e.replaceChildren(), !t || Object.keys(t).length === 0) {
e.textContent = m("status.discoveringTools");
@@ -28694,9 +28721,9 @@ function Im(e, t = null, n = {}) {
return;
}
const l = zb.map(({ key: a, labelKey: c }) => {
- var Z;
- const s = m(c, a), d = t && a in t ? t[a] : void 0, u = a in n ? n[a] : void 0, I = d !== void 0 ? d : u, y = I == null ? m("status.unknown", "unknown") : I ? m("status.available", "available") : m("status.missing", "missing"), S = (Z = t == null ? void 0 : t.versions) == null ? void 0 : Z[a];
- return S ? `${s}: ${y} - ${S}` : `${s}: ${y}`;
+ var S;
+ const s = m(c, a), d = t && a in t ? t[a] : void 0, u = a in n ? n[a] : void 0, I = d !== void 0 ? d : u, A = I == null ? m("status.unknown", "unknown") : I ? m("status.available", "available") : m("status.missing", "missing"), h = (S = t == null ? void 0 : t.versions) == null ? void 0 : S[a];
+ return h ? `${s}: ${A} - ${h}` : `${s}: ${A}`;
});
o.textContent = l.join(" | ");
}
@@ -28726,102 +28753,102 @@ function T0(e, t) {
const n = !!((l = e == null ? void 0 : e.database) != null && l.available), i = (t == null ? void 0 : t.diagnostics) || {}, o = !!(i != null && i.malformed), r = !!(i != null && i.locked);
return !n || o ? m("status.dbHealthError", "DB health: error") : r ? m("status.dbHealthLocked", "DB health: locked") : m("status.dbHealthOk", "DB health: ok");
}
-function B0(e, t) {
+function K0(e, t) {
const n = Number((e == null ? void 0 : e.total_assets) || 0), i = e == null ? void 0 : e.last_index_end, o = e == null ? void 0 : e.last_scan_end, r = t === "all" ? m("scope.all", "Inputs + Outputs") : t === "input" ? m("scope.input", "Inputs") : t === "custom" ? m("scope.custom", "Custom") : m("scope.output", "Outputs");
return !Number.isFinite(n) || n <= 0 ? `${m("status.indexHealthEmpty", "Index health: empty")} (${r})` : !i && !o ? `${m("status.indexHealthPartial", "Index health: partial")} (${r})` : `${m("status.indexHealthOk", "Index health: ok")} (${r})`;
}
-async function Ni(e, t, n = null, i = null, o = null, r = {}) {
- var p, b, L, h, G, W, f, X, x, T, v, w, R, Y;
+async function ki(e, t, n = null, i = null, o = null, r = {}) {
+ var p, b, L, C, G, Z, f, X, x, K, j, w, R, V;
const l = ((b = (p = t == null ? void 0 : t.closest) == null ? void 0 : p.call(t, "#mjr-status-body")) == null ? void 0 : b.parentElement) || ((L = t == null ? void 0 : t.closest) == null ? void 0 : L.call(t, "div")), a = (r == null ? void 0 : r.signal) || null, c = !!(r != null && r.force);
try {
if (a != null && a.aborted) return null;
- } catch (F) {
- (h = console.debug) == null || h.call(console, F);
+ } catch (O) {
+ (C = console.debug) == null || C.call(console, O);
}
try {
if (!(e != null && e.isConnected) || !(t != null && t.isConnected)) return null;
- } catch (F) {
- (G = console.debug) == null || G.call(console, F);
+ } catch (O) {
+ (G = console.debug) == null || G.call(console, O);
}
try {
- if (!c && Gr) return null;
- } catch (F) {
- (W = console.debug) == null || W.call(console, F);
+ if (!c && Sr) return null;
+ } catch (O) {
+ (Z = console.debug) == null || Z.call(console, O);
}
o && typeof o == "object" && (o.lastCode = null, o.lastStatus = null);
- const s = String((i == null ? void 0 : i.scope) || "output").toLowerCase(), d = (i == null ? void 0 : i.customRootId) || (i == null ? void 0 : i.custom_root_id) || (i == null ? void 0 : i.root_id) || null, u = s === "custom" && !d, I = u ? `${ct.HEALTH_COUNTERS}?scope=all` : s === "custom" ? `${ct.HEALTH_COUNTERS}?scope=custom&custom_root_id=${encodeURIComponent(String(d || ""))}` : `${ct.HEALTH_COUNTERS}?scope=${encodeURIComponent(s || "output")}`, y = !!(r != null && r.lightweight), S = c || !y || !(o && typeof o == "object" && o._auxCached);
- let Z, C, g, A = null;
- if (S) {
- const [F, N, V] = await Promise.all([
+ const s = String((i == null ? void 0 : i.scope) || "output").toLowerCase(), d = (i == null ? void 0 : i.customRootId) || (i == null ? void 0 : i.custom_root_id) || (i == null ? void 0 : i.root_id) || null, u = s === "custom" && !d, I = u ? `${st.HEALTH_COUNTERS}?scope=all` : s === "custom" ? `${st.HEALTH_COUNTERS}?scope=custom&custom_root_id=${encodeURIComponent(String(d || ""))}` : `${st.HEALTH_COUNTERS}?scope=${encodeURIComponent(s || "output")}`, A = !!(r != null && r.lightweight), h = c || !A || !(o && typeof o == "object" && o._auxCached);
+ let S, W, g, y = null;
+ if (h) {
+ const [O, k, Y] = await Promise.all([
Ft(I, a ? { signal: a } : void 0),
- Ft(ct.HEALTH, a ? { signal: a } : void 0),
- Ft(ct.HEALTH_DB, a ? { signal: a } : void 0)
+ Ft(st.HEALTH, a ? { signal: a } : void 0),
+ Ft(st.HEALTH_DB, a ? { signal: a } : void 0)
]);
- Z = F, C = N, g = V;
+ S = O, W = k, g = Y;
try {
- const k = await Rf(a ? { signal: a } : void 0);
- k != null && k.ok && (A = k.data);
- } catch (k) {
- (f = console.debug) == null || f.call(console, k);
+ const N = await Rf(a ? { signal: a } : void 0);
+ N != null && N.ok && (y = N.data);
+ } catch (N) {
+ (f = console.debug) == null || f.call(console, N);
}
- o && typeof o == "object" && (o._auxCached = !0, o._healthCache = C, o._dbDiagCache = g, o._toolsCache = A);
+ o && typeof o == "object" && (o._auxCached = !0, o._healthCache = W, o._dbDiagCache = g, o._toolsCache = y);
} else
- Z = await Ft(I, a ? { signal: a } : void 0), C = (o == null ? void 0 : o._healthCache) || null, g = (o == null ? void 0 : o._dbDiagCache) || null, A = (o == null ? void 0 : o._toolsCache) || null;
+ S = await Ft(I, a ? { signal: a } : void 0), W = (o == null ? void 0 : o._healthCache) || null, g = (o == null ? void 0 : o._dbDiagCache) || null, y = (o == null ? void 0 : o._toolsCache) || null;
try {
if (a != null && a.aborted) return null;
- } catch (F) {
- (X = console.debug) == null || X.call(console, F);
+ } catch (O) {
+ (X = console.debug) == null || X.call(console, O);
}
try {
if (!(e != null && e.isConnected) || !(t != null && t.isConnected)) return null;
- } catch (F) {
- (x = console.debug) == null || x.call(console, F);
+ } catch (O) {
+ (x = console.debug) == null || x.call(console, O);
}
- if (o && typeof o == "object" && (o.lastCode = (Z == null ? void 0 : Z.code) || null, o.lastStatus = typeof (Z == null ? void 0 : Z.status) == "number" ? Z.status : null), Z.ok) {
- const F = Z.data, N = F.total_assets || 0, V = F.with_workflows ?? 0, k = F.with_generation_data ?? 0, K = F.last_scan_end, z = K ? new Date(K).toLocaleString() : "N/A", B = F.tool_availability || {}, J = F.tool_paths || {}, P = m("status.dbSize", "Database size: {size}", {
- size: bs(F.db_size_bytes || 0)
- }), H = C != null && C.ok && (C != null && C.data) ? C.data.vector || {} : {}, $ = (H == null ? void 0 : H.enabled) !== !1, E = !!(H != null && H.loaded), oe = !!(H != null && H.degraded), M = String((H == null ? void 0 : H.last_error) || "").trim(), j = $ ? oe ? `AI vector: degraded${M ? ` (${M})` : ""}` : E ? "AI vector: loaded" : "AI vector: initializing" : "AI vector: disabled", O = T0(
- (C == null ? void 0 : C.data) || null,
+ if (o && typeof o == "object" && (o.lastCode = (S == null ? void 0 : S.code) || null, o.lastStatus = typeof (S == null ? void 0 : S.status) == "number" ? S.status : null), S.ok) {
+ const O = S.data, k = O.total_assets || 0, Y = O.with_workflows ?? 0, N = O.with_generation_data ?? 0, U = O.last_scan_end, z = U ? new Date(U).toLocaleString() : "N/A", T = O.tool_availability || {}, J = O.tool_paths || {}, P = m("status.dbSize", "Database size: {size}", {
+ size: ps(O.db_size_bytes || 0)
+ }), E = W != null && W.ok && (W != null && W.data) ? W.data.vector || {} : {}, $ = (E == null ? void 0 : E.enabled) !== !1, H = !!(E != null && E.loaded), ne = !!(E != null && E.degraded), M = String((E == null ? void 0 : E.last_error) || "").trim(), v = $ ? ne ? `AI vector: degraded${M ? ` (${M})` : ""}` : H ? "AI vector: loaded" : "AI vector: initializing" : "AI vector: disabled", F = T0(
+ (W == null ? void 0 : W.data) || null,
(g == null ? void 0 : g.data) || null
- ), D = B0(
- F,
+ ), D = K0(
+ O,
u ? "all" : s
- ), q = !!(C != null && C.ok && ((v = (T = C == null ? void 0 : C.data) == null ? void 0 : T.database) != null && v.available)), ee = g != null && g.ok ? ((w = g == null ? void 0 : g.data) == null ? void 0 : w.diagnostics) || {} : {}, ce = !!(ee != null && ee.malformed), ue = !!(ee != null && ee.locked), U = !!(ee != null && ee.maintenance_active);
- ui(U);
+ ), q = !!(W != null && W.ok && ((j = (K = W == null ? void 0 : W.data) == null ? void 0 : K.database) != null && j.available)), ee = g != null && g.ok ? ((w = g == null ? void 0 : g.data) == null ? void 0 : w.diagnostics) || {} : {}, ae = !!(ee != null && ee.malformed), ue = !!(ee != null && ee.locked), B = !!(ee != null && ee.maintenance_active);
+ ui(B);
const Q = Math.max(
0,
- Number((F == null ? void 0 : F.enrichment_queue_length) || 0) || 0
- ), le = $a().active || Q > 0;
+ Number((O == null ? void 0 : O.enrichment_queue_length) || 0) || 0
+ ), le = ec().active || Q > 0;
vI(le, Q);
- const de = Number(N) > 0, se = !!(F != null && F.last_index_end || F != null && F.last_scan_end), ge = de && se;
- let je = "success";
- U || le ? je = "info" : !q || ce ? je = "error" : (ue || !ge || oe) && (je = "warning");
- const Se = u && je !== "error" ? "browser" : je;
- let ke = F.watcher;
+ const ce = Number(k) > 0, de = !!(O != null && O.last_index_end || O != null && O.last_scan_end), ge = ce && de;
+ let Le = "success";
+ B || le ? Le = "info" : !q || ae ? Le = "error" : (ue || !ge || ne) && (Le = "warning");
+ const xe = u && Le !== "error" ? "browser" : Le;
+ let Xe = O.watcher;
try {
- if (!ke || typeof ke.enabled != "boolean") {
- const qe = await Ng(a ? { signal: a } : void 0);
- qe != null && qe.ok && qe.data && (ke = {
+ if (!Xe || typeof Xe.enabled != "boolean") {
+ const qe = await kg(a ? { signal: a } : void 0);
+ qe != null && qe.ok && qe.data && (Xe = {
enabled: !!qe.data.enabled,
- scope: ((R = F == null ? void 0 : F.watcher) == null ? void 0 : R.scope) || s,
+ scope: ((R = O == null ? void 0 : O.watcher) == null ? void 0 : R.scope) || s,
custom_root_id: d || null
});
}
} catch (qe) {
- (Y = console.debug) == null || Y.call(console, qe);
+ (V = console.debug) == null || V.call(console, qe);
}
- const we = u ? m("status.watcher.disabledScoped", "Watcher: disabled ({scope})", {
+ const Me = u ? m("status.watcher.disabledScoped", "Watcher: disabled ({scope})", {
scope: m("scope.customBrowser", "Browser")
- }) : F0(ke, s), Je = le ? m("status.enrichmentQueue", "Metadata enrichment queue: {count}", {
+ }) : O0(Xe, s), Fe = le ? m("status.enrichmentQueue", "Metadata enrichment queue: {count}", {
count: Q
}) : m("status.enrichmentIdle", "Metadata enrichment: idle");
- ps(n, B, J), Im(n, A, B);
- const $e = s === "all" ? m("scope.allFull", "All (Inputs + Outputs)") : s === "input" ? m("scope.input", "Inputs") : s === "custom" ? m("scope.customBrowser", "Browser") : m("scope.output", "Outputs");
- return je === "error" ? (e.style.background = "var(--mjr-status-error, #f44336)", Wn(l, "error"), Wi(
+ ys(n, T, J), Im(n, y, T);
+ const it = s === "all" ? m("scope.allFull", "All (Inputs + Outputs)") : s === "input" ? m("scope.input", "Inputs") : s === "custom" ? m("scope.customBrowser", "Browser") : m("scope.output", "Outputs");
+ return Le === "error" ? (e.style.background = "var(--mjr-status-error, #f44336)", wn(l, "error"), Wi(
t,
m("status.dbCorrupted", "Database appears corrupted or unavailable."),
- [O, D, P, we].filter(Boolean).join(" | ")
- ), F) : u ? (e.style.background = "var(--mjr-status-browser, #26A69A)", Wn(l, "browser"), Wi(
+ [F, D, P, Me].filter(Boolean).join(" | ")
+ ), O) : u ? (e.style.background = "var(--mjr-status-browser, #26A69A)", wn(l, "browser"), Wi(
t,
m("status.ready", "Ready"),
[
@@ -28829,46 +28856,46 @@ async function Ni(e, t, n = null, i = null, o = null, r = {}) {
"status.browserMetricsHidden",
"Browser mode: global DB/index metrics hidden"
),
- we
+ Me
].filter(Boolean).join(" | ")
- ), F) : (N === 0 ? (e.style.background = Se === "browser" ? "var(--mjr-status-browser, #26A69A)" : je === "info" ? "var(--mjr-status-info, #64B5F6)" : je === "warning" ? "var(--mjr-status-warning, #FFA726)" : "var(--mjr-status-success, #4CAF50)", Wn(l, Se), Wi(
+ ), O) : (k === 0 ? (e.style.background = xe === "browser" ? "var(--mjr-status-browser, #26A69A)" : Le === "info" ? "var(--mjr-status-info, #64B5F6)" : Le === "warning" ? "var(--mjr-status-warning, #FFA726)" : "var(--mjr-status-success, #4CAF50)", wn(l, xe), Wi(
t,
- m("status.noAssets", `No assets indexed yet (${$e})`, {
- scope: $e
+ m("status.noAssets", `No assets indexed yet (${it})`, {
+ scope: it
}),
[
m("status.clickToScan", "Click the dot to start a scan"),
- j,
- O,
+ v,
+ F,
D,
P,
- we
+ Me
].filter(Boolean).join(" | ")
- )) : (e.style.background = Se === "browser" ? "var(--mjr-status-browser, #26A69A)" : je === "info" ? "var(--mjr-status-info, #64B5F6)" : je === "warning" ? "var(--mjr-status-warning, #FFA726)" : "var(--mjr-status-success, #4CAF50)", Wn(l, Se), Cl(
+ )) : (e.style.background = xe === "browser" ? "var(--mjr-status-browser, #26A69A)" : Le === "info" ? "var(--mjr-status-info, #64B5F6)" : Le === "warning" ? "var(--mjr-status-warning, #FFA726)" : "var(--mjr-status-success, #4CAF50)", wn(l, xe), hl(
t,
[
m(
"status.assetsIndexed",
- `${N.toLocaleString()} assets indexed (${$e})`,
- { count: N.toLocaleString(), scope: $e }
+ `${k.toLocaleString()} assets indexed (${it})`,
+ { count: k.toLocaleString(), scope: it }
),
- q0(F),
+ q0(O),
m(
"status.withWorkflows",
- `With workflows: ${V} - Generation data: ${k}`,
- { workflows: V, gendata: k }
+ `With workflows: ${Y} - Generation data: ${N}`,
+ { workflows: Y, gendata: N }
),
- Je,
- j,
- O,
+ Fe,
+ v,
+ F,
D,
P,
- we
+ Me
],
m("status.lastScan", `Last scan: ${z}`, { date: z })
- )), F);
+ )), O);
} else {
- if (ps(n, {}, {}), Im(n, A), e.style.background = "var(--mjr-status-error, #f44336)", Wn(l, "error"), (Z == null ? void 0 : Z.code) === "INVALID_RESPONSE" && (Z == null ? void 0 : Z.status) === 404)
+ if (ys(n, {}, {}), Im(n, y), e.style.background = "var(--mjr-status-error, #f44336)", wn(l, "error"), (S == null ? void 0 : S.code) === "INVALID_RESPONSE" && (S == null ? void 0 : S.status) === 404)
Wi(
t,
m("status.apiNotFound", "Majoor API endpoints not found (404)"),
@@ -28878,24 +28905,24 @@ async function Ni(e, t, n = null, i = null, o = null, r = {}) {
)
);
else {
- const F = String((Z == null ? void 0 : Z.error) || "").toLowerCase();
- F.includes("malform") || F.includes("corrupt") || F.includes("disk image") ? (Wi(t, m("status.dbCorrupted"), m("status.dbCorruptedHint")), globalThis._mjrCorruptToastShown || (globalThis._mjrCorruptToastShown = !0, Ze(m("toast.resetFailedCorrupt"), "error", 8e3))) : Cl(t, [
- Z.error || m("status.errorChecking", "Error checking status")
+ const O = String((S == null ? void 0 : S.error) || "").toLowerCase();
+ O.includes("malform") || O.includes("corrupt") || O.includes("disk image") ? (Wi(t, m("status.dbCorrupted"), m("status.dbCorruptedHint")), globalThis._mjrCorruptToastShown || (globalThis._mjrCorruptToastShown = !0, Ae(m("toast.resetFailedCorrupt"), "error", 8e3))) : hl(t, [
+ S.error || m("status.errorChecking", "Error checking status")
]);
}
- if (Z.code === "SERVICE_UNAVAILABLE") {
- const F = U0(
+ if (S.code === "SERVICE_UNAVAILABLE") {
+ const O = B0(
e,
t,
n,
i
);
- t.appendChild(document.createElement("br")), t.appendChild(F);
+ t.appendChild(document.createElement("br")), t.appendChild(O);
}
}
return null;
}
-function U0(e, t, n = null, i = null) {
+function B0(e, t, n = null, i = null) {
const o = document.createElement("button");
return o.textContent = m("btn.retryServices"), o.style.cssText = `
padding: 4px 10px;
@@ -28908,13 +28935,13 @@ function U0(e, t, n = null, i = null) {
cursor: pointer;
`, o.onclick = async () => {
o.disabled = !0, o.textContent = m("btn.retrying");
- const r = await Et(ct.RETRY_SERVICES, {});
- o.disabled = !1, o.textContent = m("btn.retryServices"), r.ok ? Ni(e, t, n, i) : (Cl(t, [
+ const r = await Dt(st.RETRY_SERVICES, {});
+ o.disabled = !1, o.textContent = m("btn.retryServices"), r.ok ? ki(e, t, n, i) : (hl(t, [
r.error || m("status.retryFailed", "Retry failed")
]), t.appendChild(document.createElement("br")), t.appendChild(o));
}, o;
}
-function K0() {
+function U0() {
var e, t;
try {
const n = (e = localStorage == null ? void 0 : localStorage.getItem) == null ? void 0 : e.call(localStorage, Jb);
@@ -28934,7 +28961,7 @@ function D0(e) {
(n = console.debug) == null || n.call(console, i);
}
}
-function E0(e) {
+function H0(e) {
const t = [], n = (i, o = 0) => {
if (!(!i || o > 2)) {
if (typeof i == "number" && Number.isFinite(i)) {
@@ -28954,16 +28981,16 @@ function E0(e) {
};
return n(e, 0), t;
}
-function H0(e) {
+function E0(e) {
var n, i;
if (!e || typeof e != "object") return !1;
- if (Gr) return !0;
+ if (Sr) return !0;
try {
- if ((n = $a()) != null && n.active) return !0;
+ if ((n = ec()) != null && n.active) return !0;
} catch (o) {
(i = console.debug) == null || i.call(console, o);
}
- return E0(e).some((o) => Number(o) > 0);
+ return H0(e).some((o) => Number(o) > 0);
}
function q0(e) {
var i;
@@ -28993,10 +29020,10 @@ function P0(e) {
}
function Q0(e, t, n) {
var o, r;
- const i = K0();
+ const i = U0();
if (!i) return !1;
try {
- ps(n, i.tool_availability || {}, i.tool_paths || {});
+ ys(n, i.tool_availability || {}, i.tool_paths || {});
} catch (l) {
(o = console.debug) == null || o.call(console, l);
}
@@ -29011,7 +29038,7 @@ function Q0(e, t, n) {
}
}
function _0(e, t, n) {
- const i = P0(t), o = i && i !== String((n == null ? void 0 : n.lastSignature) || ""), r = H0(t);
+ const i = P0(t), o = i && i !== String((n == null ? void 0 : n.lastSignature) || ""), r = E0(t);
let l = e || gi.ACTIVE, a = Number((n == null ? void 0 : n.cooldownStablePolls) || 0) || 0;
return r || o ? (l = gi.ACTIVE, a = 0) : l === gi.ACTIVE ? (l = gi.COOLDOWN, a = 0) : l === gi.COOLDOWN ? (a += 1, a >= 3 && (l = gi.IDLE, a = 0)) : (l = o ? gi.ACTIVE : gi.IDLE, a = 0), {
nextState: l,
@@ -29022,30 +29049,30 @@ function _0(e, t, n) {
};
}
function $0(e, t, n, i = null, o = null, r = null) {
- var g, A, p, b;
+ var g, y, p, b;
const l = "__MJR_STATUS_POLL_DISPOSE__", a = { lastCode: null, lastStatus: null, _pollTick: 0, _auxCached: !1 }, c = {
mode: gi.ACTIVE,
cooldownStablePolls: 0,
lastSignature: ""
}, s = typeof AbortController < "u" ? new AbortController() : null, d = async () => {
- var W, f, X;
+ var Z, f, X;
try {
- if ((W = s == null ? void 0 : s.signal) != null && W.aborted) return null;
+ if ((Z = s == null ? void 0 : s.signal) != null && Z.aborted) return null;
} catch (x) {
(f = console.debug) == null || f.call(console, x);
}
a._pollTick = Number(a._pollTick || 0) + 1;
- const L = a._pollTick > 1 && a._pollTick % 4 !== 0, h = typeof r == "function" ? r() : null, G = await Ni(
+ const L = a._pollTick > 1 && a._pollTick % 4 !== 0, C = typeof r == "function" ? r() : null, G = await ki(
e,
t,
i,
- h,
+ C,
a,
{
signal: (s == null ? void 0 : s.signal) || null,
lightweight: L,
// Keep status updates alive while maintenance is active (or stale).
- force: !!Gr || a._pollTick <= 1
+ force: !!Sr || a._pollTick <= 1
}
);
if (G && typeof G == "object") {
@@ -29065,7 +29092,7 @@ function $0(e, t, n, i = null, o = null, r = null) {
try {
(g = n._mjrStatusPollDispose) == null || g.call(n);
} catch (L) {
- (A = console.debug) == null || A.call(console, L);
+ (y = console.debug) == null || y.call(console, L);
}
try {
const L = window == null ? void 0 : window[l];
@@ -29073,43 +29100,43 @@ function $0(e, t, n, i = null, o = null, r = null) {
} catch (L) {
(p = console.debug) == null || p.call(console, L);
}
- let u = null, I = 0, y = !1;
- const S = () => {
+ let u = null, I = 0, A = !1;
+ const h = () => {
var L;
try {
- const h = typeof document < "u" && !!document.hidden, G = typeof document < "u" && typeof document.hasFocus == "function" && !document.hasFocus();
- if (h || G) return 4;
- } catch (h) {
- (L = console.debug) == null || L.call(console, h);
+ const C = typeof document < "u" && !!document.hidden, G = typeof document < "u" && typeof document.hasFocus == "function" && !document.hasFocus();
+ if (C || G) return 4;
+ } catch (C) {
+ (L = console.debug) == null || L.call(console, C);
}
return 1;
- }, Z = () => {
- const L = R0[c.mode] || Math.max(250, Number(fe.STATUS_POLL_INTERVAL) || 2e3), h = y ? Math.max(3e4, L) : I > 0 ? Math.min(6e4, Math.round(L * Math.min(8, 1 + I))) : L, G = Math.min(12e4, Math.round(h * S()));
+ }, S = () => {
+ const L = R0[c.mode] || Math.max(250, Number(he.STATUS_POLL_INTERVAL) || 2e3), C = A ? Math.max(3e4, L) : I > 0 ? Math.min(6e4, Math.round(L * Math.min(8, 1 + I))) : L, G = Math.min(12e4, Math.round(C * h()));
u = setTimeout(async () => {
- var f, X, x, T;
+ var f, X, x, K;
try {
if ((f = s == null ? void 0 : s.signal) != null && f.aborted) return;
- } catch (v) {
- (X = console.debug) == null || X.call(console, v);
+ } catch (j) {
+ (X = console.debug) == null || X.call(console, j);
}
- const W = await d();
- if (y = a.lastCode === "INVALID_RESPONSE" && a.lastStatus === 404, W ? I = 0 : y ? I = Math.min(999, I + 1) : (I = Math.min(999, I + 1), c.mode = gi.ACTIVE, c.cooldownStablePolls = 0), y && I >= 3) {
+ const Z = await d();
+ if (A = a.lastCode === "INVALID_RESPONSE" && a.lastStatus === 404, Z ? I = 0 : A ? I = Math.min(999, I + 1) : (I = Math.min(999, I + 1), c.mode = gi.ACTIVE, c.cooldownStablePolls = 0), A && I >= 3) {
try {
(x = n._mjrStatusPollDispose) == null || x.call(n);
- } catch (v) {
- (T = console.debug) == null || T.call(console, v);
+ } catch (j) {
+ (K = console.debug) == null || K.call(console, j);
}
return;
}
- Z();
+ S();
}, G);
};
n._mjrStatusPollDispose = () => {
- var L, h;
+ var L, C;
try {
(L = s == null ? void 0 : s.abort) == null || L.call(s);
} catch (G) {
- (h = console.debug) == null || h.call(console, G);
+ (C = console.debug) == null || C.call(console, G);
}
u && clearTimeout(u), u = null;
};
@@ -29118,61 +29145,61 @@ function $0(e, t, n, i = null, o = null, r = null) {
} catch (L) {
(b = console.debug) == null || b.call(console, L);
}
- Z();
- const C = n.querySelector("#mjr-status-dot");
- C && (C.onclick = (L) => {
+ S();
+ const W = n.querySelector("#mjr-status-dot");
+ W && (W.onclick = (L) => {
L.stopPropagation();
- const h = typeof r == "function" ? r() : null;
- Tb(e, t, i, h);
- }, C.title = m("status.clickToScan", "Click to scan"));
+ const C = typeof r == "function" ? r() : null;
+ Tb(e, t, i, C);
+ }, W.title = m("status.clickToScan", "Click to scan"));
}
-const Uo = Ys(null), ic = Ys(null);
-function eM() {
+const Bo = Xs(null), oc = Xs(null);
+function e2() {
return {
- activeAsset: Uo,
- onUpdateCallback: ic
+ activeAsset: Bo,
+ onUpdateCallback: oc
};
}
-function tM(e, t) {
- ic.value = typeof t == "function" ? t : null, Uo.value = e ?? null;
+function t2(e, t) {
+ oc.value = typeof t == "function" ? t : null, Bo.value = e ?? null;
}
-function nM() {
- Uo.value = null, ic.value = null;
+function n2() {
+ Bo.value = null, oc.value = null;
}
-function ys(e, t) {
- if (!(!Uo.value || !e)) {
- Uo.value = {
- ...Uo.value,
+function fs(e, t) {
+ if (!(!Bo.value || !e)) {
+ Bo.value = {
+ ...Bo.value,
...e
};
try {
- const n = t ?? ic.value;
- typeof n == "function" && n(Uo.value);
+ const n = t ?? oc.value;
+ typeof n == "function" && n(Bo.value);
} catch {
}
}
}
-const pm = 360, iM = 240, oM = 640;
-function rM() {
+const pm = 360, i2 = 240, o2 = 640;
+function r2() {
var e;
try {
- const t = Xn(), n = Number((e = t == null ? void 0 : t.sidebar) == null ? void 0 : e.widthPx);
- return Number.isFinite(n) ? Math.max(iM, Math.min(oM, Math.round(n))) : pm;
+ const t = kn(), n = Number((e = t == null ? void 0 : t.sidebar) == null ? void 0 : e.widthPx);
+ return Number.isFinite(n) ? Math.max(i2, Math.min(o2, Math.round(n))) : pm;
} catch {
return pm;
}
}
-function Bb(e, t) {
+function Kb(e, t) {
var o;
if (!e) return;
const n = String(((o = e == null ? void 0 : e.dataset) == null ? void 0 : o.position) || "right").toLowerCase() === "left", i = "var(--mjr-border, rgba(255,255,255,0.12))";
if (t) {
- const r = `${rM()}px`;
+ const r = `${r2()}px`;
e.style.flex = `0 0 ${r}`, e.style.width = r, e.style.maxWidth = r, e.style.minWidth = "0", e.style.overflow = "hidden", e.style.borderLeft = n ? "none" : `1px solid ${i}`, e.style.borderRight = n ? `1px solid ${i}` : "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 lM(e) {
+function l2(e) {
if (e == null) return !1;
let t = e;
if (typeof e == "string") {
@@ -29193,9 +29220,9 @@ function lM(e) {
return !1;
}
function ym(e) {
- return e ? !!(e.geninfo || e.prompt || lM(e.metadata_raw)) : !1;
+ return e ? !!(e.geninfo || e.prompt || l2(e.metadata_raw)) : !1;
}
-async function aM(e, t, n) {
+async function a2(e, t, n) {
var c, s, d;
if (!e || !t) return;
const i = String((t == null ? void 0 : t.kind) || "").toLowerCase() === "folder";
@@ -29205,25 +29232,25 @@ async function aM(e, t, n) {
(c = console.debug) == null || c.call(console, u);
}
const o = e._requestSeq = (e._requestSeq || 0) + 1;
- (d = (s = e._currentFetchAbortController) == null ? void 0 : s.abort) == null || d.call(s), e._currentFetchAbortController = null, e.classList.add("is-open"), Bb(e, !0), e._currentAsset = t, e._currentFullAsset = t, e._ratingTagsSection = null, tM(t, n);
+ (d = (s = e._currentFetchAbortController) == null ? void 0 : s.abort) == null || d.call(s), e._currentFetchAbortController = null, e.classList.add("is-open"), Kb(e, !0), e._currentAsset = t, e._currentFullAsset = t, e._ratingTagsSection = null, t2(t, n);
const r = () => {
- var I, y;
- (y = (I = e._currentFetchAbortController) == null ? void 0 : I.abort) == null || y.call(I);
+ var I, A;
+ (A = (I = e._currentFetchAbortController) == null ? void 0 : I.abort) == null || A.call(I);
const u = typeof AbortController < "u" ? new AbortController() : null;
return e._currentFetchAbortController = u, u != null && u.signal ? { signal: u.signal } : {};
}, l = (u = {}) => {
if (e._requestSeq !== o || e._currentAsset !== t) return;
const I = { ...e._currentFullAsset ?? t, ...u };
- e._currentFullAsset = I, ys(u, n);
+ e._currentFullAsset = I, fs(u, n);
};
(async () => {
- var S, Z, C, g, A;
+ var h, S, W, g, y;
if (e._requestSeq !== o || e._currentAsset !== t) return;
const u = r(), I = u.signal;
if (i) {
try {
- const p = String((t == null ? void 0 : t.filepath) || (t == null ? void 0 : t.subfolder) || "").trim(), b = String((t == null ? void 0 : t.root_id) || (t == null ? void 0 : t.rootId) || "").trim(), L = b ? String((t == null ? void 0 : t.subfolder) || "").trim() : "", h = await Ih({ filepath: p, root_id: b, subfolder: L }, u);
- !(I != null && I.aborted) && (h != null && h.ok) && h.data && l({ folder_info: h.data });
+ const p = String((t == null ? void 0 : t.filepath) || (t == null ? void 0 : t.subfolder) || "").trim(), b = String((t == null ? void 0 : t.root_id) || (t == null ? void 0 : t.rootId) || "").trim(), L = b ? String((t == null ? void 0 : t.subfolder) || "").trim() : "", C = await IC({ filepath: p, root_id: b, subfolder: L }, u);
+ !(I != null && I.aborted) && (C != null && C.ok) && C.data && l({ folder_info: C.data });
} catch (p) {
I != null && I.aborted || console.warn("Failed to load folder details:", p);
} finally {
@@ -29231,9 +29258,9 @@ async function aM(e, t, n) {
}
return;
}
- const y = () => e._currentFullAsset ?? t;
+ const A = () => e._currentFullAsset ?? t;
try {
- if (t.id && !ym(y()) && !y().exif) {
+ if (t.id && !ym(A()) && !A().exif) {
const p = await gl(t.id, u);
if (I != null && I.aborted) return;
p != null && p.ok && p.data && l(p.data);
@@ -29242,21 +29269,21 @@ async function aM(e, t, n) {
I != null && I.aborted || console.warn("Failed to load full asset metadata:", p);
}
if (!(I != null && I.aborted)) {
- if (!ym(y())) {
- const p = String(((S = y()) == null ? void 0 : S.filename) || "").trim(), b = String(((Z = y()) == null ? void 0 : Z.type) || "output").trim().toLowerCase(), L = String(((C = y()) == null ? void 0 : C.subfolder) || "").trim(), h = String(((g = y()) == null ? void 0 : g.root_id) || ((A = y()) == null ? void 0 : A.rootId) || "").trim();
+ if (!ym(A())) {
+ const p = String(((h = A()) == null ? void 0 : h.filename) || "").trim(), b = String(((S = A()) == null ? void 0 : S.type) || "output").trim().toLowerCase(), L = String(((W = A()) == null ? void 0 : W.subfolder) || "").trim(), C = String(((g = A()) == null ? void 0 : g.root_id) || ((y = A()) == null ? void 0 : y.rootId) || "").trim();
if (p)
try {
- const G = await Eg({ type: b, filename: p, subfolder: L, root_id: h }, u);
+ const G = await Hg({ type: b, filename: p, subfolder: L, root_id: C }, u);
if (I != null && I.aborted) return;
if (G != null && G.ok && G.data) {
- const W = G.data;
+ const Z = G.data;
l({
- prompt: y().prompt ?? W.prompt,
- workflow: y().workflow ?? W.workflow,
- geninfo: y().geninfo ?? W.geninfo,
- exif: y().exif ?? W.exif,
- ffprobe: y().ffprobe ?? W.ffprobe,
- metadata_raw: y().metadata_raw ?? W
+ prompt: A().prompt ?? Z.prompt,
+ workflow: A().workflow ?? Z.workflow,
+ geninfo: A().geninfo ?? Z.geninfo,
+ exif: A().exif ?? Z.exif,
+ ffprobe: A().ffprobe ?? Z.ffprobe,
+ metadata_raw: A().metadata_raw ?? Z
});
}
} catch (G) {
@@ -29267,10 +29294,10 @@ async function aM(e, t, n) {
}
})();
}
-function Ub(e) {
+function Bb(e) {
var t, n, i, o;
if (e) {
- e._requestSeq = (e._requestSeq || 0) + 1, e.classList.remove("is-open"), Bb(e, !1), e._currentAsset = null, e._currentFullAsset = null, (n = (t = e._currentFetchAbortController) == null ? void 0 : t.abort) == null || n.call(t), e._currentFetchAbortController = null, nM();
+ e._requestSeq = (e._requestSeq || 0) + 1, e.classList.remove("is-open"), Kb(e, !1), e._currentAsset = null, e._currentFullAsset = null, (n = (t = e._currentFetchAbortController) == null ? void 0 : t.abort) == null || n.call(t), e._currentFetchAbortController = null, n2();
try {
(i = e.dispatchEvent) == null || i.call(e, new CustomEvent("mjr:sidebar-closed", { bubbles: !0 }));
} catch (r) {
@@ -29278,7 +29305,7 @@ function Ub(e) {
}
}
}
-const Id = "mjr_panel_state", cM = /* @__PURE__ */ new Set(["output", "input", "all", "custom"]);
+const Id = "mjr_panel_state", c2 = /* @__PURE__ */ new Set(["output", "input", "all", "custom"]);
function fm(e, t = !1) {
if (typeof e == "boolean") return e;
if (typeof e == "string") {
@@ -29288,7 +29315,7 @@ function fm(e, t = !1) {
}
return !!t;
}
-function fs(e, t = 0) {
+function Cs(e, t = 0) {
const n = Number(e);
return Number.isFinite(n) ? n : t;
}
@@ -29296,15 +29323,15 @@ function mi(e, t = "") {
return e == null ? t : String(e);
}
function ir(e, t = 0, n = 1 / 0) {
- return Math.max(t, Math.min(n, Math.floor(fs(e, t))));
+ return Math.max(t, Math.min(n, Math.floor(Cs(e, t))));
}
-function sM(e) {
+function s2(e) {
const t = mi(e || "output").toLowerCase(), n = t === "outputs" ? "output" : t === "inputs" ? "input" : t;
- return cM.has(n) ? n : "output";
+ return c2.has(n) ? n : "output";
}
-function Kb(e) {
+function Ub(e) {
return !e || typeof e != "object" ? {} : {
- scope: sM(e.scope),
+ scope: s2(e.scope),
customRootId: mi(e.customRootId),
customRootLabel: mi(e.customRootLabel),
currentFolderRelativePath: mi(e.currentFolderRelativePath || e.subfolder),
@@ -29315,8 +29342,8 @@ function Kb(e) {
dateExactFilter: mi(e.dateExactFilter),
workflowOnly: fm(e.workflowOnly, !1),
minRating: ir(e.minRating, 0, 5),
- minSizeMB: Math.max(0, fs(e.minSizeMB, 0)),
- maxSizeMB: Math.max(0, fs(e.maxSizeMB, 0)),
+ minSizeMB: Math.max(0, Cs(e.minSizeMB, 0)),
+ maxSizeMB: Math.max(0, Cs(e.maxSizeMB, 0)),
resolutionCompare: e.resolutionCompare === "lte" ? "lte" : "gte",
minWidth: ir(e.minWidth),
minHeight: ir(e.minHeight),
@@ -29331,25 +29358,25 @@ function Kb(e) {
sidebarOpen: fm(e.sidebarOpen, !1)
};
}
-function dM() {
+function d2() {
try {
const e = localStorage.getItem(Id);
- if (e) return Kb(JSON.parse(e));
+ if (e) return Ub(JSON.parse(e));
} catch {
}
return {};
}
-function uM(e) {
+function u2(e) {
try {
const t = { ...e };
delete t.lastGridCount, delete t.lastGridTotal, delete t.viewScope, delete t.similarResults, delete t.similarTitle, delete t.similarSourceAssetId, localStorage.setItem(Id, JSON.stringify(t));
} catch {
}
}
-const Go = rg("mjr-panel", () => {
- const e = dM(), t = Ae(e.scope || "output"), n = Ae(e.customRootId || ""), i = Ae(e.customRootLabel || ""), o = Ae(e.currentFolderRelativePath || ""), r = Ae(e.collectionId || ""), l = Ae(e.collectionName || ""), a = Ae(e.kindFilter || ""), c = Ae(e.dateRangeFilter || ""), s = Ae(e.dateExactFilter || ""), d = Ae(e.workflowOnly || !1), u = Ae(e.minRating || 0), I = Ae(e.minSizeMB || 0), y = Ae(e.maxSizeMB || 0), S = Ae(e.resolutionCompare || "gte"), Z = Ae(e.minWidth || 0), C = Ae(e.minHeight || 0), g = Ae(e.maxWidth || 0), A = Ae(e.maxHeight || 0), p = Ae(e.workflowType || ""), b = Ae(e.sort || "mtime_desc"), L = Ae(e.searchQuery || ""), h = Ae(e.scrollTop || 0), G = Ae(e.activeAssetId || ""), W = Ae(e.selectedAssetIds || []), f = Ae(e.sidebarOpen || !1), X = Ae(0), x = Ae(0), T = Ae(""), v = Ae([]), w = Ae(""), R = Ae("");
- let Y = null;
- cn(
+const So = rg("mjr-panel", () => {
+ const e = d2(), t = We(e.scope || "output"), n = We(e.customRootId || ""), i = We(e.customRootLabel || ""), o = We(e.currentFolderRelativePath || ""), r = We(e.collectionId || ""), l = We(e.collectionName || ""), a = We(e.kindFilter || ""), c = We(e.dateRangeFilter || ""), s = We(e.dateExactFilter || ""), d = We(e.workflowOnly || !1), u = We(e.minRating || 0), I = We(e.minSizeMB || 0), A = We(e.maxSizeMB || 0), h = We(e.resolutionCompare || "gte"), S = We(e.minWidth || 0), W = We(e.minHeight || 0), g = We(e.maxWidth || 0), y = We(e.maxHeight || 0), p = We(e.workflowType || ""), b = We(e.sort || "mtime_desc"), L = We(e.searchQuery || ""), C = We(e.scrollTop || 0), G = We(e.activeAssetId || ""), Z = We(e.selectedAssetIds || []), f = We(e.sidebarOpen || !1), X = We(0), x = We(0), K = We(""), j = We([]), w = We(""), R = We("");
+ let V = null;
+ dn(
[
t,
n,
@@ -29363,23 +29390,23 @@ const Go = rg("mjr-panel", () => {
d,
u,
I,
- y,
- S,
- Z,
- C,
- g,
A,
+ h,
+ S,
+ W,
+ g,
+ y,
p,
b,
L,
- h,
+ C,
G,
- W,
+ Z,
f
],
() => {
- Y && clearTimeout(Y), Y = setTimeout(() => {
- Y = null, uM({
+ V && clearTimeout(V), V = setTimeout(() => {
+ V = null, u2({
scope: t.value,
customRootId: n.value,
customRootLabel: i.value,
@@ -29392,53 +29419,53 @@ const Go = rg("mjr-panel", () => {
workflowOnly: d.value,
minRating: u.value,
minSizeMB: I.value,
- maxSizeMB: y.value,
- resolutionCompare: S.value,
- minWidth: Z.value,
- minHeight: C.value,
+ maxSizeMB: A.value,
+ resolutionCompare: h.value,
+ minWidth: S.value,
+ minHeight: W.value,
maxWidth: g.value,
- maxHeight: A.value,
+ maxHeight: y.value,
workflowType: p.value,
sort: b.value,
searchQuery: L.value,
- scrollTop: h.value,
+ scrollTop: C.value,
activeAssetId: G.value,
- selectedAssetIds: W.value,
+ selectedAssetIds: Z.value,
sidebarOpen: f.value
});
}, 750);
},
{ deep: !0 }
);
- const N = (B) => {
- if (!(B.key !== Id || !B.newValue))
+ const k = (T) => {
+ if (!(T.key !== Id || !T.newValue))
try {
- const J = Kb(JSON.parse(B.newValue));
+ const J = Ub(JSON.parse(T.newValue));
J.scope !== void 0 && (t.value = J.scope), J.customRootLabel !== void 0 && (i.value = J.customRootLabel), J.searchQuery !== void 0 && (L.value = J.searchQuery), J.sort !== void 0 && (b.value = J.sort), J.sidebarOpen !== void 0 && (f.value = J.sidebarOpen);
} catch {
}
};
try {
- window.addEventListener("storage", N);
+ window.addEventListener("storage", k);
} catch {
}
ag(() => {
try {
- window.removeEventListener("storage", N);
+ window.removeEventListener("storage", k);
} catch {
}
});
- function V() {
- a.value = "", c.value = "", s.value = "", d.value = !1, u.value = 0, I.value = 0, y.value = 0, S.value = "gte", Z.value = 0, C.value = 0, g.value = 0, A.value = 0, p.value = "", L.value = "";
+ function Y() {
+ a.value = "", c.value = "", s.value = "", d.value = !1, u.value = 0, I.value = 0, A.value = 0, h.value = "gte", S.value = 0, W.value = 0, g.value = 0, y.value = 0, p.value = "", L.value = "";
}
- function k() {
- W.value = [], G.value = "";
+ function N() {
+ Z.value = [], G.value = "";
}
- function K(B, J = "") {
- W.value = Array.isArray(B) ? B.map(String).filter(Boolean) : [], G.value = J || W.value[0] || "";
+ function U(T, J = "") {
+ Z.value = Array.isArray(T) ? T.map(String).filter(Boolean) : [], G.value = J || Z.value[0] || "";
}
- function z(B, J = {}) {
- t.value = B, o.value = J.folder || "", r.value = J.collectionId || "", l.value = J.collectionName || "", n.value = J.customRootId || "", i.value = J.customRootLabel || "", T.value = "", v.value = [], w.value = "", R.value = "", k();
+ function z(T, J = {}) {
+ t.value = T, o.value = J.folder || "", r.value = J.collectionId || "", l.value = J.collectionName || "", n.value = J.customRootId || "", i.value = J.customRootLabel || "", K.value = "", j.value = [], w.value = "", R.value = "", N();
}
return {
// persistent
@@ -29454,36 +29481,36 @@ const Go = rg("mjr-panel", () => {
workflowOnly: d,
minRating: u,
minSizeMB: I,
- maxSizeMB: y,
- resolutionCompare: S,
- minWidth: Z,
- minHeight: C,
+ maxSizeMB: A,
+ resolutionCompare: h,
+ minWidth: S,
+ minHeight: W,
maxWidth: g,
- maxHeight: A,
+ maxHeight: y,
workflowType: p,
sort: b,
searchQuery: L,
- scrollTop: h,
+ scrollTop: C,
activeAssetId: G,
- selectedAssetIds: W,
+ selectedAssetIds: Z,
sidebarOpen: f,
// transient
lastGridCount: X,
lastGridTotal: x,
- viewScope: T,
- similarResults: v,
+ viewScope: K,
+ similarResults: j,
similarTitle: w,
similarSourceAssetId: R,
// actions
- resetFilters: V,
- clearSelection: k,
- setSelection: K,
+ resetFilters: Y,
+ clearSelection: N,
+ setSelection: U,
navigateToScope: z
};
});
function Al() {
try {
- return lg() ? Go() : null;
+ return lg() ? So() : null;
} catch {
return null;
}
@@ -29518,8 +29545,8 @@ function oo(e, t = []) {
isPiniaOnly: !0
};
}
-const Db = "mjr_panel_messages_v1", Eb = "mjr_panel_messages_last_read_v1", mM = "mjr_panel_messages_dismissed_builtin_ids_v1", hm = 120, gM = "/mjr/am/user-guide", IM = /* @__PURE__ */ new Set(["info", "success", "warning", "error"]), Hb = "mjr:panel-messages-changed";
-let Cm = !1, wi = [];
+const Db = "mjr_panel_messages_v1", Hb = "mjr_panel_messages_last_read_v1", m2 = "mjr_panel_messages_dismissed_builtin_ids_v1", Cm = 120, g2 = "/mjr/am/user-guide", I2 = /* @__PURE__ */ new Set(["info", "success", "warning", "error"]), Eb = "mjr:panel-messages-changed";
+let hm = !1, wi = [];
const qb = Object.freeze([
{
id: "whats-new-2026-03-29-version-2-4-3",
@@ -29588,7 +29615,7 @@ const qb = Object.freeze([
bodyKey: "msg.whatsNew.body.localUserGuide",
actionLabel: "User Guide",
actionLabelKey: "label.userGuide",
- actionUrl: gM
+ actionUrl: g2
},
{
id: "tip-2026-04-07-output-folder-override",
@@ -29710,7 +29737,7 @@ const qb = Object.freeze([
actionLabelKey: "label.settingsGuide",
actionUrl: "docs/SETTINGS_CONFIGURATION.md"
}
-]), bM = new Set(
+]), b2 = new Set(
qb.map((e) => String((e == null ? void 0 : e.id) || "").trim()).filter(Boolean)
);
function Wl(e, t = 0) {
@@ -29720,18 +29747,18 @@ function Wl(e, t = 0) {
function Zl() {
return Date.now();
}
-function pM() {
- return Xs(`msg-${Zl()}-`, 6);
+function p2() {
+ return ks(`msg-${Zl()}-`, 6);
}
-function yM(e) {
+function y2(e) {
const t = String(e || "").trim().toLowerCase();
- return t === "warn" ? "warning" : t === "danger" ? "error" : IM.has(t) ? t : "info";
+ return t === "warn" ? "warning" : t === "danger" ? "error" : I2.has(t) ? t : "info";
}
-function fM(e) {
- return bM.has(String(e || "").trim());
+function f2(e) {
+ return b2.has(String(e || "").trim());
}
function Pb(e = {}) {
- const t = String((e == null ? void 0 : e.id) || "").trim() || pM(), n = String((e == null ? void 0 : e.title) || "").trim() || "Info", i = String((e == null ? void 0 : e.titleKey) || "").trim(), o = String((e == null ? void 0 : e.emoji) || "").trim(), r = String((e == null ? void 0 : e.body) || "").trim(), l = String((e == null ? void 0 : e.bodyKey) || "").trim(), a = String((e == null ? void 0 : e.category) || "").trim() || "Info", c = String((e == null ? void 0 : e.categoryKey) || "").trim(), s = Wl(e == null ? void 0 : e.createdAt, Zl()), d = yM(e == null ? void 0 : e.level), u = String((e == null ? void 0 : e.actionLabel) || "").trim(), I = String((e == null ? void 0 : e.actionLabelKey) || "").trim(), y = String((e == null ? void 0 : e.actionUrl) || "").trim();
+ const t = String((e == null ? void 0 : e.id) || "").trim() || p2(), n = String((e == null ? void 0 : e.title) || "").trim() || "Info", i = String((e == null ? void 0 : e.titleKey) || "").trim(), o = String((e == null ? void 0 : e.emoji) || "").trim(), r = String((e == null ? void 0 : e.body) || "").trim(), l = String((e == null ? void 0 : e.bodyKey) || "").trim(), a = String((e == null ? void 0 : e.category) || "").trim() || "Info", c = String((e == null ? void 0 : e.categoryKey) || "").trim(), s = Wl(e == null ? void 0 : e.createdAt, Zl()), d = y2(e == null ? void 0 : e.level), u = String((e == null ? void 0 : e.actionLabel) || "").trim(), I = String((e == null ? void 0 : e.actionLabelKey) || "").trim(), A = String((e == null ? void 0 : e.actionUrl) || "").trim();
return {
id: t,
title: n,
@@ -29745,7 +29772,7 @@ function Pb(e = {}) {
level: d,
actionLabel: u,
actionLabelKey: I,
- actionUrl: y
+ actionUrl: A
};
}
function Qb(e, t) {
@@ -29756,7 +29783,7 @@ function Qb(e, t) {
return t;
}
}
-function hM(e, t) {
+function C2(e, t) {
try {
localStorage.setItem(e, JSON.stringify(t));
} catch {
@@ -29764,31 +29791,31 @@ function hM(e, t) {
}
function _b() {
try {
- return Wl(localStorage.getItem(Eb), 0);
+ return Wl(localStorage.getItem(Hb), 0);
} catch {
return 0;
}
}
-function CM(e) {
+function h2(e) {
try {
- localStorage.setItem(Eb, String(Wl(e, Zl())));
+ localStorage.setItem(Hb, String(Wl(e, Zl())));
} catch {
}
}
-function ZM() {
- const e = Qb(mM, []), t = Array.isArray(e) ? e : [];
+function Z2() {
+ const e = Qb(m2, []), t = Array.isArray(e) ? e : [];
return new Set(
- t.map((n) => String(n || "").trim()).filter((n) => fM(n))
+ t.map((n) => String(n || "").trim()).filter((n) => f2(n))
);
}
function $b() {
- wi.sort((e, t) => Number(t.createdAt || 0) - Number(e.createdAt || 0)), wi.length > hm && (wi = wi.slice(0, hm));
+ wi.sort((e, t) => Number(t.createdAt || 0) - Number(e.createdAt || 0)), wi.length > Cm && (wi = wi.slice(0, Cm));
}
-function AM() {
- hM(Db, wi);
+function A2() {
+ C2(Db, wi);
}
-function WM() {
- const e = ZM();
+function W2() {
+ const e = Z2();
let t = !1;
for (const n of qb) {
const i = Pb(n);
@@ -29807,13 +29834,13 @@ function WM() {
};
JSON.stringify(r) !== JSON.stringify(l) && (wi[o] = l, t = !0);
}
- return t ? ($b(), AM(), !0) : !1;
+ return t ? ($b(), A2(), !0) : !1;
}
function ep() {
var e;
try {
window.dispatchEvent(
- new CustomEvent(Hb, {
+ new CustomEvent(Eb, {
detail: {
total: wi.length,
unread: hs()
@@ -29825,15 +29852,15 @@ function ep() {
}
}
function wl() {
- if (Cm) return;
- Cm = !0;
+ if (hm) return;
+ hm = !0;
const e = Qb(Db, []);
wi = (Array.isArray(e) ? e : []).map(Pb), $b();
}
-function wM() {
- wl(), WM() && ep();
+function w2() {
+ wl(), W2() && ep();
}
-function MM() {
+function M2() {
return wl(), wi.map((e) => ({ ...e }));
}
function hs() {
@@ -29841,13 +29868,13 @@ function hs() {
const e = _b();
return wi.reduce((t, n) => t + (Number(n.createdAt || 0) > e ? 1 : 0), 0);
}
-function SM() {
+function G2() {
return wl(), _b();
}
-function Gc({ upTo: e = Zl() } = {}) {
- wl(), CM(Wl(e, Zl())), ep();
+function xc({ upTo: e = Zl() } = {}) {
+ wl(), h2(Wl(e, Zl())), ep();
}
-const GM = Object.freeze([
+const S2 = Object.freeze([
{
id: "panel",
titleKey: "msg.shortcuts.section.panel",
@@ -29916,13 +29943,13 @@ const GM = Object.freeze([
])
}
]);
-function xM() {
- return GM.map((e) => ({
+function x2() {
+ return S2.map((e) => ({
...e,
items: Array.isArray(e.items) ? e.items.map((t) => ({ ...t })) : []
}));
}
-function jM() {
+function j2() {
const e = document.createElement("div");
e.className = "mjr-shortcut-guide";
const t = document.createElement("div");
@@ -29930,7 +29957,7 @@ function jM() {
"msg.shortcuts.intro",
"Current keyboard shortcuts grouped by section for quick reference."
), e.appendChild(t);
- for (const n of xM()) {
+ for (const n of x2()) {
const i = document.createElement("section");
i.className = "mjr-shortcut-section";
const o = document.createElement("div");
@@ -29949,7 +29976,7 @@ function jM() {
}
return e;
}
-const vM = /* @__PURE__ */ new Set(["info", "success", "warning", "error"]);
+const v2 = /* @__PURE__ */ new Set(["info", "success", "warning", "error"]);
function Zm(e) {
const t = Number(e);
if (!Number.isFinite(t) || t <= 0) return "";
@@ -29965,13 +29992,13 @@ function Zm(e) {
return "";
}
}
-function El(e, t, n, i) {
+function Hl(e, t, n, i) {
const o = String((e == null ? void 0 : e[t]) || "").trim(), r = String((e == null ? void 0 : e[n]) || i || "").trim() || String(i || "");
return o ? m(o, r) : r;
}
function tp(e) {
const t = String(e || "").trim().toLowerCase();
- return t === "warn" ? "warning" : t === "danger" ? "error" : vM.has(t) ? t : "info";
+ return t === "warn" ? "warning" : t === "danger" ? "error" : v2.has(t) ? t : "info";
}
function Am(e) {
var n, i;
@@ -29984,13 +30011,13 @@ function Am(e) {
return "";
}
}
-function LM(e) {
+function L2(e) {
const t = String((e == null ? void 0 : e.emoji) || "").trim();
if (t) return t;
const n = tp(e == null ? void 0 : e.level);
return n === "success" ? "✅" : n === "warning" ? "⚠️" : n === "error" ? "❌" : "💡";
}
-function VM(e) {
+function Y2(e) {
switch (String(e || "").toLowerCase()) {
case "success":
return "✅";
@@ -30002,22 +30029,22 @@ function VM(e) {
return "💡";
}
}
-function YM(e) {
+function V2(e) {
if (e != null && e.persistent) return "persistent";
const t = Number(e == null ? void 0 : e.durationMs);
return !Number.isFinite(t) || t <= 0 ? "" : t < 1e4 ? `${(t / 1e3).toFixed(1)}s` : `${Math.round(t / 1e3)}s`;
}
-function kM(e) {
+function X2(e) {
const t = String(e || "").trim().toLowerCase();
return t ? t.replace(/[_-]+/g, " ") : "";
}
-function XM(e) {
+function N2(e) {
const t = e == null ? void 0 : e.progress;
if (!t || typeof t != "object") return "";
const n = String(t.label || "").trim(), i = Number(t.current), o = Number(t.total), r = Number(t.indexed), l = Number(t.skipped), a = Number(t.errors), c = [];
return n && c.push(n), Number.isFinite(i) && Number.isFinite(o) && o > 0 && c.push(`${i}/${o}`), Number.isFinite(r) && c.push(`indexed ${r}`), Number.isFinite(l) && c.push(`skipped ${l}`), Number.isFinite(a) && a > 0 && c.push(`errors ${a}`), c.join(" | ");
}
-function NM(e) {
+function k2(e) {
const t = e == null ? void 0 : e.progress;
if (!t || typeof t != "object") return null;
const n = Number(t.percent);
@@ -30037,20 +30064,20 @@ function Tr({
shortcutsPanel: c = null,
markReadBtn: s = null
} = {}) {
- var S, Z, C;
- const d = e === "messages", u = e === "history", I = e === "shortcuts", y = d ? m("label.messages", "Messages") : u ? m("label.toastHistory", "History") : m("msg.shortcuts.title", "Shortcut Guide");
+ var h, S, W;
+ const d = e === "messages", u = e === "history", I = e === "shortcuts", A = d ? m("label.messages", "Messages") : u ? m("label.toastHistory", "History") : m("msg.shortcuts.title", "Shortcut Guide");
try {
i == null || i.classList.toggle("is-active", d), i == null || i.setAttribute("aria-selected", d ? "true" : "false"), i == null || i.setAttribute("tabindex", d ? "0" : "-1"), o == null || o.classList.toggle("is-active", u), o == null || o.setAttribute("aria-selected", u ? "true" : "false"), o == null || o.setAttribute("tabindex", u ? "0" : "-1"), r == null || r.classList.toggle("is-active", I), r == null || r.setAttribute("aria-selected", I ? "true" : "false"), r == null || r.setAttribute("tabindex", I ? "0" : "-1");
} catch (g) {
- (S = console.debug) == null || S.call(console, g);
+ (h = console.debug) == null || h.call(console, g);
}
try {
- t && (t.textContent = y), (Z = n == null ? void 0 : n.setAttribute) == null || Z.call(n, "aria-label", y), l && (l.hidden = !d, l.style.display = d ? "" : "none", l.setAttribute("aria-hidden", d ? "false" : "true")), a && (a.hidden = !u, a.style.display = u ? "" : "none", a.setAttribute("aria-hidden", u ? "false" : "true")), c && (c.hidden = !I, c.style.display = I ? "" : "none", c.setAttribute("aria-hidden", I ? "false" : "true")), s && (s.hidden = !d);
+ t && (t.textContent = A), (S = n == null ? void 0 : n.setAttribute) == null || S.call(n, "aria-label", A), l && (l.hidden = !d, l.style.display = d ? "" : "none", l.setAttribute("aria-hidden", d ? "false" : "true")), a && (a.hidden = !u, a.style.display = u ? "" : "none", a.setAttribute("aria-hidden", u ? "false" : "true")), c && (c.hidden = !I, c.style.display = I ? "" : "none", c.setAttribute("aria-hidden", I ? "false" : "true")), s && (s.hidden = !d);
} catch (g) {
- (C = console.debug) == null || C.call(console, g);
+ (W = console.debug) == null || W.call(console, g);
}
}
-function RM({
+function R2({
messageBtn: e = null,
messagePopover: t = null,
title: n = null,
@@ -30064,198 +30091,198 @@ function RM({
messageTabBadge: d = null,
shortcutsTabBtn: u = null,
markReadBtn: I = null,
- popovers: y = null,
- onBeforeToggle: S = null,
- signal: Z = null
+ popovers: A = null,
+ onBeforeToggle: h = null,
+ signal: S = null
} = {}) {
- var V, k, K, z, B, J, P;
- wM();
- let C = "messages";
+ var Y, N, U, z, T, J, P;
+ w2();
+ let W = "messages";
const g = () => {
- var $, E, oe;
- const H = (($ = t == null ? void 0 : t.style) == null ? void 0 : $.display) === "block";
+ var $, H, ne;
+ const E = (($ = t == null ? void 0 : t.style) == null ? void 0 : $.display) === "block";
try {
- e == null || e.setAttribute("aria-expanded", H ? "true" : "false");
+ e == null || e.setAttribute("aria-expanded", E ? "true" : "false");
} catch (M) {
- (E = console.debug) == null || E.call(console, M);
+ (H = console.debug) == null || H.call(console, M);
}
try {
- t == null || t.setAttribute("aria-hidden", H ? "false" : "true");
+ t == null || t.setAttribute("aria-hidden", E ? "false" : "true");
} catch (M) {
- (oe = console.debug) == null || oe.call(console, M);
+ (ne = console.debug) == null || ne.call(console, M);
}
- }, A = () => {
+ }, y = () => {
if (!i) return;
- const H = MM(), $ = SM();
- if (i.replaceChildren(), !H.length) {
- const E = document.createElement("div");
- E.className = "mjr-messages-empty", E.textContent = m("msg.noMessages", "No messages for now."), i.appendChild(E);
+ const E = M2(), $ = G2();
+ if (i.replaceChildren(), !E.length) {
+ const H = document.createElement("div");
+ H.className = "mjr-messages-empty", H.textContent = m("msg.noMessages", "No messages for now."), i.appendChild(H);
return;
}
- for (const E of H) {
- const oe = document.createElement("article");
- oe.className = "mjr-message-item";
- const M = tp(E == null ? void 0 : E.level);
- oe.classList.add(`mjr-message-item--${M}`);
- const j = Number((E == null ? void 0 : E.createdAt) || 0);
- j > Number($ || 0) && oe.classList.add("mjr-message-item--unread");
+ for (const H of E) {
+ const ne = document.createElement("article");
+ ne.className = "mjr-message-item";
+ const M = tp(H == null ? void 0 : H.level);
+ ne.classList.add(`mjr-message-item--${M}`);
+ const v = Number((H == null ? void 0 : H.createdAt) || 0);
+ v > Number($ || 0) && ne.classList.add("mjr-message-item--unread");
const D = document.createElement("div");
D.className = "mjr-message-item-head";
const q = document.createElement("div");
q.className = "mjr-message-item-title-wrap";
const ee = document.createElement("span");
- ee.className = "mjr-message-item-emoji", ee.textContent = LM(E), ee.setAttribute("aria-hidden", "true");
- const ce = document.createElement("div");
- ce.className = "mjr-message-item-title", ce.textContent = El(
- E,
+ ee.className = "mjr-message-item-emoji", ee.textContent = L2(H), ee.setAttribute("aria-hidden", "true");
+ const ae = document.createElement("div");
+ ae.className = "mjr-message-item-title", ae.textContent = Hl(
+ H,
"titleKey",
"title",
m("label.info", "Info")
);
const ue = document.createElement("span");
- ue.className = "mjr-message-item-category", ue.textContent = El(
- E,
+ ue.className = "mjr-message-item-category", ue.textContent = Hl(
+ H,
"categoryKey",
"category",
m("label.info", "Info")
- ), q.appendChild(ee), q.appendChild(ce), D.appendChild(q), D.appendChild(ue);
- const U = document.createElement("div");
- U.className = "mjr-message-item-meta", U.textContent = Zm(j);
+ ), q.appendChild(ee), q.appendChild(ae), D.appendChild(q), D.appendChild(ue);
+ const B = document.createElement("div");
+ B.className = "mjr-message-item-meta", B.textContent = Zm(v);
const Q = document.createElement("div");
- Q.className = "mjr-message-item-body", Q.textContent = El(E, "bodyKey", "body", ""), oe.appendChild(D), U.textContent && oe.appendChild(U), Q.textContent && oe.appendChild(Q);
- const _ = Am(E == null ? void 0 : E.actionUrl), le = El(
- E,
+ Q.className = "mjr-message-item-body", Q.textContent = Hl(H, "bodyKey", "body", ""), ne.appendChild(D), B.textContent && ne.appendChild(B), Q.textContent && ne.appendChild(Q);
+ const _ = Am(H == null ? void 0 : H.actionUrl), le = Hl(
+ H,
"actionLabelKey",
"actionLabel",
m("label.readMe", "Read Me")
);
if (_ && le) {
- const de = document.createElement("a");
- de.className = "mjr-message-item-action", de.href = _, de.target = "_blank", de.rel = "noopener noreferrer", de.textContent = le, oe.appendChild(de);
+ const ce = document.createElement("a");
+ ce.className = "mjr-message-item-action", ce.href = _, ce.target = "_blank", ce.rel = "noopener noreferrer", ce.textContent = le, ne.appendChild(ce);
}
- i.appendChild(oe);
+ i.appendChild(ne);
}
}, p = () => {
if (!a) return;
- const H = Py();
+ const E = Py();
let $ = a.querySelector(".mjr-history-list");
if (!$) {
- const E = document.createElement("div");
- E.className = "mjr-history-head";
- const oe = document.createElement("span");
- oe.className = "mjr-history-head-label", oe.textContent = m("label.recentActivity", "Recent activity");
+ const H = document.createElement("div");
+ H.className = "mjr-history-head";
+ const ne = document.createElement("span");
+ ne.className = "mjr-history-head-label", ne.textContent = m("label.recentActivity", "Recent activity");
const M = document.createElement("button");
M.type = "button", M.className = "mjr-btn mjr-history-clear-btn", M.textContent = m("btn.clearHistory", "Clear"), M.title = m("tooltip.clearToastHistory", "Clear toast history"), M.addEventListener(
"click",
- (j) => {
- j.stopPropagation(), $y(), p();
+ (v) => {
+ v.stopPropagation(), $y(), p();
},
- Z ? { signal: Z } : void 0
- ), E.appendChild(oe), E.appendChild(M), $ = document.createElement("div"), $.className = "mjr-history-list", a.replaceChildren(E, $);
+ S ? { signal: S } : void 0
+ ), H.appendChild(ne), H.appendChild(M), $ = document.createElement("div"), $.className = "mjr-history-list", a.replaceChildren(H, $);
}
- if ($.replaceChildren(), !H.length) {
- const E = document.createElement("div");
- E.className = "mjr-messages-empty", E.textContent = m("msg.noHistory", "No recent activity."), $.appendChild(E);
+ if ($.replaceChildren(), !E.length) {
+ const H = document.createElement("div");
+ H.className = "mjr-messages-empty", H.textContent = m("msg.noHistory", "No recent activity."), $.appendChild(H);
return;
}
- for (const E of H) {
- const oe = document.createElement("div");
- oe.className = `mjr-history-item mjr-history-item--${String(E.type || "info")}`;
+ for (const H of E) {
+ const ne = document.createElement("div");
+ ne.className = `mjr-history-item mjr-history-item--${String(H.type || "info")}`;
const M = document.createElement("span");
- M.className = "mjr-history-item-icon", M.textContent = VM(E.type), M.setAttribute("aria-hidden", "true");
- const j = document.createElement("div");
- j.className = "mjr-history-item-content";
- const O = String(E.title || "").trim(), D = String(E.detail || "").trim(), q = String(E.message || "").trim(), ee = O || q, ce = O && D ? D : O ? "" : D, ue = document.createElement("div");
- ue.className = O ? "mjr-history-item-title" : "mjr-history-item-msg", ue.textContent = ee;
- const U = document.createElement("div");
- U.className = "mjr-history-item-detail", U.textContent = ce;
+ M.className = "mjr-history-item-icon", M.textContent = Y2(H.type), M.setAttribute("aria-hidden", "true");
+ const v = document.createElement("div");
+ v.className = "mjr-history-item-content";
+ const F = String(H.title || "").trim(), D = String(H.detail || "").trim(), q = String(H.message || "").trim(), ee = F || q, ae = F && D ? D : F ? "" : D, ue = document.createElement("div");
+ ue.className = F ? "mjr-history-item-title" : "mjr-history-item-msg", ue.textContent = ee;
+ const B = document.createElement("div");
+ B.className = "mjr-history-item-detail", B.textContent = ae;
const Q = document.createElement("div");
Q.className = "mjr-history-item-meta";
const _ = document.createElement("span");
- _.className = "mjr-history-item-time", _.textContent = Zm(E.createdAt);
+ _.className = "mjr-history-item-time", _.textContent = Zm(H.createdAt);
const le = document.createElement("span");
- le.className = "mjr-history-item-chip", le.textContent = YM(E);
+ le.className = "mjr-history-item-chip", le.textContent = V2(H);
+ const ce = document.createElement("span");
+ ce.className = "mjr-history-item-chip", ce.textContent = String(H.source || "").trim();
const de = document.createElement("span");
- de.className = "mjr-history-item-chip", de.textContent = String(E.source || "").trim();
- const se = document.createElement("span");
- se.className = "mjr-history-item-chip", se.textContent = kM(E.status), j.appendChild(ue), U.textContent && j.appendChild(U), _.textContent && Q.appendChild(_), le.textContent && Q.appendChild(le), se.textContent && Q.appendChild(se), de.textContent && Q.appendChild(de), Q.childNodes.length && j.appendChild(Q);
- const ge = XM(E), je = NM(E);
- if (ge || je !== null) {
- const we = document.createElement("div");
- if (we.className = "mjr-history-item-progress", ge) {
- const Je = document.createElement("div");
- Je.className = "mjr-history-item-progress-summary", Je.textContent = ge, we.appendChild(Je);
+ de.className = "mjr-history-item-chip", de.textContent = X2(H.status), v.appendChild(ue), B.textContent && v.appendChild(B), _.textContent && Q.appendChild(_), le.textContent && Q.appendChild(le), de.textContent && Q.appendChild(de), ce.textContent && Q.appendChild(ce), Q.childNodes.length && v.appendChild(Q);
+ const ge = N2(H), Le = k2(H);
+ if (ge || Le !== null) {
+ const Me = document.createElement("div");
+ if (Me.className = "mjr-history-item-progress", ge) {
+ const Fe = document.createElement("div");
+ Fe.className = "mjr-history-item-progress-summary", Fe.textContent = ge, Me.appendChild(Fe);
}
- if (je !== null) {
- const Je = document.createElement("div");
- Je.className = "mjr-history-item-progress-bar";
- const $e = document.createElement("div");
- $e.className = "mjr-history-item-progress-fill", $e.style.width = `${je}%`, Je.appendChild($e), we.appendChild(Je);
+ if (Le !== null) {
+ const Fe = document.createElement("div");
+ Fe.className = "mjr-history-item-progress-bar";
+ const it = document.createElement("div");
+ it.className = "mjr-history-item-progress-fill", it.style.width = `${Le}%`, Fe.appendChild(it), Me.appendChild(Fe);
}
- j.appendChild(we);
+ v.appendChild(Me);
}
- const Se = Am(E == null ? void 0 : E.actionUrl), ke = String((E == null ? void 0 : E.actionLabel) || "").trim();
- if (Se && ke) {
- const we = document.createElement("a");
- we.className = "mjr-history-item-action", we.href = Se, we.target = "_blank", we.rel = "noopener noreferrer", we.textContent = ke, j.appendChild(we);
+ const xe = Am(H == null ? void 0 : H.actionUrl), Xe = String((H == null ? void 0 : H.actionLabel) || "").trim();
+ if (xe && Xe) {
+ const Me = document.createElement("a");
+ Me.className = "mjr-history-item-action", Me.href = xe, Me.target = "_blank", Me.rel = "noopener noreferrer", Me.textContent = Xe, v.appendChild(Me);
}
- oe.appendChild(M), oe.appendChild(j), $.appendChild(oe);
+ ne.appendChild(M), ne.appendChild(v), $.appendChild(ne);
}
- }, b = (H, $) => {
- if (!H) return;
- const E = Math.max(0, Number($ || 0) || 0);
- if (E <= 0) {
- H.style.display = "none", H.textContent = "";
+ }, b = (E, $) => {
+ if (!E) return;
+ const H = Math.max(0, Number($ || 0) || 0);
+ if (H <= 0) {
+ E.style.display = "none", E.textContent = "";
return;
}
- H.style.display = "inline-flex", H.textContent = E > 99 ? "99+" : String(E);
+ E.style.display = "inline-flex", E.textContent = H > 99 ? "99+" : String(H);
}, L = () => {
- const H = Qy();
- r && (r.style.display = H > 0 ? "inline-block" : "none"), b(l, H);
- }, h = () => {
- c && (c.childNodes.length > 0 || c.replaceChildren(jM()));
+ const E = Qy();
+ r && (r.style.display = E > 0 ? "inline-block" : "none"), b(l, E);
+ }, C = () => {
+ c && (c.childNodes.length > 0 || c.replaceChildren(j2()));
}, G = () => {
if (!I) return;
- const H = Math.max(0, Number(hs() || 0) || 0);
- if (I.disabled = H <= 0, H > 0) {
+ const E = Math.max(0, Number(hs() || 0) || 0);
+ if (I.disabled = E <= 0, E > 0) {
I.title = m("tooltip.markMessagesRead", "Mark all messages as read");
return;
}
I.title = m("tooltip.noUnreadMessages", "No unread messages");
- }, W = () => {
- const H = Math.max(0, Number(hs() || 0) || 0);
+ }, Z = () => {
+ const E = Math.max(0, Number(hs() || 0) || 0);
if (e) {
- const $ = e.querySelector(".mjr-message-badge"), E = H > 0 ? m("tooltip.openMessagesUnread", "Messages ({count} unread)", {
- count: H
+ const $ = e.querySelector(".mjr-message-badge"), H = E > 0 ? m("tooltip.openMessagesUnread", "Messages ({count} unread)", {
+ count: E
}) : m("tooltip.openMessages", "Messages and updates");
- e.classList.toggle("mjr-message-has-unread", H > 0), e.title = E, e.setAttribute("aria-label", E), $ && (H <= 0 ? ($.style.display = "none", $.textContent = "") : ($.style.display = "inline-flex", $.textContent = H > 9 ? "9+" : String(H)));
+ e.classList.toggle("mjr-message-has-unread", E > 0), e.title = H, e.setAttribute("aria-label", H), $ && (E <= 0 ? ($.style.display = "none", $.textContent = "") : ($.style.display = "inline-flex", $.textContent = E > 9 ? "9+" : String(E)));
}
- b(d, H), G();
+ b(d, E), G();
}, f = () => {
- var H;
- W(), L(), ((H = t == null ? void 0 : t.style) == null ? void 0 : H.display) === "block" && (C === "messages" && A(), C === "history" && p());
- }, X = Z ? { signal: Z } : void 0;
+ var E;
+ Z(), L(), ((E = t == null ? void 0 : t.style) == null ? void 0 : E.display) === "block" && (W === "messages" && y(), W === "history" && p());
+ }, X = S ? { signal: S } : void 0;
try {
- window.addEventListener(Hb, f, X);
- } catch (H) {
- (V = console.debug) == null || V.call(console, H);
+ window.addEventListener(Eb, f, X);
+ } catch (E) {
+ (Y = console.debug) == null || Y.call(console, E);
}
try {
window.addEventListener(
- Sg,
+ Gg,
() => {
- var H;
- L(), ((H = t == null ? void 0 : t.style) == null ? void 0 : H.display) === "block" && C === "history" && p();
+ var E;
+ L(), ((E = t == null ? void 0 : t.style) == null ? void 0 : E.display) === "block" && W === "history" && p();
},
X
);
- } catch (H) {
- (k = console.debug) == null || k.call(console, H);
+ } catch (E) {
+ (N = console.debug) == null || N.call(console, E);
}
try {
e && t && (t.id || (t.id = "mjr-messages-popover"), e.setAttribute("aria-haspopup", "dialog"), e.setAttribute("aria-controls", t.id));
- } catch (H) {
- (K = console.debug) == null || K.call(console, H);
+ } catch (E) {
+ (U = console.debug) == null || U.call(console, E);
}
let x = null;
try {
@@ -30263,19 +30290,19 @@ function RM({
attributes: !0,
attributeFilter: ["style"]
}));
- } catch (H) {
- (z = console.debug) == null || z.call(console, H);
+ } catch (E) {
+ (z = console.debug) == null || z.call(console, E);
}
try {
- (B = Z == null ? void 0 : Z.addEventListener) == null || B.call(Z, "abort", () => {
- var H;
- return (H = x == null ? void 0 : x.disconnect) == null ? void 0 : H.call(x);
+ (T = S == null ? void 0 : S.addEventListener) == null || T.call(S, "abort", () => {
+ var E;
+ return (E = x == null ? void 0 : x.disconnect) == null ? void 0 : E.call(x);
}, { once: !0 });
- } catch (H) {
- (J = console.debug) == null || J.call(console, H);
+ } catch (E) {
+ (J = console.debug) == null || J.call(console, E);
}
- W(), L(), g(), Tr({
- activeTab: C,
+ Z(), L(), g(), Tr({
+ activeTab: W,
title: n,
messagePopover: t,
messageTabBtn: s,
@@ -30286,9 +30313,9 @@ function RM({
shortcutsPanel: c,
markReadBtn: I
});
- const T = () => {
- C = "messages", Tr({
- activeTab: C,
+ const K = () => {
+ W = "messages", Tr({
+ activeTab: W,
title: n,
messagePopover: t,
messageTabBtn: s,
@@ -30298,10 +30325,10 @@ function RM({
historyPanel: a,
shortcutsPanel: c,
markReadBtn: I
- }), A(), Gc(), W();
- }, v = () => {
- C = "history", Tr({
- activeTab: C,
+ }), y(), xc(), Z();
+ }, j = () => {
+ W = "history", Tr({
+ activeTab: W,
title: n,
messagePopover: t,
messageTabBtn: s,
@@ -30313,8 +30340,8 @@ function RM({
markReadBtn: I
}), p(), _y(), L();
}, w = () => {
- C = "shortcuts", Tr({
- activeTab: C,
+ W = "shortcuts", Tr({
+ activeTab: W,
title: n,
messagePopover: t,
messageTabBtn: s,
@@ -30324,75 +30351,75 @@ function RM({
historyPanel: a,
shortcutsPanel: c,
markReadBtn: I
- }), h();
- }, R = (H) => {
- if (H === "messages") {
- T();
+ }), C();
+ }, R = (E) => {
+ if (E === "messages") {
+ K();
return;
}
- if (H === "history") {
- v();
+ if (E === "history") {
+ j();
return;
}
w();
- }, Y = () => {
- var $, E;
- if (!t || !y || !e) return;
+ }, V = () => {
+ var $, H;
+ if (!t || !A || !e) return;
if (!((($ = t == null ? void 0 : t.style) == null ? void 0 : $.display) === "block")) {
try {
- typeof S == "function" && S();
- } catch (oe) {
- (E = console.debug) == null || E.call(console, oe);
+ typeof h == "function" && h();
+ } catch (ne) {
+ (H = console.debug) == null || H.call(console, ne);
}
- y.toggle(t, e);
+ A.toggle(t, e);
}
- v(), g(), W();
+ j(), g(), Z();
};
try {
window.addEventListener(
- ht.OPEN_MESSAGE_HISTORY,
+ ft.OPEN_MESSAGE_HISTORY,
() => {
- Y();
+ V();
},
X
);
- } catch (H) {
- (P = console.debug) == null || P.call(console, H);
+ } catch (E) {
+ (P = console.debug) == null || P.call(console, E);
}
- const F = ["messages", "history", "shortcuts"], N = (H, $) => {
- var M, j, O, D, q, ee, ce, ue;
- const E = String((H == null ? void 0 : H.key) || "").toLowerCase(), oe = F.indexOf(String($ || "").toLowerCase());
- if (!(oe < 0)) {
- if (E === "arrowright") {
- H.preventDefault();
- const U = F[(oe + 1) % F.length];
- R(U), U === "messages" && ((M = s == null ? void 0 : s.focus) == null || M.call(s)), U === "history" && ((j = o == null ? void 0 : o.focus) == null || j.call(o)), U === "shortcuts" && ((O = u == null ? void 0 : u.focus) == null || O.call(u));
+ const O = ["messages", "history", "shortcuts"], k = (E, $) => {
+ var M, v, F, D, q, ee, ae, ue;
+ const H = String((E == null ? void 0 : E.key) || "").toLowerCase(), ne = O.indexOf(String($ || "").toLowerCase());
+ if (!(ne < 0)) {
+ if (H === "arrowright") {
+ E.preventDefault();
+ const B = O[(ne + 1) % O.length];
+ R(B), B === "messages" && ((M = s == null ? void 0 : s.focus) == null || M.call(s)), B === "history" && ((v = o == null ? void 0 : o.focus) == null || v.call(o)), B === "shortcuts" && ((F = u == null ? void 0 : u.focus) == null || F.call(u));
return;
}
- if (E === "arrowleft") {
- H.preventDefault();
- const U = F[(oe + F.length - 1) % F.length];
- R(U), U === "messages" && ((D = s == null ? void 0 : s.focus) == null || D.call(s)), U === "history" && ((q = o == null ? void 0 : o.focus) == null || q.call(o)), U === "shortcuts" && ((ee = u == null ? void 0 : u.focus) == null || ee.call(u));
+ if (H === "arrowleft") {
+ E.preventDefault();
+ const B = O[(ne + O.length - 1) % O.length];
+ R(B), B === "messages" && ((D = s == null ? void 0 : s.focus) == null || D.call(s)), B === "history" && ((q = o == null ? void 0 : o.focus) == null || q.call(o)), B === "shortcuts" && ((ee = u == null ? void 0 : u.focus) == null || ee.call(u));
return;
}
- if (E === "home") {
- H.preventDefault(), T(), (ce = s == null ? void 0 : s.focus) == null || ce.call(s);
+ if (H === "home") {
+ E.preventDefault(), K(), (ae = s == null ? void 0 : s.focus) == null || ae.call(s);
return;
}
- if (E === "end") {
- H.preventDefault(), w(), (ue = u == null ? void 0 : u.focus) == null || ue.call(u);
+ if (H === "end") {
+ E.preventDefault(), w(), (ue = u == null ? void 0 : u.focus) == null || ue.call(u);
return;
}
- (E === " " || E === "enter") && (H.preventDefault(), R($));
+ (H === " " || H === "enter") && (E.preventDefault(), R($));
}
};
return e == null || e.addEventListener(
"click",
- (H) => {
- var $, E;
- if (!(!t || !y || !e)) {
- H.stopPropagation(), C = "messages", A(), h(), Tr({
- activeTab: C,
+ (E) => {
+ var $, H;
+ if (!(!t || !A || !e)) {
+ E.stopPropagation(), W = "messages", y(), C(), Tr({
+ activeTab: W,
title: n,
messagePopover: t,
messageTabBtn: s,
@@ -30404,64 +30431,64 @@ function RM({
markReadBtn: I
});
try {
- typeof S == "function" && S();
- } catch (oe) {
- ($ = console.debug) == null || $.call(console, oe);
+ typeof h == "function" && h();
+ } catch (ne) {
+ ($ = console.debug) == null || $.call(console, ne);
}
- y.toggle(t, e), ((E = t == null ? void 0 : t.style) == null ? void 0 : E.display) === "block" && Gc(), g(), W();
+ A.toggle(t, e), ((H = t == null ? void 0 : t.style) == null ? void 0 : H.display) === "block" && xc(), g(), Z();
}
},
X
), s == null || s.addEventListener(
"click",
- (H) => {
- H.preventDefault(), H.stopPropagation(), T();
+ (E) => {
+ E.preventDefault(), E.stopPropagation(), K();
},
X
), s == null || s.addEventListener(
"keydown",
- (H) => N(H, "messages"),
+ (E) => k(E, "messages"),
X
), o == null || o.addEventListener(
"click",
- (H) => {
- H.preventDefault(), H.stopPropagation(), v();
+ (E) => {
+ E.preventDefault(), E.stopPropagation(), j();
},
X
), o == null || o.addEventListener(
"keydown",
- (H) => N(H, "history"),
+ (E) => k(E, "history"),
X
), u == null || u.addEventListener(
"click",
- (H) => {
- H.preventDefault(), H.stopPropagation(), w();
+ (E) => {
+ E.preventDefault(), E.stopPropagation(), w();
},
X
), u == null || u.addEventListener(
"keydown",
- (H) => N(H, "shortcuts"),
+ (E) => k(E, "shortcuts"),
X
), I == null || I.addEventListener(
"click",
- (H) => {
- H.preventDefault(), H.stopPropagation(), Gc(), A(), W();
+ (E) => {
+ E.preventDefault(), E.stopPropagation(), xc(), y(), Z();
},
X
), {
refresh: f,
- render: A,
- updateButtonState: W,
- showMessagesTab: T,
- showHistoryTab: v,
+ render: y,
+ updateButtonState: Z,
+ showMessagesTab: K,
+ showHistoryTab: j,
showShortcutsTab: w,
- openHistoryPopover: Y,
+ openHistoryPopover: V,
close: () => {
- !t || !y || (y.close(t), g());
+ !t || !A || (A.close(t), g());
}
};
}
-function FM(e) {
+function O2(e) {
let t = e;
for (let n = 0; n < 3 && !(!t || typeof t != "object" || !("value" in t)); n += 1) {
const i = t.value;
@@ -30470,9 +30497,9 @@ function FM(e) {
}
return t;
}
-function OM(e) {
+function F2(e) {
var i;
- const t = FM(e);
+ const t = O2(e);
if (!t) return null;
const n = String((t == null ? void 0 : t.tagName) || "").toUpperCase();
if (n === "INPUT" || n === "TEXTAREA") return t;
@@ -30486,11 +30513,11 @@ function OM(e) {
}
return null;
}
-function Cs(e) {
- const t = OM(e), n = t ? t.value : typeof (e == null ? void 0 : e.value) == "string" ? e.value : "";
+function Zs(e) {
+ const t = F2(e), n = t ? t.value : typeof (e == null ? void 0 : e.value) == "string" ? e.value : "";
return String(n || "").trim() || "*";
}
-function zM({
+function z2({
gridContainer: e,
loadAssets: t,
loadAssetsFromList: n,
@@ -30529,19 +30556,19 @@ function zM({
"lastGridCount",
"lastGridTotal"
]);
- let d = !1, u = !1, I = {}, y = 0, S = 0;
- const Z = 3e4, C = 15e4, g = 15e3, A = 30, p = async (R, Y = Z) => {
- let F = null;
+ let d = !1, u = !1, I = {}, A = 0, h = 0;
+ const S = 3e4, W = 15e4, g = 15e3, y = 30, p = async (R, V = S) => {
+ let O = null;
try {
- const N = new Promise((V, k) => {
- F = setTimeout(() => {
- const K = new Error(`Grid reload watchdog timeout (${Y}ms)`);
- K.name = "GridReloadTimeout", k(K);
- }, Y);
+ const k = new Promise((Y, N) => {
+ O = setTimeout(() => {
+ const U = new Error(`Grid reload watchdog timeout (${V}ms)`);
+ U.name = "GridReloadTimeout", N(U);
+ }, V);
});
- return await Promise.race([R(), N]);
+ return await Promise.race([R(), k]);
} finally {
- F && clearTimeout(F);
+ O && clearTimeout(O);
}
}, b = () => {
var R;
@@ -30553,27 +30580,27 @@ function zM({
}, L = () => {
var R;
try {
- const Y = Xn();
- return !!(((R = Y == null ? void 0 : Y.ai) == null ? void 0 : R.vectorSearchEnabled) ?? !0);
+ const V = kn();
+ return !!(((R = V == null ? void 0 : V.ai) == null ? void 0 : R.vectorSearchEnabled) ?? !0);
} catch {
return !0;
}
- }, h = (R, Y = "") => {
+ }, C = (R, V = "") => {
try {
if (R && typeof R == "object")
- return String(R.error || R.message || Y || "").trim();
+ return String(R.error || R.message || V || "").trim();
} catch {
}
try {
- return String(R || Y || "").trim();
+ return String(R || V || "").trim();
} catch {
- return String(Y || "").trim();
+ return String(V || "").trim();
}
- }, G = (R = []) => !Array.isArray(R) || R.length === 0 ? !1 : R.some((Y) => {
- if (String((Y == null ? void 0 : Y._matchType) || (Y == null ? void 0 : Y.matchType) || "").trim().toLowerCase().includes("semantic")) return !0;
- const N = Number((Y == null ? void 0 : Y._vectorScore) ?? (Y == null ? void 0 : Y.vectorScore) ?? NaN);
- return Number.isFinite(N) && N > 0;
- }), W = () => {
+ }, G = (R = []) => !Array.isArray(R) || R.length === 0 ? !1 : R.some((V) => {
+ if (String((V == null ? void 0 : V._matchType) || (V == null ? void 0 : V.matchType) || "").trim().toLowerCase().includes("semantic")) return !0;
+ const k = Number((V == null ? void 0 : V._vectorScore) ?? (V == null ? void 0 : V.vectorScore) ?? NaN);
+ return Number.isFinite(k) && k > 0;
+ }), Z = () => {
const R = String(c("currentFolderRelativePath", "") || "").trim();
return {
subfolder: !(c("scope", "output") === "custom" && !c("customRootId", "")) && R ? R : null,
@@ -30591,16 +30618,16 @@ function zM({
dateExact: String(c("dateExactFilter", "") || "").trim() || null
};
}, f = async (R = "") => {
- var N, V, k;
- const Y = Date.now();
- if (Y - Number(S || 0) < g) return;
- S = Y;
+ var k, Y, N;
+ const V = Date.now();
+ if (V - Number(h || 0) < g) return;
+ h = V;
try {
- const K = await xa();
- if (K != null && K.ok && (K != null && K.data)) {
- const z = Number(((N = K.data) == null ? void 0 : N.total) || 0) || 0, B = Number(((V = K.data) == null ? void 0 : V.eligible_total) || 0) || 0, J = Number(((k = K.data) == null ? void 0 : k.coverage_ratio) ?? NaN);
+ const U = await xa();
+ if (U != null && U.ok && (U != null && U.data)) {
+ const z = Number(((k = U.data) == null ? void 0 : k.total) || 0) || 0, T = Number(((Y = U.data) == null ? void 0 : Y.eligible_total) || 0) || 0, J = Number(((N = U.data) == null ? void 0 : N.coverage_ratio) ?? NaN);
if (z <= 10) {
- Ze(
+ Ae(
m(
"toast.aiSearchNeedsBackfill",
"AI search index is almost empty ({count} vectors). Run Enrich, then Vector Backfill for existing assets.",
@@ -30611,14 +30638,14 @@ function zM({
);
return;
}
- if (B > 0 && Number.isFinite(J) && J > 0 && J < 0.75) {
- Ze(
+ if (T > 0 && Number.isFinite(J) && J > 0 && J < 0.75) {
+ Ae(
m(
"toast.aiSearchPartiallyIndexed",
"AI search index is only partially built ({indexed}/{eligible}, {percent}%). Run Vector Backfill for existing assets.",
{
indexed: z,
- eligible: B,
+ eligible: T,
percent: Math.round(J * 100)
}
),
@@ -30630,96 +30657,96 @@ function zM({
}
} catch {
}
- const F = h(
+ const O = C(
R,
m(
"toast.aiSearchUnavailable",
"AI search is currently unavailable. Falling back to normal search."
)
);
- Ze(F, "warn", 5200);
- }, X = async (R, Y = {}) => {
- var P, H;
- let F = String(R || "").trim();
- const N = /^ai:\s*/i.test(F);
- N && (F = F.replace(/^ai:\s*/i, "").trim());
- const V = L(), k = V && b();
- if (!V)
- return await t(e, F || "*", Y);
- const K = k || N;
- let z = !1, B = "";
- if (K && F && F !== "*") {
+ Ae(O, "warn", 5200);
+ }, X = async (R, V = {}) => {
+ var P, E;
+ let O = String(R || "").trim();
+ const k = /^ai:\s*/i.test(O);
+ k && (O = O.replace(/^ai:\s*/i, "").trim());
+ const Y = L(), N = Y && b();
+ if (!Y)
+ return await t(e, O || "*", V);
+ const U = N || k;
+ let z = !1, T = "";
+ if (U && O && O !== "*") {
z = !0;
- const $ = W();
+ const $ = Z();
try {
- const E = await _f(F, {
+ const H = await _f(O, {
topK: 100,
scope: c("scope", "output") || "output",
customRootId: c("customRootId", "") || "",
...$
});
- if (E != null && E.ok && Array.isArray(E.data) && E.data.length > 0 && G(E.data))
- return await n(e, E.data, {
- title: `AI Search: "${F}" (${E.data.length} results)`,
+ if (H != null && H.ok && Array.isArray(H.data) && H.data.length > 0 && G(H.data))
+ return await n(e, H.data, {
+ title: `AI Search: "${O}" (${H.data.length} results)`,
reset: !0,
- ...Y
+ ...V
});
- (E == null ? void 0 : E.ok) === !1 && (B = h((E == null ? void 0 : E.error) || (E == null ? void 0 : E.message), B));
- } catch (E) {
- B = h(E, B), (P = console.debug) == null || P.call(console, "[Majoor] Hybrid search failed, trying pure semantic", E);
+ (H == null ? void 0 : H.ok) === !1 && (T = C((H == null ? void 0 : H.error) || (H == null ? void 0 : H.message), T));
+ } catch (H) {
+ T = C(H, T), (P = console.debug) == null || P.call(console, "[Majoor] Hybrid search failed, trying pure semantic", H);
}
try {
- const E = await zg(F, {
+ const H = await zg(O, {
topK: 100,
scope: c("scope", "output") || "output",
customRootId: c("customRootId", "") || "",
...$
});
- if (E != null && E.ok && Array.isArray(E.data) && E.data.length > 0)
- return await n(e, E.data, {
- title: `AI Search: "${F}" (${E.data.length} results)`,
+ if (H != null && H.ok && Array.isArray(H.data) && H.data.length > 0)
+ return await n(e, H.data, {
+ title: `AI Search: "${O}" (${H.data.length} results)`,
reset: !0,
- ...Y
+ ...V
});
- (E == null ? void 0 : E.ok) === !1 && (B = h((E == null ? void 0 : E.error) || (E == null ? void 0 : E.message), B));
- } catch (E) {
- B = h(E, B), (H = console.debug) == null || H.call(console, "[Majoor] Semantic search failed, falling back to FTS", E);
+ (H == null ? void 0 : H.ok) === !1 && (T = C((H == null ? void 0 : H.error) || (H == null ? void 0 : H.message), T));
+ } catch (H) {
+ T = C(H, T), (E = console.debug) == null || E.call(console, "[Majoor] Semantic search failed, falling back to FTS", H);
}
}
- const J = await t(e, F || "*", Y);
- return z && B && (Number((J == null ? void 0 : J.count) || 0) || 0) === 0 && f(B), J;
+ const J = await t(e, O || "*", V);
+ return z && T && (Number((J == null ? void 0 : J.count) || 0) || 0) === 0 && f(T), J;
}, x = async (R = {}) => {
- var z, B, J, P, H, $, E, oe, M, j, O, D, q, ee, ce, ue;
- const Y = String(e.dataset.mjrViewScope || "").trim().toLowerCase(), F = String(c("viewScope", (a == null ? void 0 : a.viewScope) || "") || "").trim().toLowerCase();
- e.dataset.mjrScope = c("scope", "output"), e.dataset.mjrViewScope = F, e.dataset.mjrCustomRootId = c("customRootId", "") || "";
- const N = c("currentFolderRelativePath", "") || "";
- e.dataset.mjrSubfolder = N, e.dataset.mjrFilterKind = c("kindFilter", "") || "", e.dataset.mjrFilterWorkflowOnly = c("workflowOnly", !1) ? "1" : "0", e.dataset.mjrFilterMinRating = String(c("minRating", 0) || 0), e.dataset.mjrFilterMinSizeMB = String(c("minSizeMB", 0) || 0), e.dataset.mjrFilterMaxSizeMB = String(c("maxSizeMB", 0) || 0), e.dataset.mjrFilterResolutionCompare = String(c("resolutionCompare", "gte") || "gte"), e.dataset.mjrFilterMinWidth = String(c("minWidth", 0) || 0), e.dataset.mjrFilterMinHeight = String(c("minHeight", 0) || 0), e.dataset.mjrFilterMaxWidth = String(c("maxWidth", 0) || 0), e.dataset.mjrFilterMaxHeight = String(c("maxHeight", 0) || 0), e.dataset.mjrFilterWorkflowType = String(c("workflowType", "") || ""), e.dataset.mjrFilterDateRange = c("dateRangeFilter", "") || "", e.dataset.mjrFilterDateExact = c("dateExactFilter", "") || "", e.dataset.mjrSort = c("sort", "mtime_desc") || "mtime_desc", e.dataset.mjrCollectionId = c("collectionId", "") || "", e.dataset.mjrSemanticMode = b() ? "1" : "0";
+ var z, T, J, P, E, $, H, ne, M, v, F, D, q, ee, ae, ue;
+ const V = String(e.dataset.mjrViewScope || "").trim().toLowerCase(), O = String(c("viewScope", (a == null ? void 0 : a.viewScope) || "") || "").trim().toLowerCase();
+ e.dataset.mjrScope = c("scope", "output"), e.dataset.mjrViewScope = O, e.dataset.mjrCustomRootId = c("customRootId", "") || "";
+ const k = c("currentFolderRelativePath", "") || "";
+ e.dataset.mjrSubfolder = k, e.dataset.mjrFilterKind = c("kindFilter", "") || "", e.dataset.mjrFilterWorkflowOnly = c("workflowOnly", !1) ? "1" : "0", e.dataset.mjrFilterMinRating = String(c("minRating", 0) || 0), e.dataset.mjrFilterMinSizeMB = String(c("minSizeMB", 0) || 0), e.dataset.mjrFilterMaxSizeMB = String(c("maxSizeMB", 0) || 0), e.dataset.mjrFilterResolutionCompare = String(c("resolutionCompare", "gte") || "gte"), e.dataset.mjrFilterMinWidth = String(c("minWidth", 0) || 0), e.dataset.mjrFilterMinHeight = String(c("minHeight", 0) || 0), e.dataset.mjrFilterMaxWidth = String(c("maxWidth", 0) || 0), e.dataset.mjrFilterMaxHeight = String(c("maxHeight", 0) || 0), e.dataset.mjrFilterWorkflowType = String(c("workflowType", "") || ""), e.dataset.mjrFilterDateRange = c("dateRangeFilter", "") || "", e.dataset.mjrFilterDateExact = c("dateExactFilter", "") || "", e.dataset.mjrSort = c("sort", "mtime_desc") || "mtime_desc", e.dataset.mjrCollectionId = c("collectionId", "") || "", e.dataset.mjrSemanticMode = b() ? "1" : "0";
try {
e.dataset.mjrQuery = String((r == null ? void 0 : r()) ?? "*") || "*";
- } catch (U) {
- (z = console.debug) == null || z.call(console, U);
+ } catch (B) {
+ (z = console.debug) == null || z.call(console, B);
}
- e.dataset.mjrGroupStacks = fe.EXECUTION_GROUPING_ENABLED && (c("scope", "output") === "output" || c("scope", "output") === "all") ? "1" : "0";
+ e.dataset.mjrGroupStacks = he.EXECUTION_GROUPING_ENABLED && (c("scope", "output") === "output" || c("scope", "output") === "all") ? "1" : "0";
try {
- const U = Array.isArray(c("selectedAssetIds", [])) ? c("selectedAssetIds", []).filter(Boolean).map(String) : [];
- U.length ? (e.dataset.mjrSelectedAssetIds = JSON.stringify(U), e.dataset.mjrSelectedAssetId = String(
- c("activeAssetId", "") || U[0] || ""
+ const B = Array.isArray(c("selectedAssetIds", [])) ? c("selectedAssetIds", []).filter(Boolean).map(String) : [];
+ B.length ? (e.dataset.mjrSelectedAssetIds = JSON.stringify(B), e.dataset.mjrSelectedAssetId = String(
+ c("activeAssetId", "") || B[0] || ""
)) : (delete e.dataset.mjrSelectedAssetIds, delete e.dataset.mjrSelectedAssetId);
- } catch (U) {
- (B = console.debug) == null || B.call(console, U);
+ } catch (B) {
+ (T = console.debug) == null || T.call(console, B);
}
if (c("scope", "output") === "custom" && !c("customRootId", "") && !c("currentFolderRelativePath", "")) {
try {
o(e);
- } catch (U) {
- (J = console.debug) == null || J.call(console, U);
+ } catch (B) {
+ (J = console.debug) == null || J.call(console, B);
}
s("currentFolderRelativePath", "");
}
if (c("collectionId", "")) {
- const U = await (i == null ? void 0 : i(c("collectionId", "")));
- if (U != null && U.ok && U.data && Array.isArray(U.data.assets)) {
- const Q = c("collectionName", "") ? `Collection: ${c("collectionName", "")}` : "Collection", _ = await n(e, U.data.assets, {
+ const B = await (i == null ? void 0 : i(c("collectionId", "")));
+ if (B != null && B.ok && B.data && Array.isArray(B.data.assets)) {
+ const Q = c("collectionName", "") ? `Collection: ${c("collectionName", "")}` : "Collection", _ = await n(e, B.data.assets, {
title: Q,
reset: !0
});
@@ -30729,76 +30756,76 @@ function zM({
new CustomEvent("mjr:grid-stats", { detail: _ || {} })
);
} catch (le) {
- (H = console.debug) == null || H.call(console, le);
+ (E = console.debug) == null || E.call(console, le);
}
return;
}
s("collectionId", ""), s("collectionName", "");
}
- const V = F;
- if (V === "similar") {
- const U = Array.isArray(c("similarResults", [])) ? c("similarResults", []) : [], Q = Array.isArray(a == null ? void 0 : a.similarResults) ? a.similarResults : [], _ = U.length > 0 ? U : Q, le = String(
+ const Y = O;
+ if (Y === "similar") {
+ const B = Array.isArray(c("similarResults", [])) ? c("similarResults", []) : [], Q = Array.isArray(a == null ? void 0 : a.similarResults) ? a.similarResults : [], _ = B.length > 0 ? B : Q, le = String(
c("similarSourceAssetId", (a == null ? void 0 : a.similarSourceAssetId) || "") || ""
- ).trim(), de = String(
+ ).trim(), ce = String(
c("similarTitle", (a == null ? void 0 : a.similarTitle) || "") || m("search.similarResults", "Similar to asset #{id} ({n} results)", {
id: le || "?",
n: _.length
})
- ).trim(), se = await n(e, _, {
- title: de || "Similar",
+ ).trim(), de = await n(e, _, {
+ title: ce || "Similar",
reset: !0,
...R
});
try {
- s("lastGridCount", Number((se == null ? void 0 : se.count) || 0) || 0), s("lastGridTotal", Number((se == null ? void 0 : se.total) || 0) || 0), ($ = e.dispatchEvent) == null || $.call(
+ s("lastGridCount", Number((de == null ? void 0 : de.count) || 0) || 0), s("lastGridTotal", Number((de == null ? void 0 : de.total) || 0) || 0), ($ = e.dispatchEvent) == null || $.call(
e,
- new CustomEvent("mjr:grid-stats", { detail: se || {} })
+ new CustomEvent("mjr:grid-stats", { detail: de || {} })
);
} catch (ge) {
- (E = console.debug) == null || E.call(console, ge);
+ (H = console.debug) == null || H.call(console, ge);
}
return;
}
- const k = Y === "similar" && V !== "similar", K = await X(r(), {
+ const N = V === "similar" && Y !== "similar", U = await X(r(), {
...R,
- preserveVisibleUntilReady: R.preserveVisibleUntilReady ?? !k
+ preserveVisibleUntilReady: R.preserveVisibleUntilReady ?? !N
});
try {
- const Q = !!((M = (oe = window.MajoorMetrics) == null ? void 0 : oe.hasTimer) != null && M.call(oe, "searchQuery")) ? (O = (j = window.MajoorMetrics) == null ? void 0 : j.endTimer) == null ? void 0 : O.call(j, "searchQuery", "searchQuery") : 0;
+ const Q = !!((M = (ne = window.MajoorMetrics) == null ? void 0 : ne.hasTimer) != null && M.call(ne, "searchQuery")) ? (F = (v = window.MajoorMetrics) == null ? void 0 : v.endTimer) == null ? void 0 : F.call(v, "searchQuery", "searchQuery") : 0;
typeof Q == "number" && Q > 0 && ((q = (D = window.MajoorMetrics) == null ? void 0 : D.trackSearchQuery) == null || q.call(D, Q));
- } catch (U) {
- (ee = console.debug) == null || ee.call(console, U);
+ } catch (B) {
+ (ee = console.debug) == null || ee.call(console, B);
}
try {
- s("lastGridCount", Number((K == null ? void 0 : K.count) || 0) || 0), s("lastGridTotal", Number((K == null ? void 0 : K.total) || 0) || 0), (ce = e.dispatchEvent) == null || ce.call(
+ s("lastGridCount", Number((U == null ? void 0 : U.count) || 0) || 0), s("lastGridTotal", Number((U == null ? void 0 : U.total) || 0) || 0), (ae = e.dispatchEvent) == null || ae.call(
e,
- new CustomEvent("mjr:grid-stats", { detail: K || {} })
+ new CustomEvent("mjr:grid-stats", { detail: U || {} })
);
- } catch (U) {
- (ue = console.debug) == null || ue.call(console, U);
+ } catch (B) {
+ (ue = console.debug) == null || ue.call(console, B);
}
};
- let T = null;
- const v = async () => {
+ let K = null;
+ const j = async () => {
var R;
if (u = !0, !d) {
d = !0;
try {
for (; u; ) {
- const Y = { ...I || {} };
+ const V = { ...I || {} };
I = {}, u = !1;
try {
- const F = L() && (b() || String((r == null ? void 0 : r()) || "").length >= 12);
+ const O = L() && (b() || String((r == null ? void 0 : r()) || "").length >= 12);
await p(
- () => x(Y),
- F ? C : Z
+ () => x(V),
+ O ? W : S
);
- } catch (F) {
+ } catch (O) {
try {
- const N = Date.now();
- N - Number(y || 0) > 2e3 && (y = N, console.warn("[Majoor] Grid reload failed", F));
- } catch (N) {
- (R = console.debug) == null || R.call(console, N);
+ const k = Date.now();
+ k - Number(A || 0) > 2e3 && (A = k, console.warn("[Majoor] Grid reload failed", O));
+ } catch (k) {
+ (R = console.debug) == null || R.call(console, k);
}
}
}
@@ -30807,13 +30834,13 @@ function zM({
}
}
};
- return { reloadGrid: (R = {}) => new Promise((Y, F) => {
- I = { ...I || {}, ...R || {} }, T && clearTimeout(T), T = setTimeout(() => {
- T = null, v().then(Y).catch(F);
- }, A);
+ return { reloadGrid: (R = {}) => new Promise((V, O) => {
+ I = { ...I || {}, ...R || {} }, K && clearTimeout(K), K = setTimeout(() => {
+ K = null, j().then(V).catch(O);
+ }, y);
}) };
}
-function JM({
+function J2({
state: e,
gridContainer: t,
folderBreadcrumb: n,
@@ -30826,59 +30853,59 @@ function JM({
"scope",
"customRootId",
"currentFolderRelativePath"
- ]), s = [], d = (W) => String(W || "").trim().replaceAll("\\", "/"), u = (W) => /^[a-zA-Z]:$/.test(String(W || "").trim()), I = () => d(a("currentFolderRelativePath", "") || ""), y = (W, f) => {
+ ]), s = [], d = (Z) => String(Z || "").trim().replaceAll("\\", "/"), u = (Z) => /^[a-zA-Z]:$/.test(String(Z || "").trim()), I = () => d(a("currentFolderRelativePath", "") || ""), A = (Z, f) => {
const X = d(f);
- !Array.isArray(W) || !X && X !== "" || (W.length ? d(W[W.length - 1]) : null) === X || W.push(X);
- }, S = (W, f) => {
+ !Array.isArray(Z) || !X && X !== "" || (Z.length ? d(Z[Z.length - 1]) : null) === X || Z.push(X);
+ }, h = (Z, f) => {
const X = d(f);
- if (!Array.isArray(W)) return null;
- for (; W.length; ) {
- const x = d(W.pop());
+ if (!Array.isArray(Z)) return null;
+ for (; Z.length; ) {
+ const x = d(Z.pop());
if (x !== X) return x;
}
return null;
- }, Z = (W) => {
+ }, S = (Z) => {
var X;
- const f = d(W);
+ const f = d(Z);
c("currentFolderRelativePath", f);
try {
t != null && t.dataset && (t.dataset.mjrSubfolder = f);
} catch (x) {
(X = console.debug) == null || X.call(console, x);
}
- }, C = (W) => {
- const f = d((W == null ? void 0 : W.subfolder) || "");
+ }, W = (Z) => {
+ const f = d((Z == null ? void 0 : Z.subfolder) || "");
if (f) return f;
- const X = d((W == null ? void 0 : W.filepath) || (W == null ? void 0 : W.path) || "");
+ const X = d((Z == null ? void 0 : Z.filepath) || (Z == null ? void 0 : Z.path) || "");
if (X)
- return String((W == null ? void 0 : W.kind) || "").toLowerCase() === "folder" ? X : g(X) || X;
- const x = d((W == null ? void 0 : W.filename) || "");
+ return String((Z == null ? void 0 : Z.kind) || "").toLowerCase() === "folder" ? X : g(X) || X;
+ const x = d((Z == null ? void 0 : Z.filename) || "");
if (!x) return I();
- const T = I();
- return T ? `${T}/${x}`.replace(/\/{2,}/g, "/") : x;
- }, g = (W) => {
- const f = d(W);
+ const K = I();
+ return K ? `${K}/${x}`.replace(/\/{2,}/g, "/") : x;
+ }, g = (Z) => {
+ const f = d(Z);
if (!f) return "";
const X = f.split("/").filter(Boolean);
return X.length ? X.length === 1 ? u(X[0]) ? `${X[0]}/` : "" : (X.pop(), X.length === 1 && u(X[0]) ? `${X[0]}/` : X.join("/")) : "";
- }, A = () => {
- var W, f;
+ }, y = () => {
+ var Z, f;
try {
r == null || r();
} catch (X) {
- (W = console.debug) == null || W.call(console, X);
+ (Z = console.debug) == null || Z.call(console, X);
}
try {
- h();
+ C();
} catch (X) {
(f = console.debug) == null || f.call(console, X);
}
}, p = () => {
- var W, f;
+ var Z, f;
try {
t && typeof t.scrollTop == "number" && (t.scrollTop = 0);
} catch (X) {
- (W = console.debug) == null || W.call(console, X);
+ (Z = console.debug) == null || Z.call(console, X);
}
try {
const X = (t == null ? void 0 : t.parentElement) || null;
@@ -30886,18 +30913,18 @@ function JM({
} catch (X) {
(f = console.debug) == null || f.call(console, X);
}
- }, b = async (W, { pushHistory: f = !0 } = {}) => {
- const X = I(), x = d(W);
- X !== x && (f && y(s, X), Z(x), p(), A(), await (o == null ? void 0 : o()));
+ }, b = async (Z, { pushHistory: f = !0 } = {}) => {
+ const X = I(), x = d(Z);
+ X !== x && (f && A(s, X), S(x), p(), y(), await (o == null ? void 0 : o()));
}, L = async () => {
- c("customRootId", ""), Z(""), p(), A(), await (o == null ? void 0 : o());
- }, h = () => {
- const W = String(a("scope", "") || "") === "custom", f = String(a("currentFolderRelativePath", "") || "").trim().replaceAll("\\", "/"), X = W || !!f, x = String(a("customRootId", "") || "").trim(), T = (() => {
+ c("customRootId", ""), S(""), p(), y(), await (o == null ? void 0 : o());
+ }, C = () => {
+ const Z = String(a("scope", "") || "") === "custom", f = String(a("currentFolderRelativePath", "") || "").trim().replaceAll("\\", "/"), X = Z || !!f, x = String(a("customRootId", "") || "").trim(), K = (() => {
var z;
if (!x) return "";
try {
- const B = ((z = i == null ? void 0 : i.selectedOptions) == null ? void 0 : z[0]) || null;
- return String((B == null ? void 0 : B.textContent) || "").trim();
+ const T = ((z = i == null ? void 0 : i.selectedOptions) == null ? void 0 : z[0]) || null;
+ return String((T == null ? void 0 : T.textContent) || "").trim();
} catch {
return "";
}
@@ -30907,21 +30934,21 @@ function JM({
return;
}
n.style.display = "flex", n.replaceChildren();
- const v = document.createElement("button");
- v.type = "button", v.textContent = m("btn.back", "Back"), v.className = "mjr-btn-link";
- const w = !!String(a("customRootId", "") || "").trim(), R = w && !f, Y = !!f;
- v.disabled = s.length === 0 && !R && !Y, v.style.cssText = "background:rgba(122,162,255,0.12);border:1px solid rgba(122,162,255,0.35);border-radius:6px;padding:2px 8px;font:inherit;color:var(--mjr-accent, #7aa2ff);cursor:pointer;", v.addEventListener(
+ const j = document.createElement("button");
+ j.type = "button", j.textContent = m("btn.back", "Back"), j.className = "mjr-btn-link";
+ const w = !!String(a("customRootId", "") || "").trim(), R = w && !f, V = !!f;
+ j.disabled = s.length === 0 && !R && !V, j.style.cssText = "background:rgba(122,162,255,0.12);border:1px solid rgba(122,162,255,0.35);border-radius:6px;padding:2px 8px;font:inherit;color:var(--mjr-accent, #7aa2ff);cursor:pointer;", j.addEventListener(
"click",
async () => {
- const z = S(s, I());
+ const z = h(s, I());
if (z != null) {
await b(z, { pushHistory: !1 });
return;
}
- const B = I();
- if (B) {
- const J = g(B);
- if (J === B) {
+ const T = I();
+ if (T) {
+ const J = g(T);
+ if (J === T) {
w && await L();
return;
}
@@ -30931,9 +30958,9 @@ function JM({
R && await L();
},
{ signal: l || void 0 }
- ), n.appendChild(v);
- const F = document.createElement("button");
- F.type = "button", F.textContent = m("btn.up", "Up"), F.className = "mjr-btn-link", F.disabled = !f || g(I()) === I(), F.style.cssText = "background:rgba(122,162,255,0.10);border:1px solid rgba(122,162,255,0.30);border-radius:6px;padding:2px 8px;font:inherit;color:var(--mjr-accent, #7aa2ff);cursor:pointer;", F.addEventListener(
+ ), n.appendChild(j);
+ const O = document.createElement("button");
+ O.type = "button", O.textContent = m("btn.up", "Up"), O.className = "mjr-btn-link", O.disabled = !f || g(I()) === I(), O.style.cssText = "background:rgba(122,162,255,0.10);border:1px solid rgba(122,162,255,0.30);border-radius:6px;padding:2px 8px;font:inherit;color:var(--mjr-accent, #7aa2ff);cursor:pointer;", O.addEventListener(
"click",
async () => {
const z = g(I());
@@ -30944,10 +30971,10 @@ function JM({
await b(z);
},
{ signal: l || void 0 }
- ), n.appendChild(F);
- const N = document.createElement("span");
- N.textContent = "|", N.style.opacity = "0.5", n.appendChild(N);
- const V = (z, B, J = !1) => {
+ ), n.appendChild(O);
+ const k = document.createElement("span");
+ k.textContent = "|", k.style.opacity = "0.5", n.appendChild(k);
+ const Y = (z, T, J = !1) => {
const P = document.createElement("button");
return P.type = "button", P.textContent = z, P.className = "mjr-btn-link", P.style.cssText = `background:none;border:none;padding:0;color:${J ? "var(--mjr-text, inherit)" : "var(--mjr-accent, #7aa2ff)"};cursor:${J ? "default" : "pointer"};font:inherit;`, J ? P.disabled = !0 : P.addEventListener(
"click",
@@ -30956,50 +30983,50 @@ function JM({
await L();
return;
}
- await b(B);
+ await b(T);
},
{ signal: l || void 0 }
), P;
};
- if (n.appendChild(V(m("label.computer", "Computer"), "", !f)), x) {
+ if (n.appendChild(Y(m("label.computer", "Computer"), "", !f)), x) {
const z = document.createElement("span");
- z.textContent = "/", z.style.opacity = "0.6", n.appendChild(z), n.appendChild(V(T || x, "", !f));
+ z.textContent = "/", z.style.opacity = "0.6", n.appendChild(z), n.appendChild(Y(K || x, "", !f));
}
if (!f) return;
- const k = f.split("/").filter(Boolean);
- let K = "";
- for (let z = 0; z < k.length; z++) {
- const B = document.createElement("span");
- B.textContent = "/", B.style.opacity = "0.6", n.appendChild(B), K ? K = `${K}/${k[z]}`.replace(/\/{2,}/g, "/") : K = u(k[z]) ? `${k[z]}/` : k[z], n.appendChild(V(k[z], K, z === k.length - 1));
+ const N = f.split("/").filter(Boolean);
+ let U = "";
+ for (let z = 0; z < N.length; z++) {
+ const T = document.createElement("span");
+ T.textContent = "/", T.style.opacity = "0.6", n.appendChild(T), U ? U = `${U}/${N[z]}`.replace(/\/{2,}/g, "/") : U = u(N[z]) ? `${N[z]}/` : N[z], n.appendChild(Y(N[z], U, z === N.length - 1));
}
};
return {
- renderBreadcrumb: h,
+ renderBreadcrumb: C,
resetHistory: () => {
s.length = 0;
},
bindGridFolderNavigation: () => {
- var X, x, T;
- const W = async (v) => {
- var F, N;
- const w = ((F = v == null ? void 0 : v.detail) == null ? void 0 : F.asset) || null, R = C(w || {}), Y = I();
- if (R !== Y) {
- y(s, Y), Z(R), p(), A();
+ var X, x, K;
+ const Z = async (j) => {
+ var O, k;
+ const w = ((O = j == null ? void 0 : j.detail) == null ? void 0 : O.asset) || null, R = W(w || {}), V = I();
+ if (R !== V) {
+ A(s, V), S(R), p(), y();
try {
await (o == null ? void 0 : o());
- } catch (V) {
- (N = console.debug) == null || N.call(console, V);
+ } catch (Y) {
+ (k = console.debug) == null || k.call(console, Y);
}
}
- }, f = async (v) => {
- var Y, F;
- const w = String(((Y = v == null ? void 0 : v.detail) == null ? void 0 : Y.subfolder) || "").trim().replaceAll("\\", "/"), R = I();
+ }, f = async (j) => {
+ var V, O;
+ const w = String(((V = j == null ? void 0 : j.detail) == null ? void 0 : V.subfolder) || "").trim().replaceAll("\\", "/"), R = I();
if (w !== R) {
- y(s, R), Z(w), p(), A();
+ A(s, R), S(w), p(), y();
try {
await (o == null ? void 0 : o());
- } catch (N) {
- (F = console.debug) == null || F.call(console, N);
+ } catch (k) {
+ (O = console.debug) == null || O.call(console, k);
}
}
};
@@ -31010,41 +31037,41 @@ function JM({
{
signal: l || void 0
}
- ), (x = t == null ? void 0 : t.addEventListener) == null || x.call(t, "mjr:open-folder-asset", W, {
+ ), (x = t == null ? void 0 : t.addEventListener) == null || x.call(t, "mjr:open-folder-asset", Z, {
signal: l || void 0
});
try {
t._mjrHasCustomSubfolderHandler = !0;
- } catch (v) {
- (T = console.debug) == null || T.call(console, v);
+ } catch (j) {
+ (K = console.debug) == null || K.call(console, j);
}
return () => {
- var v, w, R, Y, F;
+ var j, w, R, V, O;
try {
- (v = t == null ? void 0 : t.removeEventListener) == null || v.call(
+ (j = t == null ? void 0 : t.removeEventListener) == null || j.call(
t,
"mjr:custom-subfolder-changed",
f
);
- } catch (N) {
- (w = console.debug) == null || w.call(console, N);
+ } catch (k) {
+ (w = console.debug) == null || w.call(console, k);
}
try {
- (R = t == null ? void 0 : t.removeEventListener) == null || R.call(t, "mjr:open-folder-asset", W);
- } catch (N) {
- (Y = console.debug) == null || Y.call(console, N);
+ (R = t == null ? void 0 : t.removeEventListener) == null || R.call(t, "mjr:open-folder-asset", Z);
+ } catch (k) {
+ (V = console.debug) == null || V.call(console, k);
}
try {
t._mjrHasCustomSubfolderHandler = !1;
- } catch (N) {
- (F = console.debug) == null || F.call(console, N);
+ } catch (k) {
+ (O = console.debug) == null || O.call(console, k);
}
};
},
- notifyContext: A
+ notifyContext: y
};
}
-function TM({
+function T2({
state: e,
tabButtons: t,
customMenuBtn: n,
@@ -31057,7 +31084,7 @@ function TM({
onBeforeReload: s = null
}) {
let d = 0;
- const { panelStore: u, read: I, write: y, controllerState: S } = oo(e, [
+ const { panelStore: u, read: I, write: A, controllerState: h } = oo(e, [
"scope",
"customRootId",
"currentFolderRelativePath",
@@ -31067,40 +31094,40 @@ function TM({
"similarResults",
"similarTitle",
"similarSourceAssetId"
- ]), Z = ({
+ ]), S = ({
viewScope: L = "",
- similarResults: h = [],
+ similarResults: C = [],
similarTitle: G = "",
- similarSourceAssetId: W = ""
+ similarSourceAssetId: Z = ""
} = {}) => {
- y("viewScope", L), y("similarResults", h), y("similarTitle", G), y("similarSourceAssetId", W);
- }, C = () => {
+ A("viewScope", L), A("similarResults", C), A("similarTitle", G), A("similarSourceAssetId", Z);
+ }, W = () => {
try {
return !!(String(I("viewScope", "") || "").trim().toLowerCase() === "similar" || Array.isArray(I("similarResults", [])) && I("similarResults", []).length > 0 || String(I("similarTitle", "") || "").trim());
} catch {
return !1;
}
}, g = () => {
- Z();
- }, A = () => {
+ S();
+ }, y = () => {
var G;
- const L = Object.values(t || {}), h = String(I("viewScope", "") || I("scope", "output")).toLowerCase();
- L.forEach((W) => {
- var x, T, v;
- const X = ((x = W == null ? void 0 : W.dataset) == null ? void 0 : x.scope) === h;
- (v = (T = W == null ? void 0 : W.classList) == null ? void 0 : T.toggle) == null || v.call(T, "is-active", X);
+ const L = Object.values(t || {}), C = String(I("viewScope", "") || I("scope", "output")).toLowerCase();
+ L.forEach((Z) => {
+ var x, K, j;
+ const X = ((x = Z == null ? void 0 : Z.dataset) == null ? void 0 : x.scope) === C;
+ (j = (K = Z == null ? void 0 : Z.classList) == null ? void 0 : K.toggle) == null || j.call(K, "is-active", X);
});
try {
- const W = t == null ? void 0 : t.tabSimilar;
- W && (W.style.display = C() ? "" : "none");
- } catch (W) {
- (G = console.debug) == null || G.call(console, W);
+ const Z = t == null ? void 0 : t.tabSimilar;
+ Z && (Z.style.display = W() ? "" : "none");
+ } catch (Z) {
+ (G = console.debug) == null || G.call(console, Z);
}
n.style.display = "none", i.style.display = "none", o.close(i);
};
return { setScope: async (L) => {
- var X, x, T, v, w, R, Y;
- const h = ++d, G = /* @__PURE__ */ new Set([
+ var X, x, K, j, w, R, V;
+ const C = ++d, G = /* @__PURE__ */ new Set([
"output",
"outputs",
"input",
@@ -31108,73 +31135,73 @@ function TM({
"all",
"custom",
"similar"
- ]), W = String(L || "").toLowerCase();
- if (!G.has(W)) return;
- if (W === "similar") {
- if (!C()) return;
- y("viewScope", "similar"), A();
+ ]), Z = String(L || "").toLowerCase();
+ if (!G.has(Z)) return;
+ if (Z === "similar") {
+ if (!W()) return;
+ A("viewScope", "similar"), y();
try {
a == null || a();
- } catch (F) {
- (X = console.debug) == null || X.call(console, F);
+ } catch (O) {
+ (X = console.debug) == null || X.call(console, O);
}
try {
- await (s == null ? void 0 : s(S()));
- } catch (F) {
- (x = console.debug) == null || x.call(console, F);
+ await (s == null ? void 0 : s(h()));
+ } catch (O) {
+ (x = console.debug) == null || x.call(console, O);
}
await r();
return;
}
- y("collectionId", ""), y("collectionName", ""), y("searchQuery", ""), g();
- const f = W === "outputs" ? "output" : W === "inputs" ? "input" : W;
+ A("collectionId", ""), A("collectionName", ""), A("searchQuery", ""), g();
+ const f = Z === "outputs" ? "output" : Z === "inputs" ? "input" : Z;
if (u != null && u.navigateToScope)
try {
u.navigateToScope(f, { folder: "" });
- } catch (F) {
- (T = console.debug) == null || T.call(console, F), y("scope", f), y("currentFolderRelativePath", "");
+ } catch (O) {
+ (K = console.debug) == null || K.call(console, O), A("scope", f), A("currentFolderRelativePath", "");
}
else
- y("scope", f), y("currentFolderRelativePath", "");
- String(I("scope", f)) !== "custom" && y("customRootId", ""), A();
+ A("scope", f), A("currentFolderRelativePath", "");
+ String(I("scope", f)) !== "custom" && A("customRootId", ""), y();
try {
a == null || a();
- } catch (F) {
- (v = console.debug) == null || v.call(console, F);
+ } catch (O) {
+ (j = console.debug) == null || j.call(console, O);
}
try {
- await (c == null ? void 0 : c(S()));
- } catch (F) {
- (w = console.debug) == null || w.call(console, F);
+ await (c == null ? void 0 : c(h()));
+ } catch (O) {
+ (w = console.debug) == null || w.call(console, O);
}
- if (h === d) {
+ if (C === d) {
try {
- await (s == null ? void 0 : s(S()));
- } catch (F) {
- (R = console.debug) == null || R.call(console, F);
+ await (s == null ? void 0 : s(h()));
+ } catch (O) {
+ (R = console.debug) == null || R.call(console, O);
}
- if (h === d) {
+ if (C === d) {
try {
l == null || l();
- } catch (F) {
- (Y = console.debug) == null || Y.call(console, F);
+ } catch (O) {
+ (V = console.debug) == null || V.call(console, O);
}
await r();
}
}
- }, setActiveTabStyles: A, clearSimilarScope: async ({ reload: L = !0 } = {}) => {
+ }, setActiveTabStyles: y, clearSimilarScope: async ({ reload: L = !0 } = {}) => {
var G;
- const h = C();
- g(), y("searchQuery", ""), A();
+ const C = W();
+ g(), A("searchQuery", ""), y();
try {
a == null || a();
- } catch (W) {
- (G = console.debug) == null || G.call(console, W);
+ } catch (Z) {
+ (G = console.debug) == null || G.call(console, Z);
}
- !h || !L || await r();
+ !C || !L || await r();
} };
}
-const Ln = (e, t) => {
+const Vn = (e, t) => {
var n;
if (e)
try {
@@ -31191,7 +31218,7 @@ const Ln = (e, t) => {
(n = console.debug) == null || n.call(console, i);
}
};
-function BM({
+function K2({
state: e,
gridContainer: t,
filterBtn: n,
@@ -31205,20 +31232,20 @@ function BM({
minSizeInput: d,
maxSizeInput: u,
minWidthInput: I,
- minHeightInput: y,
- maxWidthInput: S,
- maxHeightInput: Z,
- resolutionPresetSelect: C,
+ minHeightInput: A,
+ maxWidthInput: h,
+ maxHeightInput: S,
+ resolutionPresetSelect: W,
dateRangeSelect: g,
- dateExactInput: A,
+ dateExactInput: y,
scopeController: p,
sortController: b,
updateSummaryBar: L,
- reloadGrid: h,
+ reloadGrid: C,
extraActions: G = null,
- getExtraContext: W = null
+ getExtraContext: Z = null
} = {}) {
- const f = e && typeof e == "object" ? e : {}, { read: X, write: x, controllerState: T } = oo(e, [
+ const f = e && typeof e == "object" ? e : {}, { read: X, write: x, controllerState: K } = oo(e, [
"searchQuery",
"scope",
"collectionId",
@@ -31244,302 +31271,302 @@ function BM({
"similarResults",
"similarTitle",
"similarSourceAssetId"
- ]), v = (k, K) => {
- x(k, K);
- }, w = (k, K = "") => X(k, K), R = () => ({
+ ]), j = (N, U) => {
+ x(N, U);
+ }, w = (N, U = "") => X(N, U), R = () => ({
...f || {},
- ...(T == null ? void 0 : T()) || {},
+ ...(K == null ? void 0 : K()) || {},
customRootLabel: w("customRootLabel", "")
- }), Y = () => {
- var k, K;
+ }), V = () => {
+ var N, U;
try {
- (k = G == null ? void 0 : G.resetBrowserHistory) == null || k.call(G);
+ (N = G == null ? void 0 : G.resetBrowserHistory) == null || N.call(G);
} catch (z) {
- (K = console.debug) == null || K.call(console, z);
+ (U = console.debug) == null || U.call(console, z);
}
- }, F = () => {
- var k, K, z, B;
+ }, O = () => {
+ var N, U, z, T;
try {
- const J = ((k = t == null ? void 0 : t.closest) == null ? void 0 : k.call(t, ".mjr-assets-manager")) || ((K = document.querySelector) == null ? void 0 : K.call(document, ".mjr-assets-manager")) || document.documentElement;
+ const J = ((N = t == null ? void 0 : t.closest) == null ? void 0 : N.call(t, ".mjr-assets-manager")) || ((U = document.querySelector) == null ? void 0 : U.call(document, ".mjr-assets-manager")) || document.documentElement;
if (!((z = J == null ? void 0 : J.style) != null && z.setProperty)) return;
J.style.setProperty(
"--mjr-star-active",
- String(fe.BADGE_STAR_COLOR || "#FFD45A")
+ String(he.BADGE_STAR_COLOR || "#FFD45A")
), J.style.setProperty(
"--mjr-badge-image",
- String(fe.BADGE_IMAGE_COLOR || "#2196F3")
+ String(he.BADGE_IMAGE_COLOR || "#2196F3")
), J.style.setProperty(
"--mjr-badge-video",
- String(fe.BADGE_VIDEO_COLOR || "#9C27B0")
+ String(he.BADGE_VIDEO_COLOR || "#9C27B0")
), J.style.setProperty(
"--mjr-badge-audio",
- String(fe.BADGE_AUDIO_COLOR || "#FF9800")
+ String(he.BADGE_AUDIO_COLOR || "#FF9800")
), J.style.setProperty(
"--mjr-badge-model3d",
- String(fe.BADGE_MODEL3D_COLOR || "#4CAF50")
+ String(he.BADGE_MODEL3D_COLOR || "#4CAF50")
), J.style.setProperty(
"--mjr-badge-duplicate-alert",
- String(fe.BADGE_DUPLICATE_ALERT_COLOR || "#FF1744")
+ String(he.BADGE_DUPLICATE_ALERT_COLOR || "#FF1744")
);
} catch (J) {
- (B = console.debug) == null || B.call(console, J);
+ (T = console.debug) == null || T.call(console, J);
}
- }, N = {
+ }, k = {
clearQuery: async () => {
- var k, K;
+ var N, U;
try {
- Ln(r, ""), v("searchQuery", "");
+ Vn(r, ""), j("searchQuery", "");
} catch (z) {
- (k = console.debug) == null || k.call(console, z);
+ (N = console.debug) == null || N.call(console, z);
}
try {
- await (h == null ? void 0 : h());
+ await (C == null ? void 0 : C());
} catch (z) {
- (K = console.debug) == null || K.call(console, z);
+ (U = console.debug) == null || U.call(console, z);
}
},
clearCollection: async () => {
- var k, K;
+ var N, U;
try {
- v("collectionId", ""), v("collectionName", "");
+ j("collectionId", ""), j("collectionName", "");
} catch (z) {
- (k = console.debug) == null || k.call(console, z);
+ (N = console.debug) == null || N.call(console, z);
}
try {
- await (h == null ? void 0 : h());
+ await (C == null ? void 0 : C());
} catch (z) {
- (K = console.debug) == null || K.call(console, z);
+ (U = console.debug) == null || U.call(console, z);
}
},
clearScope: async () => {
- var K, z, B, J, P;
+ var U, z, T, J, P;
try {
if (String((e == null ? void 0 : e.viewScope) || "").trim().toLowerCase() === "similar" && typeof (G == null ? void 0 : G.clearSimilarScope) == "function") {
await G.clearSimilarScope();
return;
}
- } catch (H) {
- (K = console.debug) == null || K.call(console, H);
+ } catch (E) {
+ (U = console.debug) == null || U.call(console, E);
}
- let k = !1;
+ let N = !1;
try {
- v("customRootId", ""), v("customRootLabel", ""), v("currentFolderRelativePath", ""), (z = t == null ? void 0 : t.dataset) == null || delete z.mjrSubfolder, Y(), typeof (p == null ? void 0 : p.setScope) == "function" ? (await p.setScope("output"), k = !0) : (v("scope", "output"), (B = p == null ? void 0 : p.setActiveTabStyles) == null || B.call(p));
- } catch (H) {
- (J = console.debug) == null || J.call(console, H);
+ j("customRootId", ""), j("customRootLabel", ""), j("currentFolderRelativePath", ""), (z = t == null ? void 0 : t.dataset) == null || delete z.mjrSubfolder, V(), typeof (p == null ? void 0 : p.setScope) == "function" ? (await p.setScope("output"), N = !0) : (j("scope", "output"), (T = p == null ? void 0 : p.setActiveTabStyles) == null || T.call(p));
+ } catch (E) {
+ (J = console.debug) == null || J.call(console, E);
}
try {
- k || await (h == null ? void 0 : h());
- } catch (H) {
- (P = console.debug) == null || P.call(console, H);
+ N || await (C == null ? void 0 : C());
+ } catch (E) {
+ (P = console.debug) == null || P.call(console, E);
}
},
clearCustomRoot: async () => {
- var k, K, z;
+ var N, U, z;
try {
- v("customRootId", ""), v("customRootLabel", ""), v("currentFolderRelativePath", ""), (k = t == null ? void 0 : t.dataset) == null || delete k.mjrSubfolder, Y();
- } catch (B) {
- (K = console.debug) == null || K.call(console, B);
+ j("customRootId", ""), j("customRootLabel", ""), j("currentFolderRelativePath", ""), (N = t == null ? void 0 : t.dataset) == null || delete N.mjrSubfolder, V();
+ } catch (T) {
+ (U = console.debug) == null || U.call(console, T);
}
try {
- await (h == null ? void 0 : h());
- } catch (B) {
- (z = console.debug) == null || z.call(console, B);
+ await (C == null ? void 0 : C());
+ } catch (T) {
+ (z = console.debug) == null || z.call(console, T);
}
},
clearFolder: async () => {
- var k, K, z;
+ var N, U, z;
try {
- v("currentFolderRelativePath", ""), (k = t == null ? void 0 : t.dataset) == null || delete k.mjrSubfolder, Y();
- } catch (B) {
- (K = console.debug) == null || K.call(console, B);
+ j("currentFolderRelativePath", ""), (N = t == null ? void 0 : t.dataset) == null || delete N.mjrSubfolder, V();
+ } catch (T) {
+ (U = console.debug) == null || U.call(console, T);
}
try {
- await (h == null ? void 0 : h());
- } catch (B) {
- (z = console.debug) == null || z.call(console, B);
+ await (C == null ? void 0 : C());
+ } catch (T) {
+ (z = console.debug) == null || z.call(console, T);
}
},
clearKind: async () => {
- var k, K;
+ var N, U;
try {
- v("kindFilter", ""), Ln(l, "");
+ j("kindFilter", ""), Vn(l, "");
} catch (z) {
- (k = console.debug) == null || k.call(console, z);
+ (N = console.debug) == null || N.call(console, z);
}
try {
- await (h == null ? void 0 : h());
+ await (C == null ? void 0 : C());
} catch (z) {
- (K = console.debug) == null || K.call(console, z);
+ (U = console.debug) == null || U.call(console, z);
}
},
clearMinRating: async () => {
- var k, K;
+ var N, U;
try {
- v("minRating", 0), Ln(s, "0");
+ j("minRating", 0), Vn(s, "0");
} catch (z) {
- (k = console.debug) == null || k.call(console, z);
+ (N = console.debug) == null || N.call(console, z);
}
try {
- await (h == null ? void 0 : h());
+ await (C == null ? void 0 : C());
} catch (z) {
- (K = console.debug) == null || K.call(console, z);
+ (U = console.debug) == null || U.call(console, z);
}
},
clearWorkflowOnly: async () => {
- var k, K;
+ var N, U;
try {
- v("workflowOnly", !1), Wm(a, !1);
+ j("workflowOnly", !1), Wm(a, !1);
} catch (z) {
- (k = console.debug) == null || k.call(console, z);
+ (N = console.debug) == null || N.call(console, z);
}
try {
- await (h == null ? void 0 : h());
+ await (C == null ? void 0 : C());
} catch (z) {
- (K = console.debug) == null || K.call(console, z);
+ (U = console.debug) == null || U.call(console, z);
}
},
clearWorkflowType: async () => {
- var k, K;
+ var N, U;
try {
- v("workflowType", ""), Ln(c, "");
+ j("workflowType", ""), Vn(c, "");
} catch (z) {
- (k = console.debug) == null || k.call(console, z);
+ (N = console.debug) == null || N.call(console, z);
}
try {
- await (h == null ? void 0 : h());
+ await (C == null ? void 0 : C());
} catch (z) {
- (K = console.debug) == null || K.call(console, z);
+ (U = console.debug) == null || U.call(console, z);
}
},
clearSize: async () => {
- var k, K;
+ var N, U;
try {
- v("minSizeMB", 0), v("maxSizeMB", 0), Ln(d, ""), Ln(u, "");
+ j("minSizeMB", 0), j("maxSizeMB", 0), Vn(d, ""), Vn(u, "");
} catch (z) {
- (k = console.debug) == null || k.call(console, z);
+ (N = console.debug) == null || N.call(console, z);
}
try {
- await (h == null ? void 0 : h());
+ await (C == null ? void 0 : C());
} catch (z) {
- (K = console.debug) == null || K.call(console, z);
+ (U = console.debug) == null || U.call(console, z);
}
},
clearResolution: async () => {
- var k, K;
+ var N, U;
try {
- v("minWidth", 0), v("minHeight", 0), v("maxWidth", 0), v("maxHeight", 0), Ln(I, ""), Ln(y, ""), Ln(S, ""), Ln(Z, ""), Ln(C, "");
+ j("minWidth", 0), j("minHeight", 0), j("maxWidth", 0), j("maxHeight", 0), Vn(I, ""), Vn(A, ""), Vn(h, ""), Vn(S, ""), Vn(W, "");
} catch (z) {
- (k = console.debug) == null || k.call(console, z);
+ (N = console.debug) == null || N.call(console, z);
}
try {
- await (h == null ? void 0 : h());
+ await (C == null ? void 0 : C());
} catch (z) {
- (K = console.debug) == null || K.call(console, z);
+ (U = console.debug) == null || U.call(console, z);
}
},
clearDateRange: async () => {
- var k, K;
+ var N, U;
try {
- v("dateRangeFilter", ""), Ln(g, "");
+ j("dateRangeFilter", ""), Vn(g, "");
} catch (z) {
- (k = console.debug) == null || k.call(console, z);
+ (N = console.debug) == null || N.call(console, z);
}
try {
- await (h == null ? void 0 : h());
+ await (C == null ? void 0 : C());
} catch (z) {
- (K = console.debug) == null || K.call(console, z);
+ (U = console.debug) == null || U.call(console, z);
}
},
clearDateExact: async () => {
- var k, K;
+ var N, U;
try {
- v("dateExactFilter", ""), Ln(A, "");
+ j("dateExactFilter", ""), Vn(y, "");
} catch (z) {
- (k = console.debug) == null || k.call(console, z);
+ (N = console.debug) == null || N.call(console, z);
}
try {
- await (h == null ? void 0 : h());
+ await (C == null ? void 0 : C());
} catch (z) {
- (K = console.debug) == null || K.call(console, z);
+ (U = console.debug) == null || U.call(console, z);
}
},
clearSort: async () => {
- var k, K, z, B;
+ var N, U, z, T;
try {
- v("sort", "mtime_desc"), (k = b == null ? void 0 : b.setSortIcon) == null || k.call(b, w("sort", "mtime_desc")), (K = b == null ? void 0 : b.renderSortMenu) == null || K.call(b);
+ j("sort", "mtime_desc"), (N = b == null ? void 0 : b.setSortIcon) == null || N.call(b, w("sort", "mtime_desc")), (U = b == null ? void 0 : b.renderSortMenu) == null || U.call(b);
} catch (J) {
(z = console.debug) == null || z.call(console, J);
}
try {
- await (h == null ? void 0 : h());
+ await (C == null ? void 0 : C());
} catch (J) {
- (B = console.debug) == null || B.call(console, J);
+ (T = console.debug) == null || T.call(console, J);
}
},
clearAll: async () => {
- var K, z, B, J, P, H, $, E, oe, M, j;
- let k = !1;
+ var U, z, T, J, P, E, $, H, ne, M, v;
+ let N = !1;
try {
- Ln(r, "");
- } catch (O) {
- (K = console.debug) == null || K.call(console, O);
+ Vn(r, "");
+ } catch (F) {
+ (U = console.debug) == null || U.call(console, F);
}
try {
- v("collectionId", ""), v("collectionName", ""), v("kindFilter", ""), v("workflowOnly", !1), v("minRating", 0), v("minSizeMB", 0), v("maxSizeMB", 0), v("minWidth", 0), v("minHeight", 0), v("maxWidth", 0), v("maxHeight", 0), v("resolutionCompare", "gte"), v("workflowType", ""), v("dateRangeFilter", ""), v("dateExactFilter", ""), v("sort", "mtime_desc"), v("customRootId", ""), v("customRootLabel", ""), v("currentFolderRelativePath", ""), (z = t == null ? void 0 : t.dataset) == null || delete z.mjrSubfolder, Y();
+ j("collectionId", ""), j("collectionName", ""), j("kindFilter", ""), j("workflowOnly", !1), j("minRating", 0), j("minSizeMB", 0), j("maxSizeMB", 0), j("minWidth", 0), j("minHeight", 0), j("maxWidth", 0), j("maxHeight", 0), j("resolutionCompare", "gte"), j("workflowType", ""), j("dateRangeFilter", ""), j("dateExactFilter", ""), j("sort", "mtime_desc"), j("customRootId", ""), j("customRootLabel", ""), j("currentFolderRelativePath", ""), (z = t == null ? void 0 : t.dataset) == null || delete z.mjrSubfolder, V();
try {
- await ((B = G == null ? void 0 : G.clearTransientContext) == null ? void 0 : B.call(G));
- } catch (O) {
- (J = console.debug) == null || J.call(console, O);
+ await ((T = G == null ? void 0 : G.clearTransientContext) == null ? void 0 : T.call(G));
+ } catch (F) {
+ (J = console.debug) == null || J.call(console, F);
}
- typeof (p == null ? void 0 : p.setScope) == "function" ? (await p.setScope("output"), k = !0) : (v("scope", "output"), (P = p == null ? void 0 : p.setActiveTabStyles) == null || P.call(p));
- } catch (O) {
- (H = console.debug) == null || H.call(console, O);
+ typeof (p == null ? void 0 : p.setScope) == "function" ? (await p.setScope("output"), N = !0) : (j("scope", "output"), (P = p == null ? void 0 : p.setActiveTabStyles) == null || P.call(p));
+ } catch (F) {
+ (E = console.debug) == null || E.call(console, F);
}
try {
- Ln(l, ""), Wm(a, !1), Ln(c, ""), Ln(s, "0"), Ln(d, ""), Ln(u, ""), Ln(I, ""), Ln(y, ""), Ln(S, ""), Ln(Z, ""), Ln(C, ""), Ln(g, ""), Ln(A, "");
- } catch (O) {
- ($ = console.debug) == null || $.call(console, O);
+ Vn(l, ""), Wm(a, !1), Vn(c, ""), Vn(s, "0"), Vn(d, ""), Vn(u, ""), Vn(I, ""), Vn(A, ""), Vn(h, ""), Vn(S, ""), Vn(W, ""), Vn(g, ""), Vn(y, "");
+ } catch (F) {
+ ($ = console.debug) == null || $.call(console, F);
}
try {
- (E = b == null ? void 0 : b.setSortIcon) == null || E.call(b, w("sort", "mtime_desc")), (oe = b == null ? void 0 : b.renderSortMenu) == null || oe.call(b);
- } catch (O) {
- (M = console.debug) == null || M.call(console, O);
+ (H = b == null ? void 0 : b.setSortIcon) == null || H.call(b, w("sort", "mtime_desc")), (ne = b == null ? void 0 : b.renderSortMenu) == null || ne.call(b);
+ } catch (F) {
+ (M = console.debug) == null || M.call(console, F);
}
try {
- k || await (h == null ? void 0 : h());
- } catch (O) {
- (j = console.debug) == null || j.call(console, O);
+ N || await (C == null ? void 0 : C());
+ } catch (F) {
+ (v = console.debug) == null || v.call(console, F);
}
}
};
if (G && typeof G == "object") {
- const k = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]);
- for (const [K, z] of Object.entries(G))
- k.has(String(K)) || (N[K] = z);
+ const N = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]);
+ for (const [U, z] of Object.entries(G))
+ N.has(String(U)) || (k[U] = z);
}
return { update: () => {
- var H, $, E, oe, M, j, O, D;
- const k = String((r == null ? void 0 : r.value) || "").trim(), K = Cs(r), z = R(), B = !!(w("kindFilter", "") || w("workflowOnly", !1) || (Number(w("minRating", 0) || 0) || 0) > 0 || (Number(w("minSizeMB", 0) || 0) || 0) > 0 || (Number(w("maxSizeMB", 0) || 0) || 0) > 0 || (Number(w("minWidth", 0) || 0) || 0) > 0 || (Number(w("minHeight", 0) || 0) || 0) > 0 || (Number(w("maxWidth", 0) || 0) || 0) > 0 || (Number(w("maxHeight", 0) || 0) || 0) > 0 || String(w("workflowType", "") || "").trim().length > 0 || w("dateRangeFilter", "") || w("dateExactFilter", "")), J = String(w("sort", "mtime_desc") || "mtime_desc") !== "mtime_desc", P = !!w("collectionId", "");
+ var E, $, H, ne, M, v, F, D;
+ const N = String((r == null ? void 0 : r.value) || "").trim(), U = Zs(r), z = R(), T = !!(w("kindFilter", "") || w("workflowOnly", !1) || (Number(w("minRating", 0) || 0) || 0) > 0 || (Number(w("minSizeMB", 0) || 0) || 0) > 0 || (Number(w("maxSizeMB", 0) || 0) || 0) > 0 || (Number(w("minWidth", 0) || 0) || 0) > 0 || (Number(w("minHeight", 0) || 0) || 0) > 0 || (Number(w("maxWidth", 0) || 0) || 0) > 0 || (Number(w("maxHeight", 0) || 0) || 0) > 0 || String(w("workflowType", "") || "").trim().length > 0 || w("dateRangeFilter", "") || w("dateExactFilter", "")), J = String(w("sort", "mtime_desc") || "mtime_desc") !== "mtime_desc", P = !!w("collectionId", "");
try {
- ($ = (H = n == null ? void 0 : n.classList) == null ? void 0 : H.toggle) == null || $.call(H, "mjr-context-active", B), (oe = (E = i == null ? void 0 : i.classList) == null ? void 0 : E.toggle) == null || oe.call(E, "mjr-context-active", J), (j = (M = o == null ? void 0 : o.classList) == null ? void 0 : M.toggle) == null || j.call(M, "mjr-context-active", P);
+ ($ = (E = n == null ? void 0 : n.classList) == null ? void 0 : E.toggle) == null || $.call(E, "mjr-context-active", T), (ne = (H = i == null ? void 0 : i.classList) == null ? void 0 : H.toggle) == null || ne.call(H, "mjr-context-active", J), (v = (M = o == null ? void 0 : o.classList) == null ? void 0 : M.toggle) == null || v.call(M, "mjr-context-active", P);
} catch (q) {
- (O = console.debug) == null || O.call(console, q);
+ (F = console.debug) == null || F.call(console, q);
}
try {
- const q = (typeof W == "function" ? W() || {} : {}) || {};
+ const q = (typeof Z == "function" ? Z() || {} : {}) || {};
L == null || L({
state: z,
gridContainer: t,
- context: { rawQuery: k || K, ...q },
- actions: N
+ context: { rawQuery: N || U, ...q },
+ actions: k
});
} catch (q) {
(D = console.debug) == null || D.call(console, q);
}
- F();
- }, actions: N };
+ O();
+ }, actions: k };
}
-function UM({
+function B2({
state: e,
customSelect: t,
customRemoveBtn: n,
@@ -31552,104 +31579,104 @@ function UM({
reloadGrid: s,
onRootChanged: d = null
}) {
- const u = e && typeof e == "object" ? e : {}, { read: I, write: y } = oo(e, [
+ const u = e && typeof e == "object" ? e : {}, { read: I, write: A } = oo(e, [
"customRootId",
"customRootLabel",
"currentFolderRelativePath"
- ]), S = (g) => {
- y("customRootLabel", String(g || ""));
- }, Z = async (g = null) => {
+ ]), h = (g) => {
+ A("customRootLabel", String(g || ""));
+ }, S = async (g = null) => {
var b;
- const A = ((b = t.querySelector('option[value=""]')) == null ? void 0 : b.textContent) || m("label.selectFolder", "Select folder…");
+ const y = ((b = t.querySelector('option[value=""]')) == null ? void 0 : b.textContent) || m("label.selectFolder", "Select folder…");
t.innerHTML = "";
const p = document.createElement("option");
p.value = "", p.textContent = m("msg.loading"), p.disabled = !0, t.appendChild(p), t.disabled = !0;
try {
- const L = await l(c.CUSTOM_ROOTS), h = L && L.ok && Array.isArray(L.data) ? L.data : [];
+ const L = await l(c.CUSTOM_ROOTS), C = L && L.ok && Array.isArray(L.data) ? L.data : [];
t.innerHTML = "";
const G = document.createElement("option");
- G.value = "", G.textContent = A, t.appendChild(G), h.forEach((f) => {
+ G.value = "", G.textContent = y, t.appendChild(G), C.forEach((f) => {
const X = document.createElement("option");
X.value = f.id, X.textContent = f.name || f.path || f.id, t.appendChild(X);
});
- const W = g || I("customRootId", "");
- if (W && h.some((f) => f.id === W)) {
- t.value = W, y("customRootId", W);
+ const Z = g || I("customRootId", "");
+ if (Z && C.some((f) => f.id === Z)) {
+ t.value = Z, A("customRootId", Z);
try {
const f = t.options[t.selectedIndex];
- S(String((f == null ? void 0 : f.text) || "").trim());
+ h(String((f == null ? void 0 : f.text) || "").trim());
} catch {
- S("");
+ h("");
}
} else
- t.value = "", y("customRootId", ""), S("");
+ t.value = "", A("customRootId", ""), h("");
n.disabled = !I("customRootId", "");
} catch (L) {
console.warn("Majoor: failed to load custom roots", L), t.innerHTML = "";
- const h = document.createElement("option");
- h.value = "", h.textContent = m("msg.errorLoadingFolders"), h.disabled = !0, t.appendChild(h);
+ const C = document.createElement("option");
+ C.value = "", C.textContent = m("msg.errorLoadingFolders"), C.disabled = !0, t.appendChild(C);
} finally {
t.disabled = !1;
}
};
- return { refreshCustomRoots: Z, bind: ({ customAddBtn: g, customRemoveBtn: A }) => {
- const p = [], b = (W, f, X) => {
- if (!(!(W != null && W.addEventListener) || typeof X != "function")) {
+ return { refreshCustomRoots: S, bind: ({ customAddBtn: g, customRemoveBtn: y }) => {
+ const p = [], b = (Z, f, X) => {
+ if (!(!(Z != null && Z.addEventListener) || typeof X != "function")) {
try {
- W.addEventListener(f, X);
+ Z.addEventListener(f, X);
} catch {
return;
}
p.push(() => {
var x;
try {
- W.removeEventListener(f, X);
- } catch (T) {
- (x = console.debug) == null || x.call(console, T);
+ Z.removeEventListener(f, X);
+ } catch (K) {
+ (x = console.debug) == null || x.call(console, K);
}
});
}
};
return b(t, "change", async () => {
- var W;
+ var Z;
if (!t.disabled) {
- y("customRootId", t.value || "");
+ A("customRootId", t.value || "");
try {
const f = t.options[t.selectedIndex];
- S(String((f == null ? void 0 : f.text) || "").trim());
+ h(String((f == null ? void 0 : f.text) || "").trim());
} catch {
- S("");
+ h("");
}
- y("currentFolderRelativePath", ""), A.disabled = !I("customRootId", "");
+ A("currentFolderRelativePath", ""), y.disabled = !I("customRootId", "");
try {
await (d == null ? void 0 : d(u));
} catch (f) {
- (W = console.debug) == null || W.call(console, f);
+ (Z = console.debug) == null || Z.call(console, f);
}
await s();
}
}), g && (g.disabled = !1, g.title = m("btn.add", "Add")), b(g, "click", async () => {
- var T, v, w, R;
- let W = "";
+ var K, j, w, R;
+ let Z = "";
try {
- const Y = await a(c.BROWSE_FOLDER, {});
- Y != null && Y.ok && (W = String(((T = Y == null ? void 0 : Y.data) == null ? void 0 : T.path) || "").trim());
- } catch (Y) {
- (v = console.debug) == null || v.call(console, Y);
+ const V = await a(c.BROWSE_FOLDER, {});
+ V != null && V.ok && (Z = String(((K = V == null ? void 0 : V.data) == null ? void 0 : K.path) || "").trim());
+ } catch (V) {
+ (j = console.debug) == null || j.call(console, V);
}
- if (!W) {
- const Y = await o(
+ if (!Z) {
+ const V = await o(
m("dialog.enterFolderPath", "Enter folder path"),
""
);
- W = String(Y || "").trim();
+ Z = String(V || "").trim();
}
- if (!W) return;
+ if (!Z) return;
const f = await o(
m("dialog.folderLabelOptional", "Folder label (optional)"),
""
), X = await a(c.CUSTOM_ROOTS, {
- path: W,
+ path: Z,
label: String(f || "").trim() || void 0
});
if (!(X != null && X.ok)) {
@@ -31660,23 +31687,23 @@ function UM({
return;
}
const x = String(((w = X == null ? void 0 : X.data) == null ? void 0 : w.id) || "").trim() || null;
- await Z(x);
+ await S(x);
try {
await (d == null ? void 0 : d(e));
- } catch (Y) {
- (R = console.debug) == null || R.call(console, Y);
+ } catch (V) {
+ (R = console.debug) == null || R.call(console, V);
}
await s(), r(m("toast.folderAdded", "Folder added"), "success");
- }), b(A, "click", async () => {
+ }), b(y, "click", async () => {
if (!I("customRootId", "")) return;
- const W = t.options[t.selectedIndex], f = W ? W.text : m("label.thisFolder", "this folder");
+ const Z = t.options[t.selectedIndex], f = Z ? Z.text : m("label.thisFolder", "this folder");
if (await i(
m("dialog.removeFolder", `Remove the browser folder "${f}"?`, {
name: f
}),
m("dialog.customFoldersTitle", "Majoor: Browser Folders")
)) {
- A.disabled = !0, A.textContent = m("btn.removing");
+ y.disabled = !0, y.textContent = m("btn.removing");
try {
const x = await a(c.CUSTOM_ROOTS_REMOVE, {
id: I("customRootId", "")
@@ -31688,7 +31715,7 @@ function UM({
);
return;
}
- r(m("toast.folderRemoved", "Folder removed"), "success"), y("customRootId", ""), S(""), y("currentFolderRelativePath", ""), await Z(), await s();
+ r(m("toast.folderRemoved", "Folder removed"), "success"), A("customRootId", ""), h(""), A("currentFolderRelativePath", ""), await S(), await s();
} catch (x) {
console.warn("Majoor: remove custom root failed", x), r(
m(
@@ -31698,21 +31725,21 @@ function UM({
"error"
);
} finally {
- A.disabled = !I("customRootId", ""), A.textContent = m("btn.remove");
+ y.disabled = !I("customRootId", ""), y.textContent = m("btn.remove");
}
}
}), () => {
- var W;
+ var Z;
for (const f of p.splice(0))
try {
f();
} catch (X) {
- (W = console.debug) == null || W.call(console, X);
+ (Z = console.debug) == null || Z.call(console, X);
}
};
} };
}
-function KM({
+function U2({
state: e,
sortBtn: t,
sortMenu: n,
@@ -31729,15 +31756,15 @@ function KM({
{ key: "rating_desc", label: m("sort.ratingHigh") },
{ key: "size_desc", label: m("sort.sizeDesc") },
{ key: "size_asc", label: m("sort.sizeAsc") }
- ], d = (y) => {
- const S = t.querySelector("i");
- S && (y === "name_asc" ? S.className = "pi pi-sort-alpha-down" : y === "name_desc" ? S.className = "pi pi-sort-alpha-up" : y === "mtime_asc" ? S.className = "pi pi-sort-amount-up-alt" : y === "rating_desc" ? S.className = "pi pi-star-fill" : y === "size_desc" ? S.className = "pi pi-sort-numeric-down-alt" : y === "size_asc" ? S.className = "pi pi-sort-numeric-up-alt" : S.className = "pi pi-sort-amount-down");
+ ], d = (A) => {
+ const h = t.querySelector("i");
+ h && (A === "name_asc" ? h.className = "pi pi-sort-alpha-down" : A === "name_desc" ? h.className = "pi pi-sort-alpha-up" : A === "mtime_asc" ? h.className = "pi pi-sort-amount-up-alt" : A === "rating_desc" ? h.className = "pi pi-star-fill" : A === "size_desc" ? h.className = "pi pi-sort-numeric-down-alt" : A === "size_asc" ? h.className = "pi pi-sort-numeric-up-alt" : h.className = "pi pi-sort-amount-down");
}, u = () => {
n.replaceChildren();
- const y = s();
- for (const S of y) {
- const Z = S.key === a("sort", "mtime_desc"), C = document.createElement("button");
- C.type = "button", C.className = "mjr-menu-item", C.style.cssText = `
+ const A = s();
+ for (const h of A) {
+ const S = h.key === a("sort", "mtime_desc"), W = document.createElement("button");
+ W.type = "button", W.className = "mjr-menu-item", W.style.cssText = `
display:flex;
align-items:center;
justify-content:space-between;
@@ -31745,70 +31772,70 @@ function KM({
gap:10px;
padding:9px 10px;
border-radius:9px;
- border:1px solid ${Z ? "rgba(120,190,255,0.68)" : "rgba(120,190,255,0.18)"};
- background:${Z ? "linear-gradient(135deg, rgba(70,130,255,0.28), rgba(20,95,185,0.22))" : "linear-gradient(135deg, rgba(255,255,255,0.03), rgba(255,255,255,0.01))"};
- box-shadow:${Z ? "0 0 0 1px rgba(160,210,255,0.22) inset, 0 8px 18px rgba(35,95,185,0.26)" : "none"};
+ border:1px solid ${S ? "rgba(120,190,255,0.68)" : "rgba(120,190,255,0.18)"};
+ background:${S ? "linear-gradient(135deg, rgba(70,130,255,0.28), rgba(20,95,185,0.22))" : "linear-gradient(135deg, rgba(255,255,255,0.03), rgba(255,255,255,0.01))"};
+ box-shadow:${S ? "0 0 0 1px rgba(160,210,255,0.22) inset, 0 8px 18px rgba(35,95,185,0.26)" : "none"};
transition: border-color 120ms ease, background 120ms ease, box-shadow 120ms ease;
`;
const g = document.createElement("span");
- g.className = "mjr-menu-item-label", g.textContent = S.label, g.style.cssText = `font-weight:${Z ? "700" : "600"}; color:${Z ? "rgba(208,234,255,0.98)" : "var(--fg-color, #e6edf7)"};`;
- const A = document.createElement("i");
- A.className = "pi pi-check mjr-menu-item-check", A.style.cssText = `opacity:${Z ? "1" : "0"}; color: rgba(133,203,255,0.98);`, C.appendChild(g), C.appendChild(A), C.addEventListener("mouseenter", () => {
- Z || (C.style.borderColor = "rgba(145,205,255,0.4)", C.style.background = "linear-gradient(135deg, rgba(80,140,255,0.18), rgba(32,100,200,0.14))");
- }), C.addEventListener("mouseleave", () => {
- Z || (C.style.borderColor = "rgba(120,190,255,0.18)", C.style.background = "linear-gradient(135deg, rgba(255,255,255,0.03), rgba(255,255,255,0.01))");
- }), C.addEventListener("click", async () => {
+ g.className = "mjr-menu-item-label", g.textContent = h.label, g.style.cssText = `font-weight:${S ? "700" : "600"}; color:${S ? "rgba(208,234,255,0.98)" : "var(--fg-color, #e6edf7)"};`;
+ const y = document.createElement("i");
+ y.className = "pi pi-check mjr-menu-item-check", y.style.cssText = `opacity:${S ? "1" : "0"}; color: rgba(133,203,255,0.98);`, W.appendChild(g), W.appendChild(y), W.addEventListener("mouseenter", () => {
+ S || (W.style.borderColor = "rgba(145,205,255,0.4)", W.style.background = "linear-gradient(135deg, rgba(80,140,255,0.18), rgba(32,100,200,0.14))");
+ }), W.addEventListener("mouseleave", () => {
+ S || (W.style.borderColor = "rgba(120,190,255,0.18)", W.style.background = "linear-gradient(135deg, rgba(255,255,255,0.03), rgba(255,255,255,0.01))");
+ }), W.addEventListener("click", async () => {
var p;
- c("sort", S.key), d(a("sort", "mtime_desc")), u();
+ c("sort", h.key), d(a("sort", "mtime_desc")), u();
try {
l == null || l();
} catch (b) {
(p = console.debug) == null || p.call(console, b);
}
i.style.display = "none", o.close(i), await r();
- }), n.appendChild(C);
+ }), n.appendChild(W);
}
};
- return { bind: ({ onBeforeToggle: y } = {}) => {
- d(a("sort", "mtime_desc")), u(), t.addEventListener("click", (S) => {
- var Z;
- S.stopPropagation();
+ return { bind: ({ onBeforeToggle: A } = {}) => {
+ d(a("sort", "mtime_desc")), u(), t.addEventListener("click", (h) => {
+ var S;
+ h.stopPropagation();
try {
- y == null || y();
- } catch (C) {
- (Z = console.debug) == null || Z.call(console, C);
+ A == null || A();
+ } catch (W) {
+ (S = console.debug) == null || S.call(console, W);
}
u(), o.toggle(i, t);
});
}, renderSortMenu: u, setSortIcon: d };
}
-const wm = "_mjrRescanning", DM = 1500, EM = (e) => /^\d+$/.test(String(e ?? "").trim());
-async function HM({ card: e, asset: t, sidebar: n, onAssetUpdated: i }) {
- var d, u, I, y, S, Z, C, g, A, p, b, L;
+const wm = "_mjrRescanning", D2 = 1500, H2 = (e) => /^\d+$/.test(String(e ?? "").trim());
+async function E2({ card: e, asset: t, sidebar: n, onAssetUpdated: i }) {
+ var d, u, I, A, h, S, W, g, y, p, b, L;
if (!e || !t || globalThis._mjrMaintenanceActive) return;
try {
- const h = Date.now(), G = Number(e[wm] || 0) || 0;
- if (h - G < DM) return;
- e[wm] = h;
- } catch (h) {
- (d = console.debug) == null || d.call(console, h);
+ const C = Date.now(), G = Number(e[wm] || 0) || 0;
+ if (C - G < D2) return;
+ e[wm] = C;
+ } catch (C) {
+ (d = console.debug) == null || d.call(console, C);
}
const o = e.querySelector(".mjr-workflow-dot");
try {
o && (aa(o, "pending", "Pending: metadata refresh in progress", {
asset: t
}), o.classList.add("mjr-pulse-animation"), o.style.cursor = "progress", o.title = m("tooltip.pendingRefresh", "Pending: metadata refresh in progress"));
- } catch (h) {
- (u = console.debug) == null || u.call(console, h);
+ } catch (C) {
+ (u = console.debug) == null || u.call(console, C);
}
try {
- Ze(
+ Ae(
m("toast.rescanUpdatingAiIndex", "Rescanning file + updating AI index..."),
"info",
2200
);
- } catch (h) {
- (I = console.debug) == null || I.call(console, h);
+ } catch (C) {
+ (I = console.debug) == null || I.call(console, C);
}
const r = {
filename: t.filename,
@@ -31818,17 +31845,17 @@ async function HM({ card: e, asset: t, sidebar: n, onAssetUpdated: i }) {
};
let l = null, a = !1, c = !1, s = !1;
try {
- const h = await Et(ct.INDEX_FILES, {
+ const C = await Dt(st.INDEX_FILES, {
files: [r],
incremental: !1
});
- if (a = !!(h != null && h.ok), !a && o && (aa(o, "error", "Error: metadata refresh failed", { asset: t }), o.classList.remove("mjr-pulse-animation"), o.style.cursor = ""), EM(t == null ? void 0 : t.id)) {
+ if (a = !!(C != null && C.ok), !a && o && (aa(o, "error", "Error: metadata refresh failed", { asset: t }), o.classList.remove("mjr-pulse-animation"), o.style.cursor = ""), H2(t == null ? void 0 : t.id)) {
c = !0;
try {
const G = await Jg(t.id);
s = !!(G != null && G.ok);
} catch (G) {
- (y = console.debug) == null || y.call(console, G);
+ (A = console.debug) == null || A.call(console, G);
}
}
if (a && t.id != null) {
@@ -31838,45 +31865,45 @@ async function HM({ card: e, asset: t, sidebar: n, onAssetUpdated: i }) {
} catch {
try {
o && (aa(o, "error", "Error: metadata refresh failed", { asset: t }), o.classList.remove("mjr-pulse-animation"), o.style.cursor = "");
- } catch (h) {
- (S = console.debug) == null || S.call(console, h);
+ } catch (C) {
+ (h = console.debug) == null || h.call(console, C);
}
}
try {
if (l) {
e._mjrAsset = l, typeof i == "function" && i(l);
try {
- if ((C = (Z = n == null ? void 0 : n.classList) == null ? void 0 : Z.contains) != null && C.call(Z, "is-open")) {
- const h = ((g = n == null ? void 0 : n._currentAsset) == null ? void 0 : g.id) ?? ((A = n == null ? void 0 : n._currentFullAsset) == null ? void 0 : A.id) ?? null;
- h != null && String(h) === String(l.id) && (n._mjrNeedsRefresh = !0);
+ if ((W = (S = n == null ? void 0 : n.classList) == null ? void 0 : S.contains) != null && W.call(S, "is-open")) {
+ const C = ((g = n == null ? void 0 : n._currentAsset) == null ? void 0 : g.id) ?? ((y = n == null ? void 0 : n._currentFullAsset) == null ? void 0 : y.id) ?? null;
+ C != null && String(C) === String(l.id) && (n._mjrNeedsRefresh = !0);
}
- } catch (h) {
- (p = console.debug) == null || p.call(console, h);
+ } catch (C) {
+ (p = console.debug) == null || p.call(console, C);
}
}
} finally {
try {
if (o && o.isConnected) {
- const h = ec(l || t);
- h && o.replaceWith(h);
+ const C = tc(l || t);
+ C && o.replaceWith(C);
}
} catch {
try {
o && (o.style.cursor = "");
- } catch (h) {
- (b = console.debug) == null || b.call(console, h);
+ } catch (C) {
+ (b = console.debug) == null || b.call(console, C);
}
}
}
try {
- a && s ? Ze(
+ a && s ? Ae(
m(
"toast.metadataVectorUpdated",
"Metadata + AI vector index updated for this asset."
),
"success",
2200
- ) : a && c && !s && Ze(
+ ) : a && c && !s && Ae(
m(
"toast.metadataUpdatedVectorFailed",
"Metadata updated. AI vector index could not be updated."
@@ -31884,8 +31911,8 @@ async function HM({ card: e, asset: t, sidebar: n, onAssetUpdated: i }) {
"warning",
2600
);
- } catch (h) {
- (L = console.debug) == null || L.call(console, h);
+ } catch (C) {
+ (L = console.debug) == null || L.call(console, C);
}
return l;
}
@@ -31923,7 +31950,7 @@ function Mm(e, t) {
}
}
}
-const Ta = (e) => {
+const Ka = (e) => {
var t;
if (e == null) return "";
try {
@@ -31934,19 +31961,19 @@ const Ta = (e) => {
}
return String(e).replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1");
};
-function Zs(e, t) {
+function As(e, t) {
var n, i;
if (!e || !t) return null;
try {
return e.querySelector(
- `.mjr-asset-card[data-mjr-asset-id="${Ta(t)}"]`
+ `.mjr-asset-card[data-mjr-asset-id="${Ka(t)}"]`
);
} catch (o) {
(n = console.debug) == null || n.call(console, o);
}
try {
return e.querySelector(
- `.mjr-asset-card[data-mjr-asset-id="${Ta(t)}"]`
+ `.mjr-asset-card[data-mjr-asset-id="${Ka(t)}"]`
);
} catch (o) {
(i = console.debug) == null || i.call(console, o);
@@ -31958,7 +31985,7 @@ function np(e) {
if (!e) return null;
const t = (i = e.dataset) == null ? void 0 : i.mjrSelectedAssetId;
if (t) {
- const l = Zs(e, t);
+ const l = As(e, t);
if (l) return l;
}
const n = (o = e.dataset) == null ? void 0 : o.mjrSelectedAssetIds;
@@ -31966,7 +31993,7 @@ function np(e) {
try {
const l = JSON.parse(n);
if (Array.isArray(l) && l.length) {
- const a = Zs(e, l[0]);
+ const a = As(e, l[0]);
if (a) return a;
}
} catch (l) {
@@ -31974,7 +32001,7 @@ function np(e) {
}
return e.querySelector(".mjr-asset-card.is-selected");
}
-function qM(e, { preventScroll: t = !0 } = {}) {
+function q2(e, { preventScroll: t = !0 } = {}) {
var n, i, o;
if (e)
try {
@@ -31990,7 +32017,7 @@ function qM(e, { preventScroll: t = !0 } = {}) {
function ip(e, { force: t = !1 } = {}) {
if (!e || !t && !e._mjrFocusWithin) return;
const n = np(e);
- n && (qM(n), e._mjrFocusWithin = !0);
+ n && (q2(n), e._mjrFocusWithin = !0);
}
function ga(e) {
var t, n;
@@ -32008,7 +32035,7 @@ function ga(e) {
(n = console.debug) == null || n.call(console, i);
}
}
-function Sm(e) {
+function Gm(e) {
var n;
if (e)
try {
@@ -32039,11 +32066,11 @@ function Sm(e) {
t();
}
}
-function PM(e, t) {
+function P2(e, t) {
var n, i;
e && (t ? (e.classList.add("is-selected"), (n = e.setAttribute) == null || n.call(e, "aria-selected", "true")) : (e.classList.remove("is-selected"), (i = e.setAttribute) == null || i.call(e, "aria-selected", "false")));
}
-function oc(e) {
+function rc(e) {
try {
if (typeof (e == null ? void 0 : e._mjrGetRenderedCards) == "function") {
const t = e._mjrGetRenderedCards();
@@ -32058,11 +32085,11 @@ function oc(e) {
return [];
}
}
-function Gm(e) {
+function Sm(e) {
var t;
if (e)
try {
- const n = oc(e).filter((i) => {
+ const n = rc(e).filter((i) => {
var o, r;
return (r = (o = i == null ? void 0 : i.classList) == null ? void 0 : o.contains) == null ? void 0 : r.call(o, "is-selected");
}).map((i) => {
@@ -32074,7 +32101,7 @@ function Gm(e) {
(t = console.debug) == null || t.call(console, n);
}
}
-function Br(e, t, n = "") {
+function Kr(e, t, n = "") {
var o, r, l, a, c, s;
if (!e) return [];
const i = Array.from(t || []).map(String).filter(Boolean);
@@ -32090,9 +32117,9 @@ function Br(e, t, n = "") {
(r = console.debug) == null || r.call(console, d);
}
try {
- for (const d of oc(e)) {
+ for (const d of rc(e)) {
const u = (l = d == null ? void 0 : d.dataset) == null ? void 0 : l.mjrAssetId, I = u && i.includes(String(u));
- PM(d, !!I);
+ P2(d, !!I);
}
} catch (d) {
(a = console.debug) == null || a.call(console, d);
@@ -32121,9 +32148,9 @@ function bo({ gridContainer: e, state: t, activeId: n, readState: i = null, writ
} catch (u) {
(l = console.debug) == null || l.call(console, u);
}
- else (a = e.dataset) != null && a.mjrSelectedAssetId ? s = [String(e.dataset.mjrSelectedAssetId)].filter(Boolean) : s = oc(e).filter((u) => {
- var I, y;
- return (y = (I = u == null ? void 0 : u.classList) == null ? void 0 : I.contains) == null ? void 0 : y.call(I, "is-selected");
+ else (a = e.dataset) != null && a.mjrSelectedAssetId ? s = [String(e.dataset.mjrSelectedAssetId)].filter(Boolean) : s = rc(e).filter((u) => {
+ var I, A;
+ return (A = (I = u == null ? void 0 : u.classList) == null ? void 0 : I.contains) == null ? void 0 : A.call(I, "is-selected");
}).map((u) => {
var I;
return (I = u == null ? void 0 : u.dataset) == null ? void 0 : I.mjrAssetId;
@@ -32135,7 +32162,7 @@ function bo({ gridContainer: e, state: t, activeId: n, readState: i = null, writ
(c = console.debug) == null || c.call(console, s);
}
}
-function QM({
+function Q2({
gridContainer: e,
sidebar: t,
createRatingBadge: n,
@@ -32144,7 +32171,7 @@ function QM({
closeSidebar: r,
state: l
}) {
- var b, L, h, G;
+ var b, L, C, G;
const { read: a, write: c } = oo(l, [
"activeAssetId",
"selectedAssetIds",
@@ -32156,28 +32183,28 @@ function QM({
return { dispose: e._mjrSidebarOpenDispose || (() => {
}) };
e._mjrSidebarOpenBound = !0;
- const s = (W) => {
+ const s = (Z) => {
var X, x;
e._mjrFocusWithin = !0;
- const f = li(W.target, ".mjr-asset-card");
+ const f = li(Z.target, ".mjr-asset-card");
if (f)
try {
e._mjrLastFocusedCardId = ((X = f.dataset) == null ? void 0 : X.mjrAssetId) || "";
- } catch (T) {
- (x = console.debug) == null || x.call(console, T);
+ } catch (K) {
+ (x = console.debug) == null || x.call(console, K);
}
- }, d = (W) => {
- const f = W == null ? void 0 : W.relatedTarget;
+ }, d = (Z) => {
+ const f = Z == null ? void 0 : Z.relatedTarget;
f && e.contains(f) || (e._mjrFocusWithin = !1);
};
try {
e.addEventListener("focusin", s), e.addEventListener("focusout", d);
- } catch (W) {
- (b = console.debug) == null || b.call(console, W);
+ } catch (Z) {
+ (b = console.debug) == null || b.call(console, Z);
}
try {
if (!e._mjrSelectionResizeObserver) {
- const W = e.parentElement;
+ const Z = e.parentElement;
let f = null, X = null;
const x = () => {
try {
@@ -32185,77 +32212,77 @@ function QM({
} catch {
return !1;
}
- }, T = () => {
+ }, K = () => {
f && cancelAnimationFrame(f), X && clearTimeout(X), f = requestAnimationFrame(() => {
f = null, x() && ga(e);
}), X = setTimeout(() => {
X = null, x() && ga(e);
}, 160);
- }, v = new ResizeObserver(() => T());
- W && v.observe(W), v.observe(e), e._mjrSelectionResizeObserver = v;
+ }, j = new ResizeObserver(() => K());
+ Z && j.observe(Z), j.observe(e), e._mjrSelectionResizeObserver = j;
}
- } catch (W) {
- (L = console.debug) == null || L.call(console, W);
+ } catch (Z) {
+ (L = console.debug) == null || L.call(console, Z);
}
- const u = (W, f, X) => {
+ const u = (Z, f, X) => {
var x;
try {
- const T = (X == null ? void 0 : X.has_workflow) ?? (X == null ? void 0 : X.hasWorkflow) ?? f.has_workflow, v = (X == null ? void 0 : X.has_generation_data) ?? (X == null ? void 0 : X.hasGenerationData) ?? f.has_generation_data;
- T !== void 0 && (f.has_workflow = T), v !== void 0 && (f.has_generation_data = v);
- const w = W.querySelector(".mjr-workflow-dot"), R = ec(f);
+ const K = (X == null ? void 0 : X.has_workflow) ?? (X == null ? void 0 : X.hasWorkflow) ?? f.has_workflow, j = (X == null ? void 0 : X.has_generation_data) ?? (X == null ? void 0 : X.hasGenerationData) ?? f.has_generation_data;
+ K !== void 0 && (f.has_workflow = K), j !== void 0 && (f.has_generation_data = j);
+ const w = Z.querySelector(".mjr-workflow-dot"), R = tc(f);
w && R && w.replaceWith(R);
- } catch (T) {
- (x = console.debug) == null || x.call(console, T);
+ } catch (K) {
+ (x = console.debug) == null || x.call(console, K);
}
if ((X == null ? void 0 : X.rating) !== void 0 && X.rating !== f.rating) {
f.rating = X.rating;
- const T = W.querySelector(".mjr-thumb"), v = W.querySelector(".mjr-rating-badge"), w = n(X.rating || 0);
- v && w ? v.replaceWith(w) : v && !w ? v.remove() : !v && w && T && T.appendChild(w);
+ const K = Z.querySelector(".mjr-thumb"), j = Z.querySelector(".mjr-rating-badge"), w = n(X.rating || 0);
+ j && w ? j.replaceWith(w) : j && !w ? j.remove() : !j && w && K && K.appendChild(w);
}
if (X != null && X.tags && JSON.stringify(X.tags) !== JSON.stringify(f.tags)) {
f.tags = X.tags;
- const T = W.querySelector(".mjr-tags-badge");
- if (T) {
- const v = i(X.tags || []);
- T.replaceWith(v);
+ const K = Z.querySelector(".mjr-tags-badge");
+ if (K) {
+ const j = i(X.tags || []);
+ K.replaceWith(j);
}
}
- }, I = async (W) => {
- var w, R, Y, F, N, V, k, K, z, B, J, P, H, $, E, oe, M, j, O, D, q, ee, ce, ue, U, Q;
- if (W.defaultPrevented) return;
- const f = li(W.target, ".mjr-asset-card");
+ }, I = async (Z) => {
+ var w, R, V, O, k, Y, N, U, z, T, J, P, E, $, H, ne, M, v, F, D, q, ee, ae, ue, B, Q;
+ if (Z.defaultPrevented) return;
+ const f = li(Z.target, ".mjr-asset-card");
if (!f) return;
- const X = li(W.target, ".mjr-workflow-dot");
+ const X = li(Z.target, ".mjr-workflow-dot");
if (X && f.contains(X)) {
const _ = f._mjrAsset;
if (!_) return;
- W.preventDefault(), W.stopPropagation();
+ Z.preventDefault(), Z.stopPropagation();
const le = ((w = f == null ? void 0 : f.dataset) == null ? void 0 : w.mjrAssetId) || "";
- Br(e, le ? [le] : [], le), bo({ gridContainer: e, state: l, activeId: le, readState: a, writeState: c });
- const de = await HM({
+ Kr(e, le ? [le] : [], le), bo({ gridContainer: e, state: l, activeId: le, readState: a, writeState: c });
+ const ce = await E2({
card: f,
asset: _,
sidebar: t,
- onAssetUpdated: (se) => u(f, _, se)
+ onAssetUpdated: (de) => u(f, _, de)
});
try {
- const se = ((R = t == null ? void 0 : t._currentAsset) == null ? void 0 : R.id) ?? ((Y = t == null ? void 0 : t._currentFullAsset) == null ? void 0 : Y.id) ?? null;
- de && ((N = (F = t == null ? void 0 : t.classList) == null ? void 0 : F.contains) != null && N.call(F, "is-open")) && se != null && String(se) === String(de.id) && await o(
+ const de = ((R = t == null ? void 0 : t._currentAsset) == null ? void 0 : R.id) ?? ((V = t == null ? void 0 : t._currentFullAsset) == null ? void 0 : V.id) ?? null;
+ ce && ((k = (O = t == null ? void 0 : t.classList) == null ? void 0 : O.contains) != null && k.call(O, "is-open")) && de != null && String(de) === String(ce.id) && await o(
t,
- de,
+ ce,
(ge) => u(f, _, ge)
);
- } catch (se) {
- (V = console.debug) == null || V.call(console, se);
+ } catch (de) {
+ (Y = console.debug) == null || Y.call(console, de);
}
return;
}
- const x = li(W.target, "a, button, input, textarea, select, label");
+ const x = li(Z.target, "a, button, input, textarea, select, label");
if (x && f.contains(x)) return;
- const T = f._mjrAsset;
- if (!T) return;
+ const K = f._mjrAsset;
+ if (!K) return;
if (e != null && e._mjrSelectionManagedByVue) {
- const _ = String(((k = f == null ? void 0 : f.dataset) == null ? void 0 : k.mjrAssetId) || "").trim();
+ const _ = String(((N = f == null ? void 0 : f.dataset) == null ? void 0 : N.mjrAssetId) || "").trim();
bo({
gridContainer: e,
state: l,
@@ -32264,16 +32291,16 @@ function QM({
writeState: c
});
try {
- if ((z = (K = t == null ? void 0 : t.classList) == null ? void 0 : K.contains) != null && z.call(K, "is-open")) {
+ if ((z = (U = t == null ? void 0 : t.classList) == null ? void 0 : U.contains) != null && z.call(U, "is-open")) {
await o(
t,
- T,
- (le) => u(f, T, le)
+ K,
+ (le) => u(f, K, le)
);
try {
c("sidebarOpen", !0);
} catch (le) {
- (B = console.debug) == null || B.call(console, le);
+ (T = console.debug) == null || T.call(console, le);
}
}
} catch (le) {
@@ -32281,25 +32308,25 @@ function QM({
}
return;
}
- if (W.preventDefault(), W.stopPropagation(), !!(W.ctrlKey || W.metaKey || W.shiftKey)) {
- const _ = oc(e), le = _.indexOf(f);
- if (W.shiftKey) {
- let Se = [];
+ if (Z.preventDefault(), Z.stopPropagation(), !!(Z.ctrlKey || Z.metaKey || Z.shiftKey)) {
+ const _ = rc(e), le = _.indexOf(f);
+ if (Z.shiftKey) {
+ let xe = [];
try {
- typeof (e == null ? void 0 : e._mjrGetAssets) == "function" && (Se = e._mjrGetAssets() || []);
- } catch (ke) {
- (oe = console.debug) == null || oe.call(console, ke);
+ typeof (e == null ? void 0 : e._mjrGetAssets) == "function" && (xe = e._mjrGetAssets() || []);
+ } catch (Xe) {
+ (ne = console.debug) == null || ne.call(console, Xe);
}
- if (Array.isArray(Se) && Se.length) {
- const ke = ((M = f == null ? void 0 : f.dataset) == null ? void 0 : M.mjrAssetId) || "", we = Se.findIndex(
- (qe) => String((qe == null ? void 0 : qe.id) || "") === String(ke)
- ), Je = Number(e._mjrLastSelectedIndex), $e = Number.isFinite(Je) ? Je : we;
- if (we >= 0 && $e >= 0) {
- const qe = Math.min($e, we), Ue = Math.max($e, we), Te = Se.slice(qe, Ue + 1).map((Oe) => String((Oe == null ? void 0 : Oe.id) || "")).filter(Boolean);
- Br(e, Te, ke || Te[0] || ""), e._mjrLastSelectedIndex = we, bo({
+ if (Array.isArray(xe) && xe.length) {
+ const Xe = ((M = f == null ? void 0 : f.dataset) == null ? void 0 : M.mjrAssetId) || "", Me = xe.findIndex(
+ (qe) => String((qe == null ? void 0 : qe.id) || "") === String(Xe)
+ ), Fe = Number(e._mjrLastSelectedIndex), it = Number.isFinite(Fe) ? Fe : Me;
+ if (Me >= 0 && it >= 0) {
+ const qe = Math.min(it, Me), Pe = Math.max(it, Me), Re = xe.slice(qe, Pe + 1).map((rt) => String((rt == null ? void 0 : rt.id) || "")).filter(Boolean);
+ Kr(e, Re, Xe || Re[0] || ""), e._mjrLastSelectedIndex = Me, bo({
gridContainer: e,
state: l,
- activeId: ke || "",
+ activeId: Xe || "",
readState: a,
writeState: c
});
@@ -32307,43 +32334,43 @@ function QM({
}
}
}
- const de = String(((j = f == null ? void 0 : f.dataset) == null ? void 0 : j.mjrAssetId) || "").trim();
+ const ce = String(((v = f == null ? void 0 : f.dataset) == null ? void 0 : v.mjrAssetId) || "").trim();
le >= 0 && (e._mjrLastSelectedIndex = le);
- const se = /* @__PURE__ */ new Set();
+ const de = /* @__PURE__ */ new Set();
try {
- const Se = (O = e.dataset) == null ? void 0 : O.mjrSelectedAssetIds;
- if (Se) {
- const ke = JSON.parse(Se);
- if (Array.isArray(ke))
- for (const we of ke) {
- const Je = String(we || "").trim();
- Je && se.add(Je);
+ const xe = (F = e.dataset) == null ? void 0 : F.mjrSelectedAssetIds;
+ if (xe) {
+ const Xe = JSON.parse(xe);
+ if (Array.isArray(Xe))
+ for (const Me of Xe) {
+ const Fe = String(Me || "").trim();
+ Fe && de.add(Fe);
}
} else {
- const ke = String(((D = e.dataset) == null ? void 0 : D.mjrSelectedAssetId) || "").trim();
- ke && se.add(ke);
+ const Xe = String(((D = e.dataset) == null ? void 0 : D.mjrSelectedAssetId) || "").trim();
+ Xe && de.add(Xe);
}
- } catch (Se) {
- (q = console.debug) == null || q.call(console, Se);
+ } catch (xe) {
+ (q = console.debug) == null || q.call(console, xe);
}
- if (!se.size)
- for (const Se of _) {
- const ke = String(((ee = Se == null ? void 0 : Se.dataset) == null ? void 0 : ee.mjrAssetId) || "").trim();
- ke && (ue = (ce = Se.classList) == null ? void 0 : ce.contains) != null && ue.call(ce, "is-selected") && se.add(ke);
+ if (!de.size)
+ for (const xe of _) {
+ const Xe = String(((ee = xe == null ? void 0 : xe.dataset) == null ? void 0 : ee.mjrAssetId) || "").trim();
+ Xe && (ue = (ae = xe.classList) == null ? void 0 : ae.contains) != null && ue.call(ae, "is-selected") && de.add(Xe);
}
- de && (se.has(de) ? se.delete(de) : se.add(de));
- const ge = Array.from(se), je = se.has(de) ? de : ge[0] || "";
- Br(e, ge, je), bo({
+ ce && (de.has(ce) ? de.delete(ce) : de.add(ce));
+ const ge = Array.from(de), Le = de.has(ce) ? ce : ge[0] || "";
+ Kr(e, ge, Le), bo({
gridContainer: e,
state: l,
- activeId: je,
+ activeId: Le,
readState: a,
writeState: c
});
return;
} else {
if (f.classList.contains("is-selected")) {
- Br(e, [], ""), bo({
+ Kr(e, [], ""), bo({
gridContainer: e,
state: l,
activeId: "",
@@ -32353,7 +32380,7 @@ function QM({
return;
}
const le = (P = f == null ? void 0 : f.dataset) == null ? void 0 : P.mjrAssetId;
- Br(e, le ? [le] : [], le || ""), bo({
+ Kr(e, le ? [le] : [], le || ""), bo({
gridContainer: e,
state: l,
activeId: le || "",
@@ -32361,35 +32388,35 @@ function QM({
writeState: c
});
try {
- ($ = (H = t == null ? void 0 : t.classList) == null ? void 0 : H.contains) != null && $.call(H, "is-open") && o(
+ ($ = (E = t == null ? void 0 : t.classList) == null ? void 0 : E.contains) != null && $.call(E, "is-open") && o(
t,
- T,
- (de) => u(f, T, de)
+ K,
+ (ce) => u(f, K, ce)
);
- } catch (de) {
- (E = console.debug) == null || E.call(console, de);
+ } catch (ce) {
+ (H = console.debug) == null || H.call(console, ce);
}
}
try {
- ga(e), (U = f == null ? void 0 : f.focus) == null || U.call(f, { preventScroll: !0 });
+ ga(e), (B = f == null ? void 0 : f.focus) == null || B.call(f, { preventScroll: !0 });
} catch (_) {
(Q = console.debug) == null || Q.call(console, _);
}
};
e.addEventListener("click", I);
- const y = async () => {
- var x, T, v, w, R, Y, F, N, V, k, K;
- const W = String(a("activeAssetId", "") || "");
+ const A = async () => {
+ var x, K, j, w, R, V, O, k, Y, N, U;
+ const Z = String(a("activeAssetId", "") || "");
let f = null;
- if (W)
+ if (Z)
try {
f = e.querySelector(
- `.mjr-asset-card[data-mjr-asset-id="${Ta(W)}"]`
+ `.mjr-asset-card[data-mjr-asset-id="${Ka(Z)}"]`
);
} catch {
try {
f = e.querySelector(
- `.mjr-asset-card[data-mjr-asset-id="${Ta(W)}"]`
+ `.mjr-asset-card[data-mjr-asset-id="${Ka(Z)}"]`
);
} catch (z) {
(x = console.debug) == null || x.call(console, z);
@@ -32398,27 +32425,27 @@ function QM({
f || (f = e.querySelector(".mjr-asset-card.is-selected"));
const X = f == null ? void 0 : f._mjrAsset;
if (X) {
- Mm(e, f), Gm(e), bo({
+ Mm(e, f), Sm(e), bo({
gridContainer: e,
state: l,
- activeId: (T = f == null ? void 0 : f.dataset) == null ? void 0 : T.mjrAssetId,
+ activeId: (K = f == null ? void 0 : f.dataset) == null ? void 0 : K.mjrAssetId,
readState: a,
writeState: c
});
try {
- const z = !!((w = (v = t == null ? void 0 : t.classList) == null ? void 0 : v.contains) != null && w.call(v, "is-open")), B = ((R = t == null ? void 0 : t._currentAsset) == null ? void 0 : R.id) ?? ((Y = t == null ? void 0 : t._currentFullAsset) == null ? void 0 : Y.id) ?? null;
- if (z && B != null && String(B) === String(X.id) && typeof r == "function") {
+ const z = !!((w = (j = t == null ? void 0 : t.classList) == null ? void 0 : j.contains) != null && w.call(j, "is-open")), T = ((R = t == null ? void 0 : t._currentAsset) == null ? void 0 : R.id) ?? ((V = t == null ? void 0 : t._currentFullAsset) == null ? void 0 : V.id) ?? null;
+ if (z && T != null && String(T) === String(X.id) && typeof r == "function") {
r(t);
try {
c("sidebarOpen", !1);
} catch (J) {
- (F = console.debug) == null || F.call(console, J);
+ (O = console.debug) == null || O.call(console, J);
}
- ip(e, { force: !0 }), Sm(e);
+ ip(e, { force: !0 }), Gm(e);
return;
}
} catch (z) {
- (N = console.debug) == null || N.call(console, z);
+ (k = console.debug) == null || k.call(console, z);
}
try {
await o(
@@ -32429,27 +32456,27 @@ function QM({
try {
c("sidebarOpen", !0);
} catch (z) {
- (V = console.debug) == null || V.call(console, z);
+ (Y = console.debug) == null || Y.call(console, z);
}
- Sm(e), (k = f == null ? void 0 : f.focus) == null || k.call(f, { preventScroll: !0 });
+ Gm(e), (N = f == null ? void 0 : f.focus) == null || N.call(f, { preventScroll: !0 });
} catch (z) {
- (K = console.debug) == null || K.call(console, z);
+ (U = console.debug) == null || U.call(console, z);
}
}
- }, S = async () => {
- var x, T, v, w, R;
+ }, h = async () => {
+ var x, K, j, w, R;
try {
- if (!!!((T = (x = t == null ? void 0 : t.classList) == null ? void 0 : x.contains) != null && T.call(x, "is-open"))) return !1;
+ if (!!!((K = (x = t == null ? void 0 : t.classList) == null ? void 0 : x.contains) != null && K.call(x, "is-open"))) return !1;
} catch {
return !1;
}
- const W = String(a("activeAssetId", "") || "").trim();
- if (!W) return !1;
+ const Z = String(a("activeAssetId", "") || "").trim();
+ if (!Z) return !1;
let f = null;
try {
- f = Zs(e, W);
- } catch (Y) {
- (v = console.debug) == null || v.call(console, Y);
+ f = As(e, Z);
+ } catch (V) {
+ (j = console.debug) == null || j.call(console, V);
}
const X = f == null ? void 0 : f._mjrAsset;
if (!X) return !1;
@@ -32457,71 +32484,71 @@ function QM({
await o(
t,
X,
- (Y) => u(f, X, Y)
+ (V) => u(f, X, V)
);
try {
c("sidebarOpen", !0);
- } catch (Y) {
- (w = console.debug) == null || w.call(console, Y);
+ } catch (V) {
+ (w = console.debug) == null || w.call(console, V);
}
return !0;
- } catch (Y) {
- (R = console.debug) == null || R.call(console, Y);
+ } catch (V) {
+ (R = console.debug) == null || R.call(console, V);
}
return !1;
};
- let Z = !1;
- const C = () => {
- var W, f;
+ let S = !1;
+ const W = () => {
+ var Z, f;
try {
- if (!((f = (W = t == null ? void 0 : t.classList) == null ? void 0 : W.contains) != null && f.call(W, "is-open"))) return;
+ if (!((f = (Z = t == null ? void 0 : t.classList) == null ? void 0 : Z.contains) != null && f.call(Z, "is-open"))) return;
} catch {
return;
}
- Z || (Z = !0, queueMicrotask(async () => {
+ S || (S = !0, queueMicrotask(async () => {
var X;
- Z = !1;
+ S = !1;
try {
- await S();
+ await h();
} catch (x) {
(X = console.debug) == null || X.call(console, x);
}
}));
};
- e.addEventListener("mjr:selection-changed", C);
- const g = (W) => {
- var v, w, R, Y, F, N;
- if (W.defaultPrevented || (((w = (v = W.key) == null ? void 0 : v.toLowerCase) == null ? void 0 : w.call(v)) || "") !== "d" || W.ctrlKey || W.metaKey || W.altKey || ((R = W.target) == null ? void 0 : R.isContentEditable) || ((F = (Y = W.target) == null ? void 0 : Y.closest) == null ? void 0 : F.call(Y, "input, textarea, select, [contenteditable='true']"))) return;
- const x = li(W.target, ".mjr-asset-card");
- !x || !x._mjrAsset || (W.preventDefault(), W.stopPropagation(), Mm(e, x), Gm(e), bo({
+ e.addEventListener("mjr:selection-changed", W);
+ const g = (Z) => {
+ var j, w, R, V, O, k;
+ if (Z.defaultPrevented || (((w = (j = Z.key) == null ? void 0 : j.toLowerCase) == null ? void 0 : w.call(j)) || "") !== "d" || Z.ctrlKey || Z.metaKey || Z.altKey || ((R = Z.target) == null ? void 0 : R.isContentEditable) || ((O = (V = Z.target) == null ? void 0 : V.closest) == null ? void 0 : O.call(V, "input, textarea, select, [contenteditable='true']"))) return;
+ const x = li(Z.target, ".mjr-asset-card");
+ !x || !x._mjrAsset || (Z.preventDefault(), Z.stopPropagation(), Mm(e, x), Sm(e), bo({
gridContainer: e,
state: l,
- activeId: (N = x == null ? void 0 : x.dataset) == null ? void 0 : N.mjrAssetId,
+ activeId: (k = x == null ? void 0 : x.dataset) == null ? void 0 : k.mjrAssetId,
readState: a,
writeState: c
- }), y());
+ }), A());
};
e.addEventListener("keydown", g);
- const A = () => {
- var W;
+ const y = () => {
+ var Z;
try {
c("sidebarOpen", !1);
} catch (f) {
- (W = console.debug) == null || W.call(console, f);
+ (Z = console.debug) == null || Z.call(console, f);
}
};
- (h = t == null ? void 0 : t.addEventListener) == null || h.call(t, "mjr:sidebar-closed", A);
+ (C = t == null ? void 0 : t.addEventListener) == null || C.call(t, "mjr:sidebar-closed", y);
try {
- e._mjrOpenDetails = y;
- } catch (W) {
- (G = console.debug) == null || G.call(console, W);
+ e._mjrOpenDetails = A;
+ } catch (Z) {
+ (G = console.debug) == null || G.call(console, Z);
}
const p = () => {
- var W, f, X, x, T, v, w, R, Y, F, N, V, k, K;
+ var Z, f, X, x, K, j, w, R, V, O, k, Y, N, U;
try {
e.removeEventListener("click", I);
} catch (z) {
- (W = console.debug) == null || W.call(console, z);
+ (Z = console.debug) == null || Z.call(console, z);
}
try {
e.removeEventListener("focusin", s);
@@ -32539,44 +32566,44 @@ function QM({
(x = console.debug) == null || x.call(console, z);
}
try {
- e.removeEventListener("mjr:selection-changed", C);
+ e.removeEventListener("mjr:selection-changed", W);
} catch (z) {
- (T = console.debug) == null || T.call(console, z);
+ (K = console.debug) == null || K.call(console, z);
}
try {
- (v = t == null ? void 0 : t.removeEventListener) == null || v.call(t, "mjr:sidebar-closed", A);
+ (j = t == null ? void 0 : t.removeEventListener) == null || j.call(t, "mjr:sidebar-closed", y);
} catch (z) {
(w = console.debug) == null || w.call(console, z);
}
try {
- e._mjrOpenDetails === y && delete e._mjrOpenDetails;
+ e._mjrOpenDetails === A && delete e._mjrOpenDetails;
} catch (z) {
(R = console.debug) == null || R.call(console, z);
}
try {
- (F = (Y = e._mjrSelectionResizeObserver) == null ? void 0 : Y.disconnect) == null || F.call(Y);
- } catch (z) {
- (N = console.debug) == null || N.call(console, z);
- }
- try {
- delete e._mjrSelectionResizeObserver;
- } catch (z) {
- (V = console.debug) == null || V.call(console, z);
- }
- try {
- delete e._mjrSidebarOpenBound;
+ (O = (V = e._mjrSelectionResizeObserver) == null ? void 0 : V.disconnect) == null || O.call(V);
} catch (z) {
(k = console.debug) == null || k.call(console, z);
}
+ try {
+ delete e._mjrSelectionResizeObserver;
+ } catch (z) {
+ (Y = console.debug) == null || Y.call(console, z);
+ }
+ try {
+ delete e._mjrSidebarOpenBound;
+ } catch (z) {
+ (N = console.debug) == null || N.call(console, z);
+ }
try {
delete e._mjrSidebarOpenDispose;
} catch (z) {
- (K = console.debug) == null || K.call(console, z);
+ (U = console.debug) == null || U.call(console, z);
}
};
- return e._mjrSidebarOpenDispose = p, { dispose: p, toggleDetails: y, refreshActiveAsset: S };
+ return e._mjrSidebarOpenDispose = p, { dispose: p, toggleDetails: A, refreshActiveAsset: h };
}
-function _M({
+function _2({
onTriggerScan: e,
getScanContext: t,
onToggleDetails: n,
@@ -32600,34 +32627,34 @@ function _M({
"Escape",
"Tab"
]), u = () => a || c, I = (g) => {
- var A, p;
+ var y, p;
if (u()) return !0;
try {
const b = g == null ? void 0 : g.target;
if (s && b && typeof s.contains == "function" && (s === b || s.contains(b)))
return !0;
} catch (b) {
- (A = console.debug) == null || A.call(console, b);
+ (y = console.debug) == null || y.call(console, b);
}
try {
return !!(s != null && s.isConnected) && document.activeElement === document.body;
} catch (b) {
return (p = console.debug) == null || p.call(console, b), !1;
}
- }, y = (g) => {
- var A, p, b, L, h;
+ }, A = (g) => {
+ var y, p, b, L, C;
try {
- if ((p = (A = g == null ? void 0 : g.target) == null ? void 0 : A.closest) == null ? void 0 : p.call(A, ".mjr-grid")) return !0;
+ if ((p = (y = g == null ? void 0 : g.target) == null ? void 0 : y.closest) == null ? void 0 : p.call(y, ".mjr-grid")) return !0;
} catch (G) {
(b = console.debug) == null || b.call(console, G);
}
try {
- const G = So();
+ const G = Go();
return G ? document.activeElement === document.body ? !0 : ((L = G.contains) == null ? void 0 : L.call(G, document.activeElement)) || !1 : !1;
} catch (G) {
- return (h = console.debug) == null || h.call(console, G), !1;
+ return (C = console.debug) == null || C.call(console, G), !1;
}
- }, S = {
+ }, h = {
focusin: () => {
a = !0;
},
@@ -32641,100 +32668,100 @@ function _M({
c = !1;
},
keydown: (g) => {
- var b, L, h, G, W, f, X, x, T, v, w, R, Y, F, N, V;
+ var b, L, C, G, Z, f, X, x, K, j, w, R, V, O, k, Y;
if (Mo().scope === "viewer" || !I(g)) return;
- const A = ((L = (b = g.key) == null ? void 0 : b.toLowerCase) == null ? void 0 : L.call(b)) || "", p = ((h = g.target) == null ? void 0 : h.isContentEditable) || ((W = (G = g.target) == null ? void 0 : G.closest) == null ? void 0 : W.call(G, "input, textarea, select, [contenteditable='true']"));
- if (A === "s" && (g.ctrlKey || g.metaKey)) {
+ const y = ((L = (b = g.key) == null ? void 0 : b.toLowerCase) == null ? void 0 : L.call(b)) || "", p = ((C = g.target) == null ? void 0 : C.isContentEditable) || ((Z = (G = g.target) == null ? void 0 : G.closest) == null ? void 0 : Z.call(G, "input, textarea, select, [contenteditable='true']"));
+ if (y === "s" && (g.ctrlKey || g.metaKey)) {
g.preventDefault(), g.stopPropagation(), (f = g.stopImmediatePropagation) == null || f.call(g);
try {
- const k = typeof t == "function" ? t() : null;
- e == null || e(k);
- } catch (k) {
- (X = console.debug) == null || X.call(console, k);
+ const N = typeof t == "function" ? t() : null;
+ e == null || e(N);
+ } catch (N) {
+ (X = console.debug) == null || X.call(console, N);
}
return;
}
- if ((A === "f" || A === "k") && (g.ctrlKey || g.metaKey)) {
+ if ((y === "f" || y === "k") && (g.ctrlKey || g.metaKey)) {
g.preventDefault(), g.stopPropagation(), (x = g.stopImmediatePropagation) == null || x.call(g);
try {
o == null || o();
- } catch (k) {
- (T = console.debug) == null || T.call(console, k);
+ } catch (N) {
+ (K = console.debug) == null || K.call(console, N);
}
return;
}
- if (A === "h" && (g.ctrlKey || g.metaKey)) {
- g.preventDefault(), g.stopPropagation(), (v = g.stopImmediatePropagation) == null || v.call(g);
+ if (y === "h" && (g.ctrlKey || g.metaKey)) {
+ g.preventDefault(), g.stopPropagation(), (j = g.stopImmediatePropagation) == null || j.call(g);
try {
r == null || r();
- } catch (k) {
- (w = console.debug) == null || w.call(console, k);
+ } catch (N) {
+ (w = console.debug) == null || w.call(console, N);
}
return;
}
- if (A === "d" && !g.ctrlKey && !g.metaKey && !g.altKey) {
+ if (y === "d" && !g.ctrlKey && !g.metaKey && !g.altKey) {
if (p) return;
g.preventDefault(), g.stopPropagation(), (R = g.stopImmediatePropagation) == null || R.call(g);
try {
n == null || n();
- } catch (k) {
- (Y = console.debug) == null || Y.call(console, k);
+ } catch (N) {
+ (V = console.debug) == null || V.call(console, N);
}
return;
}
- if (A === "v" && !g.altKey && !(g.shiftKey && (g.ctrlKey || g.metaKey))) {
+ if (y === "v" && !g.altKey && !(g.shiftKey && (g.ctrlKey || g.metaKey))) {
if (p) return;
- g.preventDefault(), g.stopPropagation(), (F = g.stopImmediatePropagation) == null || F.call(g);
+ g.preventDefault(), g.stopPropagation(), (O = g.stopImmediatePropagation) == null || O.call(g);
try {
i == null || i();
- } catch (k) {
- (N = console.debug) == null || N.call(console, k);
+ } catch (N) {
+ (k = console.debug) == null || k.call(console, N);
}
return;
}
if (d.has(g.key) && I(g)) {
- if (p || y(g)) return;
- g.preventDefault(), g.stopPropagation(), (V = g.stopImmediatePropagation) == null || V.call(g);
+ if (p || A(g)) return;
+ g.preventDefault(), g.stopPropagation(), (Y = g.stopImmediatePropagation) == null || Y.call(g);
}
}
- }, Z = (g) => {
- var A, p;
+ }, S = (g) => {
+ var y, p;
if (!(!g || s === g)) {
- s && C(), s = g;
+ s && W(), s = g;
try {
- s.addEventListener("focusin", S.focusin), s.addEventListener("focusout", S.focusout), s.addEventListener("mouseenter", S.mouseenter), s.addEventListener("mouseleave", S.mouseleave);
+ s.addEventListener("focusin", h.focusin), s.addEventListener("focusout", h.focusout), s.addEventListener("mouseenter", h.mouseenter), s.addEventListener("mouseleave", h.mouseleave);
} catch (b) {
- (A = console.debug) == null || A.call(console, b);
+ (y = console.debug) == null || y.call(console, b);
}
try {
- window.addEventListener("keydown", S.keydown, { capture: !0 });
+ window.addEventListener("keydown", h.keydown, { capture: !0 });
} catch (b) {
(p = console.debug) == null || p.call(console, b);
}
wr("panel");
}
- }, C = () => {
- var g, A;
+ }, W = () => {
+ var g, y;
if (s) {
try {
- s.removeEventListener("focusin", S.focusin), s.removeEventListener("focusout", S.focusout), s.removeEventListener("mouseenter", S.mouseenter), s.removeEventListener("mouseleave", S.mouseleave);
+ s.removeEventListener("focusin", h.focusin), s.removeEventListener("focusout", h.focusout), s.removeEventListener("mouseenter", h.mouseenter), s.removeEventListener("mouseleave", h.mouseleave);
} catch (p) {
(g = console.debug) == null || g.call(console, p);
}
try {
- window.removeEventListener("keydown", S.keydown, { capture: !0 });
+ window.removeEventListener("keydown", h.keydown, { capture: !0 });
} catch (p) {
- (A = console.debug) == null || A.call(console, p);
+ (y = console.debug) == null || y.call(console, p);
}
Mo().scope === "panel" && wr(null), s = null;
}
};
- return { bind: Z, dispose: C };
+ return { bind: S, dispose: W };
}
function xm(e) {
return Array.isArray(e) ? e.map((t) => String(t || "").trim()).filter(Boolean) : [];
}
-function $M({
+function $2({
gridContainer: e,
readSelectedAssetIds: t = () => [],
readActiveAssetId: n = () => "",
@@ -32757,15 +32784,15 @@ function $M({
const a = (d) => {
var u, I;
try {
- const y = (d == null ? void 0 : d.detail) || {}, S = xm(y.selectedIds);
- i(S), o(String(y.activeId || S[0] || "").trim());
- } catch (y) {
- (u = console.debug) == null || u.call(console, y);
+ const A = (d == null ? void 0 : d.detail) || {}, h = xm(A.selectedIds);
+ i(h), o(String(A.activeId || h[0] || "").trim());
+ } catch (A) {
+ (u = console.debug) == null || u.call(console, A);
}
try {
r((d == null ? void 0 : d.detail) || {});
- } catch (y) {
- (I = console.debug) == null || I.call(console, y);
+ } catch (A) {
+ (I = console.debug) == null || I.call(console, A);
}
};
try {
@@ -32777,13 +32804,13 @@ function $M({
}
return {
restoreSelectionState: ({ scrollTop: d = 0 } = {}) => {
- var y, S, Z, C;
+ var A, h, S, W;
const u = xm(t()), I = String(n() || u[0] || "").trim();
if (!(!u.length && !I)) {
try {
typeof (e == null ? void 0 : e._mjrSetSelection) == "function" && e._mjrSetSelection(u, I);
} catch (g) {
- (y = console.debug) == null || y.call(console, g);
+ (A = console.debug) == null || A.call(console, g);
}
if (I) {
try {
@@ -32792,18 +32819,18 @@ function $M({
return;
}
} catch (g) {
- (S = console.debug) == null || S.call(console, g);
+ (h = console.debug) == null || h.call(console, g);
}
try {
const g = e.querySelector(
- `.mjr-asset-card[data-mjr-asset-id="${vC(I)}"]`
+ `.mjr-asset-card[data-mjr-asset-id="${vh(I)}"]`
);
- (Z = g == null ? void 0 : g.scrollIntoView) == null || Z.call(g, {
+ (S = g == null ? void 0 : g.scrollIntoView) == null || S.call(g, {
block: "nearest",
behavior: "instant"
});
} catch (g) {
- (C = console.debug) == null || C.call(console, g);
+ (W = console.debug) == null || W.call(console, g);
}
}
}
@@ -32818,7 +32845,7 @@ function $M({
}
};
}
-function e2(e) {
+function eM(e) {
var t;
try {
if (typeof requestAnimationFrame == "function") {
@@ -32830,7 +32857,7 @@ function e2(e) {
}
setTimeout(e, 0);
}
-function t2(e = {}, t = "*") {
+function tM(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() && !e.dateRangeFilter && !e.dateExactFilter;
}
function op({
@@ -32849,182 +32876,182 @@ function op({
toggleSidebarDetails: u = () => {
},
getQuery: I = () => "*",
- getScope: y = () => "output",
- loadAssets: S = null,
- lifecycleSignal: Z = null
+ getScope: A = () => "output",
+ loadAssets: h = null,
+ lifecycleSignal: S = null
} = {}) {
- let C = 0, g = !1, A = null, p = null, b = null, L = 0, h = !0;
+ let W = 0, g = !1, y = null, p = null, b = null, L = 0, C = !0;
const G = () => {
- var Y;
+ var V;
try {
- const F = typeof n == "function" ? n() : t;
- return md(e, F || t || null);
- } catch (F) {
- return (Y = console.debug) == null || Y.call(console, F), !1;
+ const O = typeof n == "function" ? n() : t;
+ return md(e, O || t || null);
+ } catch (O) {
+ return (V = console.debug) == null || V.call(console, O), !1;
}
- }, W = (Y = null, { resumeQueuedReload: F = !0 } = {}) => {
- if (h = typeof Y == "boolean" ? Y : G(), !h)
- return A && (clearTimeout(A), A = null), h;
- if (b && !A) {
- const N = b, V = L || 50;
- b = null, L = 0, v(N, Math.min(V, 50));
+ }, Z = (V = null, { resumeQueuedReload: O = !0 } = {}) => {
+ if (C = typeof V == "boolean" ? V : G(), !C)
+ return y && (clearTimeout(y), y = null), C;
+ if (b && !y) {
+ const k = b, Y = L || 50;
+ b = null, L = 0, j(k, Math.min(Y, 50));
}
- return F && C > 0 && !g && X().catch((N) => {
- var V;
- return (V = console.debug) == null ? void 0 : V.call(console, N);
- }), h;
+ return O && W > 0 && !g && X().catch((k) => {
+ var Y;
+ return (Y = console.debug) == null ? void 0 : Y.call(console, k);
+ }), C;
}, f = () => {
- var Y, F;
+ var V, O;
try {
- return ((Y = e == null ? void 0 : e.querySelector) == null ? void 0 : Y.call(e, ".mjr-asset-card")) != null;
- } catch (N) {
- return (F = console.debug) == null || F.call(console, N), !1;
+ return ((V = e == null ? void 0 : e.querySelector) == null ? void 0 : V.call(e, ".mjr-asset-card")) != null;
+ } catch (k) {
+ return (O = console.debug) == null || O.call(console, k), !1;
}
}, X = async () => {
- var Y;
- if (!(!e || !(i != null && i.reloadGrid)) && (C += 1, !!W(null, { resumeQueuedReload: !1 }) && !g)) {
+ var V;
+ if (!(!e || !(i != null && i.reloadGrid)) && (W += 1, !!Z(null, { resumeQueuedReload: !1 }) && !g)) {
g = !0;
try {
- for (; C > 0; ) {
- if (!W(null, { resumeQueuedReload: !1 })) return;
- C = 0;
- const F = typeof o == "function" ? o(e) : null;
- if (await i.reloadGrid(), !W(null, { resumeQueuedReload: !1 })) return;
- if (F && typeof r == "function")
+ for (; W > 0; ) {
+ if (!Z(null, { resumeQueuedReload: !1 })) return;
+ W = 0;
+ const O = typeof o == "function" ? o(e) : null;
+ if (await i.reloadGrid(), !Z(null, { resumeQueuedReload: !1 })) return;
+ if (O && typeof r == "function")
try {
- const N = Number(a() || 0) || 0, V = Number((F == null ? void 0 : F.scrollTop) || 0) || 0;
- if (N > V + 8)
+ const k = Number(a() || 0) || 0, Y = Number((O == null ? void 0 : O.scrollTop) || 0) || 0;
+ if (k > Y + 8)
continue;
- await r(e, F);
- } catch (N) {
- (Y = console.debug) == null || Y.call(console, N);
+ await r(e, O);
+ } catch (k) {
+ (V = console.debug) == null || V.call(console, k);
}
}
} finally {
g = !1;
}
}
- }, x = async (Y) => {
- var F;
+ }, x = async (V) => {
+ var O;
if (typeof l == "function")
- return l(Y);
+ return l(V);
try {
- await Y;
- } catch (N) {
- (F = console.debug) == null || F.call(console, N);
+ await V;
+ } catch (k) {
+ (O = console.debug) == null || O.call(console, k);
}
- e2(() => {
- var V, k, K;
- const N = Number(a() || 0) || 0;
- if (N > 0)
+ eM(() => {
+ var Y, N, U;
+ const k = Number(a() || 0) || 0;
+ if (k > 0)
try {
- t.scrollTop = N;
+ t.scrollTop = k;
} catch (z) {
- (V = console.debug) == null || V.call(console, z);
+ (Y = console.debug) == null || Y.call(console, z);
}
try {
- c({ scrollTop: N });
+ c({ scrollTop: k });
} catch (z) {
- (k = console.debug) == null || k.call(console, z);
+ (N = console.debug) == null || N.call(console, z);
}
if (d() && s())
try {
u();
} catch (z) {
- (K = console.debug) == null || K.call(console, z);
+ (U = console.debug) == null || U.call(console, z);
}
});
- }, T = async (Y) => {
- var N, V, k, K;
+ }, K = async (V) => {
+ var k, Y, N, U;
try {
- await Y;
+ await V;
} catch (z) {
- (N = console.debug) == null || N.call(console, z);
+ (k = console.debug) == null || k.call(console, z);
}
- if (!e || typeof S != "function" || Z != null && Z.aborted) return;
- if (!W()) {
- b = Y, L = 50;
+ if (!e || typeof h != "function" || S != null && S.aborted) return;
+ if (!Z()) {
+ b = V, L = 50;
return;
}
- let F = !1;
+ let O = !1;
try {
- F = e.querySelector(".mjr-asset-card") != null;
+ O = e.querySelector(".mjr-asset-card") != null;
} catch (z) {
- (V = console.debug) == null || V.call(console, z);
+ (Y = console.debug) == null || Y.call(console, z);
}
- if (!F && String(y() || "output") === "output" && String(I() || "*") === "*")
+ if (!O && String(A() || "output") === "output" && String(I() || "*") === "*")
try {
- const z = await Ft(`${ct.HEALTH_COUNTERS}?scope=output`, {
- signal: Z || void 0
+ const z = await Ft(`${st.HEALTH_COUNTERS}?scope=output`, {
+ signal: S || void 0
});
- z != null && z.ok && (((k = z.data) == null ? void 0 : k.total_assets) || 0) > 0 && await S(e);
+ z != null && z.ok && (((N = z.data) == null ? void 0 : N.total_assets) || 0) > 0 && await h(e);
} catch (z) {
- (K = console.debug) == null || K.call(console, z);
+ (U = console.debug) == null || U.call(console, z);
}
- }, v = (Y, F = 2e3) => (A && clearTimeout(A), W() ? (b = null, L = 0, A = setTimeout(() => {
- A = null, T(Y).catch(() => {
+ }, j = (V, O = 2e3) => (y && clearTimeout(y), Z() ? (b = null, L = 0, y = setTimeout(() => {
+ y = null, K(V).catch(() => {
});
- }, F), A) : (b = Y, L = F, null));
+ }, O), y) : (b = V, L = O, null));
return {
queuedReload: X,
restoreUiState: x,
- scheduleAutoLoad: v,
+ scheduleAutoLoad: j,
createCountersUpdateHandler: ({
- state: Y = {},
- getStableQuery: F = () => {
- var V;
- return String(((V = e == null ? void 0 : e.dataset) == null ? void 0 : V.mjrQuery) || "*").trim() || "*";
+ state: V = {},
+ getStableQuery: O = () => {
+ var Y;
+ return String(((Y = e == null ? void 0 : e.dataset) == null ? void 0 : Y.mjrQuery) || "*").trim() || "*";
},
- getRecentUserInteractionAt: N = () => 0
+ getRecentUserInteractionAt: k = () => 0
} = {}) => {
- const V = (globalThis == null ? void 0 : globalThis.window) ?? globalThis;
- let k = null, K = null, z = null, B = !1, J = 0;
+ const Y = (globalThis == null ? void 0 : globalThis.window) ?? globalThis;
+ let N = null, U = null, z = null, T = !1, J = 0;
return async (P = {}) => {
- var Q, _, le, de, se;
- if (!B) {
- B = !0, k = P.last_scan_end, K = P.last_index_end, z = Number(P.total_assets ?? null);
+ var Q, _, le, ce, de;
+ if (!T) {
+ T = !0, N = P.last_scan_end, U = P.last_index_end, z = Number(P.total_assets ?? null);
return;
}
- const H = P.last_scan_end && P.last_scan_end !== k, $ = P.last_index_end && P.last_index_end !== K, E = Number(P.total_assets ?? null), oe = String(F() || "*").trim() || "*", M = t2(Y, oe), j = Number.isFinite(E) && Number.isFinite(z) ? E - z : 0, O = Math.max(
+ const E = P.last_scan_end && P.last_scan_end !== N, $ = P.last_index_end && P.last_index_end !== U, H = Number(P.total_assets ?? null), ne = String(O() || "*").trim() || "*", M = tM(V, ne), v = Number.isFinite(H) && Number.isFinite(z) ? H - z : 0, F = Math.max(
0,
- Number((V == null ? void 0 : V.__mjrLastAssetUpsertCount) || 0) || 0
- ), D = j >= 20;
- if (Number.isFinite(E) && (z = E), !M) {
- k = P.last_scan_end, K = P.last_index_end;
+ Number((Y == null ? void 0 : Y.__mjrLastAssetUpsertCount) || 0) || 0
+ ), D = v >= 20;
+ if (Number.isFinite(H) && (z = H), !M) {
+ N = P.last_scan_end, U = P.last_index_end;
return;
}
- const ee = Date.now() - Number((V == null ? void 0 : V.__mjrLastAssetUpsert) || 0) < 15e3, ce = ee && j > 0 && O > 0 && j <= O + 8, ue = D && !H && !$ && f();
- $ && (K = P.last_index_end);
- const U = $ && !H && !D && !ee;
- if (ce) {
- k = P.last_scan_end, K = P.last_index_end;
+ const ee = Date.now() - Number((Y == null ? void 0 : Y.__mjrLastAssetUpsert) || 0) < 15e3, ae = ee && v > 0 && F > 0 && v <= F + 8, ue = D && !E && !$ && f();
+ $ && (U = P.last_index_end);
+ const B = $ && !E && !D && !ee;
+ if (ae) {
+ N = P.last_scan_end, U = P.last_index_end;
try {
- V.__mjrLastAssetUpsertCount = 0;
+ Y.__mjrLastAssetUpsertCount = 0;
} catch (ge) {
(Q = console.debug) == null || Q.call(console, ge);
}
return;
}
if (ue) {
- k = P.last_scan_end, K = P.last_index_end;
+ N = P.last_scan_end, U = P.last_index_end;
return;
}
- if (!ee && !(!H && !D && !U) && W()) {
+ if (!ee && !(!E && !D && !B) && Z()) {
try {
if (Date.now() - Number(J || 0) < 15e3) return;
} catch (ge) {
(_ = console.debug) == null || _.call(console, ge);
}
try {
- if (Date.now() - Number(N() || 0) < 2e3) return;
+ if (Date.now() - Number(k() || 0) < 2e3) return;
} catch (ge) {
(le = console.debug) == null || le.call(console, ge);
}
- k = P.last_scan_end, K = P.last_index_end;
+ N = P.last_scan_end, U = P.last_index_end;
try {
await X();
} catch (ge) {
- (de = console.debug) == null || de.call(console, ge);
+ (ce = console.debug) == null || ce.call(console, ge);
}
try {
J = Date.now();
@@ -33032,95 +33059,95 @@ function op({
J = 0;
}
try {
- V.__mjrLastAssetUpsertCount = 0;
+ Y.__mjrLastAssetUpsertCount = 0;
} catch (ge) {
- (se = console.debug) == null || se.call(console, ge);
+ (de = console.debug) == null || de.call(console, ge);
}
}
};
},
bindSearchInput: ({
- searchInputEl: Y,
- lifecycleSignal: F = null,
- debounceMs: N = 200,
- onQueryChanged: V = () => {
+ searchInputEl: V,
+ lifecycleSignal: O = null,
+ debounceMs: k = 200,
+ onQueryChanged: Y = () => {
},
- onBeforeReload: k = () => {
+ onBeforeReload: N = () => {
},
- startSearchTimer: K = () => {
+ startSearchTimer: U = () => {
},
reloadGrid: z = () => {
}
} = {}) => {
- if (!Y) return () => {
+ if (!V) return () => {
};
- let B = "";
+ let T = "";
const J = () => {
- var $, E, oe;
+ var $, H, ne;
try {
- k();
+ N();
} catch (M) {
($ = console.debug) == null || $.call(console, M);
}
try {
- K();
+ U();
} catch (M) {
- (E = console.debug) == null || E.call(console, M);
+ (H = console.debug) == null || H.call(console, M);
}
try {
z();
} catch (M) {
- (oe = console.debug) == null || oe.call(console, M);
+ (ne = console.debug) == null || ne.call(console, M);
}
}, P = ($) => {
- var oe, M;
- const E = ((oe = $ == null ? void 0 : $.target) == null ? void 0 : oe.value) ?? "";
- if (E !== B) {
- B = E;
+ var ne, M;
+ const H = ((ne = $ == null ? void 0 : $.target) == null ? void 0 : ne.value) ?? "";
+ if (H !== T) {
+ T = H;
try {
- V(E);
- } catch (j) {
- (M = console.debug) == null || M.call(console, j);
+ Y(H);
+ } catch (v) {
+ (M = console.debug) == null || M.call(console, v);
}
- if (p && clearTimeout(p), E.length === 0 || E === "*") {
+ if (p && clearTimeout(p), H.length === 0 || H === "*") {
J();
return;
}
p = setTimeout(() => {
p = null, J();
- }, N);
+ }, k);
}
- }, H = ($) => {
+ }, E = ($) => {
($ == null ? void 0 : $.key) === "Enter" && (p && (clearTimeout(p), p = null), J());
};
- return Y.addEventListener("input", P, {
- signal: F || void 0
- }), Y.addEventListener("keypress", H, {
- signal: F || void 0
+ return V.addEventListener("input", P, {
+ signal: O || void 0
+ }), V.addEventListener("keypress", E, {
+ signal: O || void 0
}), () => {
- var $, E;
+ var $, H;
p && (clearTimeout(p), p = null);
try {
- Y.removeEventListener("input", P);
- } catch (oe) {
- ($ = console.debug) == null || $.call(console, oe);
+ V.removeEventListener("input", P);
+ } catch (ne) {
+ ($ = console.debug) == null || $.call(console, ne);
}
try {
- Y.removeEventListener("keypress", H);
- } catch (oe) {
- (E = console.debug) == null || E.call(console, oe);
+ V.removeEventListener("keypress", E);
+ } catch (ne) {
+ (H = console.debug) == null || H.call(console, ne);
}
};
},
- setVisibility(Y = null) {
- return W(Y);
+ setVisibility(V = null) {
+ return Z(V);
},
dispose() {
- A && (clearTimeout(A), A = null), b = null, L = 0, p && (clearTimeout(p), p = null);
+ y && (clearTimeout(y), y = null), b = null, L = 0, p && (clearTimeout(p), p = null);
}
};
}
-function n2(e, { useComfyThemeUI: t }) {
+function nM(e, { useComfyThemeUI: t }) {
var r, l, a;
t ? e.classList.add("mjr-assets-manager") : e.classList.remove("mjr-assets-manager");
const n = e.parentElement || null, i = n ? {
@@ -33133,7 +33160,7 @@ function n2(e, { useComfyThemeUI: t }) {
} catch (c) {
(r = console.debug) == null || r.call(console, c);
}
- ja();
+ va();
for (const c of [
() => {
var s;
@@ -33174,7 +33201,7 @@ function n2(e, { useComfyThemeUI: t }) {
}
return { popovers: o, hostWrapper: n, hostWrapperPrevStyle: i };
}
-function i2({
+function iM({
container: e,
state: t,
sidebar: n,
@@ -33188,121 +33215,121 @@ function i2({
isSidebarOpen: d,
readActiveAssetId: u,
getSidebarController: I,
- panelLifecycleAC: y
+ panelLifecycleAC: A
}) {
- var b, L, h;
- let S = "";
- const Z = () => {
+ var b, L, C;
+ let h = "";
+ const S = () => {
var G;
try {
- const W = Xn();
- return !!(((G = W == null ? void 0 : W.ai) == null ? void 0 : G.vectorSearchEnabled) ?? !0);
+ const Z = kn();
+ return !!(((G = Z == null ? void 0 : Z.ai) == null ? void 0 : G.vectorSearchEnabled) ?? !0);
} catch {
return !0;
}
- }, C = (G) => {
+ }, W = (G) => {
var f, X, x;
- const W = !!G;
+ const Z = !!G;
try {
- e.classList.toggle("mjr-ai-disabled", !W);
- } catch (T) {
- (f = console.debug) == null || f.call(console, T);
+ e.classList.toggle("mjr-ai-disabled", !Z);
+ } catch (K) {
+ (f = console.debug) == null || f.call(console, K);
}
try {
- r.disabled = !W, r.title = W ? a : c;
- } catch (T) {
- (X = console.debug) == null || X.call(console, T);
+ r.disabled = !Z, r.title = Z ? a : c;
+ } catch (K) {
+ (X = console.debug) == null || X.call(console, K);
}
try {
- l == null || l(W);
- } catch (T) {
- (x = console.debug) == null || x.call(console, T);
+ l == null || l(Z);
+ } catch (K) {
+ (x = console.debug) == null || x.call(console, K);
}
}, g = (G) => {
- var x, T, v, w, R, Y;
- const W = String(G || "right").toLowerCase() === "left" ? "left" : "right";
- if (S === W) return;
- S = W;
+ var x, K, j, w, R, V;
+ const Z = String(G || "right").toLowerCase() === "left" ? "left" : "right";
+ if (h === Z) return;
+ h = Z;
let f = 0, X = 0;
try {
f = Number((o == null ? void 0 : o.scrollTop) || 0) || 0, X = Number((o == null ? void 0 : o.scrollLeft) || 0) || 0;
- } catch (F) {
- (x = console.debug) == null || x.call(console, F);
+ } catch (O) {
+ (x = console.debug) == null || x.call(console, O);
}
try {
- n.dataset.position = W;
- const F = (v = (T = n.classList) == null ? void 0 : T.contains) == null ? void 0 : v.call(T, "is-open"), N = "var(--mjr-border, rgba(255,255,255,0.12))";
- n.style.borderLeft = W === "left" ? "none" : F ? `1px solid ${N}` : "none", n.style.borderRight = W === "left" && F ? `1px solid ${N}` : "none";
- } catch (F) {
- (w = console.debug) == null || w.call(console, F);
+ n.dataset.position = Z;
+ const O = (j = (K = n.classList) == null ? void 0 : K.contains) == null ? void 0 : j.call(K, "is-open"), k = "var(--mjr-border, rgba(255,255,255,0.12))";
+ n.style.borderLeft = Z === "left" ? "none" : O ? `1px solid ${k}` : "none", n.style.borderRight = Z === "left" && O ? `1px solid ${k}` : "none";
+ } catch (O) {
+ (w = console.debug) == null || w.call(console, O);
}
try {
- W === "left" ? (i.appendChild(n), i.appendChild(o), i.insertBefore(n, i.firstChild)) : (i.appendChild(o), i.appendChild(n));
- } catch (F) {
- (R = console.debug) == null || R.call(console, F);
+ Z === "left" ? (i.appendChild(n), i.appendChild(o), i.insertBefore(n, i.firstChild)) : (i.appendChild(o), i.appendChild(n));
+ } catch (O) {
+ (R = console.debug) == null || R.call(console, O);
}
try {
requestAnimationFrame(() => {
- var F;
+ var O;
try {
o.scrollTop = f, o.scrollLeft = X;
- } catch (N) {
- (F = console.debug) == null || F.call(console, N);
+ } catch (k) {
+ (O = console.debug) == null || O.call(console, k);
}
});
} catch {
try {
o.scrollTop = f, o.scrollLeft = X;
- } catch (F) {
- (Y = console.debug) == null || Y.call(console, F);
+ } catch (O) {
+ (V = console.debug) == null || V.call(console, O);
}
}
- }, A = async (G) => {
- var x, T, v, w;
- const W = String(G || t.scope || "output").toLowerCase(), f = Xn(), X = !!((x = f == null ? void 0 : f.watcher) != null && x.enabled);
- if (W === "custom") {
+ }, y = async (G) => {
+ var x, K, j, w;
+ const Z = String(G || t.scope || "output").toLowerCase(), f = kn(), X = !!((x = f == null ? void 0 : f.watcher) != null && x.enabled);
+ if (Z === "custom") {
try {
await Ma(!1);
} catch (R) {
- (T = console.debug) == null || T.call(console, R);
+ (K = console.debug) == null || K.call(console, R);
}
return;
}
try {
await Ma(X);
} catch (R) {
- (v = console.debug) == null || v.call(console, R);
+ (j = console.debug) == null || j.call(console, R);
}
if (X)
try {
- await Xf({ scope: W, customRootId: "" });
+ await Nf({ scope: Z, customRootId: "" });
} catch (R) {
(w = console.debug) == null || w.call(console, R);
}
}, p = (G) => {
- var v, w, R, Y, F, N, V, k, K, z, B;
- const W = String(((v = G == null ? void 0 : G.detail) == null ? void 0 : v.key) || "").trim(), f = W === "__init__", X = f || W.startsWith("grid.") || W.startsWith("infiniteScroll.") || W.startsWith("siblings.") || W.startsWith("search.") || W.startsWith("rtHydrate.") || W.startsWith("workflowMinimap."), x = f || W.startsWith("sidebar.") || W.startsWith("ai."), T = f || W.startsWith("watcher.");
+ var j, w, R, V, O, k, Y, N, U, z, T;
+ const Z = String(((j = G == null ? void 0 : G.detail) == null ? void 0 : j.key) || "").trim(), f = Z === "__init__", X = f || Z.startsWith("grid.") || Z.startsWith("infiniteScroll.") || Z.startsWith("siblings.") || Z.startsWith("search.") || Z.startsWith("rtHydrate.") || Z.startsWith("workflowMinimap."), x = f || Z.startsWith("sidebar.") || Z.startsWith("ai."), K = f || Z.startsWith("watcher.");
try {
- const J = Xn(), P = !!(((w = J == null ? void 0 : J.ai) == null ? void 0 : w.vectorSearchEnabled) ?? !0), H = String(((R = J == null ? void 0 : J.ui) == null ? void 0 : R.cardHoverColor) || "").trim(), $ = String(((Y = J == null ? void 0 : J.ui) == null ? void 0 : Y.cardSelectionColor) || "").trim(), E = String(((F = J == null ? void 0 : J.ui) == null ? void 0 : F.ratingColor) || "").trim(), oe = String(((N = J == null ? void 0 : J.ui) == null ? void 0 : N.tagColor) || "").trim();
- if (/^#[0-9a-fA-F]{3,8}$/.test(H) && document.documentElement.style.setProperty("--mjr-card-hover-color", H), /^#[0-9a-fA-F]{3,8}$/.test($) && document.documentElement.style.setProperty("--mjr-card-selection-color", $), /^#[0-9a-fA-F]{3,8}$/.test(E) && document.documentElement.style.setProperty("--mjr-rating-color", E), /^#[0-9a-fA-F]{3,8}$/.test(oe) && document.documentElement.style.setProperty("--mjr-tag-color", oe), g(((V = J.sidebar) == null ? void 0 : V.position) || "right"), C(P), X) {
- const M = So() || null;
- if (!f && W.startsWith("siblings."))
+ const J = kn(), P = !!(((w = J == null ? void 0 : J.ai) == null ? void 0 : w.vectorSearchEnabled) ?? !0), E = String(((R = J == null ? void 0 : J.ui) == null ? void 0 : R.cardHoverColor) || "").trim(), $ = String(((V = J == null ? void 0 : J.ui) == null ? void 0 : V.cardSelectionColor) || "").trim(), H = String(((O = J == null ? void 0 : J.ui) == null ? void 0 : O.ratingColor) || "").trim(), ne = String(((k = J == null ? void 0 : J.ui) == null ? void 0 : k.tagColor) || "").trim();
+ if (/^#[0-9a-fA-F]{3,8}$/.test(E) && document.documentElement.style.setProperty("--mjr-card-hover-color", E), /^#[0-9a-fA-F]{3,8}$/.test($) && document.documentElement.style.setProperty("--mjr-card-selection-color", $), /^#[0-9a-fA-F]{3,8}$/.test(H) && document.documentElement.style.setProperty("--mjr-rating-color", H), /^#[0-9a-fA-F]{3,8}$/.test(ne) && document.documentElement.style.setProperty("--mjr-tag-color", ne), g(((Y = J.sidebar) == null ? void 0 : Y.position) || "right"), W(P), X) {
+ const M = Go() || null;
+ if (!f && Z.startsWith("siblings."))
try {
M == null || M.dispatchEvent(new CustomEvent("mjr:reload-grid"));
} catch {
M && s(M);
}
- else (W.startsWith("grid.") || W.startsWith("workflowMinimap.")) && M && s(M);
+ else (Z.startsWith("grid.") || Z.startsWith("workflowMinimap.")) && M && s(M);
}
- x && d() && u() && ((K = (k = I()) == null ? void 0 : k.refreshActiveAsset) == null || K.call(k));
+ x && d() && u() && ((U = (N = I()) == null ? void 0 : N.refreshActiveAsset) == null || U.call(N));
} catch (J) {
(z = console.debug) == null || z.call(console, J);
}
try {
- if (!T) return;
- A(t.scope);
+ if (!K) return;
+ y(t.scope);
} catch (J) {
- (B = console.debug) == null || B.call(console, J);
+ (T = console.debug) == null || T.call(console, J);
}
};
try {
@@ -33312,14 +33339,14 @@ function i2({
}
try {
(L = window.addEventListener) == null || L.call(window, "mjr-settings-changed", p, {
- signal: y == null ? void 0 : y.signal
+ signal: A == null ? void 0 : A.signal
});
} catch (G) {
- (h = console.debug) == null || h.call(console, G);
+ (C = console.debug) == null || C.call(console, G);
}
- return { applyWatcherForScope: A, isAiEnabled: Z, applyAiUiState: C, applySidebarPosition: g };
+ return { applyWatcherForScope: y, isAiEnabled: S, applyAiUiState: W, applySidebarPosition: g };
}
-function o2({
+function oM({
gridContainer: e,
panelLifecycleAC: t,
requestQueuedReload: n,
@@ -33331,28 +33358,28 @@ function o2({
gridController: c,
registerSummaryDispose: s
}) {
- var u, I, y, S, Z;
+ var u, I, A, h, S;
let d = null;
try {
d = () => n(), e.addEventListener("mjr:reload-grid", d, {
signal: t == null ? void 0 : t.signal
}), s(() => {
- var C;
+ var W;
try {
d && e.removeEventListener("mjr:reload-grid", d);
} catch (g) {
- (C = console.debug) == null || C.call(console, g);
+ (W = console.debug) == null || W.call(console, g);
}
d = null;
});
- } catch (C) {
- (u = console.debug) == null || u.call(console, C);
+ } catch (W) {
+ (u = console.debug) == null || u.call(console, W);
}
try {
- const C = (g) => {
- var A, p, b, L, h, G;
+ const W = (g) => {
+ var y, p, b, L, C, G;
try {
- const W = (g == null ? void 0 : g.detail) || {}, f = String((W == null ? void 0 : W.filenameKey) || "").trim().toLowerCase();
+ const Z = (g == null ? void 0 : g.detail) || {}, f = String((Z == null ? void 0 : Z.filenameKey) || "").trim().toLowerCase();
if (!f || !e) return;
const X = Array.from(
e.querySelectorAll(".mjr-asset-card")
@@ -33366,102 +33393,102 @@ function o2({
const x = X.map((w) => {
var R;
return String(((R = w == null ? void 0 : w.dataset) == null ? void 0 : R.mjrAssetId) || "").trim();
- }).filter(Boolean), T = String(((p = (A = X[0]) == null ? void 0 : A.dataset) == null ? void 0 : p.mjrAssetId) || x[0] || "").trim();
- x.length && typeof (e == null ? void 0 : e._mjrSetSelection) == "function" && e._mjrSetSelection(x, T), (L = (b = X[0]) == null ? void 0 : b.scrollIntoView) == null || L.call(b, { block: "nearest", behavior: "smooth" }), o(), i();
- const v = Number((W == null ? void 0 : W.count) || x.length || X.length || 0);
+ }).filter(Boolean), K = String(((p = (y = X[0]) == null ? void 0 : y.dataset) == null ? void 0 : p.mjrAssetId) || x[0] || "").trim();
+ x.length && typeof (e == null ? void 0 : e._mjrSetSelection) == "function" && e._mjrSetSelection(x, K), (L = (b = X[0]) == null ? void 0 : b.scrollIntoView) == null || L.call(b, { block: "nearest", behavior: "smooth" }), o(), i();
+ const j = Number((Z == null ? void 0 : Z.count) || x.length || X.length || 0);
try {
- Ze(
+ Ae(
m(
"toast.nameCollisionInView",
"Name collision in view: {n} item(s) selected",
- { n: v }
+ { n: j }
),
"info",
1800
);
} catch (w) {
- (h = console.debug) == null || h.call(console, w);
+ (C = console.debug) == null || C.call(console, w);
}
- } catch (W) {
- (G = console.debug) == null || G.call(console, W);
+ } catch (Z) {
+ (G = console.debug) == null || G.call(console, Z);
}
};
- e.addEventListener("mjr:badge-duplicates-focus", C, {
+ e.addEventListener("mjr:badge-duplicates-focus", W, {
signal: t == null ? void 0 : t.signal
}), s(() => {
var g;
try {
e.removeEventListener(
"mjr:badge-duplicates-focus",
- C
+ W
);
- } catch (A) {
- (g = console.debug) == null || g.call(console, A);
+ } catch (y) {
+ (g = console.debug) == null || g.call(console, y);
}
});
- } catch (C) {
- (I = console.debug) == null || I.call(console, C);
+ } catch (W) {
+ (I = console.debug) == null || I.call(console, W);
}
try {
window.addEventListener(
"mjr:reload-grid",
- (C) => {
- var A, p, b, L;
+ (W) => {
+ var y, p, b, L;
try {
- if ((A = t == null ? void 0 : t.signal) != null && A.aborted) return;
- } catch (h) {
- (p = console.debug) == null || p.call(console, h);
+ if ((y = t == null ? void 0 : t.signal) != null && y.aborted) return;
+ } catch (C) {
+ (p = console.debug) == null || p.call(console, C);
}
try {
if (globalThis != null && globalThis._mjrMaintenanceActive) return;
- } catch (h) {
- (b = console.debug) == null || b.call(console, h);
+ } catch (C) {
+ (b = console.debug) == null || b.call(console, C);
}
- String(((L = C == null ? void 0 : C.detail) == null ? void 0 : L.reason) || "").trim() && n();
+ String(((L = W == null ? void 0 : W.detail) == null ? void 0 : L.reason) || "").trim() && n();
},
{ signal: t == null ? void 0 : t.signal }
);
- } catch (C) {
- (y = console.debug) == null || y.call(console, C);
+ } catch (W) {
+ (A = console.debug) == null || A.call(console, W);
}
try {
window.addEventListener(
"mjr:sort-changed",
() => {
- var C, g, A;
+ var W, g, y;
try {
- if ((C = t == null ? void 0 : t.signal) != null && C.aborted) return;
+ if ((W = t == null ? void 0 : t.signal) != null && W.aborted) return;
} catch (p) {
(g = console.debug) == null || g.call(console, p);
}
try {
i();
} catch (p) {
- (A = console.debug) == null || A.call(console, p);
+ (y = console.debug) == null || y.call(console, p);
}
c.reloadGrid().catch(() => {
});
},
{ signal: t == null ? void 0 : t.signal }
);
- } catch (C) {
- (S = console.debug) == null || S.call(console, C);
+ } catch (W) {
+ (h = console.debug) == null || h.call(console, W);
}
try {
window.addEventListener(
"mjr:collections-changed",
- (C) => {
- var b, L, h, G, W;
+ (W) => {
+ var b, L, C, G, Z;
try {
if ((b = t == null ? void 0 : t.signal) != null && b.aborted) return;
} catch (f) {
(L = console.debug) == null || L.call(console, f);
}
- const g = C != null && C.detail && typeof C.detail == "object" ? C.detail : {}, A = String(g.collectionId || "").trim(), p = String(g.collectionName || "").trim();
+ const g = W != null && W.detail && typeof W.detail == "object" ? W.detail : {}, y = String(g.collectionId || "").trim(), p = String(g.collectionName || "").trim();
try {
- r("collectionId", A), r("collectionName", p);
+ r("collectionId", y), r("collectionName", p);
} catch (f) {
- (h = console.debug) == null || h.call(console, f);
+ (C = console.debug) == null || C.call(console, f);
}
try {
i();
@@ -33471,18 +33498,18 @@ function o2({
try {
g.close !== !1 && l.close(a);
} catch (f) {
- (W = console.debug) == null || W.call(console, f);
+ (Z = console.debug) == null || Z.call(console, f);
}
g.reload !== !1 && c.reloadGrid().catch(() => {
});
},
{ signal: t == null ? void 0 : t.signal }
);
- } catch (C) {
- (Z = console.debug) == null || Z.call(console, C);
+ } catch (W) {
+ (S = console.debug) == null || S.call(console, W);
}
}
-function r2({
+function rM({
similarBtn: e,
gridContainer: t,
state: n,
@@ -33499,21 +33526,21 @@ function r2({
e == null || e.addEventListener(
"click",
async (I) => {
- var C, g, A;
+ var W, g, y;
if (I.stopPropagation(), !o()) {
- Ze(r, "info", 2200);
+ Ae(r, "info", 2200);
return;
}
try {
u();
} catch (p) {
- (C = console.debug) == null || C.call(console, p);
+ (W = console.debug) == null || W.call(console, p);
}
- const y = String(
+ const A = String(
l() || a()[0] || ""
- ).trim(), S = Number(y);
- if (!Number.isFinite(S) || S <= 0) {
- Ze(
+ ).trim(), h = Number(A);
+ if (!Number.isFinite(h) || h <= 0) {
+ Ae(
m(
"search.selectAssetForSimilar",
"Select an asset first to find similar images/videos."
@@ -33523,16 +33550,16 @@ function r2({
);
return;
}
- const Z = e.title;
+ const S = e.title;
e.disabled = !0, e.title = m("search.findingSimilar", "Finding similar assets...");
try {
- const p = await qf(S, {
+ const p = await qf(h, {
topK: 100,
scope: n.scope || "output",
customRootId: n.customRootId || ""
});
if (!(p != null && p.ok)) {
- Ze(
+ Ae(
String(
(p == null ? void 0 : p.error) || m("search.findSimilarFailed", "Failed to find similar assets")
),
@@ -33542,42 +33569,42 @@ function r2({
return;
}
const b = Array.isArray(p == null ? void 0 : p.data) ? p.data : [];
- s("similarResults", b), s("similarSourceAssetId", String(S)), s(
+ s("similarResults", b), s("similarSourceAssetId", String(h)), s(
"similarTitle",
m("search.similarResults", "Similar to asset #{id} ({n} results)", {
- id: S,
+ id: h,
n: b.length
})
), await ((g = d == null ? void 0 : d.setScope) == null ? void 0 : g.call(d, "similar"));
} catch (p) {
- (A = console.debug) == null || A.call(console, p), Ze(
+ (y = console.debug) == null || y.call(console, p), Ae(
m("search.findSimilarFailed", "Failed to find similar assets"),
"error",
3e3
);
} finally {
- e.disabled = !1, e.title = Z;
+ e.disabled = !1, e.title = S;
}
},
{ signal: i == null ? void 0 : i.signal }
), t == null || t.addEventListener(
- ht.OPEN_STACK_GROUP,
+ ft.OPEN_STACK_GROUP,
async (I) => {
- var y, S, Z;
+ var A, h, S;
try {
- const C = (I == null ? void 0 : I.detail) || {}, g = Array.isArray(C == null ? void 0 : C.members) ? C.members : [];
- s("similarResults", g), s("similarSourceAssetId", String(((y = C == null ? void 0 : C.asset) == null ? void 0 : y.id) || "")), s(
+ const W = (I == null ? void 0 : I.detail) || {}, g = Array.isArray(W == null ? void 0 : W.members) ? W.members : [];
+ s("similarResults", g), s("similarSourceAssetId", String(((A = W == null ? void 0 : W.asset) == null ? void 0 : A.id) || "")), s(
"similarTitle",
- String((C == null ? void 0 : C.title) || "").trim() || `Generation group (${g.length} assets)`
- ), await ((S = d == null ? void 0 : d.setScope) == null ? void 0 : S.call(d, "similar"));
- } catch (C) {
- (Z = console.debug) == null || Z.call(console, C);
+ String((W == null ? void 0 : W.title) || "").trim() || `Generation group (${g.length} assets)`
+ ), await ((h = d == null ? void 0 : d.setScope) == null ? void 0 : h.call(d, "similar"));
+ } catch (W) {
+ (S = console.debug) == null || S.call(console, W);
}
},
{ signal: i == null ? void 0 : i.signal }
);
}
-function l2({
+function lM({
pinnedFoldersBtn: e,
pinnedFoldersMenu: t,
pinnedFoldersPopover: n,
@@ -33591,10 +33618,10 @@ function l2({
gridController: d,
applyWatcherForScope: u,
refreshDuplicateAlerts: I,
- notifyContextChanged: y,
- panelLifecycleAC: S
+ notifyContextChanged: A,
+ panelLifecycleAC: h
}) {
- const Z = (g, { right: A = null, danger: p = !1 } = {}) => {
+ const S = (g, { right: y = null, danger: p = !1 } = {}) => {
const b = document.createElement("button");
b.type = "button", b.className = "mjr-menu-item", p && (b.style.color = "var(--error-text, #f44336)"), b.style.cssText = `
display:flex;
@@ -33610,36 +33637,36 @@ function l2({
`;
const L = document.createElement("span");
L.textContent = String(g || ""), L.style.cssText = "font-weight:600; color:var(--fg-color, #e6edf7);";
- const h = document.createElement("span");
- if (h.style.cssText = "display:flex; align-items:center; gap:8px;", A) {
+ const C = document.createElement("span");
+ if (C.style.cssText = "display:flex; align-items:center; gap:8px;", y) {
const G = document.createElement("span");
- G.textContent = String(A), G.style.cssText = "opacity:0.68; font-size:11px;", h.appendChild(G);
+ G.textContent = String(y), G.style.cssText = "opacity:0.68; font-size:11px;", C.appendChild(G);
}
- return b.appendChild(L), b.appendChild(h), b.addEventListener(
+ return b.appendChild(L), b.appendChild(C), b.addEventListener(
"mouseenter",
() => {
b.style.borderColor = "rgba(145,205,255,0.4)", b.style.background = "linear-gradient(135deg, rgba(80,140,255,0.18), rgba(32,100,200,0.14))";
},
- { signal: S == null ? void 0 : S.signal }
+ { signal: h == null ? void 0 : h.signal }
), b.addEventListener(
"mouseleave",
() => {
b.style.borderColor = "rgba(120,190,255,0.18)", b.style.background = "linear-gradient(135deg, rgba(255,255,255,0.03), rgba(255,255,255,0.01))";
},
- { signal: S == null ? void 0 : S.signal }
+ { signal: h == null ? void 0 : h.signal }
), b;
- }, C = async () => {
- var A, p;
+ }, W = async () => {
+ var y, p;
try {
t.replaceChildren();
} catch (b) {
- (A = console.debug) == null || A.call(console, b);
+ (y = console.debug) == null || y.call(console, b);
}
let g = [];
try {
const b = await Ft(
- ct.CUSTOM_ROOTS,
- S != null && S.signal ? { signal: S.signal } : void 0
+ st.CUSTOM_ROOTS,
+ h != null && h.signal ? { signal: h.signal } : void 0
);
g = b != null && b.ok && Array.isArray(b.data) ? b.data : [];
} catch (b) {
@@ -33653,62 +33680,62 @@ function l2({
for (const b of g) {
const L = String((b == null ? void 0 : b.id) || "").trim();
if (!L) continue;
- const h = String((b == null ? void 0 : b.name) || (b == null ? void 0 : b.path) || L).trim(), G = String((b == null ? void 0 : b.path) || "").trim(), W = document.createElement("div");
- W.style.cssText = "display:flex; align-items:stretch; width:100%;";
- const f = Z(h, { right: G || null });
+ const C = String((b == null ? void 0 : b.name) || (b == null ? void 0 : b.path) || L).trim(), G = String((b == null ? void 0 : b.path) || "").trim(), Z = document.createElement("div");
+ Z.style.cssText = "display:flex; align-items:stretch; width:100%;";
+ const f = S(C, { right: G || null });
f.style.flex = "1", f.addEventListener(
"click",
async () => {
- var T, v, w, R, Y, F, N;
+ var K, j, w, R, V, O, k;
r.scope = "custom";
try {
l && (l.dataset.mjrScope = "custom");
- } catch (V) {
- (T = console.debug) == null || T.call(console, V);
+ } catch (Y) {
+ (K = console.debug) == null || K.call(console, Y);
}
- r.customRootId = L, r.customRootLabel = h, r.currentFolderRelativePath = "";
+ r.customRootId = L, r.customRootLabel = C, r.currentFolderRelativePath = "";
try {
a && (a.value = L);
- } catch (V) {
- (v = console.debug) == null || v.call(console, V);
+ } catch (Y) {
+ (j = console.debug) == null || j.call(console, Y);
}
try {
(w = c == null ? void 0 : c.setActiveTabStyles) == null || w.call(c);
- } catch (V) {
- (R = console.debug) == null || R.call(console, V);
+ } catch (Y) {
+ (R = console.debug) == null || R.call(console, Y);
}
try {
await u(r.scope);
- } catch (V) {
- (Y = console.debug) == null || Y.call(console, V);
+ } catch (Y) {
+ (V = console.debug) == null || V.call(console, Y);
}
try {
await I();
- } catch (V) {
- (F = console.debug) == null || F.call(console, V);
+ } catch (Y) {
+ (O = console.debug) == null || O.call(console, Y);
}
try {
- y();
- } catch (V) {
- (N = console.debug) == null || N.call(console, V);
+ A();
+ } catch (Y) {
+ (k = console.debug) == null || k.call(console, Y);
}
i.close(n), await d.reloadGrid();
},
- { signal: S == null ? void 0 : S.signal }
+ { signal: h == null ? void 0 : h.signal }
);
const X = document.createElement("button");
X.type = "button", X.className = "mjr-menu-item", X.title = m("ctx.unpinFolder", "Unpin folder"), X.style.cssText = "width:42px; justify-content:center; padding:0; border:1px solid rgba(255,95,95,0.35); border-radius:9px; margin-left:6px; background: linear-gradient(135deg, rgba(255,70,70,0.16), rgba(160,20,20,0.12));";
const x = document.createElement("i");
x.className = "pi pi-times", x.style.cssText = "opacity:0.88; color: rgba(255,130,130,0.96);", X.appendChild(x), X.addEventListener(
"click",
- async (T) => {
+ async (K) => {
var R;
- if (T.preventDefault(), T.stopPropagation(), !await yi(
- m("dialog.unpinFolder", 'Unpin folder "{name}"?', { name: h })
+ if (K.preventDefault(), K.stopPropagation(), !await yi(
+ m("dialog.unpinFolder", 'Unpin folder "{name}"?', { name: C })
)) return;
- const w = await Et(ct.CUSTOM_ROOTS_REMOVE, { id: L });
+ const w = await Dt(st.CUSTOM_ROOTS_REMOVE, { id: L });
if (!(w != null && w.ok)) {
- Ze(
+ Ae(
(w == null ? void 0 : w.error) || m("toast.unpinFolderFailed", "Failed to unpin folder"),
"error"
);
@@ -33717,32 +33744,32 @@ function l2({
String(r.customRootId || "") === L && (r.customRootId = "", r.customRootLabel = "", r.currentFolderRelativePath = "");
try {
await s.refreshCustomRoots();
- } catch (Y) {
- (R = console.debug) == null || R.call(console, Y);
+ } catch (V) {
+ (R = console.debug) == null || R.call(console, V);
}
- await C(), await d.reloadGrid();
+ await W(), await d.reloadGrid();
},
- { signal: S == null ? void 0 : S.signal }
- ), W.appendChild(f), W.appendChild(X), t.appendChild(W);
+ { signal: h == null ? void 0 : h.signal }
+ ), Z.appendChild(f), Z.appendChild(X), t.appendChild(Z);
}
};
e == null || e.addEventListener(
"click",
async (g) => {
- var A;
+ var y;
g.stopPropagation();
try {
- await C();
+ await W();
} catch (p) {
- (A = console.debug) == null || A.call(console, p);
+ (y = console.debug) == null || y.call(console, p);
}
o(), i.toggle(n, e);
},
- { signal: S == null ? void 0 : S.signal }
+ { signal: h == null ? void 0 : h.signal }
);
}
-const As = (e) => String(e).padStart(2, "0");
-function xc(e) {
+const Ws = (e) => String(e).padStart(2, "0");
+function jc(e) {
try {
const t = String(e || "").trim();
if (!/^\d{4}-\d{2}-\d{2}$/.test(t)) return null;
@@ -33757,15 +33784,15 @@ function xc(e) {
function jm(e) {
try {
const t = e.getFullYear(), n = e.getMonth() + 1, i = e.getDate();
- return `${t}-${As(n)}-${As(i)}`;
+ return `${t}-${Ws(n)}-${Ws(i)}`;
} catch {
return "";
}
}
-function a2(e) {
+function aM(e) {
try {
const t = e.getFullYear(), n = e.getMonth() + 1;
- return `${t}-${As(n)}`;
+ return `${t}-${Ws(n)}`;
} catch {
return "";
}
@@ -33784,21 +33811,21 @@ function Lm(e, t) {
return /* @__PURE__ */ new Date();
}
}
-function c2(e) {
+function cM(e) {
try {
return new Date(e.getFullYear(), e.getMonth() + 1, 0).getDate();
} catch {
return 31;
}
}
-function s2(e) {
+function sM(e) {
try {
return (e.getDay() + 6) % 7;
} catch {
return 0;
}
}
-function Vm(e, t) {
+function Ym(e, t) {
var n, i;
if (e)
try {
@@ -33808,7 +33835,7 @@ function Vm(e, t) {
(i = console.debug) == null || i.call(console, o);
}
}
-async function d2({ state: e, monthKey: t }) {
+async function dM({ state: e, monthKey: t }) {
var n;
try {
const i = String((e == null ? void 0 : e.scope) || "output");
@@ -33840,7 +33867,7 @@ async function d2({ state: e, monthKey: t }) {
return { ok: !1, error: (i == null ? void 0 : i.message) || "Histogram error" };
}
}
-function u2({
+function uM({
container: e,
hiddenInput: t,
state: n,
@@ -33867,71 +33894,71 @@ function u2({
u.type = "button", u.className = "mjr-btn mjr-agenda-clear", u.textContent = "Clear";
const I = document.createElement("button");
I.type = "button", I.className = "mjr-btn mjr-agenda-refresh", I.textContent = "Refresh", d.appendChild(u), d.appendChild(I), o.appendChild(r), o.appendChild(s), o.appendChild(d), e.appendChild(o);
- let y = vm(xc(t.value) || /* @__PURE__ */ new Date()), S = {}, Z = 0, C = !1;
+ let A = vm(jc(t.value) || /* @__PURE__ */ new Date()), h = {}, S = 0, W = !1;
const g = () => {
- if (C) return;
- const p = y.getFullYear(), b = y.getMonth();
- a.textContent = y.toLocaleString(void 0, {
+ if (W) return;
+ const p = A.getFullYear(), b = A.getMonth();
+ a.textContent = A.toLocaleString(void 0, {
month: "long",
year: "numeric"
}), s.innerHTML = "";
const L = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
for (const x of L) {
- const T = document.createElement("div");
- T.className = "mjr-agenda-weekday", T.textContent = x, s.appendChild(T);
+ const K = document.createElement("div");
+ K.className = "mjr-agenda-weekday", K.textContent = x, s.appendChild(K);
}
- const h = new Date(p, b, 1), G = s2(h), W = c2(y), f = xc(t.value), X = f ? jm(f) : "";
+ const C = new Date(p, b, 1), G = sM(C), Z = cM(A), f = jc(t.value), X = f ? jm(f) : "";
for (let x = 0; x < G; x++) {
- const T = document.createElement("div");
- T.className = "mjr-agenda-day mjr-agenda-day--blank", s.appendChild(T);
+ const K = document.createElement("div");
+ K.className = "mjr-agenda-day mjr-agenda-day--blank", s.appendChild(K);
}
- for (let x = 1; x <= W; x++) {
- const T = new Date(p, b, x), v = jm(T), w = Number((S == null ? void 0 : S[v]) || 0) || 0, R = document.createElement("button");
- if (R.type = "button", R.className = "mjr-agenda-day", R.textContent = String(x), R.dataset.date = v, w > 0) {
+ for (let x = 1; x <= Z; x++) {
+ const K = new Date(p, b, x), j = jm(K), w = Number((h == null ? void 0 : h[j]) || 0) || 0, R = document.createElement("button");
+ if (R.type = "button", R.className = "mjr-agenda-day", R.textContent = String(x), R.dataset.date = j, w > 0) {
R.classList.add("mjr-agenda-day--has-assets"), R.title = `${w} asset${w === 1 ? "" : "s"}`;
- const Y = document.createElement("span");
- Y.className = "mjr-agenda-day-badge", Y.textContent = w > 99 ? "99+" : String(w), Y.setAttribute("aria-label", `${w} asset${w === 1 ? "" : "s"}`), R.appendChild(Y);
+ const V = document.createElement("span");
+ V.className = "mjr-agenda-day-badge", V.textContent = w > 99 ? "99+" : String(w), V.setAttribute("aria-label", `${w} asset${w === 1 ? "" : "s"}`), R.appendChild(V);
} else
R.title = m("tooltip.noAssetsDay", "No assets on this day");
- v === X && R.classList.add("mjr-agenda-day--selected"), R.addEventListener("click", () => {
- const Y = String(t.value || "").trim();
- Vm(t, Y === v ? "" : v);
+ j === X && R.classList.add("mjr-agenda-day--selected"), R.addEventListener("click", () => {
+ const V = String(t.value || "").trim();
+ Ym(t, V === j ? "" : j);
}), s.appendChild(R);
}
- }, A = async () => {
- if (C) return;
- const p = a2(y);
+ }, y = async () => {
+ if (W) return;
+ const p = aM(A);
if (!p) return;
- Z += 1;
- const b = Z, L = await d2({ state: n, monthKey: p });
- C || b === Z && (L.ok ? S = L.days || {} : S = {}, g());
+ S += 1;
+ const b = S, L = await dM({ state: n, monthKey: p });
+ W || b === S && (L.ok ? h = L.days || {} : h = {}, g());
};
return l.addEventListener("click", async () => {
- y = Lm(y, -1), await A();
+ A = Lm(A, -1), await y();
}), c.addEventListener("click", async () => {
- y = Lm(y, 1), await A();
+ A = Lm(A, 1), await y();
}), u.addEventListener("click", () => {
var p;
- Vm(t, "");
+ Ym(t, "");
try {
i == null || i();
} catch (b) {
(p = console.debug) == null || p.call(console, b);
}
}), I.addEventListener("click", async () => {
- await A();
+ await y();
}), t.addEventListener("change", () => {
- const p = xc(t.value);
+ const p = jc(t.value);
if (p) {
const b = vm(p);
- (b.getFullYear() !== y.getFullYear() || b.getMonth() !== y.getMonth()) && (y = b);
+ (b.getFullYear() !== A.getFullYear() || b.getMonth() !== A.getMonth()) && (A = b);
}
g();
- }), g(), A(), {
- refresh: A,
+ }), g(), y(), {
+ refresh: y,
dispose() {
var p;
- C = !0;
+ W = !0;
try {
o.remove();
} catch (b) {
@@ -33946,7 +33973,7 @@ const or = (e) => {
const n = t.replace(",", "."), i = Number(n);
return Number.isFinite(i) ? i : 0;
};
-function m2({
+function mM({
state: e,
kindSelect: t,
wfCheckbox: n,
@@ -33960,14 +33987,14 @@ function m2({
maxWidthInput: d,
maxHeightInput: u,
dateRangeSelect: I,
- dateExactInput: y,
- reloadGrid: S,
- reconcileSelection: Z = null,
- onFiltersChanged: C = null,
+ dateExactInput: A,
+ reloadGrid: h,
+ reconcileSelection: S = null,
+ onFiltersChanged: W = null,
lifecycleSignal: g = null
}) {
var f, X;
- const { write: A } = oo(e, [
+ const { write: y } = oo(e, [
"kindFilter",
"workflowOnly",
"minRating",
@@ -33987,24 +34014,24 @@ function m2({
var x;
p = null;
try {
- Z == null || Z();
- } catch (T) {
- (x = console.debug) == null || x.call(console, T);
+ S == null || S();
+ } catch (K) {
+ (x = console.debug) == null || x.call(console, K);
}
- S().catch(() => {
+ h().catch(() => {
});
}, 250);
}, L = [];
L.push(() => {
p && (clearTimeout(p), p = null);
});
- const h = (x, T, v, w) => {
- if (!(!(x != null && x.addEventListener) || typeof v != "function")) {
+ const C = (x, K, j, w) => {
+ if (!(!(x != null && x.addEventListener) || typeof j != "function")) {
try {
- x.addEventListener(T, v, w);
+ x.addEventListener(K, j, w);
} catch {
try {
- x.addEventListener(T, v);
+ x.addEventListener(K, j);
} catch {
return;
}
@@ -34012,72 +34039,72 @@ function m2({
L.push(() => {
var R;
try {
- x.removeEventListener(T, v, w);
+ x.removeEventListener(K, j, w);
} catch {
try {
- x.removeEventListener(T, v);
- } catch (Y) {
- (R = console.debug) == null || R.call(console, Y);
+ x.removeEventListener(K, j);
+ } catch (V) {
+ (R = console.debug) == null || R.call(console, V);
}
}
});
}
};
- h(
+ C(
t,
"change",
() => {
var x;
- A("kindFilter", t.value || "");
+ y("kindFilter", t.value || "");
try {
- C == null || C();
- } catch (T) {
- (x = console.debug) == null || x.call(console, T);
+ W == null || W();
+ } catch (K) {
+ (x = console.debug) == null || x.call(console, K);
}
b();
},
g ? { signal: g } : void 0
- ), h(
+ ), C(
n,
"change",
() => {
var x;
- A("workflowOnly", !!n.checked);
+ y("workflowOnly", !!n.checked);
try {
- C == null || C();
- } catch (T) {
- (x = console.debug) == null || x.call(console, T);
+ W == null || W();
+ } catch (K) {
+ (x = console.debug) == null || x.call(console, K);
}
b();
},
g ? { signal: g } : void 0
- ), h(
+ ), C(
o,
"change",
() => {
var x;
- A("minRating", Number(o.value || 0) || 0);
+ y("minRating", Number(o.value || 0) || 0);
try {
- C == null || C();
- } catch (T) {
- (x = console.debug) == null || x.call(console, T);
+ W == null || W();
+ } catch (K) {
+ (x = console.debug) == null || x.call(console, K);
}
b();
},
g ? { signal: g } : void 0
- ), i && h(
+ ), i && C(
i,
"change",
() => {
var x;
- A(
+ y(
"workflowType",
String(i.value || "").trim().toUpperCase()
);
try {
- C == null || C();
- } catch (T) {
- (x = console.debug) == null || x.call(console, T);
+ W == null || W();
+ } catch (K) {
+ (x = console.debug) == null || x.call(console, K);
}
b();
},
@@ -34085,162 +34112,162 @@ function m2({
);
const G = () => {
var R;
- const x = or((r == null ? void 0 : r.value) || 0), T = or((l == null ? void 0 : l.value) || 0), v = Number.isFinite(x) && x > 0 ? x : 0;
- let w = Number.isFinite(T) && T > 0 ? T : 0;
- w > 0 && v > 0 && w < v && (w = v, l && (l.value = String(w))), A("minSizeMB", v), A("maxSizeMB", w);
+ const x = or((r == null ? void 0 : r.value) || 0), K = or((l == null ? void 0 : l.value) || 0), j = Number.isFinite(x) && x > 0 ? x : 0;
+ let w = Number.isFinite(K) && K > 0 ? K : 0;
+ w > 0 && j > 0 && w < j && (w = j, l && (l.value = String(w))), y("minSizeMB", j), y("maxSizeMB", w);
try {
- C == null || C();
- } catch (Y) {
- (R = console.debug) == null || R.call(console, Y);
+ W == null || W();
+ } catch (V) {
+ (R = console.debug) == null || R.call(console, V);
}
b();
};
- h(
+ C(
r,
"change",
G,
g ? { signal: g } : void 0
- ), h(
+ ), C(
l,
"change",
G,
g ? { signal: g } : void 0
);
- const W = () => {
- var V, k;
- const x = or((c == null ? void 0 : c.value) || 0), T = or((s == null ? void 0 : s.value) || 0), v = or((d == null ? void 0 : d.value) || 0), w = or((u == null ? void 0 : u.value) || 0), R = Number.isFinite(x) && x > 0 ? Math.round(x) : 0, Y = Number.isFinite(T) && T > 0 ? Math.round(T) : 0;
- let F = Number.isFinite(v) && v > 0 ? Math.round(v) : 0, N = Number.isFinite(w) && w > 0 ? Math.round(w) : 0;
- F > 0 && R > 0 && F < R && (F = R, d && (d.value = String(F))), N > 0 && Y > 0 && N < Y && (N = Y, u && (u.value = String(N))), A("minWidth", R), A("minHeight", Y), A("maxWidth", F), A("maxHeight", N);
+ const Z = () => {
+ var Y, N;
+ const x = or((c == null ? void 0 : c.value) || 0), K = or((s == null ? void 0 : s.value) || 0), j = or((d == null ? void 0 : d.value) || 0), w = or((u == null ? void 0 : u.value) || 0), R = Number.isFinite(x) && x > 0 ? Math.round(x) : 0, V = Number.isFinite(K) && K > 0 ? Math.round(K) : 0;
+ let O = Number.isFinite(j) && j > 0 ? Math.round(j) : 0, k = Number.isFinite(w) && w > 0 ? Math.round(w) : 0;
+ O > 0 && R > 0 && O < R && (O = R, d && (d.value = String(O))), k > 0 && V > 0 && k < V && (k = V, u && (u.value = String(k))), y("minWidth", R), y("minHeight", V), y("maxWidth", O), y("maxHeight", k);
try {
if (a) {
- const K = {
+ const U = {
"1280x720": "hd",
"1920x1080": "fhd",
"2560x1440": "qhd",
"3840x2160": "uhd"
};
- a.value = K[`${R}x${Y}`] || "";
+ a.value = U[`${R}x${V}`] || "";
}
- } catch (K) {
- (V = console.debug) == null || V.call(console, K);
+ } catch (U) {
+ (Y = console.debug) == null || Y.call(console, U);
}
try {
- C == null || C();
- } catch (K) {
- (k = console.debug) == null || k.call(console, K);
+ W == null || W();
+ } catch (U) {
+ (N = console.debug) == null || N.call(console, U);
}
b();
};
- if (h(
+ if (C(
c,
"change",
- W,
+ Z,
g ? { signal: g } : void 0
- ), h(
+ ), C(
s,
"change",
- W,
+ Z,
g ? { signal: g } : void 0
- ), h(
+ ), C(
d,
"change",
- W,
+ Z,
g ? { signal: g } : void 0
- ), h(
+ ), C(
u,
"change",
- W,
+ Z,
g ? { signal: g } : void 0
- ), a && h(
+ ), a && C(
a,
"change",
() => {
- var Y;
- const x = String(a.value || ""), v = {
+ var V;
+ const x = String(a.value || ""), j = {
hd: [1280, 720],
fhd: [1920, 1080],
qhd: [2560, 1440],
uhd: [3840, 2160]
- }[x] || [0, 0], w = Number(v[0] || 0), R = Number(v[1] || 0);
- A("minWidth", w), A("minHeight", R), A("maxWidth", 0), A("maxHeight", 0), c && (c.value = w > 0 ? String(w) : ""), s && (s.value = R > 0 ? String(R) : ""), d && (d.value = ""), u && (u.value = "");
+ }[x] || [0, 0], w = Number(j[0] || 0), R = Number(j[1] || 0);
+ y("minWidth", w), y("minHeight", R), y("maxWidth", 0), y("maxHeight", 0), c && (c.value = w > 0 ? String(w) : ""), s && (s.value = R > 0 ? String(R) : ""), d && (d.value = ""), u && (u.value = "");
try {
- C == null || C();
- } catch (F) {
- (Y = console.debug) == null || Y.call(console, F);
+ W == null || W();
+ } catch (O) {
+ (V = console.debug) == null || V.call(console, O);
}
b();
},
g ? { signal: g } : void 0
- ), I && h(
+ ), I && C(
I,
"change",
() => {
var x;
- A("dateRangeFilter", I.value || ""), e.dateRangeFilter && e.dateExactFilter && (A("dateExactFilter", ""), y && (y.value = ""));
+ y("dateRangeFilter", I.value || ""), e.dateRangeFilter && e.dateExactFilter && (y("dateExactFilter", ""), A && (A.value = ""));
try {
- C == null || C();
- } catch (T) {
- (x = console.debug) == null || x.call(console, T);
+ W == null || W();
+ } catch (K) {
+ (x = console.debug) == null || x.call(console, K);
}
b();
},
g ? { signal: g } : void 0
- ), y) {
- const x = (v) => {
- y.classList.toggle("mjr-agenda-filled", v === "filled"), y.classList.toggle("mjr-agenda-empty", v === "empty");
+ ), A) {
+ const x = (j) => {
+ A.classList.toggle("mjr-agenda-filled", j === "filled"), A.classList.toggle("mjr-agenda-empty", j === "empty");
};
- h(
- y,
+ C(
+ A,
"change",
() => {
- var v;
- A(
+ var j;
+ y(
"dateExactFilter",
- y.value ? String(y.value) : ""
- ), e.dateExactFilter && e.dateRangeFilter && (A("dateRangeFilter", ""), I && (I.value = "")), e.dateExactFilter || x("");
+ A.value ? String(A.value) : ""
+ ), e.dateExactFilter && e.dateRangeFilter && (y("dateRangeFilter", ""), I && (I.value = "")), e.dateExactFilter || x("");
try {
- C == null || C();
+ W == null || W();
} catch (w) {
- (v = console.debug) == null || v.call(console, w);
+ (j = console.debug) == null || j.call(console, w);
}
b();
},
g ? { signal: g } : void 0
);
- const T = (v) => {
- if (!(v != null && v.detail)) return;
- const { date: w, hasResults: R } = v.detail;
- if (!y.value) {
+ const K = (j) => {
+ if (!(j != null && j.detail)) return;
+ const { date: w, hasResults: R } = j.detail;
+ if (!A.value) {
x("");
return;
}
- w === y.value && x(R ? "filled" : "empty");
+ w === A.value && x(R ? "filled" : "empty");
};
try {
- const v = g ? { passive: !0, signal: g } : { passive: !0 }, w = typeof window < "u" ? window : null;
- (f = w == null ? void 0 : w.addEventListener) == null || f.call(w, "MJR:AgendaStatus", T, v), L.push(() => {
- var R, Y;
+ const j = g ? { passive: !0, signal: g } : { passive: !0 }, w = typeof window < "u" ? window : null;
+ (f = w == null ? void 0 : w.addEventListener) == null || f.call(w, "MJR:AgendaStatus", K, j), L.push(() => {
+ var R, V;
try {
- (R = w == null ? void 0 : w.removeEventListener) == null || R.call(w, "MJR:AgendaStatus", T, v);
- } catch (F) {
- (Y = console.debug) == null || Y.call(console, F);
+ (R = w == null ? void 0 : w.removeEventListener) == null || R.call(w, "MJR:AgendaStatus", K, j);
+ } catch (O) {
+ (V = console.debug) == null || V.call(console, O);
}
});
- } catch (v) {
- (X = console.debug) == null || X.call(console, v);
+ } catch (j) {
+ (X = console.debug) == null || X.call(console, j);
}
}
return () => {
var x;
- for (const T of L.splice(0))
+ for (const K of L.splice(0))
try {
- T();
- } catch (v) {
- (x = console.debug) == null || x.call(console, v);
+ K();
+ } catch (j) {
+ (x = console.debug) == null || x.call(console, j);
}
};
}
-function g2({
+function gM({
state: e,
hasVueHeaderSection: t,
kindSelect: n,
@@ -34254,60 +34281,60 @@ function g2({
minHeightInput: d,
maxWidthInput: u,
maxHeightInput: I,
- dateRangeSelect: y,
- dateExactInput: S,
- agendaContainer: Z,
- gridController: C,
+ dateRangeSelect: A,
+ dateExactInput: h,
+ agendaContainer: S,
+ gridController: W,
reconcileVisibleSelection: g,
- exitSimilarViewIfActive: A,
+ exitSimilarViewIfActive: y,
notifyContextChanged: p,
panelLifecycleAC: b
}) {
- var G, W, f;
+ var G, Z, f;
let L = null;
try {
try {
n.value = e.kindFilter || "", i.checked = !!e.workflowOnly, o.value = String(e.workflowType || "").trim().toUpperCase(), r.value = String(Number(e.minRating || 0) || 0), l.value = Number(e.minSizeMB || 0) > 0 ? String(e.minSizeMB) : "", a.value = Number(e.maxSizeMB || 0) > 0 ? String(e.maxSizeMB) : "", s.value = Number(e.minWidth || 0) > 0 ? String(e.minWidth) : "", d.value = Number(e.minHeight || 0) > 0 ? String(e.minHeight) : "", u.value = Number(e.maxWidth || 0) > 0 ? String(e.maxWidth) : "", I.value = Number(e.maxHeight || 0) > 0 ? String(e.maxHeight) : "";
const X = Number(e.minWidth || 0) || 0, x = Number(e.minHeight || 0) || 0;
- X >= 3840 && x >= 2160 ? c.value = "uhd" : X >= 2560 && x >= 1440 ? c.value = "qhd" : X >= 1920 && x >= 1080 ? c.value = "fhd" : X >= 1280 && x >= 720 ? c.value = "hd" : c.value = "", y.value = e.dateRangeFilter || "", S.value = e.dateExactFilter || "";
+ X >= 3840 && x >= 2160 ? c.value = "uhd" : X >= 2560 && x >= 1440 ? c.value = "qhd" : X >= 1920 && x >= 1080 ? c.value = "fhd" : X >= 1280 && x >= 720 ? c.value = "hd" : c.value = "", A.value = e.dateRangeFilter || "", h.value = e.dateExactFilter || "";
} catch (X) {
(G = console.debug) == null || G.call(console, X);
}
- L = u2({
- container: Z,
- hiddenInput: S,
+ L = uM({
+ container: S,
+ hiddenInput: h,
state: e,
- onRequestReloadGrid: () => C.reloadGrid()
+ onRequestReloadGrid: () => W.reloadGrid()
});
} catch (X) {
- (W = console.debug) == null || W.call(console, X);
+ (Z = console.debug) == null || Z.call(console, X);
}
- let h = () => {
+ let C = () => {
};
if (t) {
let X = null;
const x = () => {
- var T, v, w, R;
+ var K, j, w, R;
try {
- if ((T = b == null ? void 0 : b.signal) != null && T.aborted) return;
- } catch (Y) {
- (v = console.debug) == null || v.call(console, Y);
+ if ((K = b == null ? void 0 : b.signal) != null && K.aborted) return;
+ } catch (V) {
+ (j = console.debug) == null || j.call(console, V);
}
- A({ reload: !1 });
+ y({ reload: !1 });
try {
(w = L == null ? void 0 : L.refresh) == null || w.call(L);
- } catch (Y) {
- (R = console.debug) == null || R.call(console, Y);
+ } catch (V) {
+ (R = console.debug) == null || R.call(console, V);
}
p(), X && clearTimeout(X), X = setTimeout(() => {
- var Y;
+ var V;
X = null;
try {
g();
- } catch (F) {
- (Y = console.debug) == null || Y.call(console, F);
+ } catch (O) {
+ (V = console.debug) == null || V.call(console, O);
}
- C.reloadGrid().catch(() => {
+ W.reloadGrid().catch(() => {
});
}, 250);
};
@@ -34315,14 +34342,14 @@ function g2({
window.addEventListener("mjr:filters-changed", x, {
signal: b == null ? void 0 : b.signal
});
- } catch (T) {
- (f = console.debug) == null || f.call(console, T);
+ } catch (K) {
+ (f = console.debug) == null || f.call(console, K);
}
- h = () => {
+ C = () => {
X && (clearTimeout(X), X = null);
};
} else
- h = m2({
+ C = mM({
state: e,
kindSelect: n,
wfCheckbox: i,
@@ -34335,25 +34362,25 @@ function g2({
minHeightInput: d,
maxWidthInput: u,
maxHeightInput: I,
- dateRangeSelect: y,
- dateExactInput: S,
- reloadGrid: C.reloadGrid,
+ dateRangeSelect: A,
+ dateExactInput: h,
+ reloadGrid: W.reloadGrid,
reconcileSelection: g,
lifecycleSignal: (b == null ? void 0 : b.signal) || null,
onFiltersChanged: () => {
var X, x;
- A({ reload: !1 });
+ y({ reload: !1 });
try {
(X = L == null ? void 0 : L.refresh) == null || X.call(L);
- } catch (T) {
- (x = console.debug) == null || x.call(console, T);
+ } catch (K) {
+ (x = console.debug) == null || x.call(console, K);
}
p();
}
});
- return { agendaCalendar: L, disposeFilters: h };
+ return { agendaCalendar: L, disposeFilters: C };
}
-function I2({
+function IM({
state: e,
scopeController: t,
browserNav: n,
@@ -34389,7 +34416,7 @@ function I2({
onDuplicateAlertClick: async (l) => {
const c = (l || o() || {}).firstGroup;
if (c && Array.isArray(c.assets) && c.assets.length >= 2) {
- const u = c.assets[0] || {}, I = c.assets.slice(1).map((y) => Number((y == null ? void 0 : y.id) || 0)).filter((y) => y > 0);
+ const u = c.assets[0] || {}, I = c.assets.slice(1).map((A) => Number((A == null ? void 0 : A.id) || 0)).filter((A) => A > 0);
if (I.length) {
if (await yi(
m(
@@ -34398,13 +34425,13 @@ function I2({
{ count: c.assets.length, target: (u == null ? void 0 : u.filename) || (u == null ? void 0 : u.id) }
)
)) {
- const Z = await Kf(
+ const S = await Uf(
Number((u == null ? void 0 : u.id) || 0),
I
);
- Z != null && Z.ok ? Ze(m("toast.tagsMerged", "Tags merged"), "success", 2200) : Ze(
+ S != null && S.ok ? Ae(m("toast.tagsMerged", "Tags merged"), "success", 2200) : Ae(
m("toast.tagMergeFailed", "Tag merge failed: {error}", {
- error: (Z == null ? void 0 : Z.error) || "error"
+ error: (S == null ? void 0 : S.error) || "error"
}),
"warning",
3500
@@ -34417,14 +34444,14 @@ function I2({
{ count: I.length }
)
)) {
- const Z = await Df(I);
- Z != null && Z.ok ? (Ze(
+ const S = await Df(I);
+ S != null && S.ok ? (Ae(
m("toast.duplicatesDeleted", "Duplicates deleted"),
"success",
2200
- ), await i.reloadGrid()) : Ze(
+ ), await i.reloadGrid()) : Ae(
m("toast.deleteFailed", "Delete failed: {error}", {
- error: (Z == null ? void 0 : Z.error) || "error"
+ error: (S == null ? void 0 : S.error) || "error"
}),
"warning",
3500
@@ -34440,12 +34467,12 @@ function I2({
"Start duplicate analysis in background?"
)
)) return;
- const d = await Bf(500);
- d != null && d.ok ? Ze(
+ const d = await Kf(500);
+ d != null && d.ok ? Ae(
m("toast.dupAnalysisStarted", "Duplicate analysis started"),
"info",
2200
- ) : Ze(
+ ) : Ae(
m("toast.analysisNotStarted", "Analysis not started: {error}", {
error: (d == null ? void 0 : d.error) || "error"
}),
@@ -34455,13 +34482,13 @@ function I2({
}
};
}
-async function b2(e, { useComfyThemeUI: t = !0, external: n = {} } = {}) {
- return p2(e, { useComfyThemeUI: t, external: n });
+async function bM(e, { useComfyThemeUI: t = !0, external: n = {} } = {}) {
+ return pM(e, { useComfyThemeUI: t, external: n });
}
-async function p2(e, { useComfyThemeUI: t = !0, external: n = {} } = {}) {
- var Vt, Bt, Rt, Ct, zt, gt, mn, wt, on, rn, hn, ln, gn, nn, An, vn, un, Mn, yn, Ut, Jt, ro, lo, ao, hi;
- Is("panelRender"), Rb("panelRender");
- const i = typeof AbortController < "u" ? new AbortController() : null, { popovers: o, hostWrapper: r, hostWrapperPrevStyle: l } = n2(e, {
+async function pM(e, { useComfyThemeUI: t = !0, external: n = {} } = {}) {
+ var Lt, Tt, Ot, Ct, gn, pt, zt, ht, on, an, hn, cn, bn, ln, Wn, Yn, In, Gn, fn, Kt, Jt, ro, lo, ao, Ci;
+ bs("panelRender"), Rb("panelRender");
+ const i = typeof AbortController < "u" ? new AbortController() : null, { popovers: o, hostWrapper: r, hostWrapperPrevStyle: l } = nM(e, {
useComfyThemeUI: t
}), a = Al();
if (!a)
@@ -34507,402 +34534,402 @@ async function p2(e, { useComfyThemeUI: t = !0, external: n = {} } = {}) {
"similarSourceAssetId"
]);
a.viewScope = String(a.viewScope || "").trim().toLowerCase() === "similar" ? "similar" : "", a.similarResults = Array.isArray(a.similarResults) ? a.similarResults : [], a.similarTitle = String(a.similarTitle || ""), a.similarSourceAssetId = String(a.similarSourceAssetId || "");
- const s = (Ve, it = "") => c.read(Ve, (a == null ? void 0 : a[Ve]) ?? it), d = (Ve, it) => c.write(Ve, it), u = () => {
+ const s = (Ve, ot = "") => c.read(Ve, (a == null ? void 0 : a[Ve]) ?? ot), d = (Ve, ot) => c.write(Ve, ot), u = () => {
const Ve = s("selectedAssetIds", []);
return Array.isArray(Ve) ? Ve.map(String).filter(Boolean) : [];
- }, I = () => String(s("activeAssetId", "") || "").trim(), y = () => !!s("sidebarOpen", !1), {
- header: S,
- tabButtons: Z,
- customMenuBtn: C,
+ }, I = () => String(s("activeAssetId", "") || "").trim(), A = () => !!s("sidebarOpen", !1), {
+ header: h,
+ tabButtons: S,
+ customMenuBtn: W,
filterBtn: g,
- sortBtn: A,
+ sortBtn: y,
collectionsBtn: p,
pinnedFoldersBtn: b,
messageBtn: L,
- customPopover: h,
+ customPopover: C,
customSelect: G,
- customAddBtn: W,
+ customAddBtn: Z,
customRemoveBtn: f,
filterPopover: X,
kindSelect: x,
- wfCheckbox: T,
- workflowTypeSelect: v,
+ wfCheckbox: K,
+ workflowTypeSelect: j,
ratingSelect: w,
minSizeInput: R,
- maxSizeInput: Y,
- resolutionPresetSelect: F,
- minWidthInput: N,
- minHeightInput: V,
- maxWidthInput: k,
- maxHeightInput: K,
+ maxSizeInput: V,
+ resolutionPresetSelect: O,
+ minWidthInput: k,
+ minHeightInput: Y,
+ maxWidthInput: N,
+ maxHeightInput: U,
dateRangeSelect: z,
- dateExactInput: B,
+ dateExactInput: T,
agendaContainer: J,
sortPopover: P,
- sortMenu: H,
+ sortMenu: E,
collectionsPopover: $,
- pinnedFoldersPopover: E,
- pinnedFoldersMenu: oe,
+ pinnedFoldersPopover: H,
+ pinnedFoldersMenu: ne,
messagePopoverTitle: M,
- messagePopover: j,
- messageTabBtn: O,
+ messagePopover: v,
+ messageTabBtn: F,
messageTabBadge: D,
historyTabBtn: q,
historyTabBadge: ee,
- historyTabCount: ce,
+ historyTabCount: ae,
historyPanel: ue,
- shortcutsTabBtn: U,
+ shortcutsTabBtn: B,
messageList: Q,
shortcutsPanel: _,
markReadBtn: le,
- searchSection: de,
- searchInputEl: se,
+ searchSection: ce,
+ searchInputEl: de,
similarBtn: ge,
- setSemanticEnabled: je,
- _headerDispose: Se
- } = n.headerSection, ke = !!((Vt = n == null ? void 0 : n.headerSection) != null && Vt.isVueHeader);
- c.read("searchQuery", "") && (se.value = c.read("searchQuery", "")), se.addEventListener(
+ setSemanticEnabled: Le,
+ _headerDispose: xe
+ } = n.headerSection, Xe = !!((Lt = n == null ? void 0 : n.headerSection) != null && Lt.isVueHeader);
+ c.read("searchQuery", "") && (de.value = c.read("searchQuery", "")), de.addEventListener(
"input",
(Ve) => {
c.write("searchQuery", Ve.target.value);
},
{ signal: i == null ? void 0 : i.signal }
);
- const we = n.summaryBar, Je = n.updateSummaryBar, $e = n.folderBreadcrumb, qe = n.statusSection, Ue = n.statusDot, Te = n.statusText, Oe = n.capabilitiesSection, pt = n.browseSection, Me = n.gridWrapper, Xt = n.sidebar;
- Xn();
- const Mt = document.createElement("div");
- Mt.classList.add("mjr-am-content");
- let me = null, Pe = null;
+ const Me = n.summaryBar, Fe = n.updateSummaryBar, it = n.folderBreadcrumb, qe = n.statusSection, Pe = n.statusDot, Re = n.statusText, rt = n.capabilitiesSection, Te = n.browseSection, qt = n.gridWrapper, kt = n.sidebar;
+ kn();
+ const we = document.createElement("div");
+ we.classList.add("mjr-am-content");
+ let me = null, He = null;
e.tabIndex = -1;
- let Le = null, Ot = 0;
- const Xe = () => {
+ let Ye = null, Pt = 0;
+ const ke = () => {
try {
- Ot = Date.now();
+ Pt = Date.now();
} catch {
- Ot = 0;
+ Pt = 0;
}
}, Ee = typeof (n == null ? void 0 : n.bindGridHostState) == "function" && typeof (n == null ? void 0 : n.restoreGridUiState) == "function", Ke = !Ee;
- Me.addEventListener(
+ qt.addEventListener(
"scroll",
() => {
- Xe(), Ke && (Le && clearTimeout(Le), Le = setTimeout(() => {
+ ke(), Ke && (Ye && clearTimeout(Ye), Ye = setTimeout(() => {
var Ve;
try {
- c.write("scrollTop", Me.scrollTop);
- } catch (it) {
- (Ve = console.debug) == null || Ve.call(console, it);
+ c.write("scrollTop", qt.scrollTop);
+ } catch (ot) {
+ (Ve = console.debug) == null || Ve.call(console, ot);
}
}, 100));
},
{ passive: !0, signal: i == null ? void 0 : i.signal }
- ), me = n.gridContainer, me.parentElement !== Me && Me.appendChild(me), Ds(me);
+ ), me = n.gridContainer, me.parentElement !== qt && qt.appendChild(me), ja(me);
try {
me.dataset.mjrScope = String(s("scope", a.scope || "output") || "output");
} catch (Ve) {
- (Bt = console.debug) == null || Bt.call(console, Ve);
+ (Tt = console.debug) == null || Tt.call(console, Ve);
}
- const nt = [], ut = (Ve) => {
- typeof Ve == "function" && nt.push(Ve);
+ const lt = [], wt = (Ve) => {
+ typeof Ve == "function" && lt.push(Ve);
};
me._mjrSummaryBarDispose = () => {
var Ve;
- for (const it of nt.splice(0))
+ for (const ot of lt.splice(0))
try {
- it();
- } catch (xt) {
- (Ve = console.debug) == null || Ve.call(console, xt);
+ ot();
+ } catch (St) {
+ (Ve = console.debug) == null || Ve.call(console, St);
}
};
try {
const Ve = () => {
- var it;
+ var ot;
try {
- Je == null || Je({ state: a, gridContainer: me });
- } catch (xt) {
- (it = console.debug) == null || it.call(console, xt);
+ Fe == null || Fe({ state: a, gridContainer: me });
+ } catch (St) {
+ (ot = console.debug) == null || ot.call(console, St);
}
};
me.addEventListener("mjr:grid-stats", Ve, {
signal: i == null ? void 0 : i.signal
- }), ut(() => {
- var it;
+ }), wt(() => {
+ var ot;
try {
me.removeEventListener("mjr:grid-stats", Ve);
- } catch (xt) {
- (it = console.debug) == null || it.call(console, xt);
+ } catch (St) {
+ (ot = console.debug) == null || ot.call(console, St);
}
});
} catch (Ve) {
- (Rt = console.debug) == null || Rt.call(console, Ve);
+ (Ot = console.debug) == null || Ot.call(console, Ve);
}
try {
} catch (Ve) {
(Ct = console.debug) == null || Ct.call(console, Ve);
}
- const It = n.loadAssets ?? ed, dt = n.loadAssetsFromList ?? td, Re = n.prepareGridForScopeSwitch ?? nZ, Wt = n.disposeGrid ?? GI, lt = n.refreshGrid ?? iZ, qt = n.captureAnchor ?? oZ, yt = n.restoreAnchor ?? rZ, mt = n.hydrateGridFromSnapshot ?? tZ;
+ const at = n.loadAssets ?? ed, tt = n.loadAssetsFromList ?? td, Oe = n.prepareGridForScopeSwitch ?? nZ, Rt = n.disposeGrid ?? SI, nt = n.refreshGrid ?? iZ, Mt = n.captureAnchor ?? oZ, dt = n.restoreAnchor ?? rZ, bt = n.hydrateGridFromSnapshot ?? tZ;
if (typeof (n == null ? void 0 : n.onGridContainerReady) == "function")
try {
n.onGridContainerReady(me, { getState: () => a });
} catch (Ve) {
- (zt = console.debug) == null || zt.call(console, Ve);
+ (gn = console.debug) == null || gn.call(console, Ve);
}
else
e._mjrGridContextMenuUnbind = sd({
gridContainer: me,
getState: () => a
});
- const kt = m("search.findSimilar", "Find Similar"), $t = m(
+ const Yt = m("search.findSimilar", "Find Similar"), $t = m(
"search.similarDisabled",
"AI features are disabled in settings"
- ), { applyWatcherForScope: Tt, isAiEnabled: te } = i2({
+ ), { applyWatcherForScope: nn, isAiEnabled: ie } = iM({
container: e,
state: a,
- sidebar: Xt,
- browseSection: pt,
- gridWrapper: Me,
+ sidebar: kt,
+ browseSection: Te,
+ gridWrapper: qt,
similarBtn: ge,
- setSemanticEnabled: je,
- similarEnabledTitle: kt,
+ setSemanticEnabled: Le,
+ similarEnabledTitle: Yt,
similarDisabledTitle: $t,
- refreshGridFn: lt,
- isSidebarOpen: y,
+ refreshGridFn: nt,
+ isSidebarOpen: A,
readActiveAssetId: I,
- getSidebarController: () => Pe,
+ getSidebarController: () => He,
panelLifecycleAC: i
});
- Mt.appendChild(qe), Mt.appendChild(de), Mt.appendChild($e), Mt.appendChild(we), Mt.appendChild(pt), e.appendChild(S);
+ we.appendChild(qe), we.appendChild(ce), we.appendChild(it), we.appendChild(Me), we.appendChild(Te), e.appendChild(h);
try {
- (gt = e._mjrVersionUpdateCleanup) == null || gt.call(e);
+ (pt = e._mjrVersionUpdateCleanup) == null || pt.call(e);
} catch (Ve) {
- (mn = console.debug) == null || mn.call(console, Ve);
+ (zt = console.debug) == null || zt.call(console, Ve);
}
- e._mjrVersionUpdateCleanup = Se || S._mjrVersionUpdateCleanup, e.appendChild(Mt);
- const ye = () => Cs(se), We = zM({
+ e._mjrVersionUpdateCleanup = xe || h._mjrVersionUpdateCleanup, e.appendChild(we);
+ const pe = () => Zs(de), Ce = z2({
gridContainer: me,
- loadAssets: It,
- loadAssetsFromList: dt,
- getCollectionAssets: Hf,
- disposeGrid: Wt,
- getQuery: ye,
- searchInputEl: se,
+ loadAssets: at,
+ loadAssetsFromList: tt,
+ getCollectionAssets: Ef,
+ disposeGrid: Rt,
+ getQuery: pe,
+ searchInputEl: de,
state: a
});
- let pe = null, De = null, ot = null, Zt = null, tn = null, Pt = null, vt = null, re = null, ne = null;
- const Ie = () => {
- var Ve, it, xt, an;
+ let ye = null, De = null, ut = null, At = null, Ht = null, Qt = null, xt = null, Gt = null, je = null;
+ const oe = () => {
+ var Ve, ot, St, sn;
try {
(Ve = De == null ? void 0 : De.update) == null || Ve.call(De);
- } catch (sn) {
- (it = console.debug) == null || it.call(console, sn);
+ } catch (un) {
+ (ot = console.debug) == null || ot.call(console, un);
}
try {
- (xt = Pt == null ? void 0 : Pt.renderBreadcrumb) == null || xt.call(Pt);
- } catch (sn) {
- (an = console.debug) == null || an.call(console, sn);
+ (St = Qt == null ? void 0 : Qt.renderBreadcrumb) == null || St.call(Qt);
+ } catch (un) {
+ (sn = console.debug) == null || sn.call(console, un);
}
};
- Ee || (re = $M({
+ Ee || (Gt = $2({
gridContainer: me,
readSelectedAssetIds: u,
readActiveAssetId: I,
writeSelectedAssetIds: (Ve) => d("selectedAssetIds", Ve),
writeActiveAssetId: (Ve) => d("activeAssetId", Ve),
onSelectionChanged: () => {
- Xe(), Ie();
+ ke(), oe();
},
lifecycleSignal: (i == null ? void 0 : i.signal) || null
- })), Pt = JM({
+ })), Qt = J2({
state: a,
gridContainer: me,
- folderBreadcrumb: $e,
+ folderBreadcrumb: it,
customSelect: G,
- reloadGrid: () => We.reloadGrid(),
+ reloadGrid: () => Ce.reloadGrid(),
onContextChanged: () => {
- var Ve, it;
+ var Ve, ot;
try {
(Ve = De == null ? void 0 : De.update) == null || Ve.call(De);
- } catch (xt) {
- (it = console.debug) == null || it.call(console, xt);
+ } catch (St) {
+ (ot = console.debug) == null || ot.call(console, St);
}
},
lifecycleSignal: (i == null ? void 0 : i.signal) || null
});
try {
- vt = Pt.bindGridFolderNavigation();
+ xt = Qt.bindGridFolderNavigation();
} catch (Ve) {
- (wt = console.debug) == null || wt.call(console, Ve);
+ (ht = console.debug) == null || ht.call(console, Ve);
}
- const Ne = async () => {
- var xt;
- const Ve = String(s("scope", a.scope || "output") || "output").toLowerCase(), it = String(s("customRootId", a.customRootId || "") || "").trim();
- if (Ve === "custom" && !it) {
- ot = null, Ie();
+ const se = async () => {
+ var St;
+ const Ve = String(s("scope", a.scope || "output") || "output").toLowerCase(), ot = String(s("customRootId", a.customRootId || "") || "").trim();
+ if (Ve === "custom" && !ot) {
+ ut = null, oe();
return;
}
try {
- const an = await Uf(
- { scope: Ve, customRootId: it, maxGroups: 4, maxPairs: 4 },
+ const sn = await Bf(
+ { scope: Ve, customRootId: ot, maxGroups: 4, maxPairs: 4 },
{ signal: i == null ? void 0 : i.signal }
);
- if (!(an != null && an.ok)) return;
- const sn = an.data || {};
- ot = {
- exactCount: Array.isArray(sn.exact_groups) ? sn.exact_groups.length : 0,
- similarCount: Array.isArray(sn.similar_pairs) ? sn.similar_pairs.length : 0,
- firstGroup: Array.isArray(sn.exact_groups) ? sn.exact_groups[0] : null,
- firstPair: Array.isArray(sn.similar_pairs) ? sn.similar_pairs[0] : null
- }, Ie();
- } catch (an) {
- (xt = console.debug) == null || xt.call(console, an);
+ if (!(sn != null && sn.ok)) return;
+ const un = sn.data || {};
+ ut = {
+ exactCount: Array.isArray(un.exact_groups) ? un.exact_groups.length : 0,
+ similarCount: Array.isArray(un.similar_pairs) ? un.similar_pairs.length : 0,
+ firstGroup: Array.isArray(un.exact_groups) ? un.exact_groups[0] : null,
+ firstPair: Array.isArray(un.similar_pairs) ? un.similar_pairs[0] : null
+ }, oe();
+ } catch (sn) {
+ (St = console.debug) == null || St.call(console, sn);
}
- }, He = 120;
- let rt = null;
- o2({
+ }, fe = 120;
+ let Be = null;
+ oM({
gridContainer: me,
panelLifecycleAC: i,
requestQueuedReload: () => {
var Ve;
try {
- rt && clearTimeout(rt);
- } catch (it) {
- (Ve = console.debug) == null || Ve.call(console, it);
+ Be && clearTimeout(Be);
+ } catch (ot) {
+ (Ve = console.debug) == null || Ve.call(console, ot);
}
- rt = setTimeout(() => {
- rt = null, ve().catch((it) => {
- var xt;
+ Be = setTimeout(() => {
+ Be = null, Ge().catch((ot) => {
+ var St;
try {
- console.warn("[Majoor] queuedReload failed", it);
- } catch (an) {
- (xt = console.debug) == null || xt.call(console, an);
+ console.warn("[Majoor] queuedReload failed", ot);
+ } catch (sn) {
+ (St = console.debug) == null || St.call(console, sn);
}
});
- }, He);
+ }, fe);
},
- notifyContextChanged: Ie,
- markUserInteraction: Xe,
+ notifyContextChanged: oe,
+ markUserInteraction: ke,
writePanelValue: d,
popovers: o,
collectionsPopover: $,
- gridController: We,
- registerSummaryDispose: ut
+ gridController: Ce,
+ registerSummaryDispose: wt
});
- const Yt = UM({
+ const Wt = B2({
state: a,
customSelect: G,
customRemoveBtn: f,
comfyConfirm: yi,
- comfyPrompt: Vi,
- comfyToast: Ze,
+ comfyPrompt: Yi,
+ comfyToast: Ae,
get: Ft,
- post: Et,
- ENDPOINTS: ct,
- reloadGrid: We.reloadGrid,
+ post: Dt,
+ ENDPOINTS: st,
+ reloadGrid: Ce.reloadGrid,
onRootChanged: async () => {
- var Ve, it, xt, an;
+ var Ve, ot, St, sn;
try {
- (Ve = Pt == null ? void 0 : Pt.resetHistory) == null || Ve.call(Pt);
- } catch (sn) {
- (it = console.debug) == null || it.call(console, sn);
+ (Ve = Qt == null ? void 0 : Qt.resetHistory) == null || Ve.call(Qt);
+ } catch (un) {
+ (ot = console.debug) == null || ot.call(console, un);
}
try {
- await Tt(a.scope);
- } catch (sn) {
- (xt = console.debug) == null || xt.call(console, sn);
+ await nn(a.scope);
+ } catch (un) {
+ (St = console.debug) == null || St.call(console, un);
}
try {
- await Ne();
- } catch (sn) {
- (an = console.debug) == null || an.call(console, sn);
+ await se();
+ } catch (un) {
+ (sn = console.debug) == null || sn.call(console, un);
}
}
- }), Gt = Yt.bind({ customAddBtn: W, customRemoveBtn: f });
+ }), Vt = Wt.bind({ customAddBtn: Z, customRemoveBtn: f });
try {
window.addEventListener(
"mjr:custom-roots-changed",
async (Ve) => {
- var xt;
- const it = String(((xt = Ve == null ? void 0 : Ve.detail) == null ? void 0 : xt.preferredId) || "").trim() || null;
- await Yt.refreshCustomRoots(it);
+ var St;
+ const ot = String(((St = Ve == null ? void 0 : Ve.detail) == null ? void 0 : St.preferredId) || "").trim() || null;
+ await Wt.refreshCustomRoots(ot);
},
{ signal: i == null ? void 0 : i.signal }
);
} catch (Ve) {
(on = console.debug) == null || on.call(console, Ve);
}
- const Qt = () => {
+ const _t = () => {
var Ve;
try {
- const it = me == null ? void 0 : me._mjrGetAssets, xt = me == null ? void 0 : me._mjrSetSelection;
- if (typeof it != "function" || typeof xt != "function") return;
- const an = (Array.isArray(it()) ? it() : []).map((ci) => String((ci == null ? void 0 : ci.id) ?? "").trim()).filter(Boolean), sn = u(), Bn = sn.filter((ci) => an.includes(ci)), Yi = sn.length - Bn.length;
- if (Yi <= 0) return;
- const ki = I(), Ji = Bn.includes(ki) ? ki : Bn[0] || "";
- xt(Bn, Ji), Ze(
+ const ot = me == null ? void 0 : me._mjrGetAssets, St = me == null ? void 0 : me._mjrSetSelection;
+ if (typeof ot != "function" || typeof St != "function") return;
+ const sn = (Array.isArray(ot()) ? ot() : []).map((ci) => String((ci == null ? void 0 : ci.id) ?? "").trim()).filter(Boolean), un = u(), Kn = un.filter((ci) => sn.includes(ci)), Vi = un.length - Kn.length;
+ if (Vi <= 0) return;
+ const Xi = I(), Ji = Kn.includes(Xi) ? Xi : Kn[0] || "";
+ St(Kn, Ji), Ae(
m(
"toast.selectionPruned",
"{count} items deselected - not visible in current view",
- { count: Yi }
+ { count: Vi }
),
"info",
2600,
{ noHistory: !0 }
);
- } catch (it) {
- (Ve = console.debug) == null || Ve.call(console, it);
+ } catch (ot) {
+ (Ve = console.debug) == null || Ve.call(console, ot);
}
};
- pe = TM({
+ ye = T2({
state: a,
- tabButtons: Z,
- customMenuBtn: C,
- customPopover: h,
+ tabButtons: S,
+ customMenuBtn: W,
+ customPopover: C,
popovers: o,
- refreshCustomRoots: Yt.refreshCustomRoots,
- reloadGrid: We.reloadGrid,
- reconcileSelection: Qt,
+ refreshCustomRoots: Wt.refreshCustomRoots,
+ reloadGrid: Ce.reloadGrid,
+ reconcileSelection: _t,
onChanged: () => {
var Ve;
try {
me && (me.dataset.mjrScope = String(
s("scope", a.scope || "output") || "output"
));
- } catch (it) {
- (Ve = console.debug) == null || Ve.call(console, it);
+ } catch (ot) {
+ (Ve = console.debug) == null || Ve.call(console, ot);
}
- Ie();
+ oe();
},
onScopeChanged: async () => {
- var Ve, it;
+ var Ve, ot;
try {
- await Tt(
+ await nn(
String(s("scope", a.scope || "output") || "output")
);
- } catch (xt) {
- (Ve = console.debug) == null || Ve.call(console, xt);
+ } catch (St) {
+ (Ve = console.debug) == null || Ve.call(console, St);
}
try {
- await Ne();
- } catch (xt) {
- (it = console.debug) == null || it.call(console, xt);
+ await se();
+ } catch (St) {
+ (ot = console.debug) == null || ot.call(console, St);
}
},
onBeforeReload: async () => {
- var Ve, it, xt;
+ var Ve, ot, St;
try {
me.dataset.mjrScope = s("scope", "output"), me.dataset.mjrCustomRootId = s("customRootId", "") || "", me.dataset.mjrSubfolder = s("currentFolderRelativePath", "") || "", me.dataset.mjrCollectionId = s("collectionId", "") || "", me.dataset.mjrViewScope = s("viewScope", "") || "";
- } catch (an) {
- (Ve = console.debug) == null || Ve.call(console, an);
+ } catch (sn) {
+ (Ve = console.debug) == null || Ve.call(console, sn);
}
try {
- Re(me);
- } catch (an) {
- (it = console.debug) == null || it.call(console, an);
+ Oe(me);
+ } catch (sn) {
+ (ot = console.debug) == null || ot.call(console, sn);
}
try {
- await Ni(
- Ue,
- Te,
- Oe,
+ await ki(
+ Pe,
+ Re,
+ rt,
{
scope: s("scope", a.scope || "output"),
customRootId: s("customRootId", a.customRootId || "")
@@ -34910,517 +34937,517 @@ async function p2(e, { useComfyThemeUI: t = !0, external: n = {} } = {}) {
null,
{ signal: (i == null ? void 0 : i.signal) || null }
);
- } catch (an) {
- (xt = console.debug) == null || xt.call(console, an);
+ } catch (sn) {
+ (St = console.debug) == null || St.call(console, sn);
}
}
});
- const Yn = async ({ reload: Ve = !1 } = {}) => {
- var it, xt;
+ const Xt = async ({ reload: Ve = !1 } = {}) => {
+ var ot, St;
try {
if (String(s("viewScope", a.viewScope || "") || "").trim().toLowerCase() !== "similar") return;
- await ((it = pe == null ? void 0 : pe.clearSimilarScope) == null ? void 0 : it.call(pe, { reload: Ve }));
- } catch (an) {
- (xt = console.debug) == null || xt.call(console, an);
+ await ((ot = ye == null ? void 0 : ye.clearSimilarScope) == null ? void 0 : ot.call(ye, { reload: Ve }));
+ } catch (sn) {
+ (St = console.debug) == null || St.call(console, sn);
}
};
- Object.values(Z).forEach((Ve) => {
- Ve.addEventListener("click", () => pe.setScope(Ve.dataset.scope), {
+ Object.values(S).forEach((Ve) => {
+ Ve.addEventListener("click", () => ye.setScope(Ve.dataset.scope), {
signal: i == null ? void 0 : i.signal
});
- }), RM({
+ }), R2({
messageBtn: L,
- messagePopover: j,
+ messagePopover: v,
title: M,
messageList: Q,
historyTabBtn: q,
historyTabBadge: ee,
- historyTabCount: ce,
+ historyTabCount: ae,
historyPanel: ue,
shortcutsPanel: _,
- messageTabBtn: O,
+ messageTabBtn: F,
messageTabBadge: D,
- shortcutsTabBtn: U,
+ shortcutsTabBtn: B,
markReadBtn: le,
popovers: o,
signal: i == null ? void 0 : i.signal,
onBeforeToggle: () => {
- o.close(h), o.close(X), o.close(P), o.close($), o.close(E);
+ o.close(C), o.close(X), o.close(P), o.close($), o.close(H);
}
}), o.setDismissWhitelist([
- h,
+ C,
X,
P,
$,
- E,
- j,
- C,
+ H,
+ v,
+ W,
g,
- A,
+ y,
p,
b,
L
- ]), C.addEventListener(
+ ]), W.addEventListener(
"click",
(Ve) => {
- Ve.stopPropagation(), o.close(X), o.close(P), o.close($), o.close(j), o.toggle(h, C);
+ Ve.stopPropagation(), o.close(X), o.close(P), o.close($), o.close(v), o.toggle(C, W);
},
{ signal: i == null ? void 0 : i.signal }
), g.addEventListener(
"click",
(Ve) => {
- Ve.stopPropagation(), o.close(h), o.close(P), o.close($), o.close(j), o.toggle(X, g);
+ Ve.stopPropagation(), o.close(C), o.close(P), o.close($), o.close(v), o.toggle(X, g);
},
{ signal: i == null ? void 0 : i.signal }
), p.addEventListener(
"click",
(Ve) => {
- Ve.stopPropagation(), o.close(h), o.close(X), o.close(P), o.close(j), o.toggle($, p);
+ Ve.stopPropagation(), o.close(C), o.close(X), o.close(P), o.close(v), o.toggle($, p);
},
{ signal: i == null ? void 0 : i.signal }
);
- const wn = ke ? null : KM({
+ const tn = Xe ? null : U2({
state: a,
- sortBtn: A,
- sortMenu: H,
+ sortBtn: y,
+ sortMenu: E,
sortPopover: P,
popovers: o,
- reloadGrid: We.reloadGrid,
- onChanged: () => Ie()
+ reloadGrid: Ce.reloadGrid,
+ onChanged: () => oe()
});
- wn ? wn.bind({
+ tn ? tn.bind({
onBeforeToggle: () => {
- o.close(h), o.close(X), o.close($), o.close(j);
+ o.close(C), o.close(X), o.close($), o.close(v);
}
- }) : A.addEventListener(
+ }) : y.addEventListener(
"click",
(Ve) => {
- Ve.stopPropagation(), o.close(h), o.close(X), o.close($), o.close(j), o.toggle(P, A);
+ Ve.stopPropagation(), o.close(C), o.close(X), o.close($), o.close(v), o.toggle(P, y);
},
{ signal: i == null ? void 0 : i.signal }
- ), r2({
+ ), rM({
similarBtn: ge,
gridContainer: me,
state: a,
panelLifecycleAC: i,
- isAiEnabled: te,
+ isAiEnabled: ie,
similarDisabledTitle: $t,
readActiveAssetId: I,
readSelectedAssetIds: u,
readPanelValue: s,
writePanelValue: d,
- scopeController: pe,
+ scopeController: ye,
closePopovers: () => {
- o.close(h), o.close(X), o.close(P), o.close($), o.close(j);
+ o.close(C), o.close(X), o.close(P), o.close($), o.close(v);
}
- }), l2({
+ }), lM({
pinnedFoldersBtn: b,
- pinnedFoldersMenu: oe,
- pinnedFoldersPopover: E,
+ pinnedFoldersMenu: ne,
+ pinnedFoldersPopover: H,
popovers: o,
closeOtherPopovers: () => {
- o.close(h), o.close(X), o.close(P), o.close($), o.close(j);
+ o.close(C), o.close(X), o.close(P), o.close($), o.close(v);
},
state: a,
gridContainer: me,
customSelect: G,
- scopeController: pe,
- customRootsController: Yt,
- gridController: We,
- applyWatcherForScope: Tt,
- refreshDuplicateAlerts: Ne,
- notifyContextChanged: Ie,
+ scopeController: ye,
+ customRootsController: Wt,
+ gridController: Ce,
+ applyWatcherForScope: nn,
+ refreshDuplicateAlerts: se,
+ notifyContextChanged: oe,
panelLifecycleAC: i
});
- const { agendaCalendar: xn, disposeFilters: en } = g2({
+ const { agendaCalendar: Ln, disposeFilters: Mn } = gM({
state: a,
- hasVueHeaderSection: ke,
+ hasVueHeaderSection: Xe,
kindSelect: x,
- wfCheckbox: T,
- workflowTypeSelect: v,
+ wfCheckbox: K,
+ workflowTypeSelect: j,
ratingSelect: w,
minSizeInput: R,
- maxSizeInput: Y,
- resolutionPresetSelect: F,
- minWidthInput: N,
- minHeightInput: V,
- maxWidthInput: k,
- maxHeightInput: K,
+ maxSizeInput: V,
+ resolutionPresetSelect: O,
+ minWidthInput: k,
+ minHeightInput: Y,
+ maxWidthInput: N,
+ maxHeightInput: U,
dateRangeSelect: z,
- dateExactInput: B,
+ dateExactInput: T,
agendaContainer: J,
- gridController: We,
- reconcileVisibleSelection: Qt,
- exitSimilarViewIfActive: Yn,
- notifyContextChanged: Ie,
+ gridController: Ce,
+ reconcileVisibleSelection: _t,
+ exitSimilarViewIfActive: Xt,
+ notifyContextChanged: oe,
panelLifecycleAC: i
- }), Vn = I2({
+ }), Xn = IM({
state: a,
- scopeController: pe,
- browserNav: Pt,
- gridController: We,
- getDuplicatesAlert: () => ot,
- refreshDuplicateAlerts: Ne
+ scopeController: ye,
+ browserNav: Qt,
+ gridController: Ce,
+ getDuplicatesAlert: () => ut,
+ refreshDuplicateAlerts: se
});
try {
- De = BM({
+ De = K2({
state: a,
gridContainer: me,
filterBtn: g,
- sortBtn: A,
+ sortBtn: y,
collectionsBtn: p,
- searchInputEl: se,
+ searchInputEl: de,
kindSelect: x,
- wfCheckbox: T,
- workflowTypeSelect: v,
+ wfCheckbox: K,
+ workflowTypeSelect: j,
ratingSelect: w,
minSizeInput: R,
- maxSizeInput: Y,
- minWidthInput: N,
- minHeightInput: V,
- maxWidthInput: k,
- maxHeightInput: K,
- resolutionPresetSelect: F,
+ maxSizeInput: V,
+ minWidthInput: k,
+ minHeightInput: Y,
+ maxWidthInput: N,
+ maxHeightInput: U,
+ resolutionPresetSelect: O,
dateRangeSelect: z,
- dateExactInput: B,
- scopeController: pe,
- sortController: wn,
- updateSummaryBar: Je,
- reloadGrid: () => We.reloadGrid(),
- getExtraContext: () => ({ duplicatesAlert: ot }),
- extraActions: Vn
+ dateExactInput: T,
+ scopeController: ye,
+ sortController: tn,
+ updateSummaryBar: Fe,
+ reloadGrid: () => Ce.reloadGrid(),
+ getExtraContext: () => ({ duplicatesAlert: ut }),
+ extraActions: Xn
});
} catch (Ve) {
- (rn = console.debug) == null || rn.call(console, Ve);
+ (an = console.debug) == null || an.call(console, Ve);
}
try {
- if (Ie(), Ee) {
+ if (oe(), Ee) {
const Ve = n.bindGridHostState({
- onContextChanged: Ie,
- markUserInteraction: Xe
+ onContextChanged: oe,
+ markUserInteraction: ke
});
- ut(Ve);
+ wt(Ve);
} else {
- const Ve = () => Ie();
+ const Ve = () => oe();
me.addEventListener("mjr:grid-stats", Ve, {
signal: i == null ? void 0 : i.signal
}), (hn = window.addEventListener) == null || hn.call(window, "mjr-settings-changed", Ve, {
signal: i == null ? void 0 : i.signal
});
- let it = null, xt = null;
- const an = () => {
- xt && clearTimeout(xt), xt = setTimeout(() => {
- xt = null, it && cancelAnimationFrame(it), it = requestAnimationFrame(() => {
- it = null, Ie();
+ let ot = null, St = null;
+ const sn = () => {
+ St && clearTimeout(St), St = setTimeout(() => {
+ St = null, ot && cancelAnimationFrame(ot), ot = requestAnimationFrame(() => {
+ ot = null, oe();
});
}, 250);
- }, sn = new MutationObserver(() => an());
- sn.observe(me, { childList: !0 }), me._mjrSummaryBarObserver = sn, ut(() => {
- var Bn, Yi, ki, Ji, ci;
+ }, un = new MutationObserver(() => sn());
+ un.observe(me, { childList: !0 }), me._mjrSummaryBarObserver = un, wt(() => {
+ var Kn, Vi, Xi, Ji, ci;
try {
me.removeEventListener("mjr:grid-stats", Ve);
- } catch (Ci) {
- (Bn = console.debug) == null || Bn.call(console, Ci);
+ } catch (hi) {
+ (Kn = console.debug) == null || Kn.call(console, hi);
}
try {
- (Yi = window.removeEventListener) == null || Yi.call(window, "mjr-settings-changed", Ve);
- } catch (Ci) {
- (ki = console.debug) == null || ki.call(console, Ci);
+ (Vi = window.removeEventListener) == null || Vi.call(window, "mjr-settings-changed", Ve);
+ } catch (hi) {
+ (Xi = console.debug) == null || Xi.call(console, hi);
}
try {
- xt && clearTimeout(xt);
- } catch (Ci) {
- (Ji = console.debug) == null || Ji.call(console, Ci);
+ St && clearTimeout(St);
+ } catch (hi) {
+ (Ji = console.debug) == null || Ji.call(console, hi);
}
try {
- sn.disconnect();
- } catch (Ci) {
- (ci = console.debug) == null || ci.call(console, Ci);
+ un.disconnect();
+ } catch (hi) {
+ (ci = console.debug) == null || ci.call(console, hi);
}
});
}
} catch (Ve) {
- (ln = console.debug) == null || ln.call(console, Ve);
+ (cn = console.debug) == null || cn.call(console, Ve);
}
- Pe = QM({
+ He = Q2({
gridContainer: me,
- sidebar: Xt,
- createRatingBadge: Ya,
+ sidebar: kt,
+ createRatingBadge: Xa,
createTagsBadge: JI,
- showAssetInSidebar: aM,
- closeSidebar: Ub,
+ showAssetInSidebar: a2,
+ closeSidebar: Bb,
state: a
});
- const pn = {
- gridController: We,
- captureAnchor: qt,
- restoreAnchor: yt,
+ const rn = {
+ gridController: Ce,
+ captureAnchor: Mt,
+ restoreAnchor: dt,
restoreGridUiState: Ee ? (Ve) => n.restoreGridUiState(Ve, {
onRestoreSidebar: () => {
- var it, xt;
+ var ot, St;
try {
- (it = Pe == null ? void 0 : Pe.toggleDetails) == null || it.call(Pe);
- } catch (an) {
- (xt = console.debug) == null || xt.call(console, an);
+ (ot = He == null ? void 0 : He.toggleDetails) == null || ot.call(He);
+ } catch (sn) {
+ (St = console.debug) == null || St.call(console, sn);
}
}
}) : null,
readScrollTop: () => c.read("scrollTop", a.scrollTop || 0),
restoreSelectionState: ({ scrollTop: Ve } = {}) => {
- var it;
- (it = re == null ? void 0 : re.restoreSelectionState) == null || it.call(re, { scrollTop: Ve });
+ var ot;
+ (ot = Gt == null ? void 0 : Gt.restoreSelectionState) == null || ot.call(Gt, { scrollTop: Ve });
},
readActiveAssetId: I,
- isSidebarOpen: y,
+ isSidebarOpen: A,
toggleSidebarDetails: () => {
var Ve;
- (Ve = Pe == null ? void 0 : Pe.toggleDetails) == null || Ve.call(Pe);
+ (Ve = He == null ? void 0 : He.toggleDetails) == null || Ve.call(He);
},
- getQuery: ye,
+ getQuery: pe,
getScope: () => c.read("scope", a.scope),
- loadAssets: It,
+ loadAssets: at,
lifecycleSignal: (i == null ? void 0 : i.signal) || null
};
- typeof (n == null ? void 0 : n.initAssetsQueryController) == "function" ? ne = n.initAssetsQueryController(pn) : ne = op({
+ typeof (n == null ? void 0 : n.initAssetsQueryController) == "function" ? je = n.initAssetsQueryController(rn) : je = op({
gridContainer: me,
- gridWrapper: Me,
- ...pn
+ gridWrapper: qt,
+ ...rn
});
- const Nn = _M({
+ const vn = _2({
onTriggerScan: (Ve) => {
- Tb(Ue, Te, Oe, Ve || {});
+ Tb(Pe, Re, rt, Ve || {});
},
onToggleDetails: () => {
var Ve;
- (Ve = Pe == null ? void 0 : Pe.toggleDetails) == null || Ve.call(Pe);
+ (Ve = He == null ? void 0 : He.toggleDetails) == null || Ve.call(He);
},
onToggleFloatingViewer: () => {
var Ve;
try {
- window.dispatchEvent(new Event(ht.MFV_TOGGLE));
- } catch (it) {
- (Ve = console.debug) == null || Ve.call(console, it);
+ window.dispatchEvent(new Event(ft.MFV_TOGGLE));
+ } catch (ot) {
+ (Ve = console.debug) == null || Ve.call(console, ot);
}
},
onFocusSearch: () => {
- var Ve, it, xt, an;
+ var Ve, ot, St, sn;
try {
- (Ve = se == null ? void 0 : se.focus) == null || Ve.call(se);
- const sn = ((it = se == null ? void 0 : se.value) == null ? void 0 : it.length) || 0;
- (xt = se == null ? void 0 : se.setSelectionRange) == null || xt.call(se, sn, sn);
- } catch (sn) {
- (an = console.debug) == null || an.call(console, sn);
+ (Ve = de == null ? void 0 : de.focus) == null || Ve.call(de);
+ const un = ((ot = de == null ? void 0 : de.value) == null ? void 0 : ot.length) || 0;
+ (St = de == null ? void 0 : de.setSelectionRange) == null || St.call(de, un, un);
+ } catch (un) {
+ (sn = console.debug) == null || sn.call(console, un);
}
},
onClearSearch: () => {
- var Ve, it;
+ var Ve, ot;
try {
- if (!se) return;
- d("searchQuery", ""), se.value = "", (Ve = se.dispatchEvent) == null || Ve.call(se, new Event("input", { bubbles: !0 }));
- } catch (xt) {
- (it = console.debug) == null || it.call(console, xt);
+ if (!de) return;
+ d("searchQuery", ""), de.value = "", (Ve = de.dispatchEvent) == null || Ve.call(de, new Event("input", { bubbles: !0 }));
+ } catch (St) {
+ (ot = console.debug) == null || ot.call(console, St);
}
},
getScanContext: () => ({
scope: c.read("scope", a.scope),
customRootId: c.read("customRootId", a.customRootId)
})
- }), ae = bb({ gridContainer: me, createRatingBadge: Ya });
- let he = null;
+ }), re = bb({ gridContainer: me, createRatingBadge: Xa });
+ let Ie = null;
if (e._eventCleanup)
try {
e._eventCleanup();
} catch (Ve) {
- (gn = console.debug) == null || gn.call(console, Ve);
+ (bn = console.debug) == null || bn.call(console, Ve);
}
- Nn.bind(Mt), ae.bind(), wr("grid");
+ vn.bind(we), re.bind(), wr("grid");
try {
- e._mjrHotkeys = Nn, e._mjrRatingHotkeys = ae, e._mjrSidebarController = Pe;
+ e._mjrHotkeys = vn, e._mjrRatingHotkeys = re, e._mjrSidebarController = He;
} catch (Ve) {
- (nn = console.debug) == null || nn.call(console, Ve);
+ (ln = console.debug) == null || ln.call(console, Ve);
}
e._eventCleanup = () => {
- var Ve, it, xt, an, sn, Bn, Yi, ki, Ji, ci, Ci, Yr, kr, Xr, Ht, $n, qn, Sl, Gl, Cd, Zd, Ad, Wd, wd, Md, xl, Sd, Gd, xd, jd, vd, Ld, Vd, Yd, kd, Xd, Nd;
+ var Ve, ot, St, sn, un, Kn, Vi, Xi, Ji, ci, hi, Vr, Xr, Nr, Et, $n, qn, Gl, Sl, hd, Zd, Ad, Wd, wd, Md, xl, Gd, Sd, xd, jd, vd, Ld, Yd, Vd, Xd, Nd, kd;
try {
(Ve = i == null ? void 0 : i.abort) == null || Ve.call(i);
- } catch (_t) {
- (it = console.debug) == null || it.call(console, _t);
+ } catch (en) {
+ (ot = console.debug) == null || ot.call(console, en);
}
try {
- (xt = qe == null ? void 0 : qe._mjrStatusPollDispose) == null || xt.call(qe);
- } catch (_t) {
- (an = console.debug) == null || an.call(console, _t);
+ (St = qe == null ? void 0 : qe._mjrStatusPollDispose) == null || St.call(qe);
+ } catch (en) {
+ (sn = console.debug) == null || sn.call(console, en);
}
try {
- (sn = e._mjrVersionUpdateCleanup) == null || sn.call(e);
- } catch (_t) {
- (Bn = console.debug) == null || Bn.call(console, _t);
+ (un = e._mjrVersionUpdateCleanup) == null || un.call(e);
+ } catch (en) {
+ (Kn = console.debug) == null || Kn.call(console, en);
}
e._mjrVersionUpdateCleanup = null;
try {
- Le && clearTimeout(Le), Le = null;
- } catch (_t) {
- (Yi = console.debug) == null || Yi.call(console, _t);
+ Ye && clearTimeout(Ye), Ye = null;
+ } catch (en) {
+ (Vi = console.debug) == null || Vi.call(console, en);
}
try {
- Nn.dispose();
- } catch (_t) {
- (ki = console.debug) == null || ki.call(console, _t);
+ vn.dispose();
+ } catch (en) {
+ (Xi = console.debug) == null || Xi.call(console, en);
}
try {
- ae.dispose();
- } catch (_t) {
- (Ji = console.debug) == null || Ji.call(console, _t);
+ re.dispose();
+ } catch (en) {
+ (Ji = console.debug) == null || Ji.call(console, en);
}
Mo().scope === "grid" && wr(null);
try {
- (ci = xn == null ? void 0 : xn.dispose) == null || ci.call(xn);
- } catch (_t) {
- (Ci = console.debug) == null || Ci.call(console, _t);
+ (ci = Ln == null ? void 0 : Ln.dispose) == null || ci.call(Ln);
+ } catch (en) {
+ (hi = console.debug) == null || hi.call(console, en);
}
try {
- en == null || en();
- } catch (_t) {
- (Yr = console.debug) == null || Yr.call(console, _t);
+ Mn == null || Mn();
+ } catch (en) {
+ (Vr = console.debug) == null || Vr.call(console, en);
}
try {
- he == null || he();
- } catch (_t) {
- (kr = console.debug) == null || kr.call(console, _t);
+ Ie == null || Ie();
+ } catch (en) {
+ (Xr = console.debug) == null || Xr.call(console, en);
}
- he = null;
+ Ie = null;
try {
- (Xr = Xt == null ? void 0 : Xt.dispose) == null || Xr.call(Xt);
- } catch (_t) {
- (Ht = console.debug) == null || Ht.call(console, _t);
+ (Nr = kt == null ? void 0 : kt.dispose) == null || Nr.call(kt);
+ } catch (en) {
+ (Et = console.debug) == null || Et.call(console, en);
}
try {
- ($n = Pe == null ? void 0 : Pe.dispose) == null || $n.call(Pe);
- } catch (_t) {
- (qn = console.debug) == null || qn.call(console, _t);
+ ($n = He == null ? void 0 : He.dispose) == null || $n.call(He);
+ } catch (en) {
+ (qn = console.debug) == null || qn.call(console, en);
}
try {
- Zt && clearInterval(Zt), Zt = null;
- } catch (_t) {
- (Sl = console.debug) == null || Sl.call(console, _t);
+ At && clearInterval(At), At = null;
+ } catch (en) {
+ (Gl = console.debug) == null || Gl.call(console, en);
}
try {
- tn && clearTimeout(tn), tn = null;
- } catch (_t) {
- (Gl = console.debug) == null || Gl.call(console, _t);
+ Ht && clearTimeout(Ht), Ht = null;
+ } catch (en) {
+ (Sl = console.debug) == null || Sl.call(console, en);
}
try {
- (Cd = ne == null ? void 0 : ne.dispose) == null || Cd.call(ne);
- } catch (_t) {
- (Zd = console.debug) == null || Zd.call(console, _t);
+ (hd = je == null ? void 0 : je.dispose) == null || hd.call(je);
+ } catch (en) {
+ (Zd = console.debug) == null || Zd.call(console, en);
}
- ne = null;
+ je = null;
try {
- (Ad = re == null ? void 0 : re.dispose) == null || Ad.call(re);
- } catch (_t) {
- (Wd = console.debug) == null || Wd.call(console, _t);
+ (Ad = Gt == null ? void 0 : Gt.dispose) == null || Ad.call(Gt);
+ } catch (en) {
+ (Wd = console.debug) == null || Wd.call(console, en);
}
- re = null;
+ Gt = null;
try {
(wd = me == null ? void 0 : me._mjrSummaryBarDispose) == null || wd.call(me);
- } catch (_t) {
- (Md = console.debug) == null || Md.call(console, _t);
+ } catch (en) {
+ (Md = console.debug) == null || Md.call(console, en);
}
try {
- (Sd = (xl = me == null ? void 0 : me._mjrSummaryBarObserver) == null ? void 0 : xl.disconnect) == null || Sd.call(xl);
- } catch (_t) {
- (Gd = console.debug) == null || Gd.call(console, _t);
+ (Gd = (xl = me == null ? void 0 : me._mjrSummaryBarObserver) == null ? void 0 : xl.disconnect) == null || Gd.call(xl);
+ } catch (en) {
+ (Sd = console.debug) == null || Sd.call(console, en);
}
try {
(xd = me == null ? void 0 : me._mjrGridContextMenuUnbind) == null || xd.call(me);
- } catch (_t) {
- (jd = console.debug) == null || jd.call(console, _t);
+ } catch (en) {
+ (jd = console.debug) == null || jd.call(console, en);
}
try {
- Gt == null || Gt();
- } catch (_t) {
- (vd = console.debug) == null || vd.call(console, _t);
+ Vt == null || Vt();
+ } catch (en) {
+ (vd = console.debug) == null || vd.call(console, en);
}
try {
- vt == null || vt();
- } catch (_t) {
- (Ld = console.debug) == null || Ld.call(console, _t);
+ xt == null || xt();
+ } catch (en) {
+ (Ld = console.debug) == null || Ld.call(console, en);
}
try {
- } catch (_t) {
- (Vd = console.debug) == null || Vd.call(console, _t);
+ } catch (en) {
+ (Yd = console.debug) == null || Yd.call(console, en);
}
try {
- me && Wt(me);
- } catch (_t) {
- (Yd = console.debug) == null || Yd.call(console, _t);
+ me && Rt(me);
+ } catch (en) {
+ (Vd = console.debug) == null || Vd.call(console, en);
}
- ja(me), me = null;
+ va(me), me = null;
try {
o.dispose();
- } catch (_t) {
- (kd = console.debug) == null || kd.call(console, _t);
+ } catch (en) {
+ (Xd = console.debug) == null || Xd.call(console, en);
}
try {
e._mjrPopoverManager === o && (e._mjrPopoverManager = null);
- } catch (_t) {
- (Xd = console.debug) == null || Xd.call(console, _t);
+ } catch (en) {
+ (Nd = console.debug) == null || Nd.call(console, en);
}
try {
r && l && (r.style.height = l.height, r.style.minHeight = l.minHeight, r.style.width = l.width);
- } catch (_t) {
- (Nd = console.debug) == null || Nd.call(console, _t);
+ } catch (en) {
+ (kd = console.debug) == null || kd.call(console, en);
}
};
- const ve = async () => {
+ const Ge = async () => {
var Ve;
- await ((Ve = ne == null ? void 0 : ne.queuedReload) == null ? void 0 : Ve.call(ne));
- }, Fe = ((An = ne == null ? void 0 : ne.createCountersUpdateHandler) == null ? void 0 : An.call(ne, {
+ await ((Ve = je == null ? void 0 : je.queuedReload) == null ? void 0 : Ve.call(je));
+ }, Je = ((Wn = je == null ? void 0 : je.createCountersUpdateHandler) == null ? void 0 : Wn.call(je, {
state: a,
getStableQuery: () => {
var Ve;
return String(((Ve = me == null ? void 0 : me.dataset) == null ? void 0 : Ve.mjrQuery) || "*").trim() || "*";
},
- getRecentUserInteractionAt: () => Number(Ot || 0)
+ getRecentUserInteractionAt: () => Number(Pt || 0)
})) ?? (async () => {
- await ve();
+ await Ge();
});
$0(
- Ue,
- Te,
+ Pe,
+ Re,
qe,
- Oe,
- Fe,
+ rt,
+ Je,
() => ({
scope: c.read("scope", a.scope),
customRootId: c.read("customRootId", a.customRootId)
})
- ), pe.setActiveTabStyles(), (vn = Pt == null ? void 0 : Pt.renderBreadcrumb) == null || vn.call(Pt), Yt.refreshCustomRoots().catch(() => {
- }), he = (un = ne == null ? void 0 : ne.bindSearchInput) == null ? void 0 : un.call(ne, {
- searchInputEl: se,
+ ), ye.setActiveTabStyles(), (Yn = Qt == null ? void 0 : Qt.renderBreadcrumb) == null || Yn.call(Qt), Wt.refreshCustomRoots().catch(() => {
+ }), Ie = (In = je == null ? void 0 : je.bindSearchInput) == null ? void 0 : In.call(je, {
+ searchInputEl: de,
lifecycleSignal: (i == null ? void 0 : i.signal) || null,
debounceMs: 120,
onQueryChanged: () => {
- Yn({ reload: !1 }), Ie();
+ Xt({ reload: !1 }), oe();
},
onBeforeReload: () => {
- Yn({ reload: !1 }), Ie();
+ Xt({ reload: !1 }), oe();
},
startSearchTimer: () => {
- Is("searchQuery");
+ bs("searchQuery");
},
reloadGrid: () => {
- We.reloadGrid();
+ Ce.reloadGrid();
}
});
let _e = !1;
try {
- _e = await mt(
+ _e = await bt(
me,
{
scope: s("scope", a.scope || "output") || "output",
query: String(
- Cs(
+ Zs(
c.read("searchQuery", a.searchQuery || "*") || "*"
) || "*"
),
@@ -35448,52 +35475,52 @@ async function p2(e, { useComfyThemeUI: t = !0, external: n = {} } = {}) {
}
);
} catch (Ve) {
- (Mn = console.debug) == null || Mn.call(console, Ve);
+ (Gn = console.debug) == null || Gn.call(console, Ve);
}
- let et = !1;
+ let Qe = !1;
try {
- et = !!((yn = me == null ? void 0 : me.querySelector) != null && yn.call(me, ".mjr-asset-card"));
+ Qe = !!((fn = me == null ? void 0 : me.querySelector) != null && fn.call(me, ".mjr-asset-card"));
} catch (Ve) {
- (Ut = console.debug) == null || Ut.call(console, Ve);
+ (Kt = console.debug) == null || Kt.call(console, Ve);
}
- const tt = _e || et ? Promise.resolve({
+ const et = _e || Qe ? Promise.resolve({
ok: !0,
hydrated: !!_e,
- cached: !!et
- }) : We.reloadGrid();
+ cached: !!Qe
+ }) : Ce.reloadGrid();
try {
- await Ne();
+ await se();
} catch (Ve) {
(Jt = console.debug) == null || Jt.call(console, Ve);
}
try {
- Zt = setInterval(() => {
- var Ve, it;
+ At = setInterval(() => {
+ var Ve, ot;
try {
if ((Ve = i == null ? void 0 : i.signal) != null && Ve.aborted) return;
- } catch (xt) {
- (it = console.debug) == null || it.call(console, xt);
+ } catch (St) {
+ (ot = console.debug) == null || ot.call(console, St);
}
- Ne().catch(() => {
+ se().catch(() => {
});
}, 15e3);
} catch (Ve) {
(ro = console.debug) == null || ro.call(console, Ve);
}
- (lo = ne == null ? void 0 : ne.restoreUiState) == null || lo.call(ne, tt);
+ (lo = je == null ? void 0 : je.restoreUiState) == null || lo.call(je, et);
try {
window.__mjrLastAssetUpsert = 0, window.__mjrLastAssetUpsertCount = 0;
} catch (Ve) {
(ao = console.debug) == null || ao.call(console, Ve);
}
- tn = ((hi = ne == null ? void 0 : ne.scheduleAutoLoad) == null ? void 0 : hi.call(ne, tt, 2e3)) ?? null;
- const st = Nb("panelRender", "gridRender");
- return Fb(st), { gridContainer: me };
+ Ht = ((Ci = je == null ? void 0 : je.scheduleAutoLoad) == null ? void 0 : Ci.call(je, et, 300)) ?? null;
+ const mt = kb("panelRender", "gridRender");
+ return Ob(mt), { gridContainer: me };
}
-const y2 = {
+const yM = {
__name: "StatusSection",
setup(e, { expose: t }) {
- const n = O0({ getScanContext: null }), i = n.querySelector("#mjr-status-dot"), o = n.querySelector("#mjr-status-text"), r = n.querySelector("#mjr-status-capabilities");
+ const n = F0({ getScanContext: null }), i = n.querySelector("#mjr-status-dot"), o = n.querySelector("#mjr-status-text"), r = n.querySelector("#mjr-status-capabilities");
return _n(() => {
var l;
try {
@@ -35502,7 +35529,7 @@ const y2 = {
}
}), t({ statusSection: n, statusDot: i, statusText: o, capabilitiesSection: r }), (l, a) => null;
}
-}, f2 = { class: "mjr-am-search-pill" }, h2 = ["placeholder", "title", "list"], C2 = ["id"], Z2 = { class: "mjr-am-search-tools" }, A2 = { class: "mjr-popover-anchor" }, W2 = ["disabled", "aria-disabled", "title"], w2 = { class: "mjr-popover-anchor" }, M2 = ["title"], Ym = "Ctrl/Cmd+F, Ctrl/Cmd+K, Ctrl/Cmd+H", S2 = {
+}, fM = { class: "mjr-am-search-pill" }, CM = ["placeholder", "title", "list"], hM = ["id"], ZM = { class: "mjr-am-search-tools" }, AM = { class: "mjr-popover-anchor" }, WM = ["disabled", "aria-disabled", "title"], wM = { class: "mjr-popover-anchor" }, MM = ["title"], Vm = "Ctrl/Cmd+F, Ctrl/Cmd+K, Ctrl/Cmd+H", GM = {
__name: "SearchBar",
props: {
/** Callback when similar search is triggered */
@@ -35510,19 +35537,19 @@ const y2 = {
},
emits: ["similar", "search-change"],
setup(e, { expose: t, emit: n }) {
- const i = e, o = n, r = Go(), l = Ae(null), a = Ae(null), c = Ae(null), s = Ae(null), d = Ae(null), u = Xs("mjr-search-autocomplete-", 8), I = Ae(!1), y = Ae(!0), S = ze(() => I.value ? m("search.semanticPlaceholder", "Describe what you're looking for...") : m("search.placeholder", "Search assets...")), Z = ze(() => I.value ? Sr(
+ const i = e, o = n, r = So(), l = We(null), a = We(null), c = We(null), s = We(null), d = We(null), u = ks("mjr-search-autocomplete-", 8), I = We(!1), A = We(!0), h = ze(() => I.value ? m("search.semanticPlaceholder", "Describe what you're looking for...") : m("search.placeholder", "Search assets...")), S = ze(() => I.value ? Gr(
m(
"search.semanticTitle",
"AI semantic search — describe your image in natural language"
),
- Ym
- ) : Sr(
+ Vm
+ ) : Gr(
m(
"search.title",
"Search by filename, tags, or attributes (e.g. rating:5, ext:png)"
),
- Ym
- )), C = ze(() => I.value ? {
+ Vm
+ )), W = ze(() => I.value ? {
background: "rgba(0, 188, 212, 0.2)",
borderColor: "rgba(0, 188, 212, 0.6)",
color: "#00BCD4",
@@ -35537,33 +35564,33 @@ const y2 = {
try {
if (!a.value) return;
a.value.dataset.mjrSemanticMode = I.value ? "1" : "0";
- } catch (W) {
- (G = console.debug) == null || G.call(console, W);
+ } catch (Z) {
+ (G = console.debug) == null || G.call(console, Z);
}
- }, A = (G = {}) => {
- var W;
+ }, y = (G = {}) => {
+ var Z;
o("search-change", {
- query: ((W = a.value) == null ? void 0 : W.value) || "",
+ query: ((Z = a.value) == null ? void 0 : Z.value) || "",
semantic: I.value,
...G
});
}, p = () => {
- var G, W, f;
- if (y.value) {
+ var G, Z, f;
+ if (A.value) {
I.value = !I.value, g();
try {
- (W = (G = a.value) == null ? void 0 : G.dispatchEvent) == null || W.call(G, new Event("input", { bubbles: !0 }));
+ (Z = (G = a.value) == null ? void 0 : G.dispatchEvent) == null || Z.call(G, new Event("input", { bubbles: !0 }));
} catch (X) {
(f = console.debug) == null || f.call(console, X);
}
- A({ semantic: I.value });
+ y({ semantic: I.value });
}
}, b = async (G) => {
- const W = G.target.value || "";
- r.searchQuery = W, g(), A({ query: W }), await L();
- }, L = $c(async () => {
- var W;
- const G = (((W = a.value) == null ? void 0 : W.value) || "").trim();
+ const Z = G.target.value || "";
+ r.searchQuery = Z, g(), y({ query: Z }), await L();
+ }, L = es(async () => {
+ var Z;
+ const G = (((Z = a.value) == null ? void 0 : Z.value) || "").trim();
if (!(I.value || G.length < 2 || G.includes(":")))
try {
const f = await Ft("/mjr/am/autocomplete", { q: G, limit: 10 });
@@ -35573,25 +35600,25 @@ const y2 = {
}));
} catch {
}
- }, 300), h = () => {
+ }, 300), C = () => {
var G;
o("similar"), (G = i.onSimilarSearch) == null || G.call(i);
};
- return cn(
+ return dn(
() => r.searchQuery,
(G) => {
a.value && a.value.value !== G && (a.value.value = G);
}
- ), cn(y, (G) => {
+ ), dn(A, (G) => {
!G && I.value && (I.value = !1), g();
- }), cn(I, () => {
+ }), dn(I, () => {
g();
}), Dn(() => {
var G;
try {
a.value && (a.value.value = r.searchQuery || "");
- } catch (W) {
- (G = console.debug) == null || G.call(console, W);
+ } catch (Z) {
+ (G = console.debug) == null || G.call(console, Z);
}
g();
}), t({
@@ -35608,61 +35635,61 @@ const y2 = {
return d.value;
},
setSemanticEnabled: (G) => {
- y.value = !!G, g();
+ A.value = !!G, g();
}
- }), (G, W) => (be(), Ce("div", {
+ }), (G, Z) => (be(), Ze("div", {
ref_key: "searchSectionRef",
ref: l,
class: "mjr-am-search"
}, [
- ie("div", f2, [
- W[0] || (W[0] = ie("span", { class: "mjr-am-search-icon" }, [
- ie("i", { class: "pi pi-search" })
+ te("div", fM, [
+ Z[0] || (Z[0] = te("span", { class: "mjr-am-search-icon" }, [
+ te("i", { class: "pi pi-search" })
], -1)),
- ie("input", {
+ te("input", {
ref_key: "searchInputRef",
ref: a,
type: "text",
id: "mjr-search-input",
class: "mjr-input",
- placeholder: S.value,
- title: Z.value,
- list: xe(u),
+ placeholder: h.value,
+ title: S.value,
+ list: ve(u),
onInput: b
- }, null, 40, h2),
- ie("datalist", {
+ }, null, 40, CM),
+ te("datalist", {
ref_key: "dataListRef",
ref: c,
- id: xe(u)
- }, null, 8, C2)
+ id: ve(u)
+ }, null, 8, hM)
]),
- ie("div", Z2, [
- ie("div", A2, [
- ie("button", {
+ te("div", ZM, [
+ te("div", AM, [
+ te("button", {
ref_key: "semanticBtnRef",
ref: d,
type: "button",
class: "mjr-icon-btn mjr-ai-control",
- disabled: !y.value,
- "aria-disabled": !y.value,
- title: y.value ? xe(m)("search.semanticToggle", "Toggle AI semantic search (CLIP-based)") : xe(m)("search.semanticDisabled", "AI semantic search is disabled in settings"),
- style: Lt(C.value),
+ disabled: !A.value,
+ "aria-disabled": !A.value,
+ title: A.value ? ve(m)("search.semanticToggle", "Toggle AI semantic search (CLIP-based)") : ve(m)("search.semanticDisabled", "AI semantic search is disabled in settings"),
+ style: vt(W.value),
onClick: p
- }, [...W[1] || (W[1] = [
- ie("i", { class: "pi pi-sparkles" }, null, -1)
- ])], 12, W2)
+ }, [...Z[1] || (Z[1] = [
+ te("i", { class: "pi pi-sparkles" }, null, -1)
+ ])], 12, WM)
]),
- ie("div", w2, [
- ie("button", {
+ te("div", wM, [
+ te("button", {
ref_key: "similarBtnRef",
ref: s,
type: "button",
class: "mjr-icon-btn mjr-ai-control",
- title: xe(m)("search.findSimilar", "Find Similar"),
- onClick: h
- }, [...W[2] || (W[2] = [
- ie("i", { class: "pi pi-clone" }, null, -1)
- ])], 8, M2)
+ title: ve(m)("search.findSimilar", "Find Similar"),
+ onClick: C
+ }, [...Z[2] || (Z[2] = [
+ te("i", { class: "pi pi-clone" }, null, -1)
+ ])], 8, MM)
]),
jl(G.$slots, "filter-anchor"),
jl(G.$slots, "sort-anchor"),
@@ -35671,16 +35698,16 @@ const y2 = {
])
], 512));
}
-}, G2 = {
+}, SM = {
class: "mjr-popover mjr-sort-popover",
style: { display: "none" }
-}, x2 = {
+}, xM = {
class: "mjr-menu",
style: { display: "grid", gap: "6px" }
-}, j2 = ["onClick"], v2 = { class: "mjr-menu-item-label" }, L2 = {
+}, jM = ["onClick"], vM = { class: "mjr-menu-item-label" }, LM = {
__name: "SortPopover",
setup(e) {
- const t = Go(), n = ze(() => [
+ const t = So(), n = ze(() => [
{ key: "mtime_desc", label: m("sort.newest"), icon: "pi pi-sort-amount-down" },
{ key: "mtime_asc", label: m("sort.oldest"), icon: "pi pi-sort-amount-up-alt" },
{ key: "name_asc", label: m("sort.nameAZ"), icon: "pi pi-sort-alpha-down" },
@@ -35697,107 +35724,107 @@ const y2 = {
(l = console.debug) == null || l.call(console, a);
}
};
- return (r, l) => (be(), Ce("div", G2, [
- ie("div", x2, [
- (be(!0), Ce(Nt, null, Cn(n.value, (a) => (be(), Ce("button", {
+ return (r, l) => (be(), Ze("div", SM, [
+ te("div", xM, [
+ (be(!0), Ze(Nt, null, Zn(n.value, (a) => (be(), Ze("button", {
key: a.key,
type: "button",
- class: Zn(["mjr-menu-item", { "is-active": i.value === a.key }]),
+ class: An(["mjr-menu-item", { "is-active": i.value === a.key }]),
onClick: (c) => o(a.key)
}, [
- ie("span", v2, Ye(a.label), 1),
- ie("i", {
- class: Zn([a.icon, "mjr-menu-item-check"]),
- style: Lt({ opacity: i.value === a.key ? 1 : 0 })
+ te("span", vM, Ne(a.label), 1),
+ te("i", {
+ class: An([a.icon, "mjr-menu-item-check"]),
+ style: vt({ opacity: i.value === a.key ? 1 : 0 })
}, null, 6)
- ], 10, j2))), 128))
+ ], 10, jM))), 128))
])
]));
}
-}, V2 = {
+}, YM = {
class: "mjr-popover mjr-filter-popover",
style: { display: "none" }
-}, Y2 = ["aria-expanded"], k2 = { class: "mjr-filter-group-title" }, X2 = {
+}, VM = ["aria-expanded"], XM = { class: "mjr-filter-group-title" }, NM = {
class: "mjr-filter-group-chevron",
"aria-hidden": "true"
-}, N2 = { class: "mjr-filter-group-body" }, R2 = { class: "mjr-popover-row" }, F2 = { class: "mjr-popover-label" }, O2 = ["title", "value"], z2 = { value: "" }, J2 = { value: "image" }, T2 = { value: "video" }, B2 = { value: "audio" }, U2 = { class: "mjr-popover-row" }, K2 = { class: "mjr-popover-label" }, D2 = ["title"], E2 = ["checked"], H2 = { class: "mjr-popover-row" }, q2 = { class: "mjr-popover-label" }, P2 = ["value"], Q2 = { value: "" }, _2 = { class: "mjr-popover-row" }, $2 = { class: "mjr-popover-label" }, eS = ["title", "value"], tS = { value: "0" }, nS = ["aria-expanded"], iS = { class: "mjr-filter-group-title" }, oS = {
+}, kM = { class: "mjr-filter-group-body" }, RM = { class: "mjr-popover-row" }, OM = { class: "mjr-popover-label" }, FM = ["title", "value"], zM = { value: "" }, JM = { value: "image" }, TM = { value: "video" }, KM = { value: "audio" }, BM = { class: "mjr-popover-row" }, UM = { class: "mjr-popover-label" }, DM = ["title"], HM = ["checked"], EM = { class: "mjr-popover-row" }, qM = { class: "mjr-popover-label" }, PM = ["value"], QM = { value: "" }, _M = { class: "mjr-popover-row" }, $M = { class: "mjr-popover-label" }, eG = ["title", "value"], tG = { value: "0" }, nG = ["aria-expanded"], iG = { class: "mjr-filter-group-title" }, oG = {
class: "mjr-filter-group-chevron",
"aria-hidden": "true"
-}, rS = { class: "mjr-filter-group-body" }, lS = { class: "mjr-popover-row mjr-popover-row--3col" }, aS = { class: "mjr-popover-label" }, cS = ["placeholder", "value"], sS = ["placeholder", "value"], dS = { class: "mjr-popover-row" }, uS = { class: "mjr-popover-label" }, mS = ["value"], gS = { value: "" }, IS = { class: "mjr-popover-row mjr-popover-row--3col" }, bS = { class: "mjr-popover-label" }, pS = ["placeholder", "title", "value"], yS = ["placeholder", "title", "value"], fS = { class: "mjr-popover-row mjr-popover-row--3col" }, hS = { class: "mjr-popover-label" }, CS = ["placeholder", "title", "value"], ZS = ["placeholder", "title", "value"], AS = ["aria-expanded"], WS = { class: "mjr-filter-group-title" }, wS = {
+}, rG = { class: "mjr-filter-group-body" }, lG = { class: "mjr-popover-row mjr-popover-row--3col" }, aG = { class: "mjr-popover-label" }, cG = ["placeholder", "value"], sG = ["placeholder", "value"], dG = { class: "mjr-popover-row" }, uG = { class: "mjr-popover-label" }, mG = ["value"], gG = { value: "" }, IG = { class: "mjr-popover-row mjr-popover-row--3col" }, bG = { class: "mjr-popover-label" }, pG = ["placeholder", "title", "value"], yG = ["placeholder", "title", "value"], fG = { class: "mjr-popover-row mjr-popover-row--3col" }, CG = { class: "mjr-popover-label" }, hG = ["placeholder", "title", "value"], ZG = ["placeholder", "title", "value"], AG = ["aria-expanded"], WG = { class: "mjr-filter-group-title" }, wG = {
class: "mjr-filter-group-chevron",
"aria-hidden": "true"
-}, MS = { class: "mjr-filter-group-body" }, SS = { class: "mjr-popover-row" }, GS = { class: "mjr-popover-label" }, xS = ["title", "value"], jS = { value: "" }, vS = { value: "today" }, LS = { value: "this_week" }, VS = { value: "this_month" }, YS = { class: "mjr-popover-row" }, kS = { class: "mjr-popover-label" }, XS = ["value"], NS = {
+}, MG = { class: "mjr-filter-group-body" }, GG = { class: "mjr-popover-row" }, SG = { class: "mjr-popover-label" }, xG = ["title", "value"], jG = { value: "" }, vG = { value: "today" }, LG = { value: "this_week" }, YG = { value: "this_month" }, VG = { class: "mjr-popover-row" }, XG = { class: "mjr-popover-label" }, NG = ["value"], kG = {
__name: "FilterPopover",
setup(e, { expose: t }) {
- const n = Go(), i = Ae(null), o = Ae(null), r = Ae(null), l = Ae(null), a = Ae(null), c = Ae(null), s = Ae(null), d = Ae(null), u = Ae(null), I = Ae(null), y = Ae(null), S = Ae(null), Z = Ae(null), C = Ae(null), g = Ae({
+ const n = So(), i = We(null), o = We(null), r = We(null), l = We(null), a = We(null), c = We(null), s = We(null), d = We(null), u = We(null), I = We(null), A = We(null), h = We(null), S = We(null), W = We(null), g = We({
core: !1,
media: !1,
time: !1
- }), A = ze(() => {
- const F = Number(n.minWidth || 0) || 0, N = Number(n.minHeight || 0) || 0;
- return F >= 3840 && N >= 2160 ? "uhd" : F >= 2560 && N >= 1440 ? "qhd" : F >= 1920 && N >= 1080 ? "fhd" : F >= 1280 && N >= 720 ? "hd" : "";
+ }), y = ze(() => {
+ const O = Number(n.minWidth || 0) || 0, k = Number(n.minHeight || 0) || 0;
+ return O >= 3840 && k >= 2160 ? "uhd" : O >= 2560 && k >= 1440 ? "qhd" : O >= 1920 && k >= 1080 ? "fhd" : O >= 1280 && k >= 720 ? "hd" : "";
}), p = ze(() => {
- const F = String(n.dateExactFilter || "").trim().length > 0;
+ const O = String(n.dateExactFilter || "").trim().length > 0;
return {
- "mjr-agenda-filled": F,
- "mjr-agenda-empty": !F
+ "mjr-agenda-filled": O,
+ "mjr-agenda-empty": !O
};
- }), b = (F) => {
- const N = String(F ?? "").trim();
- if (!N) return 0;
- const V = N.replace(",", "."), k = Number(V);
- return Number.isFinite(k) ? k : 0;
+ }), b = (O) => {
+ const k = String(O ?? "").trim();
+ if (!k) return 0;
+ const Y = k.replace(",", "."), N = Number(Y);
+ return Number.isFinite(N) ? N : 0;
}, L = () => {
- var F;
+ var O;
try {
window.dispatchEvent(new CustomEvent("mjr:filters-changed"));
- } catch (N) {
- (F = console.debug) == null || F.call(console, N);
+ } catch (k) {
+ (O = console.debug) == null || O.call(console, k);
}
- }, h = (F) => {
- var N;
- n.kindFilter = String(((N = F == null ? void 0 : F.target) == null ? void 0 : N.value) || ""), L();
- }, G = (F) => {
- var N;
- n.workflowOnly = !!((N = F == null ? void 0 : F.target) != null && N.checked), L();
- }, W = (F) => {
- var N;
- n.workflowType = String(((N = F == null ? void 0 : F.target) == null ? void 0 : N.value) || "").trim().toUpperCase(), L();
- }, f = (F) => {
- var N;
- n.minRating = Number(((N = F == null ? void 0 : F.target) == null ? void 0 : N.value) || 0) || 0, L();
+ }, C = (O) => {
+ var k;
+ n.kindFilter = String(((k = O == null ? void 0 : O.target) == null ? void 0 : k.value) || ""), L();
+ }, G = (O) => {
+ var k;
+ n.workflowOnly = !!((k = O == null ? void 0 : O.target) != null && k.checked), L();
+ }, Z = (O) => {
+ var k;
+ n.workflowType = String(((k = O == null ? void 0 : O.target) == null ? void 0 : k.value) || "").trim().toUpperCase(), L();
+ }, f = (O) => {
+ var k;
+ n.minRating = Number(((k = O == null ? void 0 : O.target) == null ? void 0 : k.value) || 0) || 0, L();
}, X = () => {
- var V, k;
- const F = b(((V = a.value) == null ? void 0 : V.value) || 0);
- let N = b(((k = c.value) == null ? void 0 : k.value) || 0);
- N > 0 && F > 0 && N < F && (N = F, c.value && (c.value.value = String(N))), n.minSizeMB = F > 0 ? F : 0, n.maxSizeMB = N > 0 ? N : 0, L();
+ var Y, N;
+ const O = b(((Y = a.value) == null ? void 0 : Y.value) || 0);
+ let k = b(((N = c.value) == null ? void 0 : N.value) || 0);
+ k > 0 && O > 0 && k < O && (k = O, c.value && (c.value.value = String(k))), n.minSizeMB = O > 0 ? O : 0, n.maxSizeMB = k > 0 ? k : 0, L();
}, x = () => {
- var K, z, B, J;
- const F = Math.max(0, Math.round(b(((K = d.value) == null ? void 0 : K.value) || 0))), N = Math.max(0, Math.round(b(((z = u.value) == null ? void 0 : z.value) || 0)));
- let V = Math.max(0, Math.round(b(((B = I.value) == null ? void 0 : B.value) || 0))), k = Math.max(0, Math.round(b(((J = y.value) == null ? void 0 : J.value) || 0)));
- V > 0 && F > 0 && V < F && (V = F, I.value && (I.value.value = String(V))), k > 0 && N > 0 && k < N && (k = N, y.value && (y.value.value = String(k))), n.minWidth = F, n.minHeight = N, n.maxWidth = V, n.maxHeight = k, L();
- }, T = (F) => {
+ var U, z, T, J;
+ const O = Math.max(0, Math.round(b(((U = d.value) == null ? void 0 : U.value) || 0))), k = Math.max(0, Math.round(b(((z = u.value) == null ? void 0 : z.value) || 0)));
+ let Y = Math.max(0, Math.round(b(((T = I.value) == null ? void 0 : T.value) || 0))), N = Math.max(0, Math.round(b(((J = A.value) == null ? void 0 : J.value) || 0)));
+ Y > 0 && O > 0 && Y < O && (Y = O, I.value && (I.value.value = String(Y))), N > 0 && k > 0 && N < k && (N = k, A.value && (A.value.value = String(N))), n.minWidth = O, n.minHeight = k, n.maxWidth = Y, n.maxHeight = N, L();
+ }, K = (O) => {
var z;
- const N = String(((z = F == null ? void 0 : F.target) == null ? void 0 : z.value) || "").trim(), V = {
+ const k = String(((z = O == null ? void 0 : O.target) == null ? void 0 : z.value) || "").trim(), Y = {
hd: [1280, 720],
fhd: [1920, 1080],
qhd: [2560, 1440],
uhd: [3840, 2160]
- }, [k, K] = V[N] || [0, 0];
- n.minWidth = Number(k || 0), n.minHeight = Number(K || 0), n.maxWidth = 0, n.maxHeight = 0, d.value && (d.value.value = n.minWidth || ""), u.value && (u.value.value = n.minHeight || ""), I.value && (I.value.value = ""), y.value && (y.value.value = ""), L();
- }, v = (F) => {
- var N;
- n.dateRangeFilter = String(((N = F == null ? void 0 : F.target) == null ? void 0 : N.value) || ""), n.dateRangeFilter && n.dateExactFilter && (n.dateExactFilter = "", C.value && (C.value.value = "")), L();
- }, w = (F) => {
- var N;
- n.dateExactFilter = String(((N = F == null ? void 0 : F.target) == null ? void 0 : N.value) || "").trim(), L();
- }, R = (F) => {
- const N = String(F || "").trim().toLowerCase();
- !N || !(N in g.value) || (g.value = {
+ }, [N, U] = Y[k] || [0, 0];
+ n.minWidth = Number(N || 0), n.minHeight = Number(U || 0), n.maxWidth = 0, n.maxHeight = 0, d.value && (d.value.value = n.minWidth || ""), u.value && (u.value.value = n.minHeight || ""), I.value && (I.value.value = ""), A.value && (A.value.value = ""), L();
+ }, j = (O) => {
+ var k;
+ n.dateRangeFilter = String(((k = O == null ? void 0 : O.target) == null ? void 0 : k.value) || ""), n.dateRangeFilter && n.dateExactFilter && (n.dateExactFilter = "", W.value && (W.value.value = "")), L();
+ }, w = (O) => {
+ var k;
+ n.dateExactFilter = String(((k = O == null ? void 0 : O.target) == null ? void 0 : k.value) || "").trim(), L();
+ }, R = (O) => {
+ const k = String(O || "").trim().toLowerCase();
+ !k || !(k in g.value) || (g.value = {
...g.value,
- [N]: !g.value[N]
+ [k]: !g.value[k]
});
- }, Y = (F) => !!g.value[String(F || "").trim().toLowerCase()];
+ }, V = (O) => !!g.value[String(O || "").trim().toLowerCase()];
return t({
get kindSelect() {
return i.value;
@@ -35830,261 +35857,261 @@ const y2 = {
return I.value;
},
get maxHeightInput() {
- return y.value;
+ return A.value;
},
get dateRangeSelect() {
- return S.value;
+ return h.value;
},
get dateExactInput() {
- return C.value;
+ return W.value;
},
get agendaContainer() {
- return Z.value;
+ return S.value;
}
- }), (F, N) => (be(), Ce("div", V2, [
- ie("div", {
- class: Zn(["mjr-filter-group", { "is-open": Y("core") }])
+ }), (O, k) => (be(), Ze("div", YM, [
+ te("div", {
+ class: An(["mjr-filter-group", { "is-open": V("core") }])
}, [
- ie("button", {
+ te("button", {
type: "button",
class: "mjr-filter-group-toggle",
- "aria-expanded": String(Y("core")),
- onClick: N[0] || (N[0] = (V) => R("core"))
+ "aria-expanded": String(V("core")),
+ onClick: k[0] || (k[0] = (Y) => R("core"))
}, [
- ie("span", k2, Ye(xe(m)("group.core", "Core")), 1),
- ie("span", X2, Ye(Y("core") ? "▾" : "▸"), 1)
- ], 8, Y2),
- Ko(ie("div", N2, [
- ie("div", R2, [
- ie("div", F2, Ye(xe(m)("label.type")), 1),
- ie("select", {
+ te("span", XM, Ne(ve(m)("group.core", "Core")), 1),
+ te("span", NM, Ne(V("core") ? "▾" : "▸"), 1)
+ ], 8, VM),
+ Uo(te("div", kM, [
+ te("div", RM, [
+ te("div", OM, Ne(ve(m)("label.type")), 1),
+ te("select", {
ref_key: "kindSelectRef",
ref: i,
class: "mjr-select",
- title: xe(m)("tooltip.filterByFileType", "Filter by file type"),
- value: xe(n).kindFilter,
- onChange: h
+ title: ve(m)("tooltip.filterByFileType", "Filter by file type"),
+ value: ve(n).kindFilter,
+ onChange: C
}, [
- ie("option", z2, Ye(xe(m)("filter.all")), 1),
- ie("option", J2, Ye(xe(m)("filter.images", "Images")), 1),
- ie("option", T2, Ye(xe(m)("filter.videos", "Videos")), 1),
- ie("option", B2, Ye(xe(m)("filter.audio", "Audio")), 1),
- N[3] || (N[3] = ie("option", { value: "model3d" }, "3D", -1))
- ], 40, O2)
+ te("option", zM, Ne(ve(m)("filter.all")), 1),
+ te("option", JM, Ne(ve(m)("filter.images", "Images")), 1),
+ te("option", TM, Ne(ve(m)("filter.videos", "Videos")), 1),
+ te("option", KM, Ne(ve(m)("filter.audio", "Audio")), 1),
+ k[3] || (k[3] = te("option", { value: "model3d" }, "3D", -1))
+ ], 40, FM)
]),
- ie("div", U2, [
- ie("div", K2, Ye(xe(m)("label.workflow")), 1),
- ie("label", {
+ te("div", BM, [
+ te("div", UM, Ne(ve(m)("label.workflow")), 1),
+ te("label", {
class: "mjr-popover-toggle",
- title: xe(m)("tooltip.filterWorkflowOnly", "Show only assets with embedded workflow data")
+ title: ve(m)("tooltip.filterWorkflowOnly", "Show only assets with embedded workflow data")
}, [
- ie("input", {
+ te("input", {
ref_key: "wfCheckboxRef",
ref: o,
type: "checkbox",
- checked: xe(n).workflowOnly,
+ checked: ve(n).workflowOnly,
onChange: G
- }, null, 40, E2),
- ie("span", null, Ye(xe(m)("filter.onlyWithWorkflow")), 1)
- ], 8, D2)
+ }, null, 40, HM),
+ te("span", null, Ne(ve(m)("filter.onlyWithWorkflow")), 1)
+ ], 8, DM)
]),
- ie("div", H2, [
- ie("div", q2, Ye(xe(m)("label.workflowType", "Workflow type")), 1),
- ie("select", {
+ te("div", EM, [
+ te("div", qM, Ne(ve(m)("label.workflowType", "Workflow type")), 1),
+ te("select", {
ref_key: "workflowTypeSelectRef",
ref: r,
class: "mjr-select",
- value: xe(n).workflowType,
- onChange: W
+ value: ve(n).workflowType,
+ onChange: Z
}, [
- ie("option", Q2, Ye(xe(m)("filter.any", "Any")), 1),
- N[4] || (N[4] = Fd('', 10))
- ], 40, P2)
+ te("option", QM, Ne(ve(m)("filter.any", "Any")), 1),
+ k[4] || (k[4] = Od('', 10))
+ ], 40, PM)
]),
- ie("div", _2, [
- ie("div", $2, Ye(xe(m)("label.rating")), 1),
- ie("select", {
+ te("div", _M, [
+ te("div", $M, Ne(ve(m)("label.rating")), 1),
+ te("select", {
ref_key: "ratingSelectRef",
ref: l,
class: "mjr-select",
- title: xe(m)("tooltip.filterMinRating", "Filter by minimum rating"),
- value: String(xe(n).minRating || 0),
+ title: ve(m)("tooltip.filterMinRating", "Filter by minimum rating"),
+ value: String(ve(n).minRating || 0),
onChange: f
}, [
- ie("option", tS, Ye(xe(m)("filter.anyRating")), 1),
- N[5] || (N[5] = Fd('', 5))
- ], 40, eS)
+ te("option", tG, Ne(ve(m)("filter.anyRating")), 1),
+ k[5] || (k[5] = Od('', 5))
+ ], 40, eG)
])
], 512), [
- [yr, Y("core")]
+ [yr, V("core")]
])
], 2),
- ie("div", {
- class: Zn(["mjr-filter-group", { "is-open": Y("media") }])
+ te("div", {
+ class: An(["mjr-filter-group", { "is-open": V("media") }])
}, [
- ie("button", {
+ te("button", {
type: "button",
class: "mjr-filter-group-toggle",
- "aria-expanded": String(Y("media")),
- onClick: N[1] || (N[1] = (V) => R("media"))
+ "aria-expanded": String(V("media")),
+ onClick: k[1] || (k[1] = (Y) => R("media"))
}, [
- ie("span", iS, Ye(xe(m)("group.media", "Media")), 1),
- ie("span", oS, Ye(Y("media") ? "▾" : "▸"), 1)
- ], 8, nS),
- Ko(ie("div", rS, [
- ie("div", lS, [
- ie("div", aS, Ye(xe(m)("label.fileSizeMB", "File size (MB)")), 1),
- ie("input", {
+ te("span", iG, Ne(ve(m)("group.media", "Media")), 1),
+ te("span", oG, Ne(V("media") ? "▾" : "▸"), 1)
+ ], 8, nG),
+ Uo(te("div", rG, [
+ te("div", lG, [
+ te("div", aG, Ne(ve(m)("label.fileSizeMB", "File size (MB)")), 1),
+ te("input", {
ref_key: "minSizeInputRef",
ref: a,
type: "number",
min: "0",
step: "0.1",
class: "mjr-input",
- placeholder: xe(m)("label.min", "Min"),
- value: xe(n).minSizeMB || "",
+ placeholder: ve(m)("label.min", "Min"),
+ value: ve(n).minSizeMB || "",
onChange: X
- }, null, 40, cS),
- ie("input", {
+ }, null, 40, cG),
+ te("input", {
ref_key: "maxSizeInputRef",
ref: c,
type: "number",
min: "0",
step: "0.1",
class: "mjr-input",
- placeholder: xe(m)("label.max", "Max"),
- value: xe(n).maxSizeMB || "",
+ placeholder: ve(m)("label.max", "Max"),
+ value: ve(n).maxSizeMB || "",
onChange: X
- }, null, 40, sS)
+ }, null, 40, sG)
]),
- ie("div", dS, [
- ie("div", uS, Ye(xe(m)("label.resolutionPx", "Resolution (px)")), 1),
- ie("select", {
+ te("div", dG, [
+ te("div", uG, Ne(ve(m)("label.resolutionPx", "Resolution (px)")), 1),
+ te("select", {
ref_key: "resolutionPresetSelectRef",
ref: s,
class: "mjr-select",
- value: A.value,
- onChange: T
+ value: y.value,
+ onChange: K
}, [
- ie("option", gS, Ye(xe(m)("filter.any", "Any")), 1),
- N[6] || (N[6] = ie("option", { value: "hd" }, "HD (1280×720)", -1)),
- N[7] || (N[7] = ie("option", { value: "fhd" }, "FHD (1920×1080)", -1)),
- N[8] || (N[8] = ie("option", { value: "qhd" }, "QHD (2560×1440)", -1)),
- N[9] || (N[9] = ie("option", { value: "uhd" }, "4K (3840×2160)", -1))
- ], 40, mS)
+ te("option", gG, Ne(ve(m)("filter.any", "Any")), 1),
+ k[6] || (k[6] = te("option", { value: "hd" }, "HD (1280×720)", -1)),
+ k[7] || (k[7] = te("option", { value: "fhd" }, "FHD (1920×1080)", -1)),
+ k[8] || (k[8] = te("option", { value: "qhd" }, "QHD (2560×1440)", -1)),
+ k[9] || (k[9] = te("option", { value: "uhd" }, "4K (3840×2160)", -1))
+ ], 40, mG)
]),
- ie("div", IS, [
- ie("div", bS, Ye(xe(m)("label.resolutionMinWxH", "Min WxH (px)")), 1),
- ie("input", {
+ te("div", IG, [
+ te("div", bG, Ne(ve(m)("label.resolutionMinWxH", "Min WxH (px)")), 1),
+ te("input", {
ref_key: "minWidthInputRef",
ref: d,
type: "number",
min: "0",
step: "1",
class: "mjr-input",
- placeholder: xe(m)("label.widthPx", "W (px)"),
- title: xe(m)("tooltip.widthPx", "Minimum width in pixels"),
- value: xe(n).minWidth || "",
+ placeholder: ve(m)("label.widthPx", "W (px)"),
+ title: ve(m)("tooltip.widthPx", "Minimum width in pixels"),
+ value: ve(n).minWidth || "",
onChange: x
- }, null, 40, pS),
- ie("input", {
+ }, null, 40, pG),
+ te("input", {
ref_key: "minHeightInputRef",
ref: u,
type: "number",
min: "0",
step: "1",
class: "mjr-input",
- placeholder: xe(m)("label.heightPx", "H (px)"),
- title: xe(m)("tooltip.heightPx", "Minimum height in pixels"),
- value: xe(n).minHeight || "",
+ placeholder: ve(m)("label.heightPx", "H (px)"),
+ title: ve(m)("tooltip.heightPx", "Minimum height in pixels"),
+ value: ve(n).minHeight || "",
onChange: x
- }, null, 40, yS)
+ }, null, 40, yG)
]),
- ie("div", fS, [
- ie("div", hS, Ye(xe(m)("label.resolutionMaxWxH", "Max WxH (px)")), 1),
- ie("input", {
+ te("div", fG, [
+ te("div", CG, Ne(ve(m)("label.resolutionMaxWxH", "Max WxH (px)")), 1),
+ te("input", {
ref_key: "maxWidthInputRef",
ref: I,
type: "number",
min: "0",
step: "1",
class: "mjr-input",
- placeholder: xe(m)("label.widthPx", "W (px)"),
- title: xe(m)("tooltip.widthPx", "Maximum width in pixels"),
- value: xe(n).maxWidth || "",
+ placeholder: ve(m)("label.widthPx", "W (px)"),
+ title: ve(m)("tooltip.widthPx", "Maximum width in pixels"),
+ value: ve(n).maxWidth || "",
onChange: x
- }, null, 40, CS),
- ie("input", {
+ }, null, 40, hG),
+ te("input", {
ref_key: "maxHeightInputRef",
- ref: y,
+ ref: A,
type: "number",
min: "0",
step: "1",
class: "mjr-input",
- placeholder: xe(m)("label.heightPx", "H (px)"),
- title: xe(m)("tooltip.heightPx", "Maximum height in pixels"),
- value: xe(n).maxHeight || "",
+ placeholder: ve(m)("label.heightPx", "H (px)"),
+ title: ve(m)("tooltip.heightPx", "Maximum height in pixels"),
+ value: ve(n).maxHeight || "",
onChange: x
- }, null, 40, ZS)
+ }, null, 40, ZG)
])
], 512), [
- [yr, Y("media")]
+ [yr, V("media")]
])
], 2),
- ie("div", {
- class: Zn(["mjr-filter-group", { "is-open": Y("time") }])
+ te("div", {
+ class: An(["mjr-filter-group", { "is-open": V("time") }])
}, [
- ie("button", {
+ te("button", {
type: "button",
class: "mjr-filter-group-toggle",
- "aria-expanded": String(Y("time")),
- onClick: N[2] || (N[2] = (V) => R("time"))
+ "aria-expanded": String(V("time")),
+ onClick: k[2] || (k[2] = (Y) => R("time"))
}, [
- ie("span", WS, Ye(xe(m)("group.time", "Time")), 1),
- ie("span", wS, Ye(Y("time") ? "▾" : "▸"), 1)
- ], 8, AS),
- Ko(ie("div", MS, [
- ie("div", SS, [
- ie("div", GS, Ye(xe(m)("label.dateRange")), 1),
- ie("select", {
+ te("span", WG, Ne(ve(m)("group.time", "Time")), 1),
+ te("span", wG, Ne(V("time") ? "▾" : "▸"), 1)
+ ], 8, AG),
+ Uo(te("div", MG, [
+ te("div", GG, [
+ te("div", SG, Ne(ve(m)("label.dateRange")), 1),
+ te("select", {
ref_key: "dateRangeSelectRef",
- ref: S,
+ ref: h,
class: "mjr-select",
- title: xe(m)("tooltip.filterByDateRange", "Filter by date range"),
- value: xe(n).dateRangeFilter,
- onChange: v
+ title: ve(m)("tooltip.filterByDateRange", "Filter by date range"),
+ value: ve(n).dateRangeFilter,
+ onChange: j
}, [
- ie("option", jS, Ye(xe(m)("filter.anytime")), 1),
- ie("option", vS, Ye(xe(m)("filter.today")), 1),
- ie("option", LS, Ye(xe(m)("filter.thisWeek")), 1),
- ie("option", VS, Ye(xe(m)("filter.thisMonth")), 1)
- ], 40, xS)
+ te("option", jG, Ne(ve(m)("filter.anytime")), 1),
+ te("option", vG, Ne(ve(m)("filter.today")), 1),
+ te("option", LG, Ne(ve(m)("filter.thisWeek")), 1),
+ te("option", YG, Ne(ve(m)("filter.thisMonth")), 1)
+ ], 40, xG)
]),
- ie("div", YS, [
- ie("div", kS, Ye(xe(m)("label.agenda")), 1),
- ie("div", {
+ te("div", VG, [
+ te("div", XG, Ne(ve(m)("label.agenda")), 1),
+ te("div", {
ref_key: "agendaContainerRef",
- ref: Z,
+ ref: S,
class: "mjr-agenda-container"
}, [
- ie("input", {
+ te("input", {
ref_key: "dateExactInputRef",
- ref: C,
+ ref: W,
type: "date",
- class: Zn(["mjr-input mjr-agenda-input", p.value]),
+ class: An(["mjr-input mjr-agenda-input", p.value]),
style: { display: "none" },
- value: xe(n).dateExactFilter,
+ value: ve(n).dateExactFilter,
onChange: w
- }, null, 42, XS)
+ }, null, 42, NG)
], 512)
])
], 512), [
- [yr, Y("time")]
+ [yr, V("time")]
])
], 2)
]));
}
-}, RS = /* @__PURE__ */ Vr(NS, [["__scopeId", "data-v-d1ebebd4"]]), FS = 128, OS = Object.freeze([
+}, RG = /* @__PURE__ */ Yr(kG, [["__scopeId", "data-v-d1ebebd4"]]), OG = 128, FG = Object.freeze([
{
key: "portraits",
label: "Portraits",
@@ -36122,10 +36149,10 @@ const y2 = {
iconClass: "pi pi-circle"
}
]);
-function zS(e) {
+function zG(e) {
try {
const t = String(e ?? "").trim();
- if (!t || t.length > FS || t.includes("\0")) return "";
+ if (!t || t.length > OG || t.includes("\0")) return "";
for (let n = 0; n < t.length; n += 1) {
const i = t.charCodeAt(n);
if (i <= 31 || i === 127) return "";
@@ -36135,7 +36162,7 @@ function zS(e) {
return "";
}
}
-function JS(e) {
+function JG(e) {
if (!e || typeof e != "object") return null;
const t = String(e.filepath || "").trim();
return t ? {
@@ -36150,7 +36177,7 @@ function JS(e) {
function rp(e) {
const t = [], n = [], i = /* @__PURE__ */ new Set();
for (const o of Array.isArray(e) ? e : []) {
- const r = JS(o);
+ const r = JG(o);
if (r != null && r.filepath) {
const a = r.filepath.toLowerCase();
if (i.has(a)) continue;
@@ -36162,7 +36189,7 @@ function rp(e) {
}
return { assets: t, missingIds: n };
}
-async function km(e) {
+async function Xm(e) {
var r;
const t = Array.from(
new Set(
@@ -36176,247 +36203,247 @@ async function km(e) {
const i = Array.isArray(n == null ? void 0 : n.data) ? n.data : Array.isArray((r = n == null ? void 0 : n.data) == null ? void 0 : r.assets) ? n.data.assets : [], { assets: o } = rp(i);
return { ok: !0, data: o };
}
-function Xm(e) {
- var I, y;
+function Nm(e) {
+ var I, A;
const t = String((e == null ? void 0 : e.label) || "").trim();
if (!(!t || /^group\b/i.test(t))) return t;
- const i = (Array.isArray(e == null ? void 0 : e.dominant_tags) ? e.dominant_tags : []).map((S) => String(S || "").trim()).filter(Boolean);
+ const i = (Array.isArray(e == null ? void 0 : e.dominant_tags) ? e.dominant_tags : []).map((h) => String(h || "").trim()).filter(Boolean);
if (i.length) return i.slice(0, 2).join(" / ");
const o = Array.isArray(e == null ? void 0 : e.sample_assets) ? e.sample_assets : [], r = String(
- ((I = o.find((S) => String((S == null ? void 0 : S.subfolder) || "").trim())) == null ? void 0 : I.subfolder) || ""
+ ((I = o.find((h) => String((h == null ? void 0 : h.subfolder) || "").trim())) == null ? void 0 : I.subfolder) || ""
).trim(), l = r ? r.split(/[\\/]/).filter(Boolean).pop() : "", a = { image: 0, video: 0, audio: 0, other: 0 };
- for (const S of o) {
- const Z = String((S == null ? void 0 : S.kind) || "").toLowerCase();
- Z in a ? a[Z] += 1 : a.other += 1;
+ for (const h of o) {
+ const S = String((h == null ? void 0 : h.kind) || "").toLowerCase();
+ S in a ? a[S] += 1 : a.other += 1;
}
- const c = ((y = Object.entries(a).sort((S, Z) => Z[1] - S[1])[0]) == null ? void 0 : y[0]) || "other", s = c === "image" ? "Images" : c === "video" ? "Videos" : c === "audio" ? "Audio" : "Media", d = Number(e == null ? void 0 : e.cluster_id), u = Number.isFinite(d) ? ` ${d + 1}` : "";
+ const c = ((A = Object.entries(a).sort((h, S) => S[1] - h[1])[0]) == null ? void 0 : A[0]) || "other", s = c === "image" ? "Images" : c === "video" ? "Videos" : c === "audio" ? "Audio" : "Media", d = Number(e == null ? void 0 : e.cluster_id), u = Number.isFinite(d) ? ` ${d + 1}` : "";
return l ? `${l} - ${s}` : `${s} Cluster${u}`;
}
-function TS() {
+function TG() {
var e;
try {
- const t = Xn();
+ const t = kn();
return !!(((e = t == null ? void 0 : t.ai) == null ? void 0 : e.vectorSearchEnabled) ?? !0);
} catch {
return !0;
}
}
-const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = { class: "mjr-menu-item-label" }, DS = ["disabled"], ES = { class: "mjr-menu-item-label" }, HS = { class: "mjr-menu-item-right" }, qS = {
+const KG = { class: "mjr-menu mjr-collections-menu" }, BG = ["disabled"], UG = { class: "mjr-menu-item-label" }, DG = ["disabled"], HG = { class: "mjr-menu-item-label" }, EG = { class: "mjr-menu-item-right" }, qG = {
key: 0,
class: "mjr-menu-item-hint"
-}, PS = {
+}, PG = {
key: 1,
class: "mjr-muted"
-}, QS = {
+}, QG = {
key: 2,
class: "mjr-state-block is-error"
-}, _S = {
+}, _G = {
key: 3,
class: "mjr-muted"
-}, $S = ["disabled", "onClick"], eG = { class: "mjr-menu-item-label" }, tG = { class: "mjr-menu-item-right" }, nG = {
+}, $G = ["disabled", "onClick"], eS = { class: "mjr-menu-item-label" }, tS = { class: "mjr-menu-item-right" }, nS = {
key: 0,
class: "mjr-menu-item-hint"
-}, iG = ["disabled", "title", "onClick"], oG = { class: "mjr-state-block" }, rG = { class: "mjr-section-title mjr-section-title--cyan" }, lG = { class: "mjr-section-hint" }, aG = ["disabled", "onClick"], cG = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, sG = { class: "mjr-section-title mjr-section-title--violet" }, dG = { class: "mjr-section-hint" }, uG = ["disabled"], mG = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, gG = {
+}, iS = ["disabled", "title", "onClick"], oS = { class: "mjr-state-block" }, rS = { class: "mjr-section-title mjr-section-title--cyan" }, lS = { class: "mjr-section-hint" }, aS = ["disabled", "onClick"], cS = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, sS = { class: "mjr-section-title mjr-section-title--violet" }, dS = { class: "mjr-section-hint" }, uS = ["disabled"], mS = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, gS = {
key: 0,
class: "mjr-state-block is-error"
-}, IG = { class: "mjr-cluster-thumbs" }, bG = ["src", "alt"], pG = { class: "mjr-cluster-info" }, yG = ["title"], fG = { class: "mjr-cluster-count" }, hG = ["disabled", "title", "onClick"], CG = "mjr:collections-changed", ZG = {
+}, IS = { class: "mjr-cluster-thumbs" }, bS = ["src", "alt"], pS = { class: "mjr-cluster-info" }, yS = ["title"], fS = { class: "mjr-cluster-count" }, CS = ["disabled", "title", "onClick"], hS = "mjr:collections-changed", ZS = {
__name: "CollectionsPopover",
setup(e, { expose: t }) {
- const n = Go(), i = Ae(null), o = Ae([]), r = Ae(!1), l = Ae(""), a = Ae(!1), c = Ae(!0), s = Ae(!1), d = Ae(!1), u = Ae(!1), I = Ae([]), y = Ae(""), S = Ae("");
- let Z = 0, C = null, g = !1;
- const A = ze(() => String(n.collectionId || "").trim()), p = ze(() => String(n.collectionName || "").trim()), b = ze(() => !!A.value), L = ze(() => !c.value || d.value), h = ze(() => c.value && s.value);
+ const n = So(), i = We(null), o = We([]), r = We(!1), l = We(""), a = We(!1), c = We(!0), s = We(!1), d = We(!1), u = We(!1), I = We([]), A = We(""), h = We("");
+ let S = 0, W = null, g = !1;
+ const y = ze(() => String(n.collectionId || "").trim()), p = ze(() => String(n.collectionName || "").trim()), b = ze(() => !!y.value), L = ze(() => !c.value || d.value), C = ze(() => c.value && s.value);
function G() {
- const B = i.value;
- return !!B && String(B.style.display || "").toLowerCase() !== "none";
+ const T = i.value;
+ return !!T && String(T.style.display || "").toLowerCase() !== "none";
}
- function W({
- collectionId: B = A.value,
+ function Z({
+ collectionId: T = y.value,
collectionName: J = p.value,
close: P = !0,
- reload: H = !0
+ reload: E = !0
} = {}) {
var $;
try {
window.dispatchEvent(
- new CustomEvent(CG, {
+ new CustomEvent(hS, {
detail: {
- collectionId: String(B || ""),
+ collectionId: String(T || ""),
collectionName: String(J || ""),
close: P !== !1,
- reload: H !== !1
+ reload: E !== !1
}
})
);
- } catch (E) {
- ($ = console.debug) == null || $.call(console, E);
+ } catch (H) {
+ ($ = console.debug) == null || $.call(console, H);
}
}
- function f(B) {
+ function f(T) {
var J;
try {
- return Ki(B) || "";
+ return Ui(T) || "";
} catch (P) {
return (J = console.debug) == null || J.call(console, P), "";
}
}
async function X() {
var J, P;
- if (!TS())
+ if (!TG())
return {
enabled: !1,
vectorAvailable: !1,
vectorDisabled: !1
};
try {
- const H = await xa(), $ = !(H != null && H.ok) && (String((H == null ? void 0 : H.code) || "").toUpperCase() === "SERVICE_UNAVAILABLE" || /vector search is not enabled/i.test(String((H == null ? void 0 : H.error) || "")));
+ const E = await xa(), $ = !(E != null && E.ok) && (String((E == null ? void 0 : E.code) || "").toUpperCase() === "SERVICE_UNAVAILABLE" || /vector search is not enabled/i.test(String((E == null ? void 0 : E.error) || "")));
return {
enabled: !0,
- vectorAvailable: !!(H != null && H.ok && ((J = H == null ? void 0 : H.data) == null ? void 0 : J.total) > 0),
+ vectorAvailable: !!(E != null && E.ok && ((J = E == null ? void 0 : E.data) == null ? void 0 : J.total) > 0),
vectorDisabled: $
};
- } catch (H) {
- return (P = console.debug) == null || P.call(console, H), {
+ } catch (E) {
+ return (P = console.debug) == null || P.call(console, E), {
enabled: !0,
vectorAvailable: !1,
vectorDisabled: !1
};
}
}
- function x(...B) {
+ function x(...T) {
const J = [], P = /* @__PURE__ */ new Set();
- for (const H of B)
- for (const $ of Array.isArray(H) ? H : []) {
- const E = String(($ == null ? void 0 : $.filepath) || "").trim().toLowerCase();
- !E || P.has(E) || (P.add(E), J.push($));
+ for (const E of T)
+ for (const $ of Array.isArray(E) ? E : []) {
+ const H = String(($ == null ? void 0 : $.filepath) || "").trim().toLowerCase();
+ !H || P.has(H) || (P.add(H), J.push($));
}
return J;
}
- async function T() {
+ async function K() {
var J;
- const B = ++Z;
- r.value = !0, a.value = !0, l.value = "", y.value = "";
+ const T = ++S;
+ r.value = !0, a.value = !0, l.value = "", A.value = "";
try {
- const [P, H] = await Promise.all([
- Fg(),
+ const [P, E] = await Promise.all([
+ Og(),
X()
]);
- if (B !== Z) return;
+ if (T !== S) return;
P != null && P.ok ? o.value = Array.isArray(P == null ? void 0 : P.data) ? P.data : [] : (l.value = String(
(P == null ? void 0 : P.error) || m("msg.failedLoadCollections", "Failed to load collections")
- ), o.value = []), c.value = !!H.enabled, s.value = !!H.vectorAvailable, d.value = !!H.vectorDisabled, s.value || (I.value = [], u.value = !1);
+ ), o.value = []), c.value = !!E.enabled, s.value = !!E.vectorAvailable, d.value = !!E.vectorDisabled, s.value || (I.value = [], u.value = !1);
} catch (P) {
- if (B !== Z) return;
+ if (T !== S) return;
(J = console.debug) == null || J.call(console, P), l.value = m("msg.failedLoadCollections", "Failed to load collections"), o.value = [];
} finally {
- B === Z && (r.value = !1, a.value = !1);
+ T === S && (r.value = !1, a.value = !1);
}
}
- function v(B, J) {
+ function j(T, J) {
return async (...P) => {
- if (!S.value) {
- S.value = B;
+ if (!h.value) {
+ h.value = T;
try {
await J(...P);
} finally {
- S.value === B && (S.value = "");
+ h.value === T && (h.value = "");
}
}
};
}
- const w = v("create", async () => {
- var H, $;
- const B = await Vi(
+ const w = j("create", async () => {
+ var E, $;
+ const T = await Yi(
m("dialog.createCollection", "Create collection"),
m("dialog.collectionPlaceholder", "Collection name")
);
- if (!B) return;
- const J = zS(B);
+ if (!T) return;
+ const J = zG(T);
if (!J) {
- Ze(m("toast.invalidCollectionName", "Invalid collection name"), "error");
+ Ae(m("toast.invalidCollectionName", "Invalid collection name"), "error");
return;
}
const P = await na(J);
if (!(P != null && P.ok)) {
- Ze(
+ Ae(
(P == null ? void 0 : P.error) || m("toast.failedCreateCollection", "Failed to create collection"),
"error"
);
return;
}
- W({
- collectionId: String(((H = P == null ? void 0 : P.data) == null ? void 0 : H.id) || ""),
+ Z({
+ collectionId: String(((E = P == null ? void 0 : P.data) == null ? void 0 : E.id) || ""),
collectionName: String((($ = P == null ? void 0 : P.data) == null ? void 0 : $.name) || J)
});
- }), R = v("exit", async () => {
- W({
+ }), R = j("exit", async () => {
+ Z({
collectionId: "",
collectionName: ""
});
- }), Y = v("open", async (B) => {
- const J = String((B == null ? void 0 : B.id) || ""), P = String((B == null ? void 0 : B.name) || J);
+ }), V = j("open", async (T) => {
+ const J = String((T == null ? void 0 : T.id) || ""), P = String((T == null ? void 0 : T.name) || J);
if (J) {
- if (J === A.value) {
- W({
+ if (J === y.value) {
+ Z({
collectionId: J,
collectionName: P,
reload: !1
});
return;
}
- W({
+ Z({
collectionId: J,
collectionName: P
});
}
- }), F = v("delete", async (B) => {
- const J = String((B == null ? void 0 : B.id) || ""), P = String((B == null ? void 0 : B.name) || J);
+ }), O = j("delete", async (T) => {
+ const J = String((T == null ? void 0 : T.id) || ""), P = String((T == null ? void 0 : T.name) || J);
if (!J || !await yi(
m("dialog.deleteCollection", 'Delete collection "{name}"?', { name: P })
)) return;
- const $ = await Ef(J);
+ const $ = await Hf(J);
if (!($ != null && $.ok)) {
- Ze(
+ Ae(
($ == null ? void 0 : $.error) || m("toast.failedDeleteCollection", "Failed to delete collection"),
"error"
);
return;
}
- if (J === A.value) {
- W({
+ if (J === y.value) {
+ Z({
collectionId: "",
collectionName: ""
});
return;
}
- await T();
+ await K();
});
- async function N(B) {
- var E, oe;
- const J = String((B == null ? void 0 : B.label) || "").trim();
+ async function k(T) {
+ var H, ne;
+ const J = String((T == null ? void 0 : T.label) || "").trim();
if (!J) return;
const P = await na(J);
if (!(P != null && P.ok)) {
- Ze(
+ Ae(
(P == null ? void 0 : P.error) || m("toast.failedCreateSmartCollection", "Failed to create smart collection"),
"error"
);
return;
}
- const H = String(((E = P == null ? void 0 : P.data) == null ? void 0 : E.id) || "");
- if (!H) return;
- const $ = await zg(String((B == null ? void 0 : B.query) || ""), 50);
+ const E = String(((H = P == null ? void 0 : P.data) == null ? void 0 : H.id) || "");
+ if (!E) return;
+ const $ = await zg(String((T == null ? void 0 : T.query) || ""), 50);
if ($ != null && $.ok && Array.isArray($ == null ? void 0 : $.data) && $.data.length > 0) {
const M = rp($.data);
- let j = M.assets;
+ let v = M.assets;
if (M.missingIds.length) {
- const O = await km(M.missingIds);
- O.ok && Array.isArray(O.data) && (j = x(j, O.data));
+ const F = await Xm(M.missingIds);
+ F.ok && Array.isArray(F.data) && (v = x(v, F.data));
}
- if (j.length) {
- const O = await Ga(H, j);
- if (!(O != null && O.ok)) {
- Ze(
- (O == null ? void 0 : O.error) || m(
+ if (v.length) {
+ const F = await Sa(E, v);
+ if (!(F != null && F.ok)) {
+ Ae(
+ (F == null ? void 0 : F.error) || m(
"toast.failedAddAssetsToSmartCollection",
"Failed to add assets to smart collection"
),
@@ -36424,8 +36451,8 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = {
);
return;
}
- const D = Number(((oe = O == null ? void 0 : O.data) == null ? void 0 : oe.added) || j.length || 0);
- Ze(
+ const D = Number(((ne = F == null ? void 0 : F.data) == null ? void 0 : ne.added) || v.length || 0);
+ Ae(
m(
"toast.smartCollectionCreated",
'Smart collection "{name}" created with {count} assets!',
@@ -36435,7 +36462,7 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = {
3e3
);
} else
- Ze(
+ Ae(
m(
"toast.smartCollectionEmpty",
'Collection "{name}" created but no matching assets found. Index more assets first.',
@@ -36445,7 +36472,7 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = {
3e3
);
} else
- Ze(
+ Ae(
m(
"toast.smartCollectionEmpty",
'Collection "{name}" created but no matching assets found. Index more assets first.',
@@ -36454,273 +36481,273 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = {
"info",
3e3
);
- W({
- collectionId: H,
+ Z({
+ collectionId: E,
collectionName: J
});
}
- async function V(B) {
- if (!(B != null && B.key)) return;
- const J = `smart:${B.key}`;
- if (!S.value) {
- S.value = J;
+ async function Y(T) {
+ if (!(T != null && T.key)) return;
+ const J = `smart:${T.key}`;
+ if (!h.value) {
+ h.value = J;
try {
- await N(B);
+ await k(T);
} catch (P) {
- console.error("[Majoor] Smart collection creation failed:", P), Ze(
+ console.error("[Majoor] Smart collection creation failed:", P), Ae(
m("toast.failedCreateSmartCollection", "Failed to create smart collection"),
"error"
);
} finally {
- S.value === J && (S.value = "");
+ h.value === J && (h.value = "");
}
}
}
- async function k() {
- if (!(u.value || S.value)) {
- u.value = !0, y.value = "", I.value = [];
+ async function N() {
+ if (!(u.value || h.value)) {
+ u.value = !0, A.value = "", I.value = [];
try {
- const B = await $f(8);
- if (!(B != null && B.ok) || !Array.isArray(B == null ? void 0 : B.data) || !B.data.length) {
- Ze(
+ const T = await $f(8);
+ if (!(T != null && T.ok) || !Array.isArray(T == null ? void 0 : T.data) || !T.data.length) {
+ Ae(
m("toast.noGroupsFoundIndexFirst", "No groups found. Index more assets first."),
"info",
3e3
);
return;
}
- I.value = B.data.map((J) => ({
+ I.value = T.data.map((J) => ({
...J,
- _label: Xm(J)
+ _label: Nm(J)
}));
- } catch (B) {
- console.error("[Majoor] Discover groups failed:", B), y.value = m("toast.clusterAnalysisFailed", "Cluster analysis failed"), Ze(m("toast.clusterAnalysisFailed", "Cluster analysis failed"), "error");
+ } catch (T) {
+ console.error("[Majoor] Discover groups failed:", T), A.value = m("toast.clusterAnalysisFailed", "Cluster analysis failed"), Ae(m("toast.clusterAnalysisFailed", "Cluster analysis failed"), "error");
} finally {
u.value = !1;
}
}
}
- async function K(B) {
- var P, H, $;
- const J = `cluster:${String((B == null ? void 0 : B.cluster_id) ?? "")}`;
- if (!S.value) {
- S.value = J;
+ async function U(T) {
+ var P, E, $;
+ const J = `cluster:${String((T == null ? void 0 : T.cluster_id) ?? "")}`;
+ if (!h.value) {
+ h.value = J;
try {
- const E = String((B == null ? void 0 : B._label) || Xm(B) || "").trim();
- if (!E) return;
- const oe = await na(E);
- if (!(oe != null && oe.ok)) {
- Ze(
- (oe == null ? void 0 : oe.error) || m("toast.failedCreateCollection", "Failed to create collection"),
+ const H = String((T == null ? void 0 : T._label) || Nm(T) || "").trim();
+ if (!H) return;
+ const ne = await na(H);
+ if (!(ne != null && ne.ok)) {
+ Ae(
+ (ne == null ? void 0 : ne.error) || m("toast.failedCreateCollection", "Failed to create collection"),
"error"
);
return;
}
- const M = String(((P = oe == null ? void 0 : oe.data) == null ? void 0 : P.id) || ""), j = Array.isArray(B == null ? void 0 : B.all_asset_ids) ? B.all_asset_ids : [];
- if (M && j.length) {
- const O = await km(j);
- if (!O.ok) {
- Ze(
- O.error || m("toast.failedLoadClusterAssets", "Failed to load cluster assets"),
+ const M = String(((P = ne == null ? void 0 : ne.data) == null ? void 0 : P.id) || ""), v = Array.isArray(T == null ? void 0 : T.all_asset_ids) ? T.all_asset_ids : [];
+ if (M && v.length) {
+ const F = await Xm(v);
+ if (!F.ok) {
+ Ae(
+ F.error || m("toast.failedLoadClusterAssets", "Failed to load cluster assets"),
"error"
);
return;
}
- const D = await Ga(M, O.data || []);
+ const D = await Sa(M, F.data || []);
if (!(D != null && D.ok)) {
- Ze(
+ Ae(
(D == null ? void 0 : D.error) || m("toast.failedAddAssetsToCollection", "Failed to add assets to collection"),
"error"
);
return;
}
- const q = Number(((H = D == null ? void 0 : D.data) == null ? void 0 : H.added) || (($ = O.data) == null ? void 0 : $.length) || 0);
- Ze(
+ const q = Number(((E = D == null ? void 0 : D.data) == null ? void 0 : E.added) || (($ = F.data) == null ? void 0 : $.length) || 0);
+ Ae(
m(
"toast.collectionCreatedWithAssets",
'Collection "{name}" created with {count} assets!',
- { name: E, count: q }
+ { name: H, count: q }
),
"success",
3e3
);
} else
- Ze(
- m("toast.collectionCreatedNamed", 'Collection "{name}" created.', { name: E }),
+ Ae(
+ m("toast.collectionCreatedNamed", 'Collection "{name}" created.', { name: H }),
"success",
2200
);
- W({
+ Z({
collectionId: M,
- collectionName: E
+ collectionName: H
});
- } catch (E) {
- console.error("[Majoor] Cluster collection creation failed:", E), Ze(m("toast.failedCreateCollection", "Failed to create collection"), "error");
+ } catch (H) {
+ console.error("[Majoor] Cluster collection creation failed:", H), Ae(m("toast.failedCreateCollection", "Failed to create collection"), "error");
} finally {
- S.value === J && (S.value = "");
+ h.value === J && (h.value = "");
}
}
}
function z() {
- const B = G();
- B && !g && T().catch(() => {
- }), g = B;
+ const T = G();
+ T && !g && K().catch(() => {
+ }), g = T;
}
return Dn(() => {
- z(), !(typeof MutationObserver > "u" || !i.value) && (C = new MutationObserver(() => z()), C.observe(i.value, {
+ z(), !(typeof MutationObserver > "u" || !i.value) && (W = new MutationObserver(() => z()), W.observe(i.value, {
attributes: !0,
attributeFilter: ["style"]
}));
}), _n(() => {
- var B, J;
+ var T, J;
try {
- (B = C == null ? void 0 : C.disconnect) == null || B.call(C);
+ (T = W == null ? void 0 : W.disconnect) == null || T.call(W);
} catch (P) {
(J = console.debug) == null || J.call(console, P);
}
- C = null;
+ W = null;
}), t({
- refresh: T
- }), (B, J) => (be(), Ce("div", {
+ refresh: K
+ }), (T, J) => (be(), Ze("div", {
ref_key: "rootRef",
ref: i,
class: "mjr-popover mjr-collections-popover",
style: { display: "none" }
}, [
- ie("div", BS, [
- ie("button", {
+ te("div", KG, [
+ te("button", {
type: "button",
class: "mjr-menu-item",
- disabled: S.value !== "",
- onClick: J[0] || (J[0] = (...P) => xe(w) && xe(w)(...P))
+ disabled: h.value !== "",
+ onClick: J[0] || (J[0] = (...P) => ve(w) && ve(w)(...P))
}, [
- ie("span", KS, Ye(xe(m)("ctx.createCollection", "Create collection")), 1),
- J[2] || (J[2] = ie("i", { class: "pi pi-plus mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1))
- ], 8, US),
- b.value ? (be(), Ce("button", {
+ te("span", UG, Ne(ve(m)("ctx.createCollection", "Create collection")), 1),
+ J[2] || (J[2] = te("i", { class: "pi pi-plus mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1))
+ ], 8, BG),
+ b.value ? (be(), Ze("button", {
key: 0,
type: "button",
class: "mjr-menu-item",
- disabled: S.value !== "",
- onClick: J[1] || (J[1] = (...P) => xe(R) && xe(R)(...P))
+ disabled: h.value !== "",
+ onClick: J[1] || (J[1] = (...P) => ve(R) && ve(R)(...P))
}, [
- ie("span", ES, Ye(xe(m)("ctx.exitCollection", "Exit collection")), 1),
- ie("span", HS, [
- p.value ? (be(), Ce("span", qS, Ye(p.value), 1)) : ft("", !0),
- J[3] || (J[3] = ie("i", { class: "pi pi-times mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1))
+ te("span", HG, Ne(ve(m)("ctx.exitCollection", "Exit collection")), 1),
+ te("span", EG, [
+ p.value ? (be(), Ze("span", qG, Ne(p.value), 1)) : yt("", !0),
+ J[3] || (J[3] = te("i", { class: "pi pi-times mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1))
])
- ], 8, DS)) : ft("", !0),
- J[11] || (J[11] = ie("div", { class: "mjr-menu-divider" }, null, -1)),
- r.value ? (be(), Ce("div", PS, Ye(xe(m)("label.loading", "Loading...")), 1)) : l.value ? (be(), Ce("div", QS, Ye(l.value), 1)) : o.value.length ? ft("", !0) : (be(), Ce("div", _S, Ye(xe(m)("msg.noCollections", "No collections yet")), 1)),
- (be(!0), Ce(Nt, null, Cn(o.value, (P) => (be(), Ce("div", {
+ ], 8, DG)) : yt("", !0),
+ J[11] || (J[11] = te("div", { class: "mjr-menu-divider" }, null, -1)),
+ r.value ? (be(), Ze("div", PG, Ne(ve(m)("label.loading", "Loading...")), 1)) : l.value ? (be(), Ze("div", QG, Ne(l.value), 1)) : o.value.length ? yt("", !0) : (be(), Ze("div", _G, Ne(ve(m)("msg.noCollections", "No collections yet")), 1)),
+ (be(!0), Ze(Nt, null, Zn(o.value, (P) => (be(), Ze("div", {
key: P.id || P.name,
class: "mjr-collection-row"
}, [
- ie("button", {
+ te("button", {
type: "button",
- class: Zn(["mjr-menu-item", { "is-active": A.value === String(P.id || "") }]),
- disabled: S.value !== "",
- onClick: (H) => xe(Y)(P)
+ class: An(["mjr-menu-item", { "is-active": y.value === String(P.id || "") }]),
+ disabled: h.value !== "",
+ onClick: (E) => ve(V)(P)
}, [
- ie("span", eG, Ye(P.name || P.id), 1),
- ie("span", tG, [
- Number(P.count || 0) ? (be(), Ce("span", nG, Ye(Number(P.count || 0)), 1)) : ft("", !0),
- J[4] || (J[4] = ie("i", { class: "pi pi-check mjr-menu-item-check" }, null, -1))
+ te("span", eS, Ne(P.name || P.id), 1),
+ te("span", tS, [
+ Number(P.count || 0) ? (be(), Ze("span", nS, Ne(Number(P.count || 0)), 1)) : yt("", !0),
+ J[4] || (J[4] = te("i", { class: "pi pi-check mjr-menu-item-check" }, null, -1))
])
- ], 10, $S),
- ie("button", {
+ ], 10, $G),
+ te("button", {
type: "button",
class: "mjr-menu-item mjr-delete-btn",
- disabled: S.value !== "",
- title: xe(m)("tooltip.deleteCollection", "Delete collection"),
- onClick: On((H) => xe(F)(P), ["stop", "prevent"])
+ disabled: h.value !== "",
+ title: ve(m)("tooltip.deleteCollection", "Delete collection"),
+ onClick: Fn((E) => ve(O)(P), ["stop", "prevent"])
}, [...J[5] || (J[5] = [
- ie("i", { class: "pi pi-trash" }, null, -1)
- ])], 8, iG)
+ te("i", { class: "pi pi-trash" }, null, -1)
+ ])], 8, iS)
]))), 128)),
- !a.value && L.value ? (be(), Ce(Nt, { key: 4 }, [
- J[6] || (J[6] = ie("div", { class: "mjr-menu-divider" }, null, -1)),
- ie("div", oG, Ye(c.value ? "AI Smart Collections are disabled (enable vector search env var)." : "AI Smart Collections are disabled in settings."), 1)
- ], 64)) : ft("", !0),
- !a.value && h.value ? (be(), Ce(Nt, { key: 5 }, [
- J[9] || (J[9] = ie("div", { class: "mjr-menu-divider" }, null, -1)),
- ie("div", rG, Ye(xe(m)("label.smartSuggestions", "Smart Suggestions")), 1),
- ie("div", lG, Ye(xe(m)("label.smartCollectionsHint", "Create collections from AI-detected themes")), 1),
- (be(!0), Ce(Nt, null, Cn(xe(OS), (P) => (be(), Ce("button", {
+ !a.value && L.value ? (be(), Ze(Nt, { key: 4 }, [
+ J[6] || (J[6] = te("div", { class: "mjr-menu-divider" }, null, -1)),
+ te("div", oS, Ne(c.value ? "AI Smart Collections are disabled (enable vector search env var)." : "AI Smart Collections are disabled in settings."), 1)
+ ], 64)) : yt("", !0),
+ !a.value && C.value ? (be(), Ze(Nt, { key: 5 }, [
+ J[9] || (J[9] = te("div", { class: "mjr-menu-divider" }, null, -1)),
+ te("div", rS, Ne(ve(m)("label.smartSuggestions", "Smart Suggestions")), 1),
+ te("div", lS, Ne(ve(m)("label.smartCollectionsHint", "Create collections from AI-detected themes")), 1),
+ (be(!0), Ze(Nt, null, Zn(ve(FG), (P) => (be(), Ze("button", {
key: P.key,
type: "button",
class: "mjr-menu-item mjr-menu-item--smart",
- disabled: S.value !== "",
- onClick: (H) => V(P)
+ disabled: h.value !== "",
+ onClick: (E) => Y(P)
}, [
- ie("span", cG, [
- ie("i", {
- class: Zn(P.iconClass)
+ te("span", cS, [
+ te("i", {
+ class: An(P.iconClass)
}, null, 2),
- ie("span", null, Ye(P.label), 1)
+ te("span", null, Ne(P.label), 1)
]),
- J[7] || (J[7] = ie("i", { class: "pi pi-plus mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1))
- ], 8, aG))), 128)),
- J[10] || (J[10] = ie("div", { class: "mjr-menu-divider" }, null, -1)),
- ie("div", sG, Ye(xe(m)("label.discoverGroups", "Discover Groups")), 1),
- ie("div", dG, Ye(xe(m)("label.discoverGroupsHint", "AI clusters assets by visual similarity")), 1),
- ie("button", {
+ J[7] || (J[7] = te("i", { class: "pi pi-plus mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1))
+ ], 8, aS))), 128)),
+ J[10] || (J[10] = te("div", { class: "mjr-menu-divider" }, null, -1)),
+ te("div", sS, Ne(ve(m)("label.discoverGroups", "Discover Groups")), 1),
+ te("div", dS, Ne(ve(m)("label.discoverGroupsHint", "AI clusters assets by visual similarity")), 1),
+ te("button", {
type: "button",
class: "mjr-menu-item mjr-menu-item--cluster",
- disabled: u.value || S.value !== "",
- onClick: k
+ disabled: u.value || h.value !== "",
+ onClick: N
}, [
- ie("span", mG, [
- J[8] || (J[8] = ie("i", { class: "pi pi-search" }, null, -1)),
- ie("span", null, Ye(u.value ? xe(m)("label.analyzing", "Analyzing...") : xe(m)("label.analyzeLibrary", "Analyze library")), 1)
+ te("span", mS, [
+ J[8] || (J[8] = te("i", { class: "pi pi-search" }, null, -1)),
+ te("span", null, Ne(u.value ? ve(m)("label.analyzing", "Analyzing...") : ve(m)("label.analyzeLibrary", "Analyze library")), 1)
])
- ], 8, uG),
- y.value ? (be(), Ce("div", gG, Ye(y.value), 1)) : ft("", !0),
- (be(!0), Ce(Nt, null, Cn(I.value, (P) => (be(), Ce("div", {
+ ], 8, uS),
+ A.value ? (be(), Ze("div", gS, Ne(A.value), 1)) : yt("", !0),
+ (be(!0), Ze(Nt, null, Zn(I.value, (P) => (be(), Ze("div", {
key: P.cluster_id,
class: "mjr-cluster-row"
}, [
- ie("div", IG, [
- (be(!0), Ce(Nt, null, Cn(Array.isArray(P.sample_assets) ? P.sample_assets.slice(0, 3) : [], (H, $) => (be(), Ce("img", {
+ te("div", IS, [
+ (be(!0), Ze(Nt, null, Zn(Array.isArray(P.sample_assets) ? P.sample_assets.slice(0, 3) : [], (E, $) => (be(), Ze("img", {
key: `${P.cluster_id}-${$}`,
class: "mjr-cluster-thumb",
- src: f(H),
- alt: String((H == null ? void 0 : H.filename) || P._label || ""),
+ src: f(E),
+ alt: String((E == null ? void 0 : E.filename) || P._label || ""),
loading: "lazy"
- }, null, 8, bG))), 128))
+ }, null, 8, bS))), 128))
]),
- ie("div", pG, [
- ie("div", {
+ te("div", pS, [
+ te("div", {
class: "mjr-cluster-name",
title: P._label
- }, Ye(P._label), 9, yG),
- ie("div", fG, Ye(Number(P.size || 0)) + " " + Ye(xe(m)("label.assets", "assets")), 1)
+ }, Ne(P._label), 9, yS),
+ te("div", fS, Ne(Number(P.size || 0)) + " " + Ne(ve(m)("label.assets", "assets")), 1)
]),
- ie("button", {
+ te("button", {
type: "button",
class: "mjr-cluster-create-btn",
- disabled: S.value !== "",
- title: xe(m)("ctx.createCollection", "Create collection"),
- onClick: (H) => K(P)
- }, Ye(S.value === `cluster:${String(P.cluster_id ?? "")}` ? xe(m)("label.loading", "Loading...") : xe(m)("label.create", "Create")), 9, hG)
+ disabled: h.value !== "",
+ title: ve(m)("ctx.createCollection", "Create collection"),
+ onClick: (E) => U(P)
+ }, Ne(h.value === `cluster:${String(P.cluster_id ?? "")}` ? ve(m)("label.loading", "Loading...") : ve(m)("label.create", "Create")), 9, CS)
]))), 128))
- ], 64)) : ft("", !0)
+ ], 64)) : yt("", !0)
])
], 512));
}
-}, AG = {
+}, AS = {
class: "mjr-popover mjr-pinned-folders-popover",
style: { display: "none" }
-}, WG = {
+}, WS = {
__name: "PinnedFoldersPopover",
setup(e, { expose: t }) {
- const n = Ae(null);
+ const n = We(null);
return t({
get pinnedFoldersMenu() {
return n.value;
}
- }), (i, o) => (be(), Ce("div", AG, [
- ie("div", {
+ }), (i, o) => (be(), Ze("div", AS, [
+ te("div", {
ref_key: "menuRef",
ref: n,
class: "mjr-menu",
@@ -36728,13 +36755,13 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = {
}, null, 512)
]));
}
-}, wG = {
+}, wS = {
class: "mjr-popover mjr-custom-popover",
style: { display: "none" }
-}, MG = { class: "mjr-popover-row" }, SG = { class: "mjr-popover-label" }, GG = { class: "mjr-popover-row mjr-popover-row--actions" }, xG = {
+}, MS = { class: "mjr-popover-row" }, GS = { class: "mjr-popover-label" }, SS = { class: "mjr-popover-row mjr-popover-row--actions" }, xS = {
__name: "CustomRootsPopover",
setup(e, { expose: t }) {
- const n = Ae(null), i = Ae(null), o = Ae(null);
+ const n = We(null), i = We(null), o = We(null);
return t({
get customSelect() {
return n.value;
@@ -36745,39 +36772,39 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = {
get customRemoveBtn() {
return o.value;
}
- }), (r, l) => (be(), Ce("div", wG, [
- ie("div", MG, [
- ie("div", SG, Ye(xe(m)("label.folder")), 1),
- ie("select", {
+ }), (r, l) => (be(), Ze("div", wS, [
+ te("div", MS, [
+ te("div", GS, Ne(ve(m)("label.folder")), 1),
+ te("select", {
ref_key: "customSelectRef",
ref: n,
class: "mjr-select"
}, null, 512)
]),
- ie("div", GG, [
- ie("button", {
+ te("div", SS, [
+ te("button", {
ref_key: "customAddBtnRef",
ref: i,
type: "button",
class: "mjr-btn"
- }, Ye(xe(m)("btn.add")), 513),
- ie("button", {
+ }, Ne(ve(m)("btn.add")), 513),
+ te("button", {
ref_key: "customRemoveBtnRef",
ref: o,
type: "button",
class: "mjr-btn",
disabled: ""
- }, Ye(xe(m)("btn.remove")), 513)
+ }, Ne(ve(m)("btn.remove")), 513)
])
]));
}
-}, jG = ["aria-label"], vG = { class: "mjr-messages-head" }, LG = { class: "mjr-messages-actions" }, VG = ["title"], YG = { class: "mjr-messages-star-label" }, kG = ["title"], XG = {
+}, jS = ["aria-label"], vS = { class: "mjr-messages-head" }, LS = { class: "mjr-messages-actions" }, YS = ["title"], VS = { class: "mjr-messages-star-label" }, XS = ["title"], NS = {
class: "mjr-messages-tabs",
role: "tablist"
-}, NG = { class: "mjr-messages-panels" }, RG = { class: "mjr-messages-empty" }, FG = "https://github.com/MajoorWaldi/ComfyUI-Majoor-AssetsManager", OG = {
+}, kS = { class: "mjr-messages-panels" }, RS = { class: "mjr-messages-empty" }, OS = "https://github.com/MajoorWaldi/ComfyUI-Majoor-AssetsManager", FS = {
__name: "MessagePopover",
setup(e, { expose: t }) {
- const n = Ae(null), i = Ae(null), o = Ae(null), r = Ae(null), l = Ae(null), a = Ae(null), c = Ae(null), s = Ae(null), d = Ae(null), u = Ae(null), I = Ae(null);
+ const n = We(null), i = We(null), o = We(null), r = We(null), l = We(null), a = We(null), c = We(null), s = We(null), d = We(null), u = We(null), I = We(null);
return t({
get title() {
return n.value;
@@ -36812,46 +36839,46 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = {
get shortcutsPanel() {
return I.value;
}
- }), (y, S) => (be(), Ce("div", {
+ }), (A, h) => (be(), Ze("div", {
class: "mjr-popover mjr-messages-popover",
id: "mjr-messages-popover",
role: "dialog",
- "aria-label": xe(m)("label.messages", "Messages"),
+ "aria-label": ve(m)("label.messages", "Messages"),
"aria-hidden": "true",
tabindex: "-1",
style: { display: "none" }
}, [
- ie("div", vG, [
- ie("div", {
+ te("div", vS, [
+ te("div", {
ref_key: "titleRef",
ref: n,
class: "mjr-messages-title"
- }, Ye(xe(m)("label.messages", "Messages")), 513),
- ie("div", LG, [
- ie("a", {
- href: FG,
+ }, Ne(ve(m)("label.messages", "Messages")), 513),
+ te("div", LS, [
+ te("a", {
+ href: OS,
target: "_blank",
rel: "noopener noreferrer",
class: "mjr-btn mjr-messages-star-link",
- title: xe(m)("tooltip.starGithub", "Open GitHub and give a star")
+ title: ve(m)("tooltip.starGithub", "Open GitHub and give a star")
}, [
- S[0] || (S[0] = ie("span", {
+ h[0] || (h[0] = te("span", {
class: "mjr-messages-star-icon",
"aria-hidden": "true"
}, "★", -1)),
- ie("span", YG, Ye(xe(m)("btn.giveStar", "Give a star")), 1)
- ], 8, VG),
- ie("button", {
+ te("span", VS, Ne(ve(m)("btn.giveStar", "Give a star")), 1)
+ ], 8, YS),
+ te("button", {
ref_key: "markReadBtnRef",
ref: i,
type: "button",
class: "mjr-btn mjr-messages-mark-read-btn",
- title: xe(m)("tooltip.markMessagesRead", "Mark all messages as read")
- }, Ye(xe(m)("btn.markAllRead", "Mark all read")), 9, kG)
+ title: ve(m)("tooltip.markMessagesRead", "Mark all messages as read")
+ }, Ne(ve(m)("btn.markAllRead", "Mark all read")), 9, XS)
])
]),
- ie("div", XG, [
- ie("button", {
+ te("div", NS, [
+ te("button", {
ref_key: "messageTabBtnRef",
ref: o,
type: "button",
@@ -36861,8 +36888,8 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = {
"aria-controls": "mjr-messages-panel",
id: "mjr-messages-tab"
}, [
- ie("span", null, Ye(xe(m)("label.messages", "Messages")), 1),
- ie("span", {
+ te("span", null, Ne(ve(m)("label.messages", "Messages")), 1),
+ te("span", {
ref_key: "messageTabBadgeRef",
ref: r,
class: "mjr-tab-count-badge",
@@ -36870,7 +36897,7 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = {
style: { display: "none" }
}, null, 512)
], 512),
- ie("button", {
+ te("button", {
ref_key: "historyTabBtnRef",
ref: l,
type: "button",
@@ -36880,15 +36907,15 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = {
"aria-controls": "mjr-history-panel",
id: "mjr-history-tab"
}, [
- ie("span", null, Ye(xe(m)("label.toastHistory", "History")), 1),
- ie("span", {
+ te("span", null, Ne(ve(m)("label.toastHistory", "History")), 1),
+ te("span", {
ref_key: "historyTabCountRef",
ref: c,
class: "mjr-tab-count-badge",
"aria-hidden": "true",
style: { display: "none" }
}, null, 512),
- ie("span", {
+ te("span", {
ref_key: "historyTabBadgeRef",
ref: a,
class: "mjr-tab-unread-dot",
@@ -36896,7 +36923,7 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = {
style: { display: "none" }
}, null, 512)
], 512),
- ie("button", {
+ te("button", {
ref_key: "shortcutsTabBtnRef",
ref: s,
type: "button",
@@ -36905,10 +36932,10 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = {
"aria-selected": "false",
"aria-controls": "mjr-shortcuts-panel",
id: "mjr-shortcuts-tab"
- }, Ye(xe(m)("msg.shortcuts.title", "Shortcut Guide")), 513)
+ }, Ne(ve(m)("msg.shortcuts.title", "Shortcut Guide")), 513)
]),
- ie("div", NG, [
- ie("div", {
+ te("div", kS, [
+ te("div", {
ref_key: "messageListRef",
ref: d,
class: "mjr-messages-list",
@@ -36916,9 +36943,9 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = {
role: "tabpanel",
"aria-labelledby": "mjr-messages-tab"
}, [
- ie("div", RG, Ye(xe(m)("msg.noMessages", "No messages for now.")), 1)
+ te("div", RS, Ne(ve(m)("msg.noMessages", "No messages for now.")), 1)
], 512),
- ie("div", {
+ te("div", {
ref_key: "historyPanelRef",
ref: u,
class: "mjr-messages-history-panel",
@@ -36927,7 +36954,7 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = {
"aria-labelledby": "mjr-history-tab",
hidden: ""
}, null, 512),
- ie("div", {
+ te("div", {
ref_key: "shortcutsPanelRef",
ref: I,
class: "mjr-messages-shortcuts-panel",
@@ -36937,31 +36964,31 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = {
hidden: ""
}, null, 512)
])
- ], 8, jG));
+ ], 8, jS));
}
-}, zG = { class: "mjr-am-header-row" }, JG = { class: "mjr-am-header-left" }, TG = { class: "mjr-am-header-title" }, BG = ["data-mjr-version-channel", "title"], UG = { class: "mjr-tabs" }, KG = ["title"], DG = ["title"], EG = ["title"], HG = ["title"], qG = ["title"], PG = { class: "mjr-am-header-tools" }, QG = {
+}, zS = { class: "mjr-am-header-row" }, JS = { class: "mjr-am-header-left" }, TS = { class: "mjr-am-header-title" }, KS = ["data-mjr-version-channel", "title"], BS = { class: "mjr-tabs" }, US = ["title"], DS = ["title"], HS = ["title"], ES = ["title"], qS = ["title"], PS = { class: "mjr-am-header-tools" }, QS = {
class: "mjr-popover-anchor",
style: { display: "none" }
-}, _G = ["title", "aria-label"], $G = ["title", "aria-label"], ex = { class: "mjr-popover-anchor" }, tx = ["title", "aria-label"], nx = { class: "mjr-popover-anchor" }, ix = ["title", "aria-label"], ox = { class: "mjr-popover-anchor" }, rx = ["title", "aria-label"], lx = { class: "mjr-popover-anchor" }, ax = ["title", "aria-label"], cx = { class: "mjr-popover-anchor" }, sx = ["title", "aria-label"], dx = "mjr-am-version-badge-label", ux = "V, Ctrl/Cmd+V", mx = {
+}, _S = ["title", "aria-label"], $S = ["title", "aria-label"], ex = { class: "mjr-popover-anchor" }, tx = ["title", "aria-label"], nx = { class: "mjr-popover-anchor" }, ix = ["title", "aria-label"], ox = { class: "mjr-popover-anchor" }, rx = ["title", "aria-label"], lx = { class: "mjr-popover-anchor" }, ax = ["title", "aria-label"], cx = { class: "mjr-popover-anchor" }, sx = ["title", "aria-label"], dx = "mjr-am-version-badge-label", ux = "V, Ctrl/Cmd+V", mx = {
__name: "HeaderSection",
setup(e, { expose: t }) {
let n = null;
function i() {
- return n || (n = Promise.resolve({}).catch((U) => {
- throw n = null, U;
+ return n || (n = Promise.resolve({}).catch((B) => {
+ throw n = null, B;
})), n;
}
- function o(U, Q = "") {
- const _ = String(U || "").trim().toLowerCase(), le = String(Q || "").trim().toLowerCase();
- return ["nightly", "dev", "alpha", "experimental"].some((se) => _.includes(se) || le.includes(se)) || _.includes("+") || _.length > 10 && /^[a-f0-9]+$/i.test(_);
+ function o(B, Q = "") {
+ const _ = String(B || "").trim().toLowerCase(), le = String(Q || "").trim().toLowerCase();
+ return ["nightly", "dev", "alpha", "experimental"].some((de) => _.includes(de) || le.includes(de)) || _.includes("+") || _.length > 10 && /^[a-f0-9]+$/i.test(_);
}
function r() {
- var U, Q, _;
+ var B, Q, _;
try {
if (typeof window < "u" && (window != null && window.MajoorAssetsManagerBranch))
return String(window.MajoorAssetsManagerBranch);
} catch (le) {
- (U = console.debug) == null || U.call(console, le);
+ (B = console.debug) == null || B.call(console, le);
}
try {
if (typeof process < "u" && ((Q = process == null ? void 0 : process.env) != null && Q.MAJOR_ASSETS_MANAGER_BRANCH))
@@ -36978,13 +37005,13 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = {
rating_desc: "pi pi-star-fill",
size_desc: "pi pi-sort-numeric-down-alt",
size_asc: "pi pi-sort-numeric-up-alt"
- }, a = Go(), s = r() === "nightly", d = Ae(null), u = Ae(null), I = Ae(null), y = Ae(null), S = Ae(null), Z = Ae(null), C = Ae(null), g = Ae(null), A = Ae(null), p = Ae(null), b = Ae(null), L = Ae(null), h = Ae(null), G = Ae(null), W = Ae(null), f = Ae(null), X = Ae(null), x = Ae(null), T = Ae(null), v = Ae(null), w = Ae(null), R = Ae(s ? "nightly" : "v?"), Y = Ae(s ? "nightly" : "stable"), F = Ae(!1), N = Ae(!1), V = Ae(!1), k = ze(
+ }, a = So(), s = r() === "nightly", d = We(null), u = We(null), I = We(null), A = We(null), h = We(null), S = We(null), W = We(null), g = We(null), y = We(null), p = We(null), b = We(null), L = We(null), C = We(null), G = We(null), Z = We(null), f = We(null), X = We(null), x = We(null), K = We(null), j = We(null), w = We(null), R = We(s ? "nightly" : "v?"), V = We(s ? "nightly" : "stable"), O = We(!1), k = We(!1), Y = We(!1), N = ze(
() => l[a.sort] ?? "pi pi-sort-amount-down"
- ), K = ze(
+ ), U = ze(
() => String(a.viewScope || a.scope || "output").toLowerCase()
), z = ze(
- () => K.value === "similar" || Array.isArray(a.similarResults) && a.similarResults.length > 0 || !!a.similarTitle
- ), B = {
+ () => U.value === "similar" || Array.isArray(a.similarResults) && a.similarResults.length > 0 || !!a.similarTitle
+ ), T = {
get tabAll() {
return X.value;
},
@@ -36992,10 +37019,10 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = {
return x.value;
},
get tabOutputs() {
- return T.value;
+ return K.value;
},
get tabCustom() {
- return v.value;
+ return j.value;
},
get tabSimilar() {
return w.value;
@@ -37003,28 +37030,28 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = {
}, J = ze(() => ({
position: "relative",
fontSize: "10px",
- opacity: N.value ? "1" : "0.6",
+ opacity: k.value ? "1" : "0.6",
marginLeft: "6px",
padding: "2px 5px",
borderRadius: "4px",
- background: N.value ? "rgba(255,255,255,0.15)" : "rgba(255,255,255,0.08)",
+ background: k.value ? "rgba(255,255,255,0.15)" : "rgba(255,255,255,0.08)",
color: "inherit",
textDecoration: "none",
cursor: "pointer",
transition: "opacity 0.2s, background 0.2s",
verticalAlign: "middle"
})), P = ze(
- () => V.value ? m("tooltip.closeMFV", "Close Floating Viewer") : m("tooltip.openMFV", "Open Floating Viewer")
- ), H = ze(
- () => V.value ? "pi pi-eye-slash" : "pi pi-eye"
+ () => Y.value ? m("tooltip.closeMFV", "Close Floating Viewer") : m("tooltip.openMFV", "Open Floating Viewer")
+ ), E = ze(
+ () => Y.value ? "pi pi-eye-slash" : "pi pi-eye"
);
- function $(U, { channel: Q = "" } = {}) {
- R.value = String(U || ""), Q && (Y.value = Q);
+ function $(B, { channel: Q = "" } = {}) {
+ R.value = String(B || ""), Q && (V.value = Q);
}
- function E(U) {
+ function H(B) {
i().then((Q) => {
- const _ = Y.value.toLowerCase() === "nightly" || R.value.toLowerCase() === "nightly";
- if (!U && !_) {
+ const _ = V.value.toLowerCase() === "nightly" || R.value.toLowerCase() === "nightly";
+ if (!B && !_) {
const le = (typeof (Q == null ? void 0 : Q.version) == "string" ? Q.version.trim() : "") || "";
le && $(`v${le}`, { channel: "stable" });
}
@@ -37032,90 +37059,90 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = {
n = null;
});
}
- async function oe(U) {
+ async function ne(B) {
var Q, _;
try {
- const le = await Ft(ct.VERSION, { cache: "no-cache" });
+ const le = await Ft(st.VERSION, { cache: "no-cache" });
if (!(le != null && le.ok)) return;
- const de = String(((Q = le.data) == null ? void 0 : Q.version) || "").trim(), se = String(((_ = le.data) == null ? void 0 : _.branch) || "").trim().toLowerCase();
- if (o(de, se) || U) {
+ const ce = String(((Q = le.data) == null ? void 0 : Q.version) || "").trim(), de = String(((_ = le.data) == null ? void 0 : _.branch) || "").trim().toLowerCase();
+ if (o(ce, de) || B) {
$("nightly", { channel: "nightly" });
return;
}
- de && $(
- de.startsWith("v") ? de : `v${de}`,
+ ce && $(
+ ce.startsWith("v") ? ce : `v${ce}`,
{ channel: "stable" }
);
} catch {
}
}
- function M(U) {
- const Q = String((U == null ? void 0 : U.channel) || "").trim().toLowerCase(), _ = String((U == null ? void 0 : U.current) || "").trim().toLowerCase(), le = String((U == null ? void 0 : U.latest) || "").trim().toLowerCase();
- (Q === "nightly" || _ === "nightly" || le === "nightly") && $("nightly", { channel: "nightly" }), F.value = !!(U != null && U.available);
+ function M(B) {
+ const Q = String((B == null ? void 0 : B.channel) || "").trim().toLowerCase(), _ = String((B == null ? void 0 : B.current) || "").trim().toLowerCase(), le = String((B == null ? void 0 : B.latest) || "").trim().toLowerCase();
+ (Q === "nightly" || _ === "nightly" || le === "nightly") && $("nightly", { channel: "nightly" }), O.value = !!(B != null && B.available);
}
- function j() {
- var U;
+ function v() {
+ var B;
try {
eb(g.value, P.value, ux);
} catch (Q) {
- (U = console.debug) == null || U.call(console, Q);
+ (B = console.debug) == null || B.call(console, Q);
}
}
- function O() {
- var U;
+ function F() {
+ var B;
try {
if (typeof document > "u") return;
- V.value = !!document.querySelector(".mjr-mfv.is-visible");
+ Y.value = !!document.querySelector(".mjr-mfv.is-visible");
} catch (Q) {
- (U = console.debug) == null || U.call(console, Q);
+ (B = console.debug) == null || B.call(console, Q);
}
}
- function D(U) {
+ function D(B) {
var Q;
- V.value = !!((Q = U == null ? void 0 : U.detail) != null && Q.visible);
+ Y.value = !!((Q = B == null ? void 0 : B.detail) != null && Q.visible);
}
- function q(U) {
+ function q(B) {
var Q;
try {
- M(U == null ? void 0 : U.detail);
+ M(B == null ? void 0 : B.detail);
} catch (_) {
(Q = console.debug) == null || Q.call(console, _);
}
}
function ee() {
- window.dispatchEvent(new CustomEvent(ht.MFV_TOGGLE));
+ window.dispatchEvent(new CustomEvent(ft.MFV_TOGGLE));
}
- function ce() {
- var U;
+ function ae() {
+ var B;
try {
- typeof window < "u" && (window.removeEventListener(Pc, q), window.removeEventListener(ht.MFV_VISIBILITY_CHANGED, D));
+ typeof window < "u" && (window.removeEventListener(Qc, q), window.removeEventListener(ft.MFV_VISIBILITY_CHANGED, D));
} catch (Q) {
- (U = console.debug) == null || U.call(console, Q);
+ (B = console.debug) == null || B.call(console, Q);
}
}
- cn(V, () => {
- j();
+ dn(Y, () => {
+ v();
}), Dn(async () => {
- var U, Q, _;
+ var B, Q, _;
await wo();
try {
- M(Oh());
+ M(FC());
} catch (le) {
- (U = console.debug) == null || U.call(console, le);
+ (B = console.debug) == null || B.call(console, le);
}
- O(), j(), E(s), oe(s);
+ F(), v(), H(s), ne(s);
try {
- typeof window < "u" && (window.addEventListener(Pc, q), window.addEventListener(ht.MFV_VISIBILITY_CHANGED, D));
+ typeof window < "u" && (window.addEventListener(Qc, q), window.addEventListener(ft.MFV_VISIBILITY_CHANGED, D));
} catch (le) {
(Q = console.debug) == null || Q.call(console, le);
}
try {
- d.value._mjrVersionUpdateCleanup = ce;
+ d.value._mjrVersionUpdateCleanup = ae;
} catch (le) {
(_ = console.debug) == null || _.call(console, le);
}
}), _n(() => {
- ce();
+ ae();
});
const ue = document.createElement("div");
return t({
@@ -37128,226 +37155,226 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = {
return u.value;
},
get tabButtons() {
- return B;
+ return T;
},
// Tool buttons
get customMenuBtn() {
return I.value;
},
get filterBtn() {
- return y.value;
+ return A.value;
},
get sortBtn() {
- return S.value;
+ return h.value;
},
get collectionsBtn() {
- return Z.value;
+ return S.value;
},
get pinnedFoldersBtn() {
- return C.value;
+ return W.value;
},
get messageBtn() {
- return A.value;
+ return y.value;
},
// CustomRootsPopover (Vue)
get customPopover() {
- var U;
- return ((U = W.value) == null ? void 0 : U.$el) ?? null;
+ var B;
+ return ((B = Z.value) == null ? void 0 : B.$el) ?? null;
},
get customSelect() {
- var U;
- return ((U = W.value) == null ? void 0 : U.customSelect) ?? null;
+ var B;
+ return ((B = Z.value) == null ? void 0 : B.customSelect) ?? null;
},
get customAddBtn() {
- var U;
- return ((U = W.value) == null ? void 0 : U.customAddBtn) ?? null;
+ var B;
+ return ((B = Z.value) == null ? void 0 : B.customAddBtn) ?? null;
},
get customRemoveBtn() {
- var U;
- return ((U = W.value) == null ? void 0 : U.customRemoveBtn) ?? null;
+ var B;
+ return ((B = Z.value) == null ? void 0 : B.customRemoveBtn) ?? null;
},
// FilterPopover: expose real DOM element ($el) so legacy popovers.toggle() works
get filterPopover() {
- var U;
- return ((U = L.value) == null ? void 0 : U.$el) ?? null;
+ var B;
+ return ((B = L.value) == null ? void 0 : B.$el) ?? null;
},
get kindSelect() {
- var U;
- return ((U = L.value) == null ? void 0 : U.kindSelect) ?? null;
+ var B;
+ return ((B = L.value) == null ? void 0 : B.kindSelect) ?? null;
},
get wfCheckbox() {
- var U;
- return ((U = L.value) == null ? void 0 : U.wfCheckbox) ?? null;
+ var B;
+ return ((B = L.value) == null ? void 0 : B.wfCheckbox) ?? null;
},
get workflowTypeSelect() {
- var U;
- return ((U = L.value) == null ? void 0 : U.workflowTypeSelect) ?? null;
+ var B;
+ return ((B = L.value) == null ? void 0 : B.workflowTypeSelect) ?? null;
},
get ratingSelect() {
- var U;
- return ((U = L.value) == null ? void 0 : U.ratingSelect) ?? null;
+ var B;
+ return ((B = L.value) == null ? void 0 : B.ratingSelect) ?? null;
},
get minSizeInput() {
- var U;
- return ((U = L.value) == null ? void 0 : U.minSizeInput) ?? null;
+ var B;
+ return ((B = L.value) == null ? void 0 : B.minSizeInput) ?? null;
},
get maxSizeInput() {
- var U;
- return ((U = L.value) == null ? void 0 : U.maxSizeInput) ?? null;
+ var B;
+ return ((B = L.value) == null ? void 0 : B.maxSizeInput) ?? null;
},
get resolutionPresetSelect() {
- var U;
- return ((U = L.value) == null ? void 0 : U.resolutionPresetSelect) ?? null;
+ var B;
+ return ((B = L.value) == null ? void 0 : B.resolutionPresetSelect) ?? null;
},
get minWidthInput() {
- var U;
- return ((U = L.value) == null ? void 0 : U.minWidthInput) ?? null;
+ var B;
+ return ((B = L.value) == null ? void 0 : B.minWidthInput) ?? null;
},
get minHeightInput() {
- var U;
- return ((U = L.value) == null ? void 0 : U.minHeightInput) ?? null;
+ var B;
+ return ((B = L.value) == null ? void 0 : B.minHeightInput) ?? null;
},
get maxWidthInput() {
- var U;
- return ((U = L.value) == null ? void 0 : U.maxWidthInput) ?? null;
+ var B;
+ return ((B = L.value) == null ? void 0 : B.maxWidthInput) ?? null;
},
get maxHeightInput() {
- var U;
- return ((U = L.value) == null ? void 0 : U.maxHeightInput) ?? null;
+ var B;
+ return ((B = L.value) == null ? void 0 : B.maxHeightInput) ?? null;
},
get dateRangeSelect() {
- var U;
- return ((U = L.value) == null ? void 0 : U.dateRangeSelect) ?? null;
+ var B;
+ return ((B = L.value) == null ? void 0 : B.dateRangeSelect) ?? null;
},
get dateExactInput() {
- var U;
- return ((U = L.value) == null ? void 0 : U.dateExactInput) ?? null;
+ var B;
+ return ((B = L.value) == null ? void 0 : B.dateExactInput) ?? null;
},
get agendaContainer() {
- var U;
- return ((U = L.value) == null ? void 0 : U.agendaContainer) ?? null;
+ var B;
+ return ((B = L.value) == null ? void 0 : B.agendaContainer) ?? null;
},
// SortPopover: expose real DOM element ($el) so legacy popovers.toggle() works
get sortPopover() {
- var U;
- return ((U = b.value) == null ? void 0 : U.$el) ?? null;
+ var B;
+ return ((B = b.value) == null ? void 0 : B.$el) ?? null;
},
sortMenu: ue,
// CollectionsPopover (Vue)
get collectionsPopover() {
- var U;
- return ((U = h.value) == null ? void 0 : U.$el) ?? null;
+ var B;
+ return ((B = C.value) == null ? void 0 : B.$el) ?? null;
},
get refreshCollectionsPopover() {
- var U;
- return ((U = h.value) == null ? void 0 : U.refresh) ?? null;
+ var B;
+ return ((B = C.value) == null ? void 0 : B.refresh) ?? null;
},
// PinnedFoldersPopover (Vue)
get pinnedFoldersPopover() {
- var U;
- return ((U = G.value) == null ? void 0 : U.$el) ?? null;
+ var B;
+ return ((B = G.value) == null ? void 0 : B.$el) ?? null;
},
get pinnedFoldersMenu() {
- var U;
- return ((U = G.value) == null ? void 0 : U.pinnedFoldersMenu) ?? null;
+ var B;
+ return ((B = G.value) == null ? void 0 : B.pinnedFoldersMenu) ?? null;
},
// MessagePopover (Vue)
get messagePopover() {
- var U;
- return ((U = f.value) == null ? void 0 : U.$el) ?? null;
+ var B;
+ return ((B = f.value) == null ? void 0 : B.$el) ?? null;
},
get messagePopoverTitle() {
- var U;
- return ((U = f.value) == null ? void 0 : U.title) ?? null;
+ var B;
+ return ((B = f.value) == null ? void 0 : B.title) ?? null;
},
get messageTabBtn() {
- var U;
- return ((U = f.value) == null ? void 0 : U.messageTabBtn) ?? null;
+ var B;
+ return ((B = f.value) == null ? void 0 : B.messageTabBtn) ?? null;
},
get messageTabBadge() {
- var U;
- return ((U = f.value) == null ? void 0 : U.messageTabBadge) ?? null;
+ var B;
+ return ((B = f.value) == null ? void 0 : B.messageTabBadge) ?? null;
},
get historyTabBtn() {
- var U;
- return ((U = f.value) == null ? void 0 : U.historyTabBtn) ?? null;
+ var B;
+ return ((B = f.value) == null ? void 0 : B.historyTabBtn) ?? null;
},
get historyTabBadge() {
- var U;
- return ((U = f.value) == null ? void 0 : U.historyTabBadge) ?? null;
+ var B;
+ return ((B = f.value) == null ? void 0 : B.historyTabBadge) ?? null;
},
get historyTabCount() {
- var U;
- return ((U = f.value) == null ? void 0 : U.historyTabCount) ?? null;
+ var B;
+ return ((B = f.value) == null ? void 0 : B.historyTabCount) ?? null;
},
get historyPanel() {
- var U;
- return ((U = f.value) == null ? void 0 : U.historyPanel) ?? null;
+ var B;
+ return ((B = f.value) == null ? void 0 : B.historyPanel) ?? null;
},
get shortcutsTabBtn() {
- var U;
- return ((U = f.value) == null ? void 0 : U.shortcutsTabBtn) ?? null;
+ var B;
+ return ((B = f.value) == null ? void 0 : B.shortcutsTabBtn) ?? null;
},
get messageList() {
- var U;
- return ((U = f.value) == null ? void 0 : U.messageList) ?? null;
+ var B;
+ return ((B = f.value) == null ? void 0 : B.messageList) ?? null;
},
get shortcutsPanel() {
- var U;
- return ((U = f.value) == null ? void 0 : U.shortcutsPanel) ?? null;
+ var B;
+ return ((B = f.value) == null ? void 0 : B.shortcutsPanel) ?? null;
},
get markReadBtn() {
- var U;
- return ((U = f.value) == null ? void 0 : U.markReadBtn) ?? null;
+ var B;
+ return ((B = f.value) == null ? void 0 : B.markReadBtn) ?? null;
},
// Search bar refs
get searchSection() {
- var U;
- return ((U = p.value) == null ? void 0 : U.searchSection) ?? null;
+ var B;
+ return ((B = p.value) == null ? void 0 : B.searchSection) ?? null;
},
get searchInputEl() {
- var U;
- return ((U = p.value) == null ? void 0 : U.searchInputEl) ?? null;
+ var B;
+ return ((B = p.value) == null ? void 0 : B.searchInputEl) ?? null;
},
get similarBtn() {
- var U;
- return ((U = p.value) == null ? void 0 : U.similarBtn) ?? null;
+ var B;
+ return ((B = p.value) == null ? void 0 : B.similarBtn) ?? null;
},
- setSemanticEnabled(U) {
+ setSemanticEnabled(B) {
var Q, _;
- (_ = (Q = p.value) == null ? void 0 : Q.setSemanticEnabled) == null || _.call(Q, U);
+ (_ = (Q = p.value) == null ? void 0 : Q.setSemanticEnabled) == null || _.call(Q, B);
},
- _headerDispose: ce
- }), (U, Q) => (be(), Ce(Nt, null, [
- ie("div", {
+ _headerDispose: ae
+ }), (B, Q) => (be(), Ze(Nt, null, [
+ te("div", {
ref_key: "headerRef",
ref: d,
class: "mjr-am-header"
}, [
- ie("div", zG, [
- ie("div", JG, [
- Q[2] || (Q[2] = ie("i", {
+ te("div", zS, [
+ te("div", JS, [
+ Q[2] || (Q[2] = te("i", {
class: "mjr-am-header-icon pi pi-folder",
"aria-hidden": "true"
}, null, -1)),
- ie("div", TG, Ye(xe(m)("manager.title")), 1),
- ie("a", {
+ te("div", TS, Ne(ve(m)("manager.title")), 1),
+ te("a", {
href: "https://ko-fi.com/majoorwaldi",
target: "_blank",
rel: "noopener noreferrer",
class: "mjr-am-version-badge",
- "data-mjr-version-channel": Y.value,
- title: xe(m)("tooltip.supportKofi"),
- style: Lt(J.value),
- onMouseenter: Q[0] || (Q[0] = (_) => N.value = !0),
- onMouseleave: Q[1] || (Q[1] = (_) => N.value = !1)
+ "data-mjr-version-channel": V.value,
+ title: ve(m)("tooltip.supportKofi"),
+ style: vt(J.value),
+ onMouseenter: Q[0] || (Q[0] = (_) => k.value = !0),
+ onMouseleave: Q[1] || (Q[1] = (_) => k.value = !1)
}, [
- ie("span", {
- class: Zn(dx)
- }, Ye(R.value), 1),
- ie("span", {
+ te("span", {
+ class: An(dx)
+ }, Ne(R.value), 1),
+ te("span", {
"aria-hidden": "true",
- style: Lt({
+ style: vt({
position: "absolute",
top: "2px",
right: "-3px",
@@ -37356,114 +37383,114 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = {
borderRadius: "50%",
background: "#f44336",
boxShadow: "0 0 0 1px rgba(255,255,255,0.6)",
- display: F.value ? "block" : "none",
+ display: O.value ? "block" : "none",
pointerEvents: "none"
})
}, null, 4)
- ], 44, BG)
+ ], 44, KS)
]),
- ie("div", {
+ te("div", {
ref_key: "headerActionsRef",
ref: u,
class: "mjr-am-header-actions"
}, [
- ie("div", UG, [
- ie("button", {
+ te("div", BS, [
+ te("button", {
ref_key: "tabAllRef",
ref: X,
type: "button",
- class: Zn(["mjr-tab", { "is-active": K.value === "all" }]),
+ class: An(["mjr-tab", { "is-active": U.value === "all" }]),
"data-scope": "all",
- title: xe(m)("tooltip.tab.all")
- }, Ye(xe(m)("tab.all")), 11, KG),
- ie("button", {
+ title: ve(m)("tooltip.tab.all")
+ }, Ne(ve(m)("tab.all")), 11, US),
+ te("button", {
ref_key: "tabInputsRef",
ref: x,
type: "button",
- class: Zn(["mjr-tab", { "is-active": K.value === "input" }]),
+ class: An(["mjr-tab", { "is-active": U.value === "input" }]),
"data-scope": "input",
- title: xe(m)("tooltip.tab.input")
- }, Ye(xe(m)("tab.input")), 11, DG),
- ie("button", {
+ title: ve(m)("tooltip.tab.input")
+ }, Ne(ve(m)("tab.input")), 11, DS),
+ te("button", {
ref_key: "tabOutputsRef",
- ref: T,
+ ref: K,
type: "button",
- class: Zn(["mjr-tab", { "is-active": K.value === "output" }]),
+ class: An(["mjr-tab", { "is-active": U.value === "output" }]),
"data-scope": "output",
- title: xe(m)("tooltip.tab.output")
- }, Ye(xe(m)("tab.output")), 11, EG),
- ie("button", {
+ title: ve(m)("tooltip.tab.output")
+ }, Ne(ve(m)("tab.output")), 11, HS),
+ te("button", {
ref_key: "tabCustomRef",
- ref: v,
+ ref: j,
type: "button",
- class: Zn(["mjr-tab", { "is-active": K.value === "custom" }]),
+ class: An(["mjr-tab", { "is-active": U.value === "custom" }]),
"data-scope": "custom",
- title: xe(m)("tooltip.tab.custom")
- }, Ye(xe(m)("tab.custom")), 11, HG),
- ie("button", {
+ title: ve(m)("tooltip.tab.custom")
+ }, Ne(ve(m)("tab.custom")), 11, ES),
+ te("button", {
ref_key: "tabSimilarRef",
ref: w,
type: "button",
- class: Zn(["mjr-tab", { "is-active": K.value === "similar" }]),
+ class: An(["mjr-tab", { "is-active": U.value === "similar" }]),
"data-scope": "similar",
- style: Lt({ display: z.value ? "" : "none" }),
- title: xe(m)("tooltip.tab.similar", "Browse current similar findings")
- }, Ye(xe(m)("tab.similar", "Similar")), 15, qG)
+ style: vt({ display: z.value ? "" : "none" }),
+ title: ve(m)("tooltip.tab.similar", "Browse current similar findings")
+ }, Ne(ve(m)("tab.similar", "Similar")), 15, qS)
]),
- ie("div", PG, [
- ie("div", QG, [
- ie("button", {
+ te("div", PS, [
+ te("div", QS, [
+ te("button", {
ref_key: "customMenuBtnRef",
ref: I,
type: "button",
class: "mjr-icon-btn",
- title: xe(m)("tooltip.browserFolders"),
- "aria-label": xe(m)("tooltip.browserFolders")
+ title: ve(m)("tooltip.browserFolders"),
+ "aria-label": ve(m)("tooltip.browserFolders")
}, [...Q[3] || (Q[3] = [
- ie("i", {
+ te("i", {
class: "pi pi-folder-open",
"aria-hidden": "true"
}, null, -1)
- ])], 8, _G),
- fn(xG, {
+ ])], 8, _S),
+ Cn(xS, {
ref_key: "customPopoverRef",
- ref: W
+ ref: Z
}, null, 512)
]),
- ie("button", {
+ te("button", {
ref_key: "mfvBtnRef",
ref: g,
type: "button",
- class: Zn(["mjr-icon-btn", { "mjr-mfv-btn-active": V.value }]),
+ class: An(["mjr-icon-btn", { "mjr-mfv-btn-active": Y.value }]),
title: P.value,
"aria-label": P.value,
onClick: ee
}, [
- ie("i", {
- class: Zn(H.value),
+ te("i", {
+ class: An(E.value),
"aria-hidden": "true"
}, null, 2)
- ], 10, $G),
- ie("div", ex, [
- ie("button", {
+ ], 10, $S),
+ te("div", ex, [
+ te("button", {
ref_key: "messageBtnRef",
- ref: A,
+ ref: y,
type: "button",
class: "mjr-icon-btn mjr-message-btn",
- title: xe(m)("tooltip.openMessages", "Messages and updates"),
- "aria-label": xe(m)("tooltip.openMessages", "Messages and updates")
+ title: ve(m)("tooltip.openMessages", "Messages and updates"),
+ "aria-label": ve(m)("tooltip.openMessages", "Messages and updates")
}, [...Q[4] || (Q[4] = [
- ie("i", {
+ te("i", {
class: "pi pi-info-circle",
"aria-hidden": "true"
}, null, -1),
- ie("span", {
+ te("span", {
class: "mjr-message-badge",
style: { display: "none" },
"aria-hidden": "true"
}, null, -1)
])], 8, tx),
- fn(OG, {
+ Cn(FS, {
ref_key: "messagePopoverRef",
ref: f
}, null, 512)
@@ -37472,89 +37499,89 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = {
], 512)
])
], 512),
- fn(S2, {
+ Cn(GM, {
ref_key: "searchBarRef",
ref: p
}, {
"filter-anchor": vl(() => [
- ie("div", nx, [
- ie("button", {
+ te("div", nx, [
+ te("button", {
ref_key: "filterBtnRef",
- ref: y,
+ ref: A,
type: "button",
class: "mjr-icon-btn",
- title: xe(m)("label.filters"),
- "aria-label": xe(m)("label.filters")
+ title: ve(m)("label.filters"),
+ "aria-label": ve(m)("label.filters")
}, [...Q[5] || (Q[5] = [
- ie("i", {
+ te("i", {
class: "pi pi-filter",
"aria-hidden": "true"
}, null, -1)
])], 8, ix),
- fn(RS, {
+ Cn(RG, {
ref_key: "filterPopoverRef",
ref: L
}, null, 512)
])
]),
"sort-anchor": vl(() => [
- ie("div", ox, [
- ie("button", {
+ te("div", ox, [
+ te("button", {
ref_key: "sortBtnRef",
- ref: S,
+ ref: h,
type: "button",
class: "mjr-icon-btn",
- title: xe(m)("label.sort"),
- "aria-label": xe(m)("label.sort")
+ title: ve(m)("label.sort"),
+ "aria-label": ve(m)("label.sort")
}, [
- ie("i", {
- class: Zn(k.value),
+ te("i", {
+ class: An(N.value),
"aria-hidden": "true"
}, null, 2)
], 8, rx),
- fn(L2, {
+ Cn(LM, {
ref_key: "sortPopoverRef",
ref: b
}, null, 512)
])
]),
"collections-anchor": vl(() => [
- ie("div", lx, [
- ie("button", {
+ te("div", lx, [
+ te("button", {
ref_key: "collectionsBtnRef",
- ref: Z,
+ ref: S,
type: "button",
class: "mjr-icon-btn",
- title: xe(m)("label.collections"),
- "aria-label": xe(m)("label.collections")
+ title: ve(m)("label.collections"),
+ "aria-label": ve(m)("label.collections")
}, [...Q[6] || (Q[6] = [
- ie("i", {
+ te("i", {
class: "pi pi-bookmark",
"aria-hidden": "true"
}, null, -1)
])], 8, ax),
- fn(ZG, {
+ Cn(ZS, {
ref_key: "collectionsPopoverRef",
- ref: h
+ ref: C
}, null, 512)
])
]),
"pinned-folders-anchor": vl(() => [
- ie("div", cx, [
- ie("button", {
+ te("div", cx, [
+ te("button", {
ref_key: "pinnedFoldersBtnRef",
- ref: C,
+ ref: W,
type: "button",
class: "mjr-icon-btn",
- title: xe(m)("tooltip.pinnedFolders"),
- "aria-label": xe(m)("tooltip.pinnedFolders")
+ title: ve(m)("tooltip.pinnedFolders"),
+ "aria-label": ve(m)("tooltip.pinnedFolders")
}, [...Q[7] || (Q[7] = [
- ie("i", {
+ te("i", {
class: "pi pi-folder",
"aria-hidden": "true"
}, null, -1)
])], 8, sx),
- fn(WG, {
+ Cn(WS, {
ref_key: "pinnedFoldersPopoverRef",
ref: G
}, null, 512)
@@ -37606,38 +37633,38 @@ function bx() {
const e = document.createElement("div");
return e.className = "mjr-am-context-pills", { wrap: e, update: ({ state: n, rawQuery: i = "", actions: o = null } = {}) => {
var g;
- const r = o && typeof o == "object" ? o : {}, l = ei(i || "").trim(), a = l.length > 0 && l !== "*", c = !!(ei((n == null ? void 0 : n.kindFilter) || "").trim() || n != null && n.workflowOnly || (Number((n == null ? void 0 : n.minRating) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.minSizeMB) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.maxSizeMB) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.minWidth) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.minHeight) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.maxWidth) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.maxHeight) || 0) || 0) > 0 || ei((n == null ? void 0 : n.workflowType) || "").trim() || ei((n == null ? void 0 : n.dateRangeFilter) || "").trim() || ei((n == null ? void 0 : n.dateExactFilter) || "").trim()), s = ei((n == null ? void 0 : n.sort) || "mtime_desc").trim() !== "mtime_desc", d = ei((n == null ? void 0 : n.collectionId) || "").trim().length > 0, u = String((n == null ? void 0 : n.viewScope) || (n == null ? void 0 : n.scope) || "output").toLowerCase(), I = u === "similar", y = u === "custom", S = u !== "output", Z = ei((n == null ? void 0 : n.similarSourceAssetId) || "").trim();
- if (!(!(a || c || s || d || S || I) && !e.childElementCount)) {
+ const r = o && typeof o == "object" ? o : {}, l = ei(i || "").trim(), a = l.length > 0 && l !== "*", c = !!(ei((n == null ? void 0 : n.kindFilter) || "").trim() || n != null && n.workflowOnly || (Number((n == null ? void 0 : n.minRating) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.minSizeMB) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.maxSizeMB) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.minWidth) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.minHeight) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.maxWidth) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.maxHeight) || 0) || 0) > 0 || ei((n == null ? void 0 : n.workflowType) || "").trim() || ei((n == null ? void 0 : n.dateRangeFilter) || "").trim() || ei((n == null ? void 0 : n.dateExactFilter) || "").trim()), s = ei((n == null ? void 0 : n.sort) || "mtime_desc").trim() !== "mtime_desc", d = ei((n == null ? void 0 : n.collectionId) || "").trim().length > 0, u = String((n == null ? void 0 : n.viewScope) || (n == null ? void 0 : n.scope) || "output").toLowerCase(), I = u === "similar", A = u === "custom", h = u !== "output", S = ei((n == null ? void 0 : n.similarSourceAssetId) || "").trim();
+ if (!(!(a || c || s || d || h || I) && !e.childElementCount)) {
try {
e.replaceChildren();
- } catch (A) {
- (g = console.debug) == null || g.call(console, A);
+ } catch (y) {
+ (g = console.debug) == null || g.call(console, y);
}
- if (!y && d && e.appendChild(
+ if (!A && d && e.appendChild(
Ai({
label: m("label.collections"),
value: ei((n == null ? void 0 : n.collectionName) || (n == null ? void 0 : n.collectionId) || "").trim(),
onClear: () => {
- var A;
- return (A = r == null ? void 0 : r.clearCollection) == null ? void 0 : A.call(r);
+ var y;
+ return (y = r == null ? void 0 : r.clearCollection) == null ? void 0 : y.call(r);
}
})
), I && e.appendChild(
Ai({
label: m("search.findSimilar", "Find Similar"),
- value: Z ? m("search.similarReference", "Reference #{id}", { id: Z }) : m("scope.similar", "Similar"),
+ value: S ? m("search.similarReference", "Reference #{id}", { id: S }) : m("scope.similar", "Similar"),
onClear: () => {
- var A;
- return (A = r == null ? void 0 : r.clearSimilarScope) == null ? void 0 : A.call(r);
+ var y;
+ return (y = r == null ? void 0 : r.clearSimilarScope) == null ? void 0 : y.call(r);
}
})
- ), S && e.appendChild(
+ ), h && e.appendChild(
Ai({
label: m("label.scope"),
value: Ix(u || "output"),
onClear: () => {
- var A, p;
- return I ? (A = r == null ? void 0 : r.clearSimilarScope) == null ? void 0 : A.call(r) : (p = r == null ? void 0 : r.clearScope) == null ? void 0 : p.call(r);
+ var y, p;
+ return I ? (y = r == null ? void 0 : r.clearSimilarScope) == null ? void 0 : y.call(r) : (p = r == null ? void 0 : r.clearScope) == null ? void 0 : p.call(r);
}
})
), a && e.appendChild(
@@ -37645,8 +37672,8 @@ function bx() {
label: m("label.query"),
value: l,
onClear: () => {
- var A;
- return (A = r == null ? void 0 : r.clearQuery) == null ? void 0 : A.call(r);
+ var y;
+ return (y = r == null ? void 0 : r.clearQuery) == null ? void 0 : y.call(r);
}
})
), ei((n == null ? void 0 : n.kindFilter) || "").trim() && e.appendChild(
@@ -37654,8 +37681,8 @@ function bx() {
label: m("label.type"),
value: ei((n == null ? void 0 : n.kindFilter) || "").trim(),
onClear: () => {
- var A;
- return (A = r == null ? void 0 : r.clearKind) == null ? void 0 : A.call(r);
+ var y;
+ return (y = r == null ? void 0 : r.clearKind) == null ? void 0 : y.call(r);
}
})
), Number((n == null ? void 0 : n.minRating) || 0) > 0 && e.appendChild(
@@ -37663,8 +37690,8 @@ function bx() {
label: m("label.rating"),
value: `>= ${Number((n == null ? void 0 : n.minRating) || 0)}`,
onClear: () => {
- var A;
- return (A = r == null ? void 0 : r.clearMinRating) == null ? void 0 : A.call(r);
+ var y;
+ return (y = r == null ? void 0 : r.clearMinRating) == null ? void 0 : y.call(r);
}
})
), n != null && n.workflowOnly && e.appendChild(
@@ -37672,8 +37699,8 @@ function bx() {
label: m("label.workflow"),
value: m("label.only"),
onClear: () => {
- var A;
- return (A = r == null ? void 0 : r.clearWorkflowOnly) == null ? void 0 : A.call(r);
+ var y;
+ return (y = r == null ? void 0 : r.clearWorkflowOnly) == null ? void 0 : y.call(r);
}
})
), ei((n == null ? void 0 : n.workflowType) || "").trim() && e.appendChild(
@@ -37681,12 +37708,12 @@ function bx() {
label: m("label.workflowType"),
value: ei((n == null ? void 0 : n.workflowType) || "").trim(),
onClear: () => {
- var A;
- return (A = r == null ? void 0 : r.clearWorkflowType) == null ? void 0 : A.call(r);
+ var y;
+ return (y = r == null ? void 0 : r.clearWorkflowType) == null ? void 0 : y.call(r);
}
})
), (Number((n == null ? void 0 : n.minSizeMB) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.maxSizeMB) || 0) || 0) > 0) {
- const A = Number((n == null ? void 0 : n.minSizeMB) || 0) || 0, p = Number((n == null ? void 0 : n.maxSizeMB) || 0) || 0, b = A > 0 && p > 0 ? `${A}-${p} MB` : A > 0 ? `>= ${A} MB` : `<= ${p} MB`;
+ const y = Number((n == null ? void 0 : n.minSizeMB) || 0) || 0, p = Number((n == null ? void 0 : n.maxSizeMB) || 0) || 0, b = y > 0 && p > 0 ? `${y}-${p} MB` : y > 0 ? `>= ${y} MB` : `<= ${p} MB`;
e.appendChild(
Ai({
label: m("sidebar.size"),
@@ -37699,11 +37726,11 @@ function bx() {
);
}
if ((Number((n == null ? void 0 : n.minWidth) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.minHeight) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.maxWidth) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.maxHeight) || 0) || 0) > 0) {
- const A = String((n == null ? void 0 : n.resolutionCompare) || "gte") === "lte", p = Number(A ? n == null ? void 0 : n.maxWidth : (n == null ? void 0 : n.minWidth) || 0) || 0, b = Number(A ? n == null ? void 0 : n.maxHeight : (n == null ? void 0 : n.minHeight) || 0) || 0;
+ const y = String((n == null ? void 0 : n.resolutionCompare) || "gte") === "lte", p = Number(y ? n == null ? void 0 : n.maxWidth : (n == null ? void 0 : n.minWidth) || 0) || 0, b = Number(y ? n == null ? void 0 : n.maxHeight : (n == null ? void 0 : n.minHeight) || 0) || 0;
e.appendChild(
Ai({
label: m("label.resolution"),
- value: `${A ? "<=" : ">="} ${p || 0}x${b || 0} px`,
+ value: `${y ? "<=" : ">="} ${p || 0}x${b || 0} px`,
onClear: () => {
var L;
return (L = r == null ? void 0 : r.clearResolution) == null ? void 0 : L.call(r);
@@ -37716,8 +37743,8 @@ function bx() {
label: m("sidebar.date"),
value: ei((n == null ? void 0 : n.dateRangeFilter) || "").trim(),
onClear: () => {
- var A;
- return (A = r == null ? void 0 : r.clearDateRange) == null ? void 0 : A.call(r);
+ var y;
+ return (y = r == null ? void 0 : r.clearDateRange) == null ? void 0 : y.call(r);
}
})
), ei((n == null ? void 0 : n.dateExactFilter) || "").trim() && e.appendChild(
@@ -37725,8 +37752,8 @@ function bx() {
label: m("label.day"),
value: ei((n == null ? void 0 : n.dateExactFilter) || "").trim(),
onClear: () => {
- var A;
- return (A = r == null ? void 0 : r.clearDateExact) == null ? void 0 : A.call(r);
+ var y;
+ return (y = r == null ? void 0 : r.clearDateExact) == null ? void 0 : y.call(r);
}
})
), s && e.appendChild(
@@ -37734,8 +37761,8 @@ function bx() {
label: m("label.sort"),
value: gx(n == null ? void 0 : n.sort),
onClear: () => {
- var A;
- return (A = r == null ? void 0 : r.clearSort) == null ? void 0 : A.call(r);
+ var y;
+ return (y = r == null ? void 0 : r.clearSort) == null ? void 0 : y.call(r);
}
})
);
@@ -37765,7 +37792,7 @@ function fx(e) {
}
return [];
}
-function hx(e) {
+function Cx(e) {
var t, n, i, o;
try {
const r = String(((t = e == null ? void 0 : e.dataset) == null ? void 0 : t.mjrSelectedAssetIds) || "").trim();
@@ -37783,8 +37810,8 @@ function hx(e) {
}
return 0;
}
-function Cx({ state: e, gridContainer: t, context: n = null } = {}) {
- var p, b, L, h, G, W;
+function hx({ state: e, gridContainer: t, context: n = null } = {}) {
+ var p, b, L, C, G, Z;
const i = fx(t), o = (() => {
var f;
try {
@@ -37803,93 +37830,93 @@ function Cx({ state: e, gridContainer: t, context: n = null } = {}) {
} catch (X) {
(f = console.debug) == null || f.call(console, X);
}
- return hx(t);
+ return Cx(t);
})(), c = Number(((p = t == null ? void 0 : t.dataset) == null ? void 0 : p.mjrTotal) || 0) || 0 || Math.max(0, Number((e == null ? void 0 : e.lastGridTotal) ?? 0) || 0), d = Number(((b = t == null ? void 0 : t.dataset) == null ? void 0 : b.mjrShown) || 0) || 0 || Math.max(0, Number((e == null ? void 0 : e.lastGridCount) ?? 0) || 0) || r, u = String(
(e == null ? void 0 : e.viewScope) || (e == null ? void 0 : e.scope) || ((L = t == null ? void 0 : t.dataset) == null ? void 0 : L.mjrScope) || "output"
- ).toLowerCase(), I = c && c >= d ? `${d}/${c}` : `${d}`, S = [`${d > 0 && o.total > 0 && o.folders === o.total ? m("summary.folders") : m("summary.assets")}: ${I}`];
- l > 0 && S.push(`${m("summary.selected")}: ${l}`), S.push(yx(u));
+ ).toLowerCase(), I = c && c >= d ? `${d}/${c}` : `${d}`, h = [`${d > 0 && o.total > 0 && o.folders === o.total ? m("summary.folders") : m("summary.assets")}: ${I}`];
+ l > 0 && h.push(`${m("summary.selected")}: ${l}`), h.push(yx(u));
try {
- const f = Number(((h = t == null ? void 0 : t.dataset) == null ? void 0 : h.mjrHiddenPngSiblings) || 0) || 0;
- String(((G = t == null ? void 0 : t.dataset) == null ? void 0 : G.mjrHidePngSiblingsEnabled) || "") === "1" && f > 0 && S.push(`${m("summary.hidden")}: ${f}`);
+ const f = Number(((C = t == null ? void 0 : t.dataset) == null ? void 0 : C.mjrHiddenPngSiblings) || 0) || 0;
+ String(((G = t == null ? void 0 : t.dataset) == null ? void 0 : G.mjrHidePngSiblingsEnabled) || "") === "1" && f > 0 && h.push(`${m("summary.hidden")}: ${f}`);
} catch (f) {
- (W = console.debug) == null || W.call(console, f);
+ (Z = console.debug) == null || Z.call(console, f);
}
- const Z = (n == null ? void 0 : n.duplicatesAlert) || null, C = Number((Z == null ? void 0 : Z.exactCount) || 0) || 0, g = Number((Z == null ? void 0 : Z.similarCount) || 0) || 0, A = u !== "similar" && (C > 0 || g > 0);
+ const S = (n == null ? void 0 : n.duplicatesAlert) || null, W = Number((S == null ? void 0 : S.exactCount) || 0) || 0, g = Number((S == null ? void 0 : S.similarCount) || 0) || 0, y = u !== "similar" && (W > 0 || g > 0);
return {
shown: d,
total: c,
activeScope: u,
- summaryText: S.filter(Boolean).join(" | "),
- duplicateText: A ? `${m("summary.duplicates")}: ${C} | ${m("summary.similar")}: ${g}` : "",
- showDuplicates: A,
+ summaryText: h.filter(Boolean).join(" | "),
+ duplicateText: y ? `${m("summary.duplicates")}: ${W} | ${m("summary.similar")}: ${g}` : "",
+ showDuplicates: y,
rawQuery: px((n == null ? void 0 : n.rawQuery) || "").trim()
};
}
const Zx = { class: "mjr-am-summary-left" }, Ax = { class: "mjr-am-summary-text" }, Wx = { class: "mjr-am-summary-right" }, wx = ["title"], Mx = {
__name: "SummaryBarSection",
setup(e, { expose: t }) {
- const n = Go(), i = Ae(null), o = Ae(null), r = Ae(""), l = Ae(""), a = Ae(!1), c = bx();
+ const n = So(), i = We(null), o = We(null), r = We(""), l = We(""), a = We(!1), c = bx();
let s = null;
const d = (() => {
- const y = document.createElement("div");
- return y.className = "mjr-folder-breadcrumb", y.style.cssText = "display:none; align-items:center; gap:4px; padding:3px 6px; margin:1px 0 3px 0;font-size:11px; opacity:0.78; overflow:auto; white-space:nowrap; border-radius:8px;background:color-mix(in srgb, var(--mjr-surface-2, rgba(255,255,255,0.05)) 42%, transparent);", y;
+ const A = document.createElement("div");
+ return A.className = "mjr-folder-breadcrumb", A.style.cssText = "display:none; align-items:center; gap:4px; padding:3px 6px; margin:1px 0 3px 0;font-size:11px; opacity:0.78; overflow:auto; white-space:nowrap; border-radius:8px;background:color-mix(in srgb, var(--mjr-surface-2, rgba(255,255,255,0.05)) 42%, transparent);", A;
})();
function u() {
- var y;
+ var A;
try {
s == null || s();
- } catch (S) {
- (y = console.debug) == null || y.call(console, S);
+ } catch (h) {
+ (A = console.debug) == null || A.call(console, h);
}
}
- function I({ state: y, gridContainer: S, context: Z = null, actions: C = null } = {}) {
- var A;
- const g = Cx({ state: y, gridContainer: S, context: Z });
+ function I({ state: A, gridContainer: h, context: S = null, actions: W = null } = {}) {
+ var y;
+ const g = hx({ state: A, gridContainer: h, context: S });
n.lastGridCount = g.shown, n.lastGridTotal = g.total, n.viewScope = g.activeScope, r.value = g.summaryText, l.value = g.duplicateText, a.value = g.showDuplicates, s = g.showDuplicates ? () => {
var p, b;
try {
- (p = C == null ? void 0 : C.onDuplicateAlertClick) == null || p.call(C, (Z == null ? void 0 : Z.duplicatesAlert) || null);
+ (p = W == null ? void 0 : W.onDuplicateAlertClick) == null || p.call(W, (S == null ? void 0 : S.duplicatesAlert) || null);
} catch (L) {
(b = console.debug) == null || b.call(console, L);
}
} : null;
try {
c.update({
- state: y,
- gridContainer: S,
+ state: A,
+ gridContainer: h,
rawQuery: g.rawQuery,
- actions: C
+ actions: W
});
} catch (p) {
- (A = console.debug) == null || A.call(console, p);
+ (y = console.debug) == null || y.call(console, p);
}
}
return Dn(() => {
- var y, S, Z;
+ var A, h, S;
try {
- (S = (y = o.value) == null ? void 0 : y.appendChild) == null || S.call(y, c.wrap);
- } catch (C) {
- (Z = console.debug) == null || Z.call(console, C);
+ (h = (A = o.value) == null ? void 0 : A.appendChild) == null || h.call(A, c.wrap);
+ } catch (W) {
+ (S = console.debug) == null || S.call(console, W);
}
- }), t({ summaryBar: i, updateSummaryBar: I, folderBreadcrumb: d }), (y, S) => (be(), Ce("div", {
+ }), t({ summaryBar: i, updateSummaryBar: I, folderBreadcrumb: d }), (A, h) => (be(), Ze("div", {
ref_key: "summaryBar",
ref: i,
class: "mjr-am-summary",
"aria-live": "polite"
}, [
- ie("div", Zx, [
- ie("div", Ax, Ye(r.value), 1)
+ te("div", Zx, [
+ te("div", Ax, Ne(r.value), 1)
]),
- ie("div", Wx, [
- a.value ? (be(), Ce("button", {
+ te("div", Wx, [
+ a.value ? (be(), Ze("button", {
key: 0,
type: "button",
class: "mjr-am-dup-alert",
title: l.value,
style: { padding: "2px 8px", border: "1px solid var(--border-color, #555)", background: "var(--comfy-menu-bg, #222)", color: "var(--input-text, #eee)", "border-radius": "999px", cursor: "pointer" },
onClick: u
- }, Ye(l.value), 9, wx)) : ft("", !0),
- ie("div", {
+ }, Ne(l.value), 9, wx)) : yt("", !0),
+ te("div", {
ref_key: "pillsHost",
ref: o
}, null, 512)
@@ -37897,7 +37924,7 @@ const Zx = { class: "mjr-am-summary-left" }, Ax = { class: "mjr-am-summary-text"
], 512));
}
};
-function Sx(e, t) {
+function Gx(e, t) {
let n = null;
function i(r) {
var l;
@@ -37918,11 +37945,11 @@ function Sx(e, t) {
}
n = null;
}
- cn(e, (r, l) => {
+ dn(e, (r, l) => {
l && o(), r && i(r);
}, { immediate: !0 }), _n(o);
}
-function Gx(e) {
+function Sx(e) {
var t;
if (!e) return () => {
};
@@ -37975,10 +38002,10 @@ function xx(e) {
}
t = null;
};
- cn(
+ dn(
e,
(i, o) => {
- o && n(), i && (t = Gx(i));
+ o && n(), i && (t = Sx(i));
},
{ immediate: !0 }
), _n(n);
@@ -38023,14 +38050,14 @@ function Lx(e = {}) {
const t = Array.isArray(e.selectedIds) ? e.selectedIds.map(String).filter(Boolean) : [], n = String(e.activeId || t[0] || "").trim();
return { ids: t, activeId: n };
}
-function Vx(e, t = {}, n = null) {
+function Yx(e, t = {}, n = null) {
var r, l;
const i = Number(
t.count ?? t.shown ?? ((r = e == null ? void 0 : e.dataset) == null ? void 0 : r.mjrShown) ?? (n == null ? void 0 : n.lastGridCount) ?? 0
) || 0, o = Number(t.total ?? ((l = e == null ? void 0 : e.dataset) == null ? void 0 : l.mjrTotal) ?? (n == null ? void 0 : n.lastGridTotal) ?? 0) || 0;
return { count: i, total: o };
}
-function Yx(e, t = Al()) {
+function Vx(e, t = Al()) {
if (!e || !t) return lp;
let n = 0;
const i = () => {
@@ -38061,7 +38088,7 @@ function Yx(e, t = Al()) {
}
};
}
-function kx(e, {
+function Xx(e, {
panelStore: t = Al(),
onContextChanged: n = null,
markUserInteraction: i = null
@@ -38070,39 +38097,39 @@ function kx(e, {
if (!e) return lp;
let o = 0;
const r = () => {
- var y, S;
+ var A, h;
if (o)
try {
cancelAnimationFrame(o);
- } catch (Z) {
- (y = console.debug) == null || y.call(console, Z);
+ } catch (S) {
+ (A = console.debug) == null || A.call(console, S);
}
try {
o = requestAnimationFrame(() => {
o = 0, cr(n);
});
- } catch (Z) {
- (S = console.debug) == null || S.call(console, Z), o = 0, cr(n);
+ } catch (S) {
+ (h = console.debug) == null || h.call(console, S), o = 0, cr(n);
}
- }, l = (y) => {
- const S = (y == null ? void 0 : y.detail) || {};
+ }, l = (A) => {
+ const h = (A == null ? void 0 : A.detail) || {};
if (t) {
- const { count: Z, total: C } = Vx(e, S, t);
- t.lastGridCount = Z, t.lastGridTotal = C;
+ const { count: S, total: W } = Yx(e, h, t);
+ t.lastGridCount = S, t.lastGridTotal = W;
}
cr(n);
- }, a = (y) => {
+ }, a = (A) => {
if (cr(i), t) {
- const { ids: S, activeId: Z } = Lx((y == null ? void 0 : y.detail) || {});
- t.selectedAssetIds = S, t.activeAssetId = Z;
+ const { ids: h, activeId: S } = Lx((A == null ? void 0 : A.detail) || {});
+ t.selectedAssetIds = h, t.activeAssetId = S;
}
cr(n);
};
e.addEventListener("mjr:grid-stats", l), e.addEventListener("mjr:selection-changed", a);
try {
(d = (s = globalThis == null ? void 0 : globalThis.window) == null ? void 0 : s.addEventListener) == null || d.call(s, "mjr-settings-changed", l);
- } catch (y) {
- (u = console.debug) == null || u.call(console, y);
+ } catch (A) {
+ (u = console.debug) == null || u.call(console, A);
}
let c = null;
try {
@@ -38110,28 +38137,28 @@ function kx(e, {
childList: !0,
subtree: !0
}));
- } catch (y) {
- (I = console.debug) == null || I.call(console, y);
+ } catch (A) {
+ (I = console.debug) == null || I.call(console, A);
}
return () => {
- var y, S, Z, C, g, A, p, b;
+ var A, h, S, W, g, y, p, b;
try {
e.removeEventListener("mjr:grid-stats", l);
} catch (L) {
- (y = console.debug) == null || y.call(console, L);
+ (A = console.debug) == null || A.call(console, L);
}
try {
e.removeEventListener("mjr:selection-changed", a);
} catch (L) {
- (S = console.debug) == null || S.call(console, L);
+ (h = console.debug) == null || h.call(console, L);
}
try {
- (C = (Z = globalThis == null ? void 0 : globalThis.window) == null ? void 0 : Z.removeEventListener) == null || C.call(Z, "mjr-settings-changed", l);
+ (W = (S = globalThis == null ? void 0 : globalThis.window) == null ? void 0 : S.removeEventListener) == null || W.call(S, "mjr-settings-changed", l);
} catch (L) {
(g = console.debug) == null || g.call(console, L);
}
try {
- (A = c == null ? void 0 : c.disconnect) == null || A.call(c);
+ (y = c == null ? void 0 : c.disconnect) == null || y.call(c);
} catch (L) {
(p = console.debug) == null || p.call(console, L);
}
@@ -38145,7 +38172,7 @@ function kx(e, {
}
};
}
-async function Xx({
+async function Nx({
initialLoadPromise: e,
gridWrapper: t,
gridContainer: n,
@@ -38176,22 +38203,22 @@ async function Xx({
}
if (a) {
const u = () => {
- var I, y, S;
+ var I, A, h;
try {
if (typeof (n == null ? void 0 : n._mjrScrollToAssetId) == "function")
n._mjrScrollToAssetId(a);
else {
- const Z = (I = n.querySelector) == null ? void 0 : I.call(
+ const S = (I = n.querySelector) == null ? void 0 : I.call(
n,
`.mjr-asset-card[data-mjr-asset-id="${vx(a)}"]`
);
- (y = Z == null ? void 0 : Z.scrollIntoView) == null || y.call(Z, {
+ (A = S == null ? void 0 : S.scrollIntoView) == null || A.call(S, {
block: "nearest",
behavior: "instant"
});
}
- } catch (Z) {
- (S = console.debug) == null || S.call(console, Z);
+ } catch (S) {
+ (h = console.debug) == null || h.call(console, S);
}
};
u(), setTimeout(u, 160);
@@ -38199,164 +38226,174 @@ async function Xx({
}
i.sidebarOpen && a && cr(o);
}
-const Nx = {
+const kx = {
__name: "AssetsGrid",
setup(e, { expose: t }) {
- const n = Ae(null), i = Ae(null), o = Ae(null), r = Go(), l = ze(() => {
- var Z;
- return ((Z = o.value) == null ? void 0 : Z.gridContainer) ?? null;
+ const n = We(null), i = We(null), o = We(null), r = So(), l = ze(() => {
+ var W;
+ return ((W = o.value) == null ? void 0 : W.gridContainer) ?? null;
});
let a = null, c = null, s = null, d = null;
function u() {
- var Z, C;
+ var W, g;
try {
- (Z = s == null ? void 0 : s.setVisibility) == null || Z.call(s);
- } catch (g) {
- (C = console.debug) == null || C.call(console, g);
+ (W = s == null ? void 0 : s.setVisibility) == null || W.call(s);
+ } catch (y) {
+ (g = console.debug) == null || g.call(console, y);
}
}
function I() {
- var g, A, p, b, L, h;
+ var W;
+ try {
+ const g = l.value;
+ g && ja(g);
+ } catch (g) {
+ (W = console.debug) == null || W.call(console, g);
+ }
+ u();
+ }
+ function A() {
+ var y, p, b, L, C, G;
try {
d == null || d();
- } catch (G) {
- (g = console.debug) == null || g.call(console, G);
+ } catch (Z) {
+ (y = console.debug) == null || y.call(console, Z);
}
- const Z = [], C = () => {
+ const W = [], g = () => {
u();
};
try {
- window.addEventListener("resize", C), Z.push(() => window.removeEventListener("resize", C));
- } catch (G) {
- (A = console.debug) == null || A.call(console, G);
+ window.addEventListener("resize", g), W.push(() => window.removeEventListener("resize", g));
+ } catch (Z) {
+ (p = console.debug) == null || p.call(console, Z);
}
try {
if (typeof ResizeObserver == "function") {
- const G = new ResizeObserver(() => {
- C();
- }), W = [
+ const Z = new ResizeObserver(() => {
+ g();
+ }), f = [
n.value,
i.value,
- ((p = n.value) == null ? void 0 : p.parentElement) || null
+ ((b = n.value) == null ? void 0 : b.parentElement) || null
].filter(Boolean);
- for (const f of W)
- G.observe(f);
- Z.push(() => G.disconnect());
+ for (const X of f)
+ Z.observe(X);
+ W.push(() => Z.disconnect());
}
- } catch (G) {
- (b = console.debug) == null || b.call(console, G);
+ } catch (Z) {
+ (L = console.debug) == null || L.call(console, Z);
}
try {
if (typeof MutationObserver == "function") {
- const G = new MutationObserver(() => {
- C();
- }), W = [
+ const Z = new MutationObserver(() => {
+ g();
+ }), f = [
n.value,
i.value,
- ((L = n.value) == null ? void 0 : L.parentElement) || null
+ ((C = n.value) == null ? void 0 : C.parentElement) || null
].filter(Boolean);
- for (const f of W)
- G.observe(f, {
+ for (const X of f)
+ Z.observe(X, {
attributes: !0,
attributeFilter: ["class", "style", "hidden", "aria-hidden"]
});
- Z.push(() => G.disconnect());
+ W.push(() => Z.disconnect());
}
- } catch (G) {
- (h = console.debug) == null || h.call(console, G);
+ } catch (Z) {
+ (G = console.debug) == null || G.call(console, Z);
}
d = () => {
- var G;
- for (; Z.length; ) {
- const W = Z.pop();
+ var Z;
+ for (; W.length; ) {
+ const f = W.pop();
try {
- W == null || W();
- } catch (f) {
- (G = console.debug) == null || G.call(console, f);
+ f == null || f();
+ } catch (X) {
+ (Z = console.debug) == null || Z.call(console, X);
}
}
};
}
- cg("mjr-grid-container-ref", l), Sx(
+ cg("mjr-grid-container-ref", l), Gx(
l,
() => r
), xx(l);
- function y() {
+ function h() {
return l.value || null;
}
- function S(Z = {}) {
- var g;
- const C = y();
- if (C) {
+ function S(W = {}) {
+ var y;
+ const g = h();
+ if (g) {
try {
c == null || c();
- } catch (A) {
- (g = console.debug) == null || g.call(console, A);
+ } catch (p) {
+ (y = console.debug) == null || y.call(console, p);
}
- c = kx(C, {
+ c = Xx(g, {
panelStore: r,
- ...Z
+ ...W
});
}
}
return Dn(() => {
- var Z;
- a = Yx(i.value, r), i.value && Number(r.scrollTop || 0) > 0 && (i.value.scrollTop = Number(r.scrollTop || 0)), I();
+ var W;
+ a = Vx(i.value, r), i.value && Number(r.scrollTop || 0) > 0 && (i.value.scrollTop = Number(r.scrollTop || 0)), A();
try {
- window.addEventListener("mjr:keepalive-attached", u), document.addEventListener("visibilitychange", u);
- } catch (C) {
- (Z = console.debug) == null || Z.call(console, C);
+ window.addEventListener("mjr:keepalive-attached", I), document.addEventListener("visibilitychange", u);
+ } catch (g) {
+ (W = console.debug) == null || W.call(console, g);
}
u();
}), xr(() => {
- var Z, C, g, A, p, b, L;
+ var W, g, y, p, b, L, C;
try {
- ja(y());
- } catch (h) {
- (Z = console.debug) == null || Z.call(console, h);
+ va(h());
+ } catch (G) {
+ (W = console.debug) == null || W.call(console, G);
}
try {
a == null || a();
- } catch (h) {
- (C = console.debug) == null || C.call(console, h);
+ } catch (G) {
+ (g = console.debug) == null || g.call(console, G);
}
a = null;
try {
d == null || d();
- } catch (h) {
- (g = console.debug) == null || g.call(console, h);
+ } catch (G) {
+ (y = console.debug) == null || y.call(console, G);
}
d = null;
try {
c == null || c();
- } catch (h) {
- (A = console.debug) == null || A.call(console, h);
+ } catch (G) {
+ (p = console.debug) == null || p.call(console, G);
}
c = null;
try {
- (p = s == null ? void 0 : s.dispose) == null || p.call(s);
- } catch (h) {
- (b = console.debug) == null || b.call(console, h);
+ (b = s == null ? void 0 : s.dispose) == null || b.call(s);
+ } catch (G) {
+ (L = console.debug) == null || L.call(console, G);
}
s = null;
try {
- window.removeEventListener("mjr:keepalive-attached", u), document.removeEventListener("visibilitychange", u);
- } catch (h) {
- (L = console.debug) == null || L.call(console, h);
+ window.removeEventListener("mjr:keepalive-attached", I), document.removeEventListener("visibilitychange", u);
+ } catch (G) {
+ (C = console.debug) == null || C.call(console, G);
}
- }), cn(
+ }), dn(
l,
- (Z, C) => {
- var g, A;
+ (W, g) => {
+ var y, p;
try {
- C && C !== Z && ja(C);
- } catch (p) {
- (g = console.debug) == null || g.call(console, p);
+ g && g !== W && va(g);
+ } catch (b) {
+ (y = console.debug) == null || y.call(console, b);
}
try {
- Z && Ds(Z);
- } catch (p) {
- (A = console.debug) == null || A.call(console, p);
+ W && ja(W);
+ } catch (b) {
+ (p = console.debug) == null || p.call(console, b);
}
},
{ immediate: !0 }
@@ -38368,99 +38405,99 @@ const Nx = {
return i.value;
},
get gridContainer() {
- return y();
+ return h();
},
- onGridContainerReady(Z) {
- return Z && Z !== y(), y();
+ onGridContainerReady(W) {
+ return W && W !== h(), h();
},
- bindGridHostState(Z = {}) {
- return S(Z), () => {
- var C;
+ bindGridHostState(W = {}) {
+ return S(W), () => {
+ var g;
try {
c == null || c();
- } catch (g) {
- (C = console.debug) == null || C.call(console, g);
+ } catch (y) {
+ (g = console.debug) == null || g.call(console, y);
}
c = null;
};
},
- restoreGridUiState(Z, C = {}) {
- return Xx({
- initialLoadPromise: Z,
+ restoreGridUiState(W, g = {}) {
+ return Nx({
+ initialLoadPromise: W,
gridWrapper: i.value,
- gridContainer: y(),
+ gridContainer: h(),
panelStore: r,
- ...C
+ ...g
});
},
- initAssetsQueryController(Z = {}) {
- var g, A;
- const C = y();
- if (!C || !i.value) return null;
+ initAssetsQueryController(W = {}) {
+ var y, p;
+ const g = h();
+ if (!g || !i.value) return null;
try {
- (g = s == null ? void 0 : s.dispose) == null || g.call(s);
- } catch (p) {
- (A = console.debug) == null || A.call(console, p);
+ (y = s == null ? void 0 : s.dispose) == null || y.call(s);
+ } catch (b) {
+ (p = console.debug) == null || p.call(console, b);
}
return s = op({
- gridContainer: C,
+ gridContainer: g,
gridWrapper: i.value,
- ...Z
+ ...W
}), u(), s;
},
- loadAssets(...Z) {
- var C, g;
- return (g = (C = o.value) == null ? void 0 : C.loadAssets) == null ? void 0 : g.call(C, ...Z);
+ loadAssets(...W) {
+ var g, y;
+ return (y = (g = o.value) == null ? void 0 : g.loadAssets) == null ? void 0 : y.call(g, ...W);
},
- loadAssetsFromList(...Z) {
- var C, g;
- return (g = (C = o.value) == null ? void 0 : C.loadAssetsFromList) == null ? void 0 : g.call(C, ...Z);
+ loadAssetsFromList(...W) {
+ var g, y;
+ return (y = (g = o.value) == null ? void 0 : g.loadAssetsFromList) == null ? void 0 : y.call(g, ...W);
},
- prepareGridForScopeSwitch(...Z) {
- var C, g;
- return (g = (C = o.value) == null ? void 0 : C.prepareGridForScopeSwitch) == null ? void 0 : g.call(C, ...Z);
+ prepareGridForScopeSwitch(...W) {
+ var g, y;
+ return (y = (g = o.value) == null ? void 0 : g.prepareGridForScopeSwitch) == null ? void 0 : y.call(g, ...W);
},
- refreshGrid(...Z) {
- var C, g;
- return (g = (C = o.value) == null ? void 0 : C.refreshGrid) == null ? void 0 : g.call(C, ...Z);
+ refreshGrid(...W) {
+ var g, y;
+ return (y = (g = o.value) == null ? void 0 : g.refreshGrid) == null ? void 0 : y.call(g, ...W);
},
- captureAnchor(...Z) {
- var C, g;
- return (g = (C = o.value) == null ? void 0 : C.captureAnchor) == null ? void 0 : g.call(C, ...Z);
+ captureAnchor(...W) {
+ var g, y;
+ return (y = (g = o.value) == null ? void 0 : g.captureAnchor) == null ? void 0 : y.call(g, ...W);
},
- restoreAnchor(...Z) {
- var C, g;
- return (g = (C = o.value) == null ? void 0 : C.restoreAnchor) == null ? void 0 : g.call(C, ...Z);
+ restoreAnchor(...W) {
+ var g, y;
+ return (y = (g = o.value) == null ? void 0 : g.restoreAnchor) == null ? void 0 : y.call(g, ...W);
},
- hydrateGridFromSnapshot(...Z) {
- var C, g;
- return (g = (C = o.value) == null ? void 0 : C.hydrateFromSnapshot) == null ? void 0 : g.call(C, ...Z);
+ hydrateGridFromSnapshot(...W) {
+ var g, y;
+ return (y = (g = o.value) == null ? void 0 : g.hydrateFromSnapshot) == null ? void 0 : y.call(g, ...W);
},
- upsertAsset(...Z) {
- var C, g;
- return (g = (C = o.value) == null ? void 0 : C.upsertAsset) == null ? void 0 : g.call(C, ...Z);
+ upsertAsset(...W) {
+ var g, y;
+ return (y = (g = o.value) == null ? void 0 : g.upsertAsset) == null ? void 0 : y.call(g, ...W);
},
- removeAssets(...Z) {
- var C, g;
- return (g = (C = o.value) == null ? void 0 : C.removeAssets) == null ? void 0 : g.call(C, ...Z);
+ removeAssets(...W) {
+ var g, y;
+ return (y = (g = o.value) == null ? void 0 : g.removeAssets) == null ? void 0 : y.call(g, ...W);
},
- disposeGrid(...Z) {
- var C, g;
- return (g = (C = o.value) == null ? void 0 : C.dispose) == null ? void 0 : g.call(C, ...Z);
+ disposeGrid(...W) {
+ var g, y;
+ return (y = (g = o.value) == null ? void 0 : g.dispose) == null ? void 0 : y.call(g, ...W);
}
- }), (Z, C) => (be(), Ce("div", {
+ }), (W, g) => (be(), Ze("div", {
ref_key: "browseSectionRef",
ref: n,
class: "mjr-am-browse",
style: { flex: "1", display: "flex", "flex-direction": "row", overflow: "hidden" }
}, [
- ie("div", {
+ te("div", {
ref_key: "gridWrapperRef",
ref: i,
class: "mjr-am-grid-scroll",
style: { flex: "1", overflow: "auto", position: "relative" }
}, [
- fn(Vp, {
+ Cn(Yp, {
ref_key: "gridHostRef",
ref: o,
"scroll-element": i.value
@@ -38471,7 +38508,7 @@ const Nx = {
}, Rx = {
class: "mjr-sidebar-header",
style: { display: "flex", "align-items": "center", "justify-content": "space-between", padding: "10px 12px", "border-bottom": "1px solid var(--mjr-border,rgba(255,255,255,0.12))", "flex-shrink": "0", background: "var(--mjr-surface-2,#2e2e2e)" }
-}, Fx = ["title"], Ox = {
+}, Ox = ["title"], Fx = {
__name: "SidebarHeaderSection",
props: {
asset: { type: Object, required: !0 }
@@ -38479,13 +38516,13 @@ const Nx = {
emits: ["close"],
setup(e, { emit: t }) {
const n = t;
- return (i, o) => (be(), Ce("div", Rx, [
- ie("div", {
+ return (i, o) => (be(), Ze("div", Rx, [
+ te("div", {
class: "mjr-sidebar-filename",
title: e.asset.filename,
style: { "font-size": "0.9em", "font-weight": "600", overflow: "hidden", "text-overflow": "ellipsis", "white-space": "nowrap", flex: "1", "min-width": "0", "padding-right": "8px" }
- }, Ye(e.asset.filename), 9, Fx),
- ie("button", {
+ }, Ne(e.asset.filename), 9, Ox),
+ te("button", {
type: "button",
class: "mjr-sidebar-close",
title: "Close sidebar (Esc)",
@@ -38512,32 +38549,32 @@ function Jx(e) {
const n = (i) => String(i).padStart(2, "0");
return `${t.getFullYear()}-${n(t.getMonth() + 1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}`;
}
-const Tx = { class: "mjr-sidebar-preview" }, Bx = ["src"], Ux = ["src"], Kx = ["src"], Dx = {
+const Tx = { class: "mjr-sidebar-preview" }, Kx = ["src"], Bx = ["src"], Ux = ["src"], Dx = {
key: 3,
style: { color: "rgba(255, 255, 255, 0.4)", "font-size": "14px" }
-}, Ex = {
+}, Hx = {
class: "mjr-sidebar-preview-meta",
style: { "margin-top": "10px", "font-size": "12px", color: "var(--mjr-muted, rgba(255, 255, 255, 0.65))", display: "flex", "flex-wrap": "wrap", gap: "6px", "align-items": "center", "line-height": "1.3", "padding-bottom": "12px", "border-bottom": "1px solid var(--mjr-border, rgba(255, 255, 255, 0.12))" }
-}, Hx = {
+}, Ex = {
__name: "SidebarPreviewSection",
props: {
asset: { type: Object, required: !0 },
showPreviewThumb: { type: Boolean, default: !0 }
},
setup(e) {
- const t = e, n = Ae(null);
+ const t = e, n = We(null);
let i = null;
- const o = ze(() => Ki(t.asset) || ""), r = ze(() => {
+ const o = ze(() => Ui(t.asset) || ""), r = ze(() => {
var I;
const d = String(((I = t.asset) == null ? void 0 : I.filename) || ""), u = d.lastIndexOf(".");
return u === -1 ? "" : d.slice(u + 1).toUpperCase();
}), l = ze(() => {
- var y, S, Z;
+ var A, h, S;
const d = [];
- r.value && d.push(r.value), (y = t.asset) != null && y.kind && d.push(String(t.asset.kind).toLowerCase());
- const u = zx((S = t.asset) == null ? void 0 : S.size);
+ r.value && d.push(r.value), (A = t.asset) != null && A.kind && d.push(String(t.asset.kind).toLowerCase());
+ const u = zx((h = t.asset) == null ? void 0 : h.size);
u && d.push(u);
- const I = Jx((Z = t.asset) == null ? void 0 : Z.mtime);
+ const I = Jx((S = t.asset) == null ? void 0 : S.mtime);
return I && d.push(I), d.join(" • ");
});
function a() {
@@ -38552,29 +38589,29 @@ const Tx = { class: "mjr-sidebar-preview" }, Bx = ["src"], Ux = ["src"], Kx = ["
function c(d) {
var u, I;
try {
- const y = (u = d == null ? void 0 : d.play) == null ? void 0 : u.call(d);
- y && typeof y.catch == "function" && y.catch(() => {
+ const A = (u = d == null ? void 0 : d.play) == null ? void 0 : u.call(d);
+ A && typeof A.catch == "function" && A.catch(() => {
});
- } catch (y) {
- (I = console.debug) == null || I.call(console, y);
+ } catch (A) {
+ (I = console.debug) == null || I.call(console, A);
}
}
function s() {
- var I, y, S;
+ var I, A, h;
if (a(), !t.showPreviewThumb || String(((I = t.asset) == null ? void 0 : I.kind) || "").toLowerCase() !== "video") return;
- const d = n.value, u = (y = d == null ? void 0 : d.querySelector) == null ? void 0 : y.call(d, "video");
+ const d = n.value, u = (A = d == null ? void 0 : d.querySelector) == null ? void 0 : A.call(d, "video");
if (!(!d || !u)) {
c(u);
try {
i = _I(u, { variant: "preview", hostEl: d });
- } catch (Z) {
- (S = console.debug) == null || S.call(console, Z);
+ } catch (S) {
+ (h = console.debug) == null || h.call(console, S);
}
}
}
- return cn(() => [t.asset, t.showPreviewThumb], () => {
+ return dn(() => [t.asset, t.showPreviewThumb], () => {
a();
- }, { flush: "post" }), cn(o, () => {
+ }, { flush: "post" }), dn(o, () => {
setTimeout(() => {
s();
}, 0);
@@ -38582,18 +38619,18 @@ const Tx = { class: "mjr-sidebar-preview" }, Bx = ["src"], Ux = ["src"], Kx = ["
s();
}), xr(() => {
a();
- }), (d, u) => (be(), Ce("div", Tx, [
- e.showPreviewThumb ? (be(), Ce("div", {
+ }), (d, u) => (be(), Ze("div", Tx, [
+ e.showPreviewThumb ? (be(), Ze("div", {
key: 0,
ref_key: "previewContainerRef",
ref: n,
style: { width: "100%", "aspect-ratio": "1", background: "black", "border-radius": "8px", overflow: "hidden", display: "flex", "align-items": "center", "justify-content": "center", position: "relative" }
}, [
- e.asset.kind === "image" ? (be(), Ce("img", {
+ e.asset.kind === "image" ? (be(), Ze("img", {
key: 0,
src: o.value,
style: { "max-width": "100%", "max-height": "100%", "object-fit": "contain" }
- }, null, 8, Bx)) : e.asset.kind === "video" ? (be(), Ce("video", {
+ }, null, 8, Kx)) : e.asset.kind === "video" ? (be(), Ze("video", {
key: 1,
src: o.value,
muted: !0,
@@ -38602,15 +38639,15 @@ const Tx = { class: "mjr-sidebar-preview" }, Bx = ["src"], Ux = ["src"], Kx = ["
playsinline: "",
preload: "metadata",
style: { "max-width": "100%", "max-height": "100%", "object-fit": "contain" }
- }, null, 8, Ux)) : e.asset.kind === "audio" ? (be(), Ce("audio", {
+ }, null, 8, Bx)) : e.asset.kind === "audio" ? (be(), Ze("audio", {
key: 2,
src: o.value,
controls: "",
preload: "metadata",
style: { width: "92%", "max-width": "560px" }
- }, null, 8, Kx)) : (be(), Ce("div", Dx, Ye(String(e.asset.kind || "PREVIEW").toUpperCase()), 1))
- ], 512)) : ft("", !0),
- ie("div", Ex, Ye(l.value), 1)
+ }, null, 8, Ux)) : (be(), Ze("div", Dx, Ne(String(e.asset.kind || "PREVIEW").toUpperCase()), 1))
+ ], 512)) : yt("", !0),
+ te("div", Hx, Ne(l.value), 1)
]));
}
}, qx = {
@@ -38650,11 +38687,11 @@ const Tx = { class: "mjr-sidebar-preview" }, Bx = ["src"], Ux = ["src"], Kx = ["
tooltip: "Image/video resolution in pixels"
}), r.duration && r.duration > 0 && l.push({
label: "Duration",
- value: kb(r.duration),
+ value: Xb(r.duration),
tooltip: "Video duration"
}), i(r)) {
const d = PI(r);
- d != null && l.push({ label: "FPS", value: BZ(d), tooltip: "Native frame rate" });
+ d != null && l.push({ label: "FPS", value: KZ(d), tooltip: "Native frame rate" });
const u = QI(r, d);
u != null && l.push({
label: "Length",
@@ -38673,32 +38710,32 @@ const Tx = { class: "mjr-sidebar-preview" }, Bx = ["src"], Ux = ["src"], Kx = ["
});
const c = r.generation_time || r.file_creation_time || r.mtime || r.created_at;
if (c) {
- const d = za(c), u = Ja(c);
+ const d = Ja(c), u = Ta(c);
d && l.push({ label: "Date", value: d, tooltip: "File creation/generation date" }), u && l.push({ label: "Time", value: u, tooltip: "File creation/generation time" });
}
return r.size && r.size > 0 && l.push({ label: "File Size", value: n(r.size), tooltip: "File size on disk" }), r.id != null && l.push({ label: "Asset ID", value: String(r.id), tooltip: "Internal database asset identifier" }), r.job_id && l.push({ label: "Job ID", value: String(r.job_id), tooltip: "Workflow execution job identifier (prompt_id)" }), l;
});
- return (r, l) => o.value.length ? (be(), Ce("div", qx, [
- l[0] || (l[0] = ie("div", { style: { "font-size": "12px", "font-weight": "700", color: "#607d8b", "margin-bottom": "8px", "text-transform": "uppercase", "letter-spacing": "0.4px" } }, " File Info ", -1)),
- ie("div", Px, [
- (be(!0), Ce(Nt, null, Cn(o.value, (a) => (be(), Ce("div", {
+ return (r, l) => o.value.length ? (be(), Ze("div", qx, [
+ l[0] || (l[0] = te("div", { style: { "font-size": "12px", "font-weight": "700", color: "#607d8b", "margin-bottom": "8px", "text-transform": "uppercase", "letter-spacing": "0.4px" } }, " File Info ", -1)),
+ te("div", Px, [
+ (be(!0), Ze(Nt, null, Zn(o.value, (a) => (be(), Ze("div", {
key: a.label,
style: { display: "flex", gap: "10px", "align-items": "flex-start", "justify-content": "space-between" }
}, [
- ie("div", {
+ te("div", {
title: a.tooltip || "",
style: { "font-size": "12px", opacity: "0.68", "min-width": "92px" }
- }, Ye(a.label), 9, Qx),
- ie("div", {
- style: Lt(a.valueStyle || "font-size: 12px; text-align: right; word-break: break-word"),
+ }, Ne(a.label), 9, Qx),
+ te("div", {
+ style: vt(a.valueStyle || "font-size: 12px; text-align: right; word-break: break-word"),
title: String(a.value || "")
- }, Ye(a.value), 13, _x)
+ }, Ne(a.value), 13, _x)
]))), 128))
])
- ])) : ft("", !0);
+ ])) : yt("", !0);
}
};
-function Nm(e) {
+function km(e) {
if (!e || typeof e != "string") return null;
const t = {}, n = e.split(/\nNegative prompt:\s*/i);
if (n[0] && (t.prompt = n[0].trim()), n[1]) {
@@ -38728,7 +38765,7 @@ function ap(e) {
return !1;
}
}
-function jc(e) {
+function vc(e) {
var o;
if (!e || typeof e != "object") return null;
const t = {}, i = (e.prompt && typeof e.prompt == "object" ? e.prompt : null) || (ap(e) ? e : null);
@@ -38738,39 +38775,39 @@ function jc(e) {
if (!l || typeof l != "object") continue;
const a = l.inputs;
if (!a || typeof a != "object") continue;
- const c = String((l == null ? void 0 : l.class_type) || (l == null ? void 0 : l.type) || "").toLowerCase(), s = String((l == null ? void 0 : l.title) || ((o = l == null ? void 0 : l._meta) == null ? void 0 : o.title) || "").toLowerCase(), d = (Z, C) => {
- if (t[Z] || typeof C != "string") return;
- const g = C.trim();
- g && (/^[\d\s.,+-]+$/.test(g) || (t[Z] = g));
+ const c = String((l == null ? void 0 : l.class_type) || (l == null ? void 0 : l.type) || "").toLowerCase(), s = String((l == null ? void 0 : l.title) || ((o = l == null ? void 0 : l._meta) == null ? void 0 : o.title) || "").toLowerCase(), d = (S, W) => {
+ if (t[S] || typeof W != "string") return;
+ const g = W.trim();
+ g && (/^[\d\s.,+-]+$/.test(g) || (t[S] = g));
};
if ((c.includes("cliptextencode") || c.includes("clip_text_encode") || s.includes("clip text encode")) && typeof a.text == "string") {
- const Z = s.includes("negative"), C = s.includes("positive") || s.includes("(prompt)") || s.includes("prompt");
- d(Z ? "negative_prompt" : "prompt", a.text);
+ const S = s.includes("negative"), W = s.includes("positive") || s.includes("(prompt)") || s.includes("prompt");
+ d(S ? "negative_prompt" : "prompt", a.text);
}
if (d("negative_prompt", a.negative_prompt), d("negative_prompt", a.negative), !t.prompt && typeof a.text == "string") {
- const Z = a.text.trim();
- (c.includes("prompt") || c.includes("encode") || c.includes("positive") || c.includes("negative") || s.includes("prompt") || s.includes("positive") || s.includes("negative")) && Z.length >= 12 && /[a-zA-Z]/.test(Z) && d("prompt", Z);
+ const S = a.text.trim();
+ (c.includes("prompt") || c.includes("encode") || c.includes("positive") || c.includes("negative") || s.includes("prompt") || s.includes("positive") || s.includes("negative")) && S.length >= 12 && /[a-zA-Z]/.test(S) && d("prompt", S);
}
a.seed !== void 0 && t.seed === void 0 && (t.seed = a.seed), a.steps !== void 0 && t.steps === void 0 && (t.steps = a.steps), a.cfg !== void 0 && t.cfg === void 0 && (t.cfg = a.cfg), a.sampler_name && !t.sampler && (t.sampler = a.sampler_name), a.scheduler && !t.scheduler && (t.scheduler = a.scheduler), a.denoise !== void 0 && t.denoise === void 0 && (t.denoise = a.denoise), a.width !== void 0 && t.width === void 0 && (t.width = a.width), a.height !== void 0 && t.height === void 0 && (t.height = a.height);
- const I = (Z, C) => {
- if (t[Z] || typeof C != "string") return;
- const g = C.trim();
- g && (t[Z] = g);
- }, y = [
+ const I = (S, W) => {
+ if (t[S] || typeof W != "string") return;
+ const g = W.trim();
+ g && (t[S] = g);
+ }, A = [
a.ckpt_name,
a.checkpoint,
a.checkpoint_name,
a.model_name,
a.model
];
- for (const Z of y)
- t.model || I("model", Z);
+ for (const S of A)
+ t.model || I("model", S);
if (I("vae", a.vae_name || a.vae), I("clip", a.clip_name || a.clip), I("unet", a.unet_name || a.unet), I(
"diffusion",
a.diffusion_name || a.diffusion_model || a.diffusion
), c.includes("lora") || c.includes("loraloader")) {
- const Z = a.lora_name || a.lora || a.name || null, C = a.strength_model ?? a.strength ?? a.weight ?? a.lora_strength ?? null;
- Z && r.push({ name: Z, weight: C });
+ const S = a.lora_name || a.lora || a.name || null, W = a.strength_model ?? a.strength ?? a.weight ?? a.lora_strength ?? null;
+ S && r.push({ name: S, weight: W });
}
}
r.length && (t.loras = r);
@@ -38779,89 +38816,89 @@ function jc(e) {
}
const ej = /^(?:[a-z]:[\\/]|[\\/]{1,2}|\.{1,2}[\\/]|~[\\/]).+?[\\/][^\\/\n]+\.(?: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|ckpt|safetensors|pt|pth|bin|gguf|json|ya?ml)$/i, tj = /^(?!.*[,;])(?!.*\b(?:cinematic|portrait|landscape|lighting|style|detailed|masterpiece|photo|render)\b).*(?:[\\/][^\\/\n]+){2,}\.(?: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|ckpt|safetensors|pt|pth|bin|gguf|json|ya?ml)$/i;
function cp(e) {
- var t, n, i, o, r, l, a, c, s, d, u, I, y, S, Z, C, g, A, p, b, L, h, G, W, f, X, x, T, v, w, R, Y, F, N, V, k, K, z, B;
+ var t, n, i, o, r, l, a, c, s, d, u, I, A, h, S, W, g, y, p, b, L, C, G, Z, f, X, x, K, j, w, R, V, O, k, Y, N, U, z, T;
if (!e) return null;
if (typeof e == "object") {
const J = e.geninfo || e.GenInfo || e.generation || null;
if (J && typeof J == "object") {
- const M = {}, j = ((t = J.positive) == null ? void 0 : t.value) ?? ((n = J.positive) == null ? void 0 : n.text) ?? null, O = ((i = J.negative) == null ? void 0 : i.value) ?? ((o = J.negative) == null ? void 0 : o.text) ?? null;
- typeof j == "string" && j.trim() && (M.prompt = j), typeof O == "string" && O.trim() && (M.negative_prompt = O);
+ const M = {}, v = ((t = J.positive) == null ? void 0 : t.value) ?? ((n = J.positive) == null ? void 0 : n.text) ?? null, F = ((i = J.negative) == null ? void 0 : i.value) ?? ((o = J.negative) == null ? void 0 : o.text) ?? null;
+ typeof v == "string" && v.trim() && (M.prompt = v), typeof F == "string" && F.trim() && (M.negative_prompt = F);
const D = ((r = J.checkpoint) == null ? void 0 : r.name) ?? J.checkpoint ?? null;
typeof D == "string" && D.trim() && (M.model = D);
const q = ((l = J.clip) == null ? void 0 : l.name) ?? J.clip ?? null;
typeof q == "string" && q.trim() && (M.clip = q);
const ee = ((a = J.vae) == null ? void 0 : a.name) ?? J.vae ?? null;
typeof ee == "string" && ee.trim() && (M.vae = ee);
- const ce = J.models;
- ce && typeof ce == "object" && (M.models = ce);
+ const ae = J.models;
+ ae && typeof ae == "object" && (M.models = ae);
const ue = Array.isArray(J.loras) ? J.loras : null;
ue && (M.loras = ue);
- const U = ((c = J.sampler) == null ? void 0 : c.name) ?? J.sampler ?? null;
- typeof U == "string" && U.trim() && (M.sampler = U);
+ const B = ((c = J.sampler) == null ? void 0 : c.name) ?? J.sampler ?? null;
+ typeof B == "string" && B.trim() && (M.sampler = B);
const Q = ((s = J.scheduler) == null ? void 0 : s.name) ?? J.scheduler ?? null;
typeof Q == "string" && Q.trim() && (M.scheduler = Q);
const _ = ((d = J.steps) == null ? void 0 : d.value) ?? J.steps ?? null;
_ != null && (M.steps = _);
const le = ((u = J.cfg) == null ? void 0 : u.value) ?? J.cfg ?? null;
le != null && (M.cfg = le);
- const de = ((I = J.seed) == null ? void 0 : I.value) ?? J.seed ?? null;
- de != null && (M.seed = de);
- const se = ((y = J.voice) == null ? void 0 : y.name) ?? ((S = J.voice) == null ? void 0 : S.value) ?? J.voice ?? null;
- se != null && String(se).trim() && (M.voice = String(se).trim());
- const ge = ((Z = J.language) == null ? void 0 : Z.value) ?? J.language ?? null;
+ const ce = ((I = J.seed) == null ? void 0 : I.value) ?? J.seed ?? null;
+ ce != null && (M.seed = ce);
+ const de = ((A = J.voice) == null ? void 0 : A.name) ?? ((h = J.voice) == null ? void 0 : h.value) ?? J.voice ?? null;
+ de != null && String(de).trim() && (M.voice = String(de).trim());
+ const ge = ((S = J.language) == null ? void 0 : S.value) ?? J.language ?? null;
ge != null && String(ge).trim() && (M.language = String(ge).trim());
- const je = ((C = J.temperature) == null ? void 0 : C.value) ?? J.temperature ?? null;
- je != null && (M.temperature = je);
- const Se = ((g = J.top_k) == null ? void 0 : g.value) ?? J.top_k ?? null;
- Se != null && (M.top_k = Se);
- const ke = ((A = J.top_p) == null ? void 0 : A.value) ?? J.top_p ?? null;
- ke != null && (M.top_p = ke);
- const we = ((p = J.repetition_penalty) == null ? void 0 : p.value) ?? J.repetition_penalty ?? null;
- we != null && (M.repetition_penalty = we);
- const Je = ((b = J.max_new_tokens) == null ? void 0 : b.value) ?? J.max_new_tokens ?? null;
- Je != null && (M.max_new_tokens = Je);
- const $e = ((L = J.device) == null ? void 0 : L.value) ?? J.device ?? null;
- $e != null && String($e).trim() && (M.device = String($e).trim());
- const qe = ((h = J.voice_preset) == null ? void 0 : h.value) ?? J.voice_preset ?? null;
+ const Le = ((W = J.temperature) == null ? void 0 : W.value) ?? J.temperature ?? null;
+ Le != null && (M.temperature = Le);
+ const xe = ((g = J.top_k) == null ? void 0 : g.value) ?? J.top_k ?? null;
+ xe != null && (M.top_k = xe);
+ const Xe = ((y = J.top_p) == null ? void 0 : y.value) ?? J.top_p ?? null;
+ Xe != null && (M.top_p = Xe);
+ const Me = ((p = J.repetition_penalty) == null ? void 0 : p.value) ?? J.repetition_penalty ?? null;
+ Me != null && (M.repetition_penalty = Me);
+ const Fe = ((b = J.max_new_tokens) == null ? void 0 : b.value) ?? J.max_new_tokens ?? null;
+ Fe != null && (M.max_new_tokens = Fe);
+ const it = ((L = J.device) == null ? void 0 : L.value) ?? J.device ?? null;
+ it != null && String(it).trim() && (M.device = String(it).trim());
+ const qe = ((C = J.voice_preset) == null ? void 0 : C.value) ?? J.voice_preset ?? null;
qe != null && String(qe).trim() && (M.voice_preset = String(qe).trim());
- const Ue = ((G = J.instruct) == null ? void 0 : G.value) ?? J.instruct ?? null;
- Ue != null && String(Ue).trim() && (M.instruct = String(Ue).trim());
- const Te = ((W = J.dtype) == null ? void 0 : W.value) ?? J.dtype ?? null;
- Te != null && String(Te).trim() && (M.dtype = String(Te).trim());
- const Oe = ((f = J.attn_implementation) == null ? void 0 : f.value) ?? J.attn_implementation ?? null;
- Oe != null && String(Oe).trim() && (M.attn_implementation = String(Oe).trim());
- const pt = ((X = J.x_vector_only_mode) == null ? void 0 : X.value) ?? J.x_vector_only_mode ?? null;
- pt != null && (M.x_vector_only_mode = pt);
- const Me = ((x = J.use_torch_compile) == null ? void 0 : x.value) ?? J.use_torch_compile ?? null;
- Me != null && (M.use_torch_compile = Me);
- const Xt = ((T = J.use_cuda_graphs) == null ? void 0 : T.value) ?? J.use_cuda_graphs ?? null;
- Xt != null && (M.use_cuda_graphs = Xt);
- const Mt = ((v = J.compile_mode) == null ? void 0 : v.value) ?? J.compile_mode ?? null;
- Mt != null && String(Mt).trim() && (M.compile_mode = String(Mt).trim());
+ const Pe = ((G = J.instruct) == null ? void 0 : G.value) ?? J.instruct ?? null;
+ Pe != null && String(Pe).trim() && (M.instruct = String(Pe).trim());
+ const Re = ((Z = J.dtype) == null ? void 0 : Z.value) ?? J.dtype ?? null;
+ Re != null && String(Re).trim() && (M.dtype = String(Re).trim());
+ const rt = ((f = J.attn_implementation) == null ? void 0 : f.value) ?? J.attn_implementation ?? null;
+ rt != null && String(rt).trim() && (M.attn_implementation = String(rt).trim());
+ const Te = ((X = J.x_vector_only_mode) == null ? void 0 : X.value) ?? J.x_vector_only_mode ?? null;
+ Te != null && (M.x_vector_only_mode = Te);
+ const qt = ((x = J.use_torch_compile) == null ? void 0 : x.value) ?? J.use_torch_compile ?? null;
+ qt != null && (M.use_torch_compile = qt);
+ const kt = ((K = J.use_cuda_graphs) == null ? void 0 : K.value) ?? J.use_cuda_graphs ?? null;
+ kt != null && (M.use_cuda_graphs = kt);
+ const we = ((j = J.compile_mode) == null ? void 0 : j.value) ?? J.compile_mode ?? null;
+ we != null && String(we).trim() && (M.compile_mode = String(we).trim());
const me = ((w = J.enable_chunking) == null ? void 0 : w.value) ?? J.enable_chunking ?? null;
me != null && (M.enable_chunking = me);
- const Pe = ((R = J.max_chars_per_chunk) == null ? void 0 : R.value) ?? J.max_chars_per_chunk ?? null;
- Pe != null && (M.max_chars_per_chunk = Pe);
- const Le = ((Y = J.chunk_combination_method) == null ? void 0 : Y.value) ?? J.chunk_combination_method ?? null;
- Le != null && String(Le).trim() && (M.chunk_combination_method = String(Le).trim());
- const Ot = ((F = J.silence_between_chunks_ms) == null ? void 0 : F.value) ?? J.silence_between_chunks_ms ?? null;
- Ot != null && (M.silence_between_chunks_ms = Ot);
- const Xe = ((N = J.enable_audio_cache) == null ? void 0 : N.value) ?? J.enable_audio_cache ?? null;
- Xe != null && (M.enable_audio_cache = Xe);
- const Ee = ((V = J.batch_size) == null ? void 0 : V.value) ?? J.batch_size ?? null;
+ const He = ((R = J.max_chars_per_chunk) == null ? void 0 : R.value) ?? J.max_chars_per_chunk ?? null;
+ He != null && (M.max_chars_per_chunk = He);
+ const Ye = ((V = J.chunk_combination_method) == null ? void 0 : V.value) ?? J.chunk_combination_method ?? null;
+ Ye != null && String(Ye).trim() && (M.chunk_combination_method = String(Ye).trim());
+ const Pt = ((O = J.silence_between_chunks_ms) == null ? void 0 : O.value) ?? J.silence_between_chunks_ms ?? null;
+ Pt != null && (M.silence_between_chunks_ms = Pt);
+ const ke = ((k = J.enable_audio_cache) == null ? void 0 : k.value) ?? J.enable_audio_cache ?? null;
+ ke != null && (M.enable_audio_cache = ke);
+ const Ee = ((Y = J.batch_size) == null ? void 0 : Y.value) ?? J.batch_size ?? null;
Ee != null && (M.batch_size = Ee);
- const Ke = ((k = J.denoise) == null ? void 0 : k.value) ?? J.denoise ?? null;
+ const Ke = ((N = J.denoise) == null ? void 0 : N.value) ?? J.denoise ?? null;
Ke != null && (M.denoise = Ke);
- const nt = ((K = J.clip_skip) == null ? void 0 : K.value) ?? J.clip_skip ?? J.clipSkip ?? null;
- nt != null && (M.clip_skip = nt);
- const ut = J.inputs;
- Array.isArray(ut) && (M.inputs = ut);
- const It = ((z = J.lyrics) == null ? void 0 : z.value) ?? J.lyrics ?? null;
- typeof It == "string" && It.trim() && (M.lyrics = It);
- const dt = ((B = J.lyrics_strength) == null ? void 0 : B.value) ?? J.lyrics_strength ?? null;
- dt != null && (M.lyrics_strength = dt), Array.isArray(J.all_positive_prompts) && J.all_positive_prompts.length > 1 && (M.all_positive_prompts = J.all_positive_prompts), Array.isArray(J.all_negative_prompts) && J.all_negative_prompts.length > 1 && (M.all_negative_prompts = J.all_negative_prompts), Array.isArray(J.all_samplers) && J.all_samplers.length > 1 && (M.all_samplers = J.all_samplers), Array.isArray(J.chained_passes) && J.chained_passes.length > 1 && (M.chained_passes = J.chained_passes), Array.isArray(J.all_checkpoints) && J.all_checkpoints.length > 1 && (M.all_checkpoints = J.all_checkpoints);
- const Re = J.size || null;
- if (Re && typeof Re == "object" && (Re.width !== void 0 && (M.width = Re.width), Re.height !== void 0 && (M.height = Re.height)), J.engine && typeof J.engine == "object" && (M.engine = J.engine), Object.keys(M).length) return M;
+ const lt = ((U = J.clip_skip) == null ? void 0 : U.value) ?? J.clip_skip ?? J.clipSkip ?? null;
+ lt != null && (M.clip_skip = lt);
+ const wt = J.inputs;
+ Array.isArray(wt) && (M.inputs = wt);
+ const at = ((z = J.lyrics) == null ? void 0 : z.value) ?? J.lyrics ?? null;
+ typeof at == "string" && at.trim() && (M.lyrics = at);
+ const tt = ((T = J.lyrics_strength) == null ? void 0 : T.value) ?? J.lyrics_strength ?? null;
+ tt != null && (M.lyrics_strength = tt), Array.isArray(J.all_positive_prompts) && J.all_positive_prompts.length > 1 && (M.all_positive_prompts = J.all_positive_prompts), Array.isArray(J.all_negative_prompts) && J.all_negative_prompts.length > 1 && (M.all_negative_prompts = J.all_negative_prompts), Array.isArray(J.all_samplers) && J.all_samplers.length > 1 && (M.all_samplers = J.all_samplers), Array.isArray(J.chained_passes) && J.chained_passes.length > 1 && (M.chained_passes = J.chained_passes), Array.isArray(J.all_checkpoints) && J.all_checkpoints.length > 1 && (M.all_checkpoints = J.all_checkpoints);
+ const Oe = J.size || null;
+ if (Oe && typeof Oe == "object" && (Oe.width !== void 0 && (M.width = Oe.width), Oe.height !== void 0 && (M.height = Oe.height)), J.engine && typeof J.engine == "object" && (M.engine = J.engine), Object.keys(M).length) return M;
}
if ([
"prompt",
@@ -38876,20 +38913,20 @@ function cp(e) {
"width",
"height"
].some((M) => Object.prototype.hasOwnProperty.call(e, M))) return e;
- const $ = jc(e);
+ const $ = vc(e);
if ($) return $;
if (ap(e)) {
- const M = jc({ prompt: e });
+ const M = vc({ prompt: e });
if (M) return M;
}
- const E = e.parameters || e["PNG:Parameters"] || e["EXIF:UserComment"] || e.UserComment || e.ImageDescription || null;
- if (typeof E == "string") {
- const M = Nm(E);
+ const H = e.parameters || e["PNG:Parameters"] || e["EXIF:UserComment"] || e.UserComment || e.ImageDescription || null;
+ if (typeof H == "string") {
+ const M = km(H);
if (M) return M;
}
- const oe = e.workflow || e.Workflow || e.comfy || e.comfyui || e.ComfyUI || null;
- if (oe && typeof oe == "object") {
- const M = jc(oe);
+ const ne = e.workflow || e.Workflow || e.comfy || e.comfyui || e.ComfyUI || null;
+ if (ne && typeof ne == "object") {
+ const M = vc(ne);
if (M) return M;
}
return e;
@@ -38897,12 +38934,12 @@ function cp(e) {
if (typeof e == "string") {
const J = e.trim();
if (!J) return null;
- const P = Nm(J);
+ const P = km(J);
if (P) return P;
if (J.startsWith("{") && J.endsWith("}") || J.startsWith("[") && J.endsWith("]"))
try {
- const H = JSON.parse(J);
- return cp(H);
+ const E = JSON.parse(J);
+ return cp(E);
} catch {
return null;
}
@@ -38967,7 +39004,7 @@ function sp(e) {
const t = String((e == null ? void 0 : e.filename) || (e == null ? void 0 : e.name) || (e == null ? void 0 : e.filepath) || (e == null ? void 0 : e.path) || "").trim().toLowerCase();
return !t || !t.includes(".") ? "" : t.split(".").pop() || "";
}
-function vc(e) {
+function Lc(e) {
return String((e == null ? void 0 : e.kind) || "").trim().toLowerCase() === "image" || String((e == null ? void 0 : e.mime) || (e == null ? void 0 : e.mimetype) || "").trim().toLowerCase().startsWith("image/") ? !0 : oj.has(sp(e));
}
function rj(e) {
@@ -38977,7 +39014,7 @@ function rj(e) {
function lj() {
var e;
try {
- const t = Xn();
+ const t = kn();
return !!(((e = t == null ? void 0 : t.ai) == null ? void 0 : e.vectorSearchEnabled) ?? !0);
} catch {
return !0;
@@ -38989,7 +39026,7 @@ function aj(e) {
function cj(e) {
return e >= 0.85 ? "Excellent" : e >= 0.7 ? "Good" : e >= 0.5 ? "Fair" : e >= 0.3 ? "Low" : "Very Low";
}
-function Fm(e) {
+function Om(e) {
const t = String(e || "").trim();
if (!t) return "";
const n = [];
@@ -39025,7 +39062,7 @@ function dj(e) {
function xi(e) {
return e == null || e === "" ? "-" : String(e);
}
-function Om(e, t) {
+function Fm(e, t) {
const n = String((e == null ? void 0 : e.pass_name) || "").trim();
if (n) return n;
const i = Number(e == null ? void 0 : e.denoise);
@@ -39046,11 +39083,11 @@ function mj(e) {
function jo(e) {
return e ? typeof e == "string" ? to(e) : typeof e == "object" ? to(e.name || e.value || "") : "" : "";
}
-function Ur(e, t) {
+function Br(e, t) {
return t == null ? null : { label: e, value: t ? "on" : "off" };
}
function gj(e) {
- var g, A, p, b, L;
+ var g, y, p, b, L;
const t = cp(uj(e)), n = {
kind: "empty",
title: "Generation",
@@ -39063,7 +39100,7 @@ function gj(e) {
showAlignment: !1,
captionLabel: "Image Description",
emptyCaptionText: "No image description yet.",
- isImageAsset: vc(e),
+ isImageAsset: Lc(e),
lyrics: "",
modelFields: [],
pipelineTabs: [],
@@ -39078,12 +39115,12 @@ function gj(e) {
inputFiles: []
};
if (!t || typeof t == "object" && Object.keys(t).length === 0 || !mj(t)) {
- const h = ((g = e == null ? void 0 : e.metadata_raw) == null ? void 0 : g.geninfo_status) || (e == null ? void 0 : e.geninfo_status);
- return h && typeof h == "object" && h.kind === "media_pipeline" ? {
+ const C = ((g = e == null ? void 0 : e.metadata_raw) == null ? void 0 : g.geninfo_status) || (e == null ? void 0 : e.geninfo_status);
+ return C && typeof C == "object" && C.kind === "media_pipeline" ? {
...n,
kind: "media-only",
mediaOnlyMessage: "This file looks like a media-only pipeline (e.g. LoadVideo/VideoCombine) and does not contain generation parameters."
- } : vc(e) || rj(e) ? {
+ } : Lc(e) || rj(e) ? {
...n,
kind: "caption-only",
showAlignment: !1
@@ -39092,23 +39129,23 @@ function gj(e) {
const i = t, o = Rm(
typeof i.prompt == "string" ? i.prompt : null,
typeof (i.negative_prompt || i.negativePrompt) == "string" ? i.negative_prompt || i.negativePrompt : null
- ), r = Array.isArray(i.all_positive_prompts) && i.all_positive_prompts.length > 1 ? i.all_positive_prompts.map((h, G) => {
+ ), r = Array.isArray(i.all_positive_prompts) && i.all_positive_prompts.length > 1 ? i.all_positive_prompts.map((C, G) => {
var f;
- const W = Rm(
- typeof h == "string" ? h : "",
+ const Z = Rm(
+ typeof C == "string" ? C : "",
typeof ((f = i.all_negative_prompts) == null ? void 0 : f[G]) == "string" ? i.all_negative_prompts[G] : ""
);
return {
label: `Prompt ${G + 1}`,
- positive: Wo(W.positive),
- negative: Wo(W.negative)
+ positive: Wo(Z.positive),
+ negative: Wo(Z.negative)
};
- }).filter((h) => h.positive) : [], l = [], a = i.models && typeof i.models == "object" ? i.models : null, c = Array.isArray(i.all_checkpoints) && i.all_checkpoints.length > 1 ? i.all_checkpoints : null;
+ }).filter((C) => C.positive) : [], l = [], a = i.models && typeof i.models == "object" ? i.models : null, c = Array.isArray(i.all_checkpoints) && i.all_checkpoints.length > 1 ? i.all_checkpoints : null;
if (a) {
if (c)
- c.forEach((G, W) => {
+ c.forEach((G, Z) => {
const f = jo(G);
- f && l.push({ label: `Checkpoint ${W + 1}`, value: f });
+ f && l.push({ label: `Checkpoint ${Z + 1}`, value: f });
});
else {
const G = jo(a.checkpoint);
@@ -39120,84 +39157,84 @@ function gj(e) {
["Upscaler", jo(a.upscaler)],
["CLIP", jo(a.clip)],
["VAE", jo(a.vae)]
- ].forEach(([G, W]) => {
- W && l.push({ label: G, value: W });
+ ].forEach(([G, Z]) => {
+ Z && l.push({ label: G, value: Z });
});
} else (i.model || i.checkpoint) && l.push({
label: "Model",
value: to(i.model || i.checkpoint)
});
if (Array.isArray(i.loras) && i.loras.length > 0) {
- const h = i.loras.map((G) => ij(G)).filter(Boolean).join(`
+ const C = i.loras.map((G) => ij(G)).filter(Boolean).join(`
`);
- h && l.push({ label: "LoRA", value: h });
+ C && l.push({ label: "LoRA", value: C });
}
!a && i.clip && l.push({ label: "CLIP", value: to(i.clip) }), !a && i.vae && l.push({ label: "VAE", value: to(i.vae) }), !a && i.unet && l.push({ label: "UNet", value: to(i.unet) }), !a && i.diffusion && l.push({ label: "Diffusion", value: to(i.diffusion) });
const s = [];
(i.sampler || i.sampler_name) && s.push({ label: "Sampler", value: i.sampler || i.sampler_name }), i.steps && s.push({ label: "Steps", value: i.steps }), (i.cfg || i.cfg_scale) && s.push({ label: "CFG Scale", value: i.cfg || i.cfg_scale }), i.scheduler && s.push({ label: "Scheduler", value: i.scheduler });
let d = [];
- Array.isArray(i.chained_passes) && i.chained_passes.length > 1 ? d = i.chained_passes.filter((h) => h && typeof h == "object").map((h, G) => ({
- label: Om(h, G),
+ Array.isArray(i.chained_passes) && i.chained_passes.length > 1 ? d = i.chained_passes.filter((C) => C && typeof C == "object").map((C, G) => ({
+ label: Fm(C, G),
fields: [
- { label: "Sampler", value: xi((h == null ? void 0 : h.sampler_name) || (h == null ? void 0 : h.sampler)) },
- { label: "Scheduler", value: xi(h == null ? void 0 : h.scheduler) },
- { label: "Steps", value: xi(h == null ? void 0 : h.steps) },
- { label: "CFG", value: xi(h == null ? void 0 : h.cfg) },
- { label: "Denoise", value: xi(h == null ? void 0 : h.denoise) },
- { label: "Seed", value: xi((h == null ? void 0 : h.seed_val) || (h == null ? void 0 : h.seed)) }
+ { label: "Sampler", value: xi((C == null ? void 0 : C.sampler_name) || (C == null ? void 0 : C.sampler)) },
+ { label: "Scheduler", value: xi(C == null ? void 0 : C.scheduler) },
+ { label: "Steps", value: xi(C == null ? void 0 : C.steps) },
+ { label: "CFG", value: xi(C == null ? void 0 : C.cfg) },
+ { label: "Denoise", value: xi(C == null ? void 0 : C.denoise) },
+ { label: "Seed", value: xi((C == null ? void 0 : C.seed_val) || (C == null ? void 0 : C.seed)) }
]
- })) : Array.isArray(i.all_samplers) && i.all_samplers.length > 1 && (d = i.all_samplers.filter((h) => h && typeof h == "object").map((h, G) => ({
- label: Om(h, G),
+ })) : Array.isArray(i.all_samplers) && i.all_samplers.length > 1 && (d = i.all_samplers.filter((C) => C && typeof C == "object").map((C, G) => ({
+ label: Fm(C, G),
fields: [
- { label: "Sampler", value: xi((h == null ? void 0 : h.sampler_name) || (h == null ? void 0 : h.sampler)) },
- { label: "Scheduler", value: xi(h == null ? void 0 : h.scheduler) },
- { label: "Steps", value: xi(h == null ? void 0 : h.steps) },
- { label: "CFG", value: xi(h == null ? void 0 : h.cfg) },
- { label: "Denoise", value: xi(h == null ? void 0 : h.denoise) },
- { label: "Seed", value: xi((h == null ? void 0 : h.seed_val) || (h == null ? void 0 : h.seed)) }
+ { label: "Sampler", value: xi((C == null ? void 0 : C.sampler_name) || (C == null ? void 0 : C.sampler)) },
+ { label: "Scheduler", value: xi(C == null ? void 0 : C.scheduler) },
+ { label: "Steps", value: xi(C == null ? void 0 : C.steps) },
+ { label: "CFG", value: xi(C == null ? void 0 : C.cfg) },
+ { label: "Denoise", value: xi(C == null ? void 0 : C.denoise) },
+ { label: "Seed", value: xi((C == null ? void 0 : C.seed_val) || (C == null ? void 0 : C.seed)) }
]
})));
const u = [];
i.voice && u.push({ label: "Narrator Voice", value: i.voice }), i.language && u.push({ label: "Language", value: i.language }), i.top_k !== void 0 && i.top_k !== null && u.push({ label: "Top-k", value: i.top_k }), i.top_p !== void 0 && i.top_p !== null && u.push({ label: "Top-p", value: i.top_p }), i.temperature !== void 0 && i.temperature !== null && u.push({ label: "Temperature", value: i.temperature }), i.repetition_penalty !== void 0 && i.repetition_penalty !== null && u.push({ label: "Repetition Penalty", value: i.repetition_penalty }), i.max_new_tokens !== void 0 && i.max_new_tokens !== null && u.push({ label: "Max New Tokens", value: i.max_new_tokens });
const I = [];
i.device && I.push({ label: "Device", value: i.device }), i.voice_preset && I.push({ label: "Voice Preset", value: i.voice_preset }), i.dtype && I.push({ label: "Dtype", value: i.dtype }), i.attn_implementation && I.push({ label: "Attention", value: i.attn_implementation }), i.compile_mode && I.push({ label: "Compile Mode", value: i.compile_mode }), [
- Ur("Torch Compile", i.use_torch_compile),
- Ur("CUDA Graphs", i.use_cuda_graphs),
- Ur("X-Vector Only", i.x_vector_only_mode)
- ].filter(Boolean).forEach((h) => I.push(h));
- const y = [];
+ Br("Torch Compile", i.use_torch_compile),
+ Br("CUDA Graphs", i.use_cuda_graphs),
+ Br("X-Vector Only", i.x_vector_only_mode)
+ ].filter(Boolean).forEach((C) => I.push(C));
+ const A = [];
[
- Ur("Chunking", i.enable_chunking),
+ Br("Chunking", i.enable_chunking),
i.max_chars_per_chunk !== void 0 && i.max_chars_per_chunk !== null ? { label: "Max Chars/Chunk", value: i.max_chars_per_chunk } : null,
i.chunk_combination_method ? { label: "Chunk Method", value: i.chunk_combination_method } : null,
i.silence_between_chunks_ms !== void 0 && i.silence_between_chunks_ms !== null ? { label: "Silence Between Chunks (ms)", value: i.silence_between_chunks_ms } : null,
- Ur("Audio Cache", i.enable_audio_cache),
+ Br("Audio Cache", i.enable_audio_cache),
i.batch_size !== void 0 && i.batch_size !== null ? { label: "Batch Size", value: i.batch_size } : null
- ].filter(Boolean).forEach((h) => y.push(h));
+ ].filter(Boolean).forEach((C) => A.push(C));
+ const h = [];
+ i.lyrics_strength !== void 0 && i.lyrics_strength !== null && h.push({ label: "Lyrics Strength", value: i.lyrics_strength });
const S = [];
- i.lyrics_strength !== void 0 && i.lyrics_strength !== null && S.push({ label: "Lyrics Strength", value: i.lyrics_strength });
- const Z = [];
- (i.denoise || i.denoising) && Z.push({ label: "Denoise", value: i.denoise || i.denoising }), i.clip_skip && Z.push({ label: "Clip Skip", value: i.clip_skip });
- const C = Array.isArray(i.inputs) ? i.inputs.filter((h) => h && typeof h == "object" && h.filename).map((h, G) => ({
- id: `${h.filename}-${G}`,
- filename: String(h.filename || "").trim(),
- filepath: String(h.filepath || h.filename || "").trim(),
- role: String(h.role || "").trim(),
- roleLabel: String(h.role || "").trim().replace(/_/g, " "),
- isVideo: String(h.type || "").toLowerCase() === "video" || /\.(mp4|mov|webm)$/i.test(String(h.filename || "")),
- previewCandidates: sj(h)
+ (i.denoise || i.denoising) && S.push({ label: "Denoise", value: i.denoise || i.denoising }), i.clip_skip && S.push({ label: "Clip Skip", value: i.clip_skip });
+ const W = Array.isArray(i.inputs) ? i.inputs.filter((C) => C && typeof C == "object" && C.filename).map((C, G) => ({
+ id: `${C.filename}-${G}`,
+ filename: String(C.filename || "").trim(),
+ filepath: String(C.filepath || C.filename || "").trim(),
+ role: String(C.role || "").trim(),
+ roleLabel: String(C.role || "").trim().replace(/_/g, " "),
+ isVideo: String(C.type || "").toLowerCase() === "video" || /\.(mp4|mov|webm)$/i.test(String(C.filename || "")),
+ previewCandidates: sj(C)
})) : [];
return {
...n,
kind: "full",
metadata: i,
- workflowType: String(((A = i == null ? void 0 : i.engine) == null ? void 0 : A.type) || "").trim(),
+ workflowType: String(((y = i == null ? void 0 : i.engine) == null ? void 0 : y.type) || "").trim(),
isTruncated: !!((p = e == null ? void 0 : e.geninfo) != null && p._truncated || (b = e == null ? void 0 : e.metadata) != null && b._truncated || (L = e == null ? void 0 : e.prompt) != null && L._truncated),
positivePrompt: r.length ? "" : String(o.positive || "").trim(),
negativePrompt: r.length ? "" : String(o.negative || "").trim(),
promptTabs: r,
showAlignment: !!(e != null && e.id) && (!!String(o.positive || "").trim() || r.length > 0),
- isImageAsset: vc(e),
+ isImageAsset: Lc(e),
lyrics: String(i.lyrics || "").trim(),
modelFields: l,
pipelineTabs: d,
@@ -39205,11 +39242,11 @@ function gj(e) {
ttsFields: u,
ttsEngineFields: I,
ttsInstruction: String(i.instruct || "").trim(),
- ttsRuntimeFields: y,
- audioFields: S,
+ ttsRuntimeFields: A,
+ audioFields: h,
seed: i.seed ?? null,
- imageFields: Z,
- inputFiles: C
+ imageFields: S,
+ inputFiles: W
};
}
const Ij = ["title"], bj = ["src"], pj = ["src"], yj = {
@@ -39219,13 +39256,13 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = {
key: 3,
title: "Video file",
style: { position: "absolute", color: "white", opacity: "0.7", "font-size": "16px", "pointer-events": "none" }
-}, hj = {
+}, Cj = {
__name: "GenerationInputThumb",
props: {
inputFile: { type: Object, required: !0 }
},
setup(e) {
- const t = e, n = Ae(0), i = Ae(!1);
+ const t = e, n = We(0), i = We(!1);
function o() {
var u;
return (Array.isArray((u = t.inputFile) == null ? void 0 : u.previewCandidates) ? t.inputFile.previewCandidates : [])[n.value] || "";
@@ -39236,45 +39273,45 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = {
n.value < d.length - 1 && (n.value += 1);
}
async function l(d) {
- var I, y, S, Z;
+ var I, A, h, S;
(I = d == null ? void 0 : d.stopPropagation) == null || I.call(d);
- const u = String(((y = t.inputFile) == null ? void 0 : y.filepath) || ((S = t.inputFile) == null ? void 0 : S.filename) || "").trim();
+ const u = String(((A = t.inputFile) == null ? void 0 : A.filepath) || ((h = t.inputFile) == null ? void 0 : h.filename) || "").trim();
if (u)
try {
await navigator.clipboard.writeText(u), i.value = !0, setTimeout(() => {
i.value = !1;
}, 350);
- } catch (C) {
- (Z = console.debug) == null || Z.call(console, C);
+ } catch (W) {
+ (S = console.debug) == null || S.call(console, W);
}
}
function a(d) {
- var I, y;
+ var I, A;
(I = d == null ? void 0 : d.stopPropagation) == null || I.call(d);
const u = o();
if (dj(u))
try {
window.open(u, "_blank", "noopener,noreferrer");
- } catch (S) {
- (y = console.debug) == null || y.call(console, S);
+ } catch (h) {
+ (A = console.debug) == null || A.call(console, h);
}
}
function c(d) {
- var u, I, y, S;
- (S = (I = (u = d.target) == null ? void 0 : u.play) == null ? void 0 : (y = I.call(u)).catch) == null || S.call(y, () => {
+ var u, I, A, h;
+ (h = (I = (u = d.target) == null ? void 0 : u.play) == null ? void 0 : (A = I.call(u)).catch) == null || h.call(A, () => {
});
}
function s(d) {
- var u, I, y;
+ var u, I, A;
try {
(I = (u = d.target) == null ? void 0 : u.pause) == null || I.call(u);
- } catch (S) {
- (y = console.debug) == null || y.call(console, S);
+ } catch (h) {
+ (A = console.debug) == null || A.call(console, h);
}
}
- return (d, u) => (be(), Ce("div", {
+ return (d, u) => (be(), Ze("div", {
title: `${e.inputFile.filename} (click to copy, double-click to open in new tab)`,
- style: Lt({
+ style: vt({
width: "64px",
height: "64px",
background: "#222",
@@ -39291,7 +39328,7 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = {
onClick: l,
onDblclick: a
}, [
- e.inputFile.isVideo ? (be(), Ce("video", {
+ e.inputFile.isVideo ? (be(), Ze("video", {
key: 0,
src: o(),
muted: "",
@@ -39302,16 +39339,16 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = {
onError: r,
onMouseover: c,
onMouseout: s
- }, null, 40, bj)) : (be(), Ce("img", {
+ }, null, 40, bj)) : (be(), Ze("img", {
key: 1,
src: o(),
style: { width: "100%", height: "100%", "object-fit": "cover" },
onError: r
}, null, 40, pj)),
- e.inputFile.role && e.inputFile.role !== "secondary" ? (be(), Ce("div", yj, Ye(e.inputFile.roleLabel), 1)) : e.inputFile.isVideo ? (be(), Ce("div", fj, " ▶ ")) : ft("", !0)
+ e.inputFile.role && e.inputFile.role !== "secondary" ? (be(), Ze("div", yj, Ne(e.inputFile.roleLabel), 1)) : e.inputFile.isVideo ? (be(), Ze("div", fj, " ▶ ")) : yt("", !0)
], 44, Ij));
}
-}, Cj = {
+}, hj = {
key: 0,
style: { display: "flex", "flex-direction": "column", gap: "12px" }
}, Zj = {
@@ -39329,16 +39366,16 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = {
fontSize: "11px",
color: "var(--fg-color, #ccc)"
}
-}, Aj = ["title"], Wj = { style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.9))", "line-height": "1.5", "white-space": "pre-wrap", "word-break": "break-word" } }, wj = { style: { "font-size": "11px", "font-weight": "600", color: "#4CAF50", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "10px" } }, Mj = { style: { display: "flex", "flex-wrap": "wrap", gap: "6px", "margin-bottom": "10px" } }, Sj = ["onClick"], Gj = ["onClick"], xj = ["onClick"], jj = { style: { display: "flex", "align-items": "center", gap: "10px" } }, vj = { style: { flex: "1", height: "8px", background: "rgba(255,255,255,0.1)", "border-radius": "4px", overflow: "hidden" } }, Lj = {
+}, Aj = ["title"], Wj = { style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.9))", "line-height": "1.5", "white-space": "pre-wrap", "word-break": "break-word" } }, wj = { style: { "font-size": "11px", "font-weight": "600", color: "#4CAF50", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "10px" } }, Mj = { style: { display: "flex", "flex-wrap": "wrap", gap: "6px", "margin-bottom": "10px" } }, Gj = ["onClick"], Sj = ["onClick"], xj = ["onClick"], jj = { style: { display: "flex", "align-items": "center", gap: "10px" } }, vj = { style: { flex: "1", height: "8px", background: "rgba(255,255,255,0.1)", "border-radius": "4px", overflow: "hidden" } }, Lj = {
key: 0,
style: { "font-size": "10px", color: "rgba(255,255,255,0.65)", border: "1px dashed rgba(255,255,255,0.25)", "border-radius": "4px", padding: "6px 8px", background: "rgba(255,255,255,0.04)" }
-}, Vj = { style: { "font-size": "10px", "font-weight": "600", color: "rgba(0, 188, 212, 0.75)", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-top": "8px", display: "flex", "align-items": "center", "justify-content": "space-between", gap: "8px" } }, Yj = { title: "AI caption generated by Florence-2" }, kj = { style: { display: "flex", "align-items": "center", gap: "6px" } }, Xj = ["disabled"], Nj = ["disabled"], Rj = ["title"], Fj = { style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.9))", "line-height": "1.5", "white-space": "pre-wrap", "word-break": "break-word" } }, Oj = { style: { display: "flex", "flex-wrap": "wrap", gap: "6px", "margin-bottom": "10px" } }, zj = ["onClick"], Jj = { style: { "font-size": "10px", "font-weight": "600", color: "rgba(255,255,255,0.6)", "text-transform": "uppercase", "letter-spacing": "0.4px" } }, Tj = ["onClick"], Bj = { style: { display: "grid", "grid-template-columns": "auto 1fr", gap: "8px 12px", "align-items": "start" } }, Uj = ["title"], Kj = ["title", "onClick"], Dj = ["title"], Ej = ["title"], Hj = { style: { display: "flex", gap: "8px", "flex-wrap": "wrap" } }, qj = {
+}, Yj = { style: { "font-size": "10px", "font-weight": "600", color: "rgba(0, 188, 212, 0.75)", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-top": "8px", display: "flex", "align-items": "center", "justify-content": "space-between", gap: "8px" } }, Vj = { title: "AI caption generated by Florence-2" }, Xj = { style: { display: "flex", "align-items": "center", gap: "6px" } }, Nj = ["disabled"], kj = ["disabled"], Rj = ["title"], Oj = { style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.9))", "line-height": "1.5", "white-space": "pre-wrap", "word-break": "break-word" } }, Fj = { style: { display: "flex", "flex-wrap": "wrap", gap: "6px", "margin-bottom": "10px" } }, zj = ["onClick"], Jj = { style: { "font-size": "10px", "font-weight": "600", color: "rgba(255,255,255,0.6)", "text-transform": "uppercase", "letter-spacing": "0.4px" } }, Tj = ["onClick"], Kj = { style: { display: "grid", "grid-template-columns": "auto 1fr", gap: "8px 12px", "align-items": "start" } }, Bj = ["title"], Uj = ["title", "onClick"], Dj = ["title"], Hj = ["title"], Ej = { style: { display: "flex", gap: "8px", "flex-wrap": "wrap" } }, qj = {
__name: "SidebarGenerationSection",
props: {
asset: { type: Object, required: !0 }
},
setup(e) {
- const t = e, n = Ae(0), i = Ae(0), o = Ae(""), r = Ae("Copy"), l = Ae("Generate"), a = Ae(!1), c = Ae(d());
+ const t = e, n = We(0), i = We(0), o = We(""), r = We("Copy"), l = We("Generate"), a = We(!1), c = We(d());
let s = 0;
function d() {
return {
@@ -39353,23 +39390,23 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = {
aiStatusText: "AI features are disabled (enable vector search env var)."
};
}
- function u(T, v) {
- const w = String(T || "").trim().replace(/^#/, "");
- if (!/^[0-9a-fA-F]{6}$/.test(w)) return `rgba(255,255,255,${v})`;
- const R = Number.parseInt(w.slice(0, 2), 16), Y = Number.parseInt(w.slice(2, 4), 16), F = Number.parseInt(w.slice(4, 6), 16);
- return `rgba(${R}, ${Y}, ${F}, ${v})`;
+ function u(K, j) {
+ const w = String(K || "").trim().replace(/^#/, "");
+ if (!/^[0-9a-fA-F]{6}$/.test(w)) return `rgba(255,255,255,${j})`;
+ const R = Number.parseInt(w.slice(0, 2), 16), V = Number.parseInt(w.slice(2, 4), 16), O = Number.parseInt(w.slice(4, 6), 16);
+ return `rgba(${R}, ${V}, ${O}, ${j})`;
}
- function I(T, { emphasis: v = !1, startAlpha: w = 0.16, endAlpha: R = 0.08 } = {}) {
+ function I(K, { emphasis: j = !1, startAlpha: w = 0.16, endAlpha: R = 0.08 } = {}) {
return {
- background: v ? `linear-gradient(135deg, ${u(T, w)} 0%, ${u(T, R)} 100%)` : "var(--comfy-menu-bg, rgba(0,0,0,0.3))",
- borderLeft: `3px solid ${T}`,
- border: v ? `1px solid ${u(T, 0.45)}` : "1px solid var(--border-color, rgba(255,255,255,0.12))",
- boxShadow: v ? `0 0 0 1px ${u(T, 0.15)} inset` : "none",
+ background: j ? `linear-gradient(135deg, ${u(K, w)} 0%, ${u(K, R)} 100%)` : "var(--comfy-menu-bg, rgba(0,0,0,0.3))",
+ borderLeft: `3px solid ${K}`,
+ border: j ? `1px solid ${u(K, 0.45)}` : "1px solid var(--border-color, rgba(255,255,255,0.12))",
+ boxShadow: j ? `0 0 0 1px ${u(K, 0.15)} inset` : "none",
borderRadius: "6px",
padding: "12px"
};
}
- function y() {
+ function A() {
return {
background: "linear-gradient(135deg, rgba(233, 30, 99, 0.15) 0%, rgba(156, 39, 176, 0.15) 100%)",
border: "2px solid #E91E63",
@@ -39381,78 +39418,78 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = {
gap: "12px"
};
}
- const S = ze(() => gj(t.asset)), Z = ze(() => lj()), C = ze(
- () => S.value.kind === "full" || S.value.kind === "caption-only"
+ const h = ze(() => gj(t.asset)), S = ze(() => lj()), W = ze(
+ () => h.value.kind === "full" || h.value.kind === "caption-only"
), g = ze(
- () => Fm(o.value) || S.value.emptyCaptionText
- ), A = ze(
+ () => Om(o.value) || h.value.emptyCaptionText
+ ), y = ze(
() => {
- var T;
- return Z.value && S.value.isImageAsset && !!((T = t.asset) != null && T.id);
+ var K;
+ return S.value && h.value.isImageAsset && !!((K = t.asset) != null && K.id);
}
), p = ze(
- () => Z.value && !!Fm(g.value) && g.value !== S.value.emptyCaptionText
+ () => S.value && !!Om(g.value) && g.value !== h.value.emptyCaptionText
), b = ze(() => {
- const T = [];
- return S.value.modelFields.length && T.push({
+ const K = [];
+ return h.value.modelFields.length && K.push({
key: "model",
title: "Model & LoRA",
accent: "#9C27B0",
emphasis: !0,
- fields: S.value.modelFields
- }), !S.value.pipelineTabs.length && S.value.samplingFields.length && T.push({
+ fields: h.value.modelFields
+ }), !h.value.pipelineTabs.length && h.value.samplingFields.length && K.push({
key: "sampling",
title: "Sampling",
accent: "#FF9800",
emphasis: !0,
- fields: S.value.samplingFields
- }), (S.value.ttsFields.length || S.value.workflowType.toLowerCase() === "tts") && T.push({
+ fields: h.value.samplingFields
+ }), (h.value.ttsFields.length || h.value.workflowType.toLowerCase() === "tts") && K.push({
key: "tts",
title: "TTS",
accent: "#26A69A",
emphasis: !0,
- fields: S.value.ttsFields
- }), S.value.ttsEngineFields.length && T.push({
+ fields: h.value.ttsFields
+ }), h.value.ttsEngineFields.length && K.push({
key: "tts-engine",
title: "TTS Engine",
accent: "#00897B",
emphasis: !1,
- fields: S.value.ttsEngineFields
- }), S.value.ttsRuntimeFields.length && T.push({
+ fields: h.value.ttsEngineFields
+ }), h.value.ttsRuntimeFields.length && K.push({
key: "tts-runtime",
title: "TTS Runtime",
accent: "#00796B",
emphasis: !1,
- fields: S.value.ttsRuntimeFields
- }), S.value.audioFields.length && T.push({
+ fields: h.value.ttsRuntimeFields
+ }), h.value.audioFields.length && K.push({
key: "audio",
title: "Audio",
accent: "#00BCD4",
emphasis: !1,
- fields: S.value.audioFields
- }), S.value.imageFields.length && T.push({
+ fields: h.value.audioFields
+ }), h.value.imageFields.length && K.push({
key: "image",
title: "Image",
accent: "#2196F3",
emphasis: !1,
- fields: S.value.imageFields
- }), T;
+ fields: h.value.imageFields
+ }), K;
});
- function L(T, v, w = 450) {
- if (!T) return;
- const R = T.style.background;
- T.style.background = v, setTimeout(() => {
- T.style.background = R || "";
+ function L(K, j, w = 450) {
+ if (!K) return;
+ const R = K.style.background;
+ K.style.background = j, setTimeout(() => {
+ K.style.background = R || "";
}, w);
}
- async function h(T, v = null, w = "rgba(76, 175, 80, 0.35)") {
- var Y;
- const R = String(T ?? "").trim();
+ async function C(K, j = null, w = "rgba(76, 175, 80, 0.35)") {
+ var V;
+ const R = String(K ?? "").trim();
if (!(!R || R === "-"))
try {
- await navigator.clipboard.writeText(R), L(v, w);
- } catch (F) {
- (Y = console.debug) == null || Y.call(console, F);
+ await navigator.clipboard.writeText(R), L(j, w);
+ } catch (O) {
+ (V = console.debug) == null || V.call(console, O);
}
}
function G() {
@@ -39468,31 +39505,31 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = {
aiStatusText: "AI features are disabled in settings."
};
}
- function W() {
+ function Z() {
c.value = d();
}
async function f() {
- var v, w;
+ var j, w;
s += 1;
- const T = s;
- if (!S.value.showAlignment || !((v = t.asset) != null && v.id)) {
- W();
+ const K = s;
+ if (!h.value.showAlignment || !((j = t.asset) != null && j.id)) {
+ Z();
return;
}
- if (!Z.value) {
+ if (!S.value) {
G();
return;
}
- W();
+ Z();
try {
const R = await Pf(t.asset.id);
- if (T !== s) return;
+ if (K !== s) return;
if (!(R != null && R.ok) && (String((R == null ? void 0 : R.code) || "").toUpperCase() === "SERVICE_UNAVAILABLE" || /vector search is not enabled/i.test(String((R == null ? void 0 : R.error) || "")))) {
G();
return;
}
- const F = R != null && R.ok && R.data != null ? Number(R.data) : null;
- if (!Number.isFinite(F)) {
+ const O = R != null && R.ok && R.data != null ? Number(R.data) : null;
+ if (!Number.isFinite(O)) {
c.value = {
scoreText: "N/A",
scoreColor: "#888",
@@ -39506,20 +39543,20 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = {
};
return;
}
- const N = Math.round(F * 100), V = aj(F);
+ const k = Math.round(O * 100), Y = aj(O);
c.value = {
- scoreText: `${N}%`,
- scoreColor: V,
- qualityText: cj(F),
- qualityColor: V,
- qualityBackground: `${V}33`,
- fillWidth: `${N}%`,
- fillColor: V,
+ scoreText: `${k}%`,
+ scoreColor: Y,
+ qualityText: cj(O),
+ qualityColor: Y,
+ qualityBackground: `${Y}33`,
+ fillWidth: `${k}%`,
+ fillColor: Y,
aiStatusVisible: !1,
aiStatusText: ""
};
} catch (R) {
- if ((w = console.debug) == null || w.call(console, R), T !== s) return;
+ if ((w = console.debug) == null || w.call(console, R), K !== s) return;
c.value = {
scoreText: "-",
scoreColor: "#888",
@@ -39534,79 +39571,79 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = {
}
}
async function X() {
- var T;
- if (!(!A.value || a.value)) {
+ var K;
+ if (!(!y.value || a.value)) {
a.value = !0, l.value = "Generating...";
try {
- const v = await Qf(t.asset.id);
- v != null && v.ok && (o.value = String((v == null ? void 0 : v.data) || "").trim());
- } catch (v) {
- (T = console.debug) == null || T.call(console, v);
+ const j = await Qf(t.asset.id);
+ j != null && j.ok && (o.value = String((j == null ? void 0 : j.data) || "").trim());
+ } catch (j) {
+ (K = console.debug) == null || K.call(console, j);
} finally {
a.value = !1, l.value = "Generate";
}
}
}
async function x() {
- var T;
+ var K;
if (p.value)
try {
await navigator.clipboard.writeText(g.value), r.value = "Copied!", setTimeout(() => {
r.value = "Copy";
}, 900);
- } catch (v) {
- (T = console.debug) == null || T.call(console, v);
+ } catch (j) {
+ (K = console.debug) == null || K.call(console, j);
}
}
- return cn(
+ return dn(
() => t.asset,
() => {
- var T;
- n.value = 0, i.value = 0, o.value = String(((T = t.asset) == null ? void 0 : T.enhanced_caption) || "").trim(), r.value = "Copy", l.value = "Generate";
+ var K;
+ n.value = 0, i.value = 0, o.value = String(((K = t.asset) == null ? void 0 : K.enhanced_caption) || "").trim(), r.value = "Copy", l.value = "Generate";
},
{ immediate: !0 }
- ), cn(
+ ), dn(
() => {
- var T;
- return [(T = t.asset) == null ? void 0 : T.id, S.value.kind, S.value.showAlignment, Z.value];
+ var K;
+ return [(K = t.asset) == null ? void 0 : K.id, h.value.kind, h.value.showAlignment, S.value];
},
() => {
f();
},
{ immediate: !0 }
- ), (T, v) => S.value.kind !== "empty" ? (be(), Ce("div", Cj, [
- S.value.workflowType ? (be(), Ce("div", Zj, [
- v[4] || (v[4] = ie("span", { style: { opacity: "0.85" } }, "Workflow Type", -1)),
- ie("span", {
- title: `Workflow engine: ${S.value.workflowType}`,
+ ), (K, j) => h.value.kind !== "empty" ? (be(), Ze("div", hj, [
+ h.value.workflowType ? (be(), Ze("div", Zj, [
+ j[4] || (j[4] = te("span", { style: { opacity: "0.85" } }, "Workflow Type", -1)),
+ te("span", {
+ title: `Workflow engine: ${h.value.workflowType}`,
style: { background: "#2196F3", color: "white", padding: "2px 6px", "border-radius": "3px", "font-weight": "bold", "font-size": "10px" }
- }, Ye(S.value.workflowType), 9, Aj)
- ])) : ft("", !0),
- S.value.isTruncated ? (be(), Ce("div", {
+ }, Ne(h.value.workflowType), 9, Aj)
+ ])) : yt("", !0),
+ h.value.isTruncated ? (be(), Ze("div", {
key: 1,
- style: Lt(I("#FF9800", { emphasis: !0, startAlpha: 0.12, endAlpha: 0.08 }))
- }, [...v[5] || (v[5] = [
- ie("div", { style: { "font-size": "11px", "font-weight": "600", color: "#FF9800", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "8px" } }, " Metadata Truncated ", -1),
- ie("div", { style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.9))", "line-height": "1.5", "white-space": "pre-wrap", "word-break": "break-word" } }, " Generation data is incomplete because it exceeded the size limit. ", -1)
- ])], 4)) : ft("", !0),
- S.value.kind === "media-only" ? (be(), Ce("div", {
+ style: vt(I("#FF9800", { emphasis: !0, startAlpha: 0.12, endAlpha: 0.08 }))
+ }, [...j[5] || (j[5] = [
+ te("div", { style: { "font-size": "11px", "font-weight": "600", color: "#FF9800", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "8px" } }, " Metadata Truncated ", -1),
+ te("div", { style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.9))", "line-height": "1.5", "white-space": "pre-wrap", "word-break": "break-word" } }, " Generation data is incomplete because it exceeded the size limit. ", -1)
+ ])], 4)) : yt("", !0),
+ h.value.kind === "media-only" ? (be(), Ze("div", {
key: 2,
- style: Lt(I("#9E9E9E", { emphasis: !0, startAlpha: 0.1, endAlpha: 0.06 }))
+ style: vt(I("#9E9E9E", { emphasis: !0, startAlpha: 0.1, endAlpha: 0.06 }))
}, [
- v[6] || (v[6] = ie("div", { style: { "font-size": "11px", "font-weight": "600", color: "#9E9E9E", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "8px" } }, " Generation Data ", -1)),
- ie("div", Wj, Ye(S.value.mediaOnlyMessage), 1)
- ], 4)) : ft("", !0),
- S.value.kind === "full" ? (be(), Ce(Nt, { key: 3 }, [
- S.value.promptTabs.length ? (be(), Ce("div", {
+ j[6] || (j[6] = te("div", { style: { "font-size": "11px", "font-weight": "600", color: "#9E9E9E", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "8px" } }, " Generation Data ", -1)),
+ te("div", Wj, Ne(h.value.mediaOnlyMessage), 1)
+ ], 4)) : yt("", !0),
+ h.value.kind === "full" ? (be(), Ze(Nt, { key: 3 }, [
+ h.value.promptTabs.length ? (be(), Ze("div", {
key: 0,
- style: Lt(I("#4CAF50", { emphasis: !0, startAlpha: 0.16, endAlpha: 0.1 }))
+ style: vt(I("#4CAF50", { emphasis: !0, startAlpha: 0.16, endAlpha: 0.1 }))
}, [
- ie("div", wj, " Prompt Pipeline (" + Ye(S.value.promptTabs.length) + " variants) ", 1),
- ie("div", Mj, [
- (be(!0), Ce(Nt, null, Cn(S.value.promptTabs, (w, R) => (be(), Ce("button", {
+ te("div", wj, " Prompt Pipeline (" + Ne(h.value.promptTabs.length) + " variants) ", 1),
+ te("div", Mj, [
+ (be(!0), Ze(Nt, null, Zn(h.value.promptTabs, (w, R) => (be(), Ze("button", {
key: w.label,
type: "button",
- style: Lt({
+ style: vt({
appearance: "none",
border: n.value === R ? "1px solid #4CAF50" : "1px solid var(--border-color, rgba(255,255,255,0.12))",
borderRadius: "999px",
@@ -39618,68 +39655,68 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = {
fontWeight: n.value === R ? "700" : "500",
boxShadow: n.value === R ? "0 0 0 1px #4CAF5055 inset" : "none"
}),
- onClick: (Y) => n.value = R
- }, Ye(w.label), 13, Sj))), 128))
+ onClick: (V) => n.value = R
+ }, Ne(w.label), 13, Gj))), 128))
]),
- (be(!0), Ce(Nt, null, Cn(S.value.promptTabs, (w, R) => Ko((be(), Ce("div", {
+ (be(!0), Ze(Nt, null, Zn(h.value.promptTabs, (w, R) => Uo((be(), Ze("div", {
key: `${w.label}-panel`,
style: { display: "flex", "flex-direction": "column", gap: "8px", border: "1px solid rgba(76, 175, 80, 0.35)", "border-radius": "6px", background: "linear-gradient(135deg, rgba(76, 175, 80, 0.12) 0%, rgba(33, 150, 243, 0.08) 100%)", "box-shadow": "0 0 0 1px rgba(76, 175, 80, 0.12) inset", padding: "10px" }
}, [
- v[8] || (v[8] = ie("div", { style: { "font-size": "10px", "font-weight": "700", color: "#4CAF50", "letter-spacing": "0.4px" } }, " POSITIVE ", -1)),
- ie("div", {
+ j[8] || (j[8] = te("div", { style: { "font-size": "10px", "font-weight": "700", color: "#4CAF50", "letter-spacing": "0.4px" } }, " POSITIVE ", -1)),
+ te("div", {
style: { "font-size": "12px", color: "var(--fg-color, #ddd)", "white-space": "pre-wrap", "line-height": "1.35", cursor: "pointer" },
- onClick: (Y) => h(w.positive, Y.currentTarget)
- }, Ye(w.positive), 9, Gj),
- w.negative ? (be(), Ce(Nt, { key: 0 }, [
- v[7] || (v[7] = ie("div", { style: { "font-size": "10px", "font-weight": "700", color: "#F44336", "letter-spacing": "0.4px", "margin-top": "4px" } }, " NEGATIVE ", -1)),
- ie("div", {
+ onClick: (V) => C(w.positive, V.currentTarget)
+ }, Ne(w.positive), 9, Sj),
+ w.negative ? (be(), Ze(Nt, { key: 0 }, [
+ j[7] || (j[7] = te("div", { style: { "font-size": "10px", "font-weight": "700", color: "#F44336", "letter-spacing": "0.4px", "margin-top": "4px" } }, " NEGATIVE ", -1)),
+ te("div", {
style: { "font-size": "12px", color: "var(--fg-color, #ddd)", "white-space": "pre-wrap", "line-height": "1.35", cursor: "pointer" },
- onClick: (Y) => h(w.negative, Y.currentTarget)
- }, Ye(w.negative), 9, xj)
- ], 64)) : ft("", !0)
+ onClick: (V) => C(w.negative, V.currentTarget)
+ }, Ne(w.negative), 9, xj)
+ ], 64)) : yt("", !0)
])), [
[yr, n.value === R]
])), 128))
- ], 4)) : S.value.positivePrompt ? (be(), Ce("div", {
+ ], 4)) : h.value.positivePrompt ? (be(), Ze("div", {
key: 1,
- style: Lt(I("#4CAF50", { emphasis: !0, startAlpha: 0.16, endAlpha: 0.1 }))
+ style: vt(I("#4CAF50", { emphasis: !0, startAlpha: 0.16, endAlpha: 0.1 }))
}, [
- v[9] || (v[9] = ie("div", { style: { display: "flex", "justify-content": "space-between", "align-items": "center", "font-size": "11px", "font-weight": "600", color: "#4CAF50", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "8px" } }, [
- ie("span", null, "Positive Prompt")
+ j[9] || (j[9] = te("div", { style: { display: "flex", "justify-content": "space-between", "align-items": "center", "font-size": "11px", "font-weight": "600", color: "#4CAF50", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "8px" } }, [
+ te("span", null, "Positive Prompt")
], -1)),
- ie("div", {
+ te("div", {
title: "Click to copy",
style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.9))", "line-height": "1.5", "white-space": "pre-wrap", "word-break": "break-word", cursor: "pointer" },
- onClick: v[0] || (v[0] = (w) => h(S.value.positivePrompt, w.currentTarget))
- }, Ye(S.value.positivePrompt), 1)
- ], 4)) : ft("", !0),
- !S.value.promptTabs.length && S.value.negativePrompt ? (be(), Ce("div", {
+ onClick: j[0] || (j[0] = (w) => C(h.value.positivePrompt, w.currentTarget))
+ }, Ne(h.value.positivePrompt), 1)
+ ], 4)) : yt("", !0),
+ !h.value.promptTabs.length && h.value.negativePrompt ? (be(), Ze("div", {
key: 2,
- style: Lt(I("#F44336", { emphasis: !0, startAlpha: 0.16, endAlpha: 0.1 }))
+ style: vt(I("#F44336", { emphasis: !0, startAlpha: 0.16, endAlpha: 0.1 }))
}, [
- v[10] || (v[10] = ie("div", { style: { display: "flex", "justify-content": "space-between", "align-items": "center", "font-size": "11px", "font-weight": "600", color: "#F44336", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "8px" } }, [
- ie("span", null, "Negative Prompt")
+ j[10] || (j[10] = te("div", { style: { display: "flex", "justify-content": "space-between", "align-items": "center", "font-size": "11px", "font-weight": "600", color: "#F44336", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "8px" } }, [
+ te("span", null, "Negative Prompt")
], -1)),
- ie("div", {
+ te("div", {
title: "Click to copy",
style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.9))", "line-height": "1.5", "white-space": "pre-wrap", "word-break": "break-word", cursor: "pointer" },
- onClick: v[1] || (v[1] = (w) => h(S.value.negativePrompt, w.currentTarget))
- }, Ye(S.value.negativePrompt), 1)
- ], 4)) : ft("", !0)
- ], 64)) : ft("", !0),
- C.value ? (be(), Ce("div", {
+ onClick: j[1] || (j[1] = (w) => C(h.value.negativePrompt, w.currentTarget))
+ }, Ne(h.value.negativePrompt), 1)
+ ], 4)) : yt("", !0)
+ ], 64)) : yt("", !0),
+ W.value ? (be(), Ze("div", {
key: 4,
style: { background: "linear-gradient(135deg, rgba(0, 188, 212, 0.14) 0%, rgba(33, 150, 243, 0.10) 100%)", border: "1px solid rgba(0, 188, 212, 0.40)", "border-radius": "6px", padding: "12px", display: "flex", "flex-direction": "column", gap: "10px" },
- class: Zn({ "mjr-ai-disabled-block": !Z.value })
+ class: An({ "mjr-ai-disabled-block": !S.value })
}, [
- S.value.showAlignment ? (be(), Ce(Nt, { key: 0 }, [
- v[11] || (v[11] = ie("div", { style: { "font-size": "11px", "font-weight": "600", color: "#00BCD4", "text-transform": "uppercase", "letter-spacing": "0.5px", display: "flex", "align-items": "center", "justify-content": "space-between" } }, [
- ie("span", { title: "How closely the generated image matches the prompt (SigLIP2 score)" }, " Prompt Alignment ")
+ h.value.showAlignment ? (be(), Ze(Nt, { key: 0 }, [
+ j[11] || (j[11] = te("div", { style: { "font-size": "11px", "font-weight": "600", color: "#00BCD4", "text-transform": "uppercase", "letter-spacing": "0.5px", display: "flex", "align-items": "center", "justify-content": "space-between" } }, [
+ te("span", { title: "How closely the generated image matches the prompt (SigLIP2 score)" }, " Prompt Alignment ")
], -1)),
- ie("div", jj, [
- ie("div", vj, [
- ie("div", {
- style: Lt({
+ te("div", jj, [
+ te("div", vj, [
+ te("div", {
+ style: vt({
height: "100%",
width: c.value.fillWidth,
background: c.value.fillColor,
@@ -39688,8 +39725,8 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = {
})
}, null, 4)
]),
- ie("span", {
- style: Lt({
+ te("span", {
+ style: vt({
fontSize: "13px",
fontWeight: "700",
color: c.value.scoreColor,
@@ -39697,9 +39734,9 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = {
textAlign: "right",
fontFamily: "'Consolas', 'Monaco', monospace"
})
- }, Ye(c.value.scoreText), 5),
- ie("span", {
- style: Lt({
+ }, Ne(c.value.scoreText), 5),
+ te("span", {
+ style: vt({
fontSize: "9px",
fontWeight: "700",
padding: "2px 6px",
@@ -39709,32 +39746,32 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = {
textTransform: "uppercase",
letterSpacing: "0.5px"
})
- }, Ye(c.value.qualityText), 5)
+ }, Ne(c.value.qualityText), 5)
]),
- c.value.aiStatusVisible ? (be(), Ce("div", Lj, Ye(c.value.aiStatusText), 1)) : ft("", !0)
- ], 64)) : ft("", !0),
- ie("div", Vj, [
- ie("span", Yj, Ye(S.value.captionLabel), 1),
- ie("div", kj, [
- ie("button", {
+ c.value.aiStatusVisible ? (be(), Ze("div", Lj, Ne(c.value.aiStatusText), 1)) : yt("", !0)
+ ], 64)) : yt("", !0),
+ te("div", Yj, [
+ te("span", Vj, Ne(h.value.captionLabel), 1),
+ te("div", Xj, [
+ te("button", {
type: "button",
class: "mjr-ai-control",
- disabled: !A.value || a.value,
- style: Lt([{ border: "1px solid rgba(0,188,212,0.45)", background: "rgba(0,188,212,0.12)", color: "#00BCD4", "border-radius": "4px", "font-size": "10px", "font-weight": "600", padding: "2px 8px", cursor: "pointer" }, { opacity: A.value ? "1" : "0.6", cursor: A.value ? "pointer" : "default" }]),
- onClick: On(X, ["stop"])
- }, Ye(l.value), 13, Xj),
- ie("button", {
+ disabled: !y.value || a.value,
+ style: vt([{ border: "1px solid rgba(0,188,212,0.45)", background: "rgba(0,188,212,0.12)", color: "#00BCD4", "border-radius": "4px", "font-size": "10px", "font-weight": "600", padding: "2px 8px", cursor: "pointer" }, { opacity: y.value ? "1" : "0.6", cursor: y.value ? "pointer" : "default" }]),
+ onClick: Fn(X, ["stop"])
+ }, Ne(l.value), 13, Nj),
+ te("button", {
type: "button",
class: "mjr-ai-control",
disabled: !p.value,
- style: Lt([{ border: "1px solid rgba(0,188,212,0.45)", background: "rgba(0,188,212,0.12)", color: "#00BCD4", "border-radius": "4px", "font-size": "10px", "font-weight": "600", padding: "2px 8px", cursor: "pointer" }, { opacity: p.value ? "1" : "0.6", cursor: p.value ? "pointer" : "default" }]),
- onClick: On(x, ["stop"])
- }, Ye(r.value), 13, Nj)
+ style: vt([{ border: "1px solid rgba(0,188,212,0.45)", background: "rgba(0,188,212,0.12)", color: "#00BCD4", "border-radius": "4px", "font-size": "10px", "font-weight": "600", padding: "2px 8px", cursor: "pointer" }, { opacity: p.value ? "1" : "0.6", cursor: p.value ? "pointer" : "default" }]),
+ onClick: Fn(x, ["stop"])
+ }, Ne(r.value), 13, kj)
])
]),
- ie("div", {
- title: Z.value ? "Click to copy caption" : "AI caption controls are disabled",
- style: Lt({
+ te("div", {
+ title: S.value ? "Click to copy caption" : "AI caption controls are disabled",
+ style: vt({
marginTop: "4px",
padding: "8px",
borderRadius: "6px",
@@ -39748,27 +39785,27 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = {
cursor: p.value ? "copy" : "default"
}),
onClick: x
- }, Ye(g.value), 13, Rj)
- ], 2)) : ft("", !0),
- S.value.lyrics ? (be(), Ce("div", {
+ }, Ne(g.value), 13, Rj)
+ ], 2)) : yt("", !0),
+ h.value.lyrics ? (be(), Ze("div", {
key: 5,
- style: Lt(I("#00BCD4", { emphasis: !1 }))
+ style: vt(I("#00BCD4", { emphasis: !1 }))
}, [
- v[12] || (v[12] = ie("div", { style: { display: "flex", "justify-content": "space-between", "align-items": "center", "font-size": "11px", "font-weight": "600", color: "#00BCD4", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "8px" } }, [
- ie("span", null, "Lyrics")
+ j[12] || (j[12] = te("div", { style: { display: "flex", "justify-content": "space-between", "align-items": "center", "font-size": "11px", "font-weight": "600", color: "#00BCD4", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "8px" } }, [
+ te("span", null, "Lyrics")
], -1)),
- ie("div", Fj, Ye(S.value.lyrics), 1)
- ], 4)) : ft("", !0),
- S.value.pipelineTabs.length ? (be(), Ce("div", {
+ te("div", Oj, Ne(h.value.lyrics), 1)
+ ], 4)) : yt("", !0),
+ h.value.pipelineTabs.length ? (be(), Ze("div", {
key: 6,
- style: Lt(I("#FF9800", { emphasis: !0, startAlpha: 0.16, endAlpha: 0.1 }))
+ style: vt(I("#FF9800", { emphasis: !0, startAlpha: 0.16, endAlpha: 0.1 }))
}, [
- v[13] || (v[13] = ie("div", { style: { "font-size": "11px", "font-weight": "600", color: "#FF9800", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "10px" } }, " Generation Pipeline ", -1)),
- ie("div", Oj, [
- (be(!0), Ce(Nt, null, Cn(S.value.pipelineTabs, (w, R) => (be(), Ce("button", {
+ j[13] || (j[13] = te("div", { style: { "font-size": "11px", "font-weight": "600", color: "#FF9800", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "10px" } }, " Generation Pipeline ", -1)),
+ te("div", Fj, [
+ (be(!0), Ze(Nt, null, Zn(h.value.pipelineTabs, (w, R) => (be(), Ze("button", {
key: w.label,
type: "button",
- style: Lt({
+ style: vt({
appearance: "none",
border: i.value === R ? "1px solid #FF9800" : "1px solid var(--border-color, rgba(255,255,255,0.12))",
borderRadius: "999px",
@@ -39780,33 +39817,33 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = {
fontWeight: i.value === R ? "700" : "500",
boxShadow: i.value === R ? "0 0 0 1px #FF980055 inset" : "none"
}),
- onClick: (Y) => i.value = R
- }, Ye(w.label), 13, zj))), 128))
+ onClick: (V) => i.value = R
+ }, Ne(w.label), 13, zj))), 128))
]),
- (be(!0), Ce(Nt, null, Cn(S.value.pipelineTabs, (w, R) => Ko((be(), Ce("div", {
+ (be(!0), Ze(Nt, null, Zn(h.value.pipelineTabs, (w, R) => Uo((be(), Ze("div", {
key: `${w.label}-pipeline`,
style: { display: "grid", "grid-template-columns": "repeat(auto-fit, minmax(150px, 1fr))", gap: "8px", padding: "8px", border: "1px solid rgba(255, 152, 0, 0.35)", "border-radius": "6px", background: "linear-gradient(135deg, rgba(255, 152, 0, 0.12) 0%, rgba(255, 193, 7, 0.08) 100%)", "box-shadow": "0 0 0 1px rgba(255, 152, 0, 0.12) inset" }
}, [
- (be(!0), Ce(Nt, null, Cn(w.fields, (Y) => (be(), Ce("div", {
- key: `${w.label}-${Y.label}`,
+ (be(!0), Ze(Nt, null, Zn(w.fields, (V) => (be(), Ze("div", {
+ key: `${w.label}-${V.label}`,
style: { display: "flex", "flex-direction": "column", gap: "2px", "min-width": "0" }
}, [
- ie("span", Jj, Ye(Y.label), 1),
- ie("span", {
+ te("span", Jj, Ne(V.label), 1),
+ te("span", {
style: { "font-size": "12px", color: "var(--fg-color, #ddd)", "word-break": "break-word", padding: "1px 3px", "border-radius": "3px", transition: "background 0.2s ease", cursor: "copy" },
- onClick: (F) => h(Y.value, F.currentTarget)
- }, Ye(Y.value), 9, Tj)
+ onClick: (O) => C(V.value, O.currentTarget)
+ }, Ne(V.value), 9, Tj)
]))), 128))
])), [
[yr, i.value === R]
])), 128))
- ], 4)) : ft("", !0),
- (be(!0), Ce(Nt, null, Cn(b.value, (w) => (be(), Ce("div", {
+ ], 4)) : yt("", !0),
+ (be(!0), Ze(Nt, null, Zn(b.value, (w) => (be(), Ze("div", {
key: w.key,
- style: Lt(I(w.accent, { emphasis: w.emphasis }))
+ style: vt(I(w.accent, { emphasis: w.emphasis }))
}, [
- ie("div", {
- style: Lt({
+ te("div", {
+ style: vt({
fontSize: "11px",
fontWeight: "600",
color: w.accent,
@@ -39814,70 +39851,70 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = {
letterSpacing: "0.5px",
marginBottom: "10px"
})
- }, Ye(w.title), 5),
- ie("div", Bj, [
- (be(!0), Ce(Nt, null, Cn(w.fields, (R) => (be(), Ce(Nt, {
+ }, Ne(w.title), 5),
+ te("div", Kj, [
+ (be(!0), Ze(Nt, null, Zn(w.fields, (R) => (be(), Ze(Nt, {
key: `${w.key}-${R.label}`
}, [
- ie("div", {
+ te("div", {
title: R.label,
style: { "font-size": "11px", color: "var(--mjr-muted, rgba(127,127,127,0.9))", "font-weight": "500" }
- }, Ye(R.label) + ": ", 9, Uj),
- ie("div", {
+ }, Ne(R.label) + ": ", 9, Bj),
+ te("div", {
title: `${R.label}: ${R.value}`,
style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.95))", "word-break": "break-word", "white-space": "pre-wrap", cursor: "pointer" },
- onClick: (Y) => h(R.value, Y.currentTarget)
- }, Ye(R.value), 9, Kj)
+ onClick: (V) => C(R.value, V.currentTarget)
+ }, Ne(R.value), 9, Uj)
], 64))), 128))
])
], 4))), 128)),
- S.value.ttsInstruction ? (be(), Ce("div", {
+ h.value.ttsInstruction ? (be(), Ze("div", {
key: 7,
- style: Lt(I("#26A69A", { emphasis: !1 }))
+ style: vt(I("#26A69A", { emphasis: !1 }))
}, [
- v[14] || (v[14] = ie("div", { style: { display: "flex", "justify-content": "space-between", "align-items": "center", "font-size": "11px", "font-weight": "600", color: "#26A69A", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "8px" } }, [
- ie("span", null, "TTS Instruction")
+ j[14] || (j[14] = te("div", { style: { display: "flex", "justify-content": "space-between", "align-items": "center", "font-size": "11px", "font-weight": "600", color: "#26A69A", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "8px" } }, [
+ te("span", null, "TTS Instruction")
], -1)),
- ie("div", {
+ te("div", {
title: "Click to copy",
style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.9))", "line-height": "1.5", "white-space": "pre-wrap", "word-break": "break-word", cursor: "pointer" },
- onClick: v[2] || (v[2] = (w) => h(S.value.ttsInstruction, w.currentTarget))
- }, Ye(S.value.ttsInstruction), 1)
- ], 4)) : ft("", !0),
- S.value.seed !== null && S.value.seed !== void 0 && S.value.seed !== "" ? (be(), Ce("div", {
+ onClick: j[2] || (j[2] = (w) => C(h.value.ttsInstruction, w.currentTarget))
+ }, Ne(h.value.ttsInstruction), 1)
+ ], 4)) : yt("", !0),
+ h.value.seed !== null && h.value.seed !== void 0 && h.value.seed !== "" ? (be(), Ze("div", {
key: 8,
- style: Lt(y())
+ style: vt(A())
}, [
- v[15] || (v[15] = ie("div", { style: { "font-size": "11px", "font-weight": "700", color: "#E91E63", "text-transform": "uppercase", "letter-spacing": "1px" } }, " SEED ", -1)),
- ie("div", {
- title: `Click to copy seed: ${S.value.seed}`,
+ j[15] || (j[15] = te("div", { style: { "font-size": "11px", "font-weight": "700", color: "#E91E63", "text-transform": "uppercase", "letter-spacing": "1px" } }, " SEED ", -1)),
+ te("div", {
+ title: `Click to copy seed: ${h.value.seed}`,
style: { "font-size": "18px", "font-weight": "700", color: "#fff", "font-family": "'Consolas', 'Monaco', monospace", "letter-spacing": "1px", cursor: "pointer", padding: "4px 8px", "border-radius": "4px", transition: "background 0.2s" },
- onClick: v[3] || (v[3] = (w) => h(S.value.seed, w.currentTarget, "rgba(76, 175, 80, 0.4)"))
- }, Ye(S.value.seed), 9, Dj)
- ], 4)) : ft("", !0),
- S.value.inputFiles.length ? (be(), Ce("div", {
+ onClick: j[3] || (j[3] = (w) => C(h.value.seed, w.currentTarget, "rgba(76, 175, 80, 0.4)"))
+ }, Ne(h.value.seed), 9, Dj)
+ ], 4)) : yt("", !0),
+ h.value.inputFiles.length ? (be(), Ze("div", {
key: 9,
- style: Lt(I("#4CAF50", { emphasis: !0, startAlpha: 0.16, endAlpha: 0.1 }))
+ style: vt(I("#4CAF50", { emphasis: !0, startAlpha: 0.16, endAlpha: 0.1 }))
}, [
- ie("div", {
- title: xe(m)("tooltip.generationInputs", "Input files used in generation"),
+ te("div", {
+ title: ve(m)("tooltip.generationInputs", "Input files used in generation"),
style: { "font-size": "11px", "font-weight": "600", color: "#4CAF50", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "8px" }
- }, " Source Files ", 8, Ej),
- ie("div", Hj, [
- (be(!0), Ce(Nt, null, Cn(S.value.inputFiles, (w) => (be(), Pi(hj, {
+ }, " Source Files ", 8, Hj),
+ te("div", Ej, [
+ (be(!0), Ze(Nt, null, Zn(h.value.inputFiles, (w) => (be(), Pi(Cj, {
key: w.id,
"input-file": w
}, null, 8, ["input-file"]))), 128))
])
- ], 4)) : ft("", !0)
- ])) : ft("", !0);
+ ], 4)) : yt("", !0)
+ ])) : yt("", !0);
}
-}, Pj = 6, Qj = 1, _j = 8, Kr = (e, t, n) => {
+}, Pj = 6, Qj = 1, _j = 8, Ur = (e, t, n) => {
const i = Number(e);
return Number.isFinite(i) ? Math.max(t, Math.min(n, i)) : t;
};
function $j(e, t, n = null) {
- var P, H, $, E, oe, M, j, O, D, q, ee, ce, ue;
+ var P, E, $, H, ne, M, v, F, D, q, ee, ae, ue;
if (!e) return;
const i = (P = e.getContext) == null ? void 0 : P.call(e, "2d");
if (!i) return;
@@ -39890,187 +39927,187 @@ function $j(e, t, n = null) {
showViewport: !0,
showNodeLabels: !1,
...n && typeof n == "object" ? n : {}
- }, r = Array.isArray(t == null ? void 0 : t.nodes) ? t.nodes : [], l = Array.isArray(t == null ? void 0 : t.groups) && t.groups || Array.isArray((H = t == null ? void 0 : t.extra) == null ? void 0 : H.groups) && t.extra.groups || Array.isArray(($ = t == null ? void 0 : t.extra) == null ? void 0 : $.groupNodes) && t.extra.groupNodes || Array.isArray((E = t == null ? void 0 : t.extra) == null ? void 0 : E.group_nodes) && t.extra.group_nodes || [], a = Array.isArray(t == null ? void 0 : t.links) && t.links || Array.isArray((oe = t == null ? void 0 : t.extra) == null ? void 0 : oe.links) && t.extra.links || [], c = Math.max(1, e.clientWidth || e.width || 1), s = Math.max(1, e.clientHeight || e.height || 1);
+ }, r = Array.isArray(t == null ? void 0 : t.nodes) ? t.nodes : [], l = Array.isArray(t == null ? void 0 : t.groups) && t.groups || Array.isArray((E = t == null ? void 0 : t.extra) == null ? void 0 : E.groups) && t.extra.groups || Array.isArray(($ = t == null ? void 0 : t.extra) == null ? void 0 : $.groupNodes) && t.extra.groupNodes || Array.isArray((H = t == null ? void 0 : t.extra) == null ? void 0 : H.group_nodes) && t.extra.group_nodes || [], a = Array.isArray(t == null ? void 0 : t.links) && t.links || Array.isArray((ne = t == null ? void 0 : t.extra) == null ? void 0 : ne.links) && t.extra.links || [], c = Math.max(1, e.clientWidth || e.width || 1), s = Math.max(1, e.clientHeight || e.height || 1);
if ((!r || r.length === 0) && (!l || l.length === 0))
return i.clearRect(0, 0, c, s), null;
- const d = (U, Q) => {
- if (!U) return `rgba(255,255,255,${Q})`;
- if (typeof U != "string") return `rgba(255,255,255,${Q})`;
- const _ = U.trim();
+ const d = (B, Q) => {
+ if (!B) return `rgba(255,255,255,${Q})`;
+ if (typeof B != "string") return `rgba(255,255,255,${Q})`;
+ const _ = B.trim();
if (!_) return `rgba(255,255,255,${Q})`;
const le = _.match(/^rgba?\((\d+)\s*,\s*(\d+)\s*,\s*(\d+)(?:\s*,\s*([0-9.]+))?\)\s*$/i);
if (le) {
- const se = Number(le[1]), ge = Number(le[2]), je = Number(le[3]);
- if ([se, ge, je].every((Se) => Number.isFinite(Se))) return `rgba(${se},${ge},${je},${Q})`;
+ const de = Number(le[1]), ge = Number(le[2]), Le = Number(le[3]);
+ if ([de, ge, Le].every((xe) => Number.isFinite(xe))) return `rgba(${de},${ge},${Le},${Q})`;
}
- const de = _.startsWith("#") ? _.slice(1) : "";
- if (de.length === 3) {
- const se = parseInt(de[0] + de[0], 16), ge = parseInt(de[1] + de[1], 16), je = parseInt(de[2] + de[2], 16);
- if ([se, ge, je].every((Se) => Number.isFinite(Se))) return `rgba(${se},${ge},${je},${Q})`;
+ const ce = _.startsWith("#") ? _.slice(1) : "";
+ if (ce.length === 3) {
+ const de = parseInt(ce[0] + ce[0], 16), ge = parseInt(ce[1] + ce[1], 16), Le = parseInt(ce[2] + ce[2], 16);
+ if ([de, ge, Le].every((xe) => Number.isFinite(xe))) return `rgba(${de},${ge},${Le},${Q})`;
}
- if (de.length === 6) {
- const se = parseInt(de.slice(0, 2), 16), ge = parseInt(de.slice(2, 4), 16), je = parseInt(de.slice(4, 6), 16);
- if ([se, ge, je].every((Se) => Number.isFinite(Se))) return `rgba(${se},${ge},${je},${Q})`;
+ if (ce.length === 6) {
+ const de = parseInt(ce.slice(0, 2), 16), ge = parseInt(ce.slice(2, 4), 16), Le = parseInt(ce.slice(4, 6), 16);
+ if ([de, ge, Le].every((xe) => Number.isFinite(xe))) return `rgba(${de},${ge},${Le},${Q})`;
}
return _;
- }, u = [], I = /* @__PURE__ */ new Map(), y = (U) => {
- if (Array.isArray(U) && U.length >= 2) return [Number(U[0]), Number(U[1])];
- if (U && typeof U == "object") {
- const Q = U[0] ?? U[0] ?? U.x ?? U.left ?? null, _ = U[1] ?? U[1] ?? U.y ?? U.top ?? null;
+ }, u = [], I = /* @__PURE__ */ new Map(), A = (B) => {
+ if (Array.isArray(B) && B.length >= 2) return [Number(B[0]), Number(B[1])];
+ if (B && typeof B == "object") {
+ const Q = B[0] ?? B[0] ?? B.x ?? B.left ?? null, _ = B[1] ?? B[1] ?? B.y ?? B.top ?? null;
if (Q !== null && _ !== null) return [Number(Q), Number(_)];
}
return null;
- }, S = (U) => {
- if (Array.isArray(U) && U.length >= 2) return [Number(U[0]), Number(U[1])];
- if (U && typeof U == "object") {
- const Q = U[0] ?? U[0] ?? U.w ?? U.width ?? null, _ = U[1] ?? U[1] ?? U.h ?? U.height ?? null;
+ }, h = (B) => {
+ if (Array.isArray(B) && B.length >= 2) return [Number(B[0]), Number(B[1])];
+ if (B && typeof B == "object") {
+ const Q = B[0] ?? B[0] ?? B.w ?? B.width ?? null, _ = B[1] ?? B[1] ?? B.h ?? B.height ?? null;
if (Q !== null && _ !== null) return [Number(Q), Number(_)];
}
return null;
};
- for (const U of r || []) {
- const Q = (U == null ? void 0 : U.id) ?? (U == null ? void 0 : U.ID) ?? (U == null ? void 0 : U.node_id) ?? null, _ = Q != null ? String(Q) : null, le = y(U == null ? void 0 : U.pos), de = S(U == null ? void 0 : U.size);
- if (!le || !de) continue;
- const se = Number(le[0]), ge = Number(le[1]), je = Math.max(1, Number(de[0])), Se = Math.max(1, Number(de[1]));
- if (!Number.isFinite(se) || !Number.isFinite(ge) || !Number.isFinite(je) || !Number.isFinite(Se))
+ for (const B of r || []) {
+ const Q = (B == null ? void 0 : B.id) ?? (B == null ? void 0 : B.ID) ?? (B == null ? void 0 : B.node_id) ?? null, _ = Q != null ? String(Q) : null, le = A(B == null ? void 0 : B.pos), ce = h(B == null ? void 0 : B.size);
+ if (!le || !ce) continue;
+ const de = Number(le[0]), ge = Number(le[1]), Le = Math.max(1, Number(ce[0])), xe = Math.max(1, Number(ce[1]));
+ if (!Number.isFinite(de) || !Number.isFinite(ge) || !Number.isFinite(Le) || !Number.isFinite(xe))
continue;
- const ke = Number(U == null ? void 0 : U.mode), we = ke === 2 || ke === 4, Je = ((M = t == null ? void 0 : t.extra) == null ? void 0 : M.errors) || ((j = t == null ? void 0 : t.extra) == null ? void 0 : j.node_errors) || null, qe = !!((Je && typeof Je == "object" && _ ? Je[_] : null) || U != null && U.error || U != null && U.errors || (O = U == null ? void 0 : U.flags) != null && O.error || (D = U == null ? void 0 : U.properties) != null && D.error);
+ const Xe = Number(B == null ? void 0 : B.mode), Me = Xe === 2 || Xe === 4, Fe = ((M = t == null ? void 0 : t.extra) == null ? void 0 : M.errors) || ((v = t == null ? void 0 : t.extra) == null ? void 0 : v.node_errors) || null, qe = !!((Fe && typeof Fe == "object" && _ ? Fe[_] : null) || B != null && B.error || B != null && B.errors || (F = B == null ? void 0 : B.flags) != null && F.error || (D = B == null ? void 0 : B.properties) != null && D.error);
u.push({
kind: "node",
id: _,
- x: se,
+ x: de,
y: ge,
- w: je,
- h: Se,
- fill: o.nodeColors && ((U == null ? void 0 : U.bgcolor) || (U == null ? void 0 : U.color)) || null,
- stroke: o.nodeColors && ((U == null ? void 0 : U.color) || (U == null ? void 0 : U.bgcolor)) || null,
- bypassed: we,
+ w: Le,
+ h: xe,
+ fill: o.nodeColors && ((B == null ? void 0 : B.bgcolor) || (B == null ? void 0 : B.color)) || null,
+ stroke: o.nodeColors && ((B == null ? void 0 : B.color) || (B == null ? void 0 : B.bgcolor)) || null,
+ bypassed: Me,
errored: qe,
- label: String((U == null ? void 0 : U.title) || (U == null ? void 0 : U.type) || (U == null ? void 0 : U.comfyClass) || (U == null ? void 0 : U.class_type) || _ || "").replace(/\s+/g, " ").trim()
+ label: String((B == null ? void 0 : B.title) || (B == null ? void 0 : B.type) || (B == null ? void 0 : B.comfyClass) || (B == null ? void 0 : B.class_type) || _ || "").replace(/\s+/g, " ").trim()
}), _ && I.set(_, u[u.length - 1]);
}
if (o.showGroups)
- for (const U of l || []) {
- const Q = Array.isArray(U == null ? void 0 : U.bounding) && U.bounding.length >= 4 ? U.bounding : null, _ = Q ? [Number(Q[0]), Number(Q[1])] : y(U == null ? void 0 : U.pos), le = Q ? [Number(Q[2]), Number(Q[3])] : S(U == null ? void 0 : U.size);
+ for (const B of l || []) {
+ const Q = Array.isArray(B == null ? void 0 : B.bounding) && B.bounding.length >= 4 ? B.bounding : null, _ = Q ? [Number(Q[0]), Number(Q[1])] : A(B == null ? void 0 : B.pos), le = Q ? [Number(Q[2]), Number(Q[3])] : h(B == null ? void 0 : B.size);
if (!_ || !le) continue;
- const de = Number(_[0]), se = Number(_[1]), ge = Math.max(1, Number(le[0])), je = Math.max(1, Number(le[1]));
- !Number.isFinite(de) || !Number.isFinite(se) || !Number.isFinite(ge) || !Number.isFinite(je) || u.push({
+ const ce = Number(_[0]), de = Number(_[1]), ge = Math.max(1, Number(le[0])), Le = Math.max(1, Number(le[1]));
+ !Number.isFinite(ce) || !Number.isFinite(de) || !Number.isFinite(ge) || !Number.isFinite(Le) || u.push({
kind: "group",
- x: de,
- y: se,
+ x: ce,
+ y: de,
w: ge,
- h: je,
- fill: (U == null ? void 0 : U.color) || (U == null ? void 0 : U.bgcolor) || (U == null ? void 0 : U.borderColor) || null,
- stroke: (U == null ? void 0 : U.borderColor) || (U == null ? void 0 : U.color) || (U == null ? void 0 : U.bgcolor) || null
+ h: Le,
+ fill: (B == null ? void 0 : B.color) || (B == null ? void 0 : B.bgcolor) || (B == null ? void 0 : B.borderColor) || null,
+ stroke: (B == null ? void 0 : B.borderColor) || (B == null ? void 0 : B.color) || (B == null ? void 0 : B.bgcolor) || null
});
}
if (!u.length)
return i.clearRect(0, 0, c, s), null;
- let Z = u[0].x, C = u[0].y, g = u[0].x + u[0].w, A = u[0].y + u[0].h;
- for (const U of u)
- Z = Math.min(Z, U.x), C = Math.min(C, U.y), g = Math.max(g, U.x + U.w), A = Math.max(A, U.y + U.h);
- const p = Math.max(1, g - Z), b = Math.max(1, A - C), L = Z + p / 2, h = C + b / 2, G = o.view && typeof o.view == "object" ? o.view : /* @__PURE__ */ Object.create(null), W = Kr(G.zoom ?? 1, Qj, _j), f = Math.max(1, p / W), X = Math.max(1, b / W), x = f / 2, T = X / 2, v = f >= p ? L : Kr(G.centerX ?? L, Z + x, g - x), w = X >= b ? h : Kr(G.centerY ?? h, C + T, A - T), R = v - x, Y = w - T, F = Pj, N = Math.min((c - F * 2) / f, (s - F * 2) / X), V = G.hoveredNodeId !== null && G.hoveredNodeId !== void 0 ? String(G.hoveredNodeId) : null;
+ let S = u[0].x, W = u[0].y, g = u[0].x + u[0].w, y = u[0].y + u[0].h;
+ for (const B of u)
+ S = Math.min(S, B.x), W = Math.min(W, B.y), g = Math.max(g, B.x + B.w), y = Math.max(y, B.y + B.h);
+ const p = Math.max(1, g - S), b = Math.max(1, y - W), L = S + p / 2, C = W + b / 2, G = o.view && typeof o.view == "object" ? o.view : /* @__PURE__ */ Object.create(null), Z = Ur(G.zoom ?? 1, Qj, _j), f = Math.max(1, p / Z), X = Math.max(1, b / Z), x = f / 2, K = X / 2, j = f >= p ? L : Ur(G.centerX ?? L, S + x, g - x), w = X >= b ? C : Ur(G.centerY ?? C, W + K, y - K), R = j - x, V = w - K, O = Pj, k = Math.min((c - O * 2) / f, (s - O * 2) / X), Y = G.hoveredNodeId !== null && G.hoveredNodeId !== void 0 ? String(G.hoveredNodeId) : null;
i.clearRect(0, 0, c, s), i.fillStyle = "rgba(0,0,0,0.22)", i.fillRect(0, 0, c, s);
- const k = (U, Q) => ({
- x: F + (U - R) * N,
- y: F + (Q - Y) * N
- }), K = (U, Q) => ({
- x: Kr(R + (Number(U) - F) / N, Z, g),
- y: Kr(Y + (Number(Q) - F) / N, C, A)
+ const N = (B, Q) => ({
+ x: O + (B - R) * k,
+ y: O + (Q - V) * k
+ }), U = (B, Q) => ({
+ x: Ur(R + (Number(B) - O) / k, S, g),
+ y: Ur(V + (Number(Q) - O) / k, W, y)
}), z = () => {
if (o.showLinks && !(!a || a.length === 0)) {
i.save(), i.globalAlpha = 1, i.strokeStyle = "rgba(255,255,255,0.18)", i.lineWidth = 1;
- for (const U of a) {
+ for (const B of a) {
let Q = null, _ = null;
- if (Array.isArray(U) && U.length >= 4 ? (Q = U[1], _ = U[3]) : U && typeof U == "object" && (Q = U.origin_id ?? U.originId ?? U.from ?? null, _ = U.target_id ?? U.targetId ?? U.to ?? null), Q === null || _ === null) continue;
- const le = I.get(String(Q)), de = I.get(String(_));
- if (!le || !de) continue;
- const se = k(le.x + le.w, le.y + le.h / 2), ge = k(de.x, de.y + de.h / 2), je = Math.max(12, Math.min(80, Math.abs(ge.x - se.x) * 0.35));
- i.beginPath(), i.moveTo(se.x, se.y), i.bezierCurveTo(se.x + je, se.y, ge.x - je, ge.y, ge.x, ge.y), i.stroke();
+ if (Array.isArray(B) && B.length >= 4 ? (Q = B[1], _ = B[3]) : B && typeof B == "object" && (Q = B.origin_id ?? B.originId ?? B.from ?? null, _ = B.target_id ?? B.targetId ?? B.to ?? null), Q === null || _ === null) continue;
+ const le = I.get(String(Q)), ce = I.get(String(_));
+ if (!le || !ce) continue;
+ const de = N(le.x + le.w, le.y + le.h / 2), ge = N(ce.x, ce.y + ce.h / 2), Le = Math.max(12, Math.min(80, Math.abs(ge.x - de.x) * 0.35));
+ i.beginPath(), i.moveTo(de.x, de.y), i.bezierCurveTo(de.x + Le, de.y, ge.x - Le, ge.y, ge.x, ge.y), i.stroke();
}
i.restore();
}
- }, B = (U) => {
- var qe, Ue, Te, Oe;
- const Q = F + (U.x - R) * N, _ = F + (U.y - Y) * N, le = Math.max(1, U.w * N), de = Math.max(1, U.h * N), se = U.kind === "node", ge = U.kind === "group", je = !!U.bypassed, Se = !!U.errored, ke = ge ? 0.18 : je && o.renderBypassState ? 0.14 : 0.62, we = ge ? 0.55 : je && o.renderBypassState ? 0.32 : 0.8, Je = d(U.fill, ke), $e = d(U.stroke, we);
- if (i.save(), i.globalAlpha = 1, typeof Je == "string" && (Je.startsWith("#") || Je.startsWith("rgb") || Je.startsWith("hsl")) ? (i.fillStyle = Je, i.globalAlpha = ke) : (i.fillStyle = typeof Je == "string" ? Je : "rgba(255,255,255,0.20)", i.globalAlpha = ke), i.fillRect(Q, _, le, de), i.restore(), i.globalAlpha = 1, i.strokeStyle = "rgba(255,255,255,0.22)", typeof $e == "string" && ($e.startsWith("#") || $e.startsWith("rgb") || $e.startsWith("hsl")) && (i.save(), i.globalAlpha = we, i.strokeStyle = $e, i.restore()), se && je && o.renderBypassState)
+ }, T = (B) => {
+ var qe, Pe, Re, rt;
+ const Q = O + (B.x - R) * k, _ = O + (B.y - V) * k, le = Math.max(1, B.w * k), ce = Math.max(1, B.h * k), de = B.kind === "node", ge = B.kind === "group", Le = !!B.bypassed, xe = !!B.errored, Xe = ge ? 0.18 : Le && o.renderBypassState ? 0.14 : 0.62, Me = ge ? 0.55 : Le && o.renderBypassState ? 0.32 : 0.8, Fe = d(B.fill, Xe), it = d(B.stroke, Me);
+ if (i.save(), i.globalAlpha = 1, typeof Fe == "string" && (Fe.startsWith("#") || Fe.startsWith("rgb") || Fe.startsWith("hsl")) ? (i.fillStyle = Fe, i.globalAlpha = Xe) : (i.fillStyle = typeof Fe == "string" ? Fe : "rgba(255,255,255,0.20)", i.globalAlpha = Xe), i.fillRect(Q, _, le, ce), i.restore(), i.globalAlpha = 1, i.strokeStyle = "rgba(255,255,255,0.22)", typeof it == "string" && (it.startsWith("#") || it.startsWith("rgb") || it.startsWith("hsl")) && (i.save(), i.globalAlpha = Me, i.strokeStyle = it, i.restore()), de && Le && o.renderBypassState)
try {
i.setLineDash([3, 2]);
- } catch (pt) {
- (qe = console.debug) == null || qe.call(console, pt);
+ } catch (Te) {
+ (qe = console.debug) == null || qe.call(console, Te);
}
else
try {
i.setLineDash([]);
- } catch (pt) {
- (Ue = console.debug) == null || Ue.call(console, pt);
+ } catch (Te) {
+ (Pe = console.debug) == null || Pe.call(console, Te);
}
- if (i.lineWidth = 1, i.strokeRect(Q, _, le, de), se && Se && o.renderErrorState) {
+ if (i.lineWidth = 1, i.strokeRect(Q, _, le, ce), de && xe && o.renderErrorState) {
try {
i.setLineDash([]);
- } catch (pt) {
- (Te = console.debug) == null || Te.call(console, pt);
+ } catch (Te) {
+ (Re = console.debug) == null || Re.call(console, Te);
}
- i.strokeStyle = "rgba(244,67,54,0.95)", i.lineWidth = 1.5, i.strokeRect(Q - 0.5, _ - 0.5, le + 1, de + 1);
+ i.strokeStyle = "rgba(244,67,54,0.95)", i.lineWidth = 1.5, i.strokeRect(Q - 0.5, _ - 0.5, le + 1, ce + 1);
}
- if (se && V && String(U.id || "") === V) {
+ if (de && Y && String(B.id || "") === Y) {
try {
i.setLineDash([]);
- } catch (pt) {
- (Oe = console.debug) == null || Oe.call(console, pt);
+ } catch (Te) {
+ (rt = console.debug) == null || rt.call(console, Te);
}
- i.strokeStyle = "rgba(255,224,130,0.96)", i.lineWidth = 2, i.strokeRect(Q - 1, _ - 1, le + 2, de + 2);
+ i.strokeStyle = "rgba(255,224,130,0.96)", i.lineWidth = 2, i.strokeRect(Q - 1, _ - 1, le + 2, ce + 2);
}
- if (se && o.showNodeLabels && U.label && le >= 42 && de >= 12) {
- const pt = Math.max(8, Math.min(11, Math.floor(de * 0.28))), Me = _ + pt + 2, Xt = Math.max(20, le - 6);
- let Mt = U.label;
- for (i.save(), i.beginPath(), i.rect(Q + 1, _ + 1, le - 2, de - 2), i.clip(), i.font = `600 ${pt}px sans-serif`; Mt.length > 3 && i.measureText(`${Mt}...`).width > Xt; )
- Mt = Mt.slice(0, -1);
- const me = Mt === U.label ? Mt : `${Mt}...`;
- i.fillStyle = "rgba(255,255,255,0.92)", i.shadowColor = "rgba(0,0,0,0.5)", i.shadowBlur = 2, i.fillText(me, Q + 3, Me, Xt), i.restore();
+ if (de && o.showNodeLabels && B.label && le >= 42 && ce >= 12) {
+ const Te = Math.max(8, Math.min(11, Math.floor(ce * 0.28))), qt = _ + Te + 2, kt = Math.max(20, le - 6);
+ let we = B.label;
+ for (i.save(), i.beginPath(), i.rect(Q + 1, _ + 1, le - 2, ce - 2), i.clip(), i.font = `600 ${Te}px sans-serif`; we.length > 3 && i.measureText(`${we}...`).width > kt; )
+ we = we.slice(0, -1);
+ const me = we === B.label ? we : `${we}...`;
+ i.fillStyle = "rgba(255,255,255,0.92)", i.shadowColor = "rgba(0,0,0,0.5)", i.shadowBlur = 2, i.fillText(me, Q + 3, qt, kt), i.restore();
}
};
- for (const U of u.filter((Q) => Q.kind === "group")) B(U);
+ for (const B of u.filter((Q) => Q.kind === "group")) T(B);
z();
- for (const U of u.filter((Q) => Q.kind === "node")) B(U);
+ for (const B of u.filter((Q) => Q.kind === "node")) T(B);
if (o.showViewport)
try {
- const U = (window == null ? void 0 : window.app) || null, Q = ((q = U == null ? void 0 : U.canvas) == null ? void 0 : q.canvas) || ((ee = U == null ? void 0 : U.canvas) == null ? void 0 : ee.el) || null, _ = ((ce = U == null ? void 0 : U.canvas) == null ? void 0 : ce.ds) || null, le = Number(_ == null ? void 0 : _.scale), de = _ == null ? void 0 : _.offset, se = Array.isArray(de) ? Number(de[0]) : Number(de == null ? void 0 : de.x), ge = Array.isArray(de) ? Number(de[1]) : Number(de == null ? void 0 : de.y), je = Number((Q == null ? void 0 : Q.clientWidth) || (Q == null ? void 0 : Q.width)), Se = Number((Q == null ? void 0 : Q.clientHeight) || (Q == null ? void 0 : Q.height));
- if (Number.isFinite(le) && le > 0 && Number.isFinite(se) && Number.isFinite(ge) && Number.isFinite(je) && Number.isFinite(Se) && je > 0 && Se > 0) {
- const ke = -se / le, we = -ge / le, Je = (je - se) / le, $e = (Se - ge) / le, qe = k(ke, we), Ue = k(Je, $e), Te = Math.min(qe.x, Ue.x), Oe = Math.min(qe.y, Ue.y), pt = Math.abs(Ue.x - qe.x), Me = Math.abs(Ue.y - qe.y);
- i.save(), i.globalAlpha = 1, i.strokeStyle = "rgba(255,255,255,0.9)", i.lineWidth = 1, i.strokeRect(Te, Oe, pt, Me), i.restore();
+ const B = (window == null ? void 0 : window.app) || null, Q = ((q = B == null ? void 0 : B.canvas) == null ? void 0 : q.canvas) || ((ee = B == null ? void 0 : B.canvas) == null ? void 0 : ee.el) || null, _ = ((ae = B == null ? void 0 : B.canvas) == null ? void 0 : ae.ds) || null, le = Number(_ == null ? void 0 : _.scale), ce = _ == null ? void 0 : _.offset, de = Array.isArray(ce) ? Number(ce[0]) : Number(ce == null ? void 0 : ce.x), ge = Array.isArray(ce) ? Number(ce[1]) : Number(ce == null ? void 0 : ce.y), Le = Number((Q == null ? void 0 : Q.clientWidth) || (Q == null ? void 0 : Q.width)), xe = Number((Q == null ? void 0 : Q.clientHeight) || (Q == null ? void 0 : Q.height));
+ if (Number.isFinite(le) && le > 0 && Number.isFinite(de) && Number.isFinite(ge) && Number.isFinite(Le) && Number.isFinite(xe) && Le > 0 && xe > 0) {
+ const Xe = -de / le, Me = -ge / le, Fe = (Le - de) / le, it = (xe - ge) / le, qe = N(Xe, Me), Pe = N(Fe, it), Re = Math.min(qe.x, Pe.x), rt = Math.min(qe.y, Pe.y), Te = Math.abs(Pe.x - qe.x), qt = Math.abs(Pe.y - qe.y);
+ i.save(), i.globalAlpha = 1, i.strokeStyle = "rgba(255,255,255,0.9)", i.lineWidth = 1, i.strokeRect(Re, rt, Te, qt), i.restore();
}
- } catch (U) {
- (ue = console.debug) == null || ue.call(console, U);
+ } catch (B) {
+ (ue = console.debug) == null || ue.call(console, B);
}
return i.globalAlpha = 1, {
bounds: {
- minX: Z,
- minY: C,
+ minX: S,
+ minY: W,
maxX: g,
- maxY: A,
+ maxY: y,
width: p,
height: b
},
resolvedView: {
- zoom: W,
- centerX: v,
+ zoom: Z,
+ centerX: j,
centerY: w,
visibleW: f,
visibleH: X,
viewMinX: R,
- viewMinY: Y,
- pad: F,
- renderScale: N
+ viewMinY: V,
+ pad: O,
+ renderScale: k
},
- canvasToWorld: K,
- worldToCanvas: k,
- hitTestNode: (U, Q) => {
- const _ = K(U, Q);
+ canvasToWorld: U,
+ worldToCanvas: N,
+ hitTestNode: (B, Q) => {
+ const _ = U(B, Q);
for (let le = u.length - 1; le >= 0; le -= 1) {
- const de = u[le];
- if (de.kind === "node" && _.x >= de.x && _.x <= de.x + de.w && _.y >= de.y && _.y <= de.y + de.h)
- return de;
+ const ce = u[le];
+ if (ce.kind === "node" && _.x >= ce.x && _.x <= ce.x + ce.w && _.y >= ce.y && _.y <= ce.y + ce.h)
+ return ce;
}
return null;
}
@@ -40083,68 +40120,68 @@ function ev(e, t = null) {
...t && typeof t == "object" ? t : {}
}, i = Object.entries(e);
if (!i.length) return null;
- const o = [], r = [], l = /* @__PURE__ */ new Map(), a = (C) => {
- if (C == null) return null;
- const g = String(C);
+ const o = [], r = [], l = /* @__PURE__ */ new Map(), a = (W) => {
+ if (W == null) return null;
+ const g = String(W);
return g || null;
- }, c = (C) => Array.isArray(C) && C.length === 2 && Number.isFinite(Number(C[0]));
- for (const [C, g] of i.slice(0, n.maxNodes)) {
+ }, c = (W) => Array.isArray(W) && W.length === 2 && Number.isFinite(Number(W[0]));
+ for (const [W, g] of i.slice(0, n.maxNodes)) {
if (!g || typeof g != "object") continue;
- const A = a(C);
- if (!A) continue;
+ const y = a(W);
+ if (!y) continue;
const p = String(g.class_type || g.type || g.classType || "").trim(), b = g.inputs && typeof g.inputs == "object" ? g.inputs : {}, L = [];
for (const f of Object.values(b)) {
if (!c(f)) continue;
const X = a(f[0]);
- X && (L.push(X), r.push([X, A]));
+ X && (L.push(X), r.push([X, y]));
}
- l.set(A, L);
- const h = p.toLowerCase();
- let G = "#3a3a3a", W = "#6b6b6b";
- h.includes("ksampler") || h.includes("sampler") ? (G = "#6a4b1f", W = "#b07a2c") : h.includes("cliptext") || h.includes("textencode") || h.includes("conditioning") ? (G = "#1f5f3a", W = "#2cb06c") : h.includes("checkpoint") || h.includes("loader") || h.includes("model") ? (G = "#243a6a", W = "#3f6fd6") : (h.includes("save") || h.includes("preview") || h.includes("video")) && (G = "#4a2a5f", W = "#8c4cd1"), o.push({
- id: Number.isFinite(Number(A)) ? Number(A) : A,
+ l.set(y, L);
+ const C = p.toLowerCase();
+ let G = "#3a3a3a", Z = "#6b6b6b";
+ C.includes("ksampler") || C.includes("sampler") ? (G = "#6a4b1f", Z = "#b07a2c") : C.includes("cliptext") || C.includes("textencode") || C.includes("conditioning") ? (G = "#1f5f3a", Z = "#2cb06c") : C.includes("checkpoint") || C.includes("loader") || C.includes("model") ? (G = "#243a6a", Z = "#3f6fd6") : (C.includes("save") || C.includes("preview") || C.includes("video")) && (G = "#4a2a5f", Z = "#8c4cd1"), o.push({
+ id: Number.isFinite(Number(y)) ? Number(y) : y,
type: p || "Node",
pos: [0, 0],
size: [180, 80],
bgcolor: G,
- color: W,
+ color: Z,
inputs: [],
outputs: []
});
}
if (!o.length) return null;
- const s = /* @__PURE__ */ new Map(), d = /* @__PURE__ */ new Set(), u = (C) => {
- if (s.has(C)) return s.get(C);
- if (d.has(C)) return 0;
- d.add(C);
+ const s = /* @__PURE__ */ new Map(), d = /* @__PURE__ */ new Set(), u = (W) => {
+ if (s.has(W)) return s.get(W);
+ if (d.has(W)) return 0;
+ d.add(W);
let g = 0;
- const A = l.get(C) || [];
- for (const p of A) g = Math.max(g, u(p) + 1);
- return d.delete(C), s.set(C, g), g;
+ const y = l.get(W) || [];
+ for (const p of y) g = Math.max(g, u(p) + 1);
+ return d.delete(W), s.set(W, g), g;
};
- for (const C of o) u(String(C.id));
+ for (const W of o) u(String(W.id));
const I = /* @__PURE__ */ new Map();
- for (const C of o) {
- const g = s.get(String(C.id)) ?? 0;
- I.has(g) || I.set(g, []), I.get(g).push(C);
+ for (const W of o) {
+ const g = s.get(String(W.id)) ?? 0;
+ I.has(g) || I.set(g, []), I.get(g).push(W);
}
- const y = Array.from(I.keys()).sort((C, g) => C - g);
- for (const C of y) {
- const g = I.get(C) || [];
- g.sort((A, p) => Number(A.id) - Number(p.id));
- for (let A = 0; A < g.length; A++)
- g[A].pos = [C * 220, A * 110];
+ const A = Array.from(I.keys()).sort((W, g) => W - g);
+ for (const W of A) {
+ const g = I.get(W) || [];
+ g.sort((y, p) => Number(y.id) - Number(p.id));
+ for (let y = 0; y < g.length; y++)
+ g[y].pos = [W * 220, y * 110];
}
- let S = 1;
- const Z = r.filter(([C, g]) => C !== g).slice(0, 4e3).map(([C, g]) => [
- S++,
- Number.isFinite(Number(C)) ? Number(C) : C,
+ let h = 1;
+ const S = r.filter(([W, g]) => W !== g).slice(0, 4e3).map(([W, g]) => [
+ h++,
+ Number.isFinite(Number(W)) ? Number(W) : W,
0,
Number.isFinite(Number(g)) ? Number(g) : g,
0,
"LINK"
]);
- return { id: "synthetic", nodes: o, links: Z, extra: { synthetic: !0 } };
+ return { id: "synthetic", nodes: o, links: S, extra: { synthetic: !0 } };
}
const tv = {
key: 0,
@@ -40156,7 +40193,7 @@ const tv = {
}, rv = { style: { display: "grid", "grid-template-columns": "repeat(3, minmax(0, 1fr))", gap: "8px", "margin-bottom": "12px" } }, lv = { style: { padding: "8px 10px", "border-radius": "10px", background: "rgba(255,255,255,0.04)", border: "1px solid rgba(255,255,255,0.10)" } }, av = { style: { "font-size": "18px", "font-weight": "700", color: "rgba(255,255,255,0.94)", "margin-top": "2px" } }, cv = { style: { padding: "8px 10px", "border-radius": "10px", background: "rgba(255,255,255,0.04)", border: "1px solid rgba(255,255,255,0.10)" } }, sv = { style: { "font-size": "18px", "font-weight": "700", color: "rgba(255,255,255,0.94)", "margin-top": "2px" } }, dv = { style: { padding: "8px 10px", "border-radius": "10px", background: "rgba(255,255,255,0.04)", border: "1px solid rgba(255,255,255,0.10)" } }, uv = { style: { "font-size": "18px", "font-weight": "700", color: "rgba(255,255,255,0.94)", "margin-top": "2px" } }, mv = { style: { display: "flex", "align-items": "center", "justify-content": "space-between", gap: "10px", "margin-top": "8px" } }, gv = { style: { display: "flex", "flex-wrap": "wrap", gap: "6px", "align-items": "center" } }, Iv = ["title", "onClick"], bv = ["title"], pv = {
key: 0,
style: { display: "grid", "grid-template-columns": "repeat(auto-fit, minmax(180px, 1fr))", gap: "8px", "align-items": "stretch", "margin-top": "10px", "margin-bottom": "10px" }
-}, yv = ["onClick"], fv = { style: { display: "flex", "flex-direction": "column", gap: "2px", "min-width": "0" } }, hv = { style: { "font-size": "13px", "font-weight": "600" } }, Cv = { style: { "font-size": "11px", color: "rgba(255,255,255,0.58)" } }, Zv = { style: { display: "flex", gap: "10px", "align-items": "stretch", "margin-top": "10px" } }, Av = { style: { display: "flex", "justify-content": "space-between", "align-items": "center", gap: "10px", "margin-top": "8px", "font-size": "11px", color: "rgba(255,255,255,0.58)" } }, Wv = ["open"], wv = { style: { background: "rgba(0,0,0,0.5)", padding: "10px", "border-radius": "6px", "font-size": "11px", overflow: "auto", "max-height": "180px", margin: "10px 0 0 0", color: "#90CAF9", "font-family": "'Consolas', 'Monaco', monospace" } }, zm = 1, Jm = 8, Mv = {
+}, yv = ["onClick"], fv = { style: { display: "flex", "flex-direction": "column", gap: "2px", "min-width": "0" } }, Cv = { style: { "font-size": "13px", "font-weight": "600" } }, hv = { style: { "font-size": "11px", color: "rgba(255,255,255,0.58)" } }, Zv = { style: { display: "flex", gap: "10px", "align-items": "stretch", "margin-top": "10px" } }, Av = { style: { display: "flex", "justify-content": "space-between", "align-items": "center", gap: "10px", "margin-top": "8px", "font-size": "11px", color: "rgba(255,255,255,0.58)" } }, Wv = ["open"], wv = { style: { background: "rgba(0,0,0,0.5)", padding: "10px", "border-radius": "6px", "font-size": "11px", overflow: "auto", "max-height": "180px", margin: "10px 0 0 0", color: "#90CAF9", "font-family": "'Consolas', 'Monaco', monospace" } }, zm = 1, Jm = 8, Mv = {
__name: "SidebarWorkflowSection",
props: {
asset: { type: Object, required: !0 }
@@ -40180,29 +40217,29 @@ const tv = {
{ key: "compact", label: "Compact", height: 120 },
{ key: "comfortable", label: "Comfort", height: 160 },
{ key: "expanded", label: "Expanded", height: 220 }
- ]), r = Ae(null), l = Ae(!1), a = Ae(!1), c = Ae(h()), s = Ae({ ...i }), d = Ae("crosshair"), u = Ae("");
- let I = null, y = null, S = null;
- function Z(j, O, D) {
- const q = Number(j);
- return Number.isFinite(q) ? Math.max(O, Math.min(D, q)) : O;
+ ]), r = We(null), l = We(!1), a = We(!1), c = We(C()), s = We({ ...i }), d = We("crosshair"), u = We("");
+ let I = null, A = null, h = null;
+ function S(v, F, D) {
+ const q = Number(v);
+ return Number.isFinite(q) ? Math.max(F, Math.min(D, q)) : F;
}
- function C(j) {
- !j || typeof j != "object" || (s.value = {
+ function W(v) {
+ !v || typeof v != "object" || (s.value = {
...s.value,
- zoom: Z(j.zoom ?? s.value.zoom, zm, Jm),
- centerX: Number.isFinite(Number(j.centerX)) ? Number(j.centerX) : null,
- centerY: Number.isFinite(Number(j.centerY)) ? Number(j.centerY) : null
+ zoom: S(v.zoom ?? s.value.zoom, zm, Jm),
+ centerX: Number.isFinite(Number(v.centerX)) ? Number(v.centerX) : null,
+ centerY: Number.isFinite(Number(v.centerY)) ? Number(v.centerY) : null
});
}
function g() {
s.value = { ...i }, u.value = "";
}
- function A(j) {
- const O = (j == null ? void 0 : j.metadata_raw) ?? null;
- if (!O) return null;
- if (typeof O == "object") return O;
- if (typeof O == "string") {
- const D = O.trim();
+ function y(v) {
+ const F = (v == null ? void 0 : v.metadata_raw) ?? null;
+ if (!F) return null;
+ if (typeof F == "object") return F;
+ if (typeof F == "string") {
+ const D = F.trim();
if (!D) return null;
try {
const q = JSON.parse(D);
@@ -40213,12 +40250,12 @@ const tv = {
}
return null;
}
- function p(j) {
+ function p(v) {
try {
- const O = Object.entries(j || {});
- if (!O.length) return !1;
+ const F = Object.entries(v || {});
+ if (!F.length) return !1;
let D = 0;
- for (const [, q] of O.slice(0, 50))
+ for (const [, q] of F.slice(0, 50))
if (!(!q || typeof q != "object") && (q.inputs && typeof q.inputs == "object" && (D += 1), D >= 2))
return !0;
} catch {
@@ -40226,8 +40263,8 @@ const tv = {
}
return !1;
}
- function b(j) {
- const O = A(j), D = (j == null ? void 0 : j.workflow) || (j == null ? void 0 : j.Workflow) || (j == null ? void 0 : j.comfy_workflow) || (O == null ? void 0 : O.workflow) || (O == null ? void 0 : O.Workflow) || (O == null ? void 0 : O.comfy_workflow) || null;
+ function b(v) {
+ const F = y(v), D = (v == null ? void 0 : v.workflow) || (v == null ? void 0 : v.Workflow) || (v == null ? void 0 : v.comfy_workflow) || (F == null ? void 0 : F.workflow) || (F == null ? void 0 : F.Workflow) || (F == null ? void 0 : F.comfy_workflow) || null;
if (!D) return null;
if (typeof D == "object") return D;
if (typeof D == "string") {
@@ -40241,8 +40278,8 @@ const tv = {
}
return null;
}
- function L(j) {
- const O = A(j), D = (j == null ? void 0 : j.prompt) || (j == null ? void 0 : j.Prompt) || (O == null ? void 0 : O.prompt) || (O == null ? void 0 : O.Prompt) || null;
+ function L(v) {
+ const F = y(v), D = (v == null ? void 0 : v.prompt) || (v == null ? void 0 : v.Prompt) || (F == null ? void 0 : F.prompt) || (F == null ? void 0 : F.Prompt) || null;
if (!D) return null;
if (typeof D == "object") return p(D) ? D : null;
if (typeof D == "string") {
@@ -40257,71 +40294,71 @@ const tv = {
}
return null;
}
- function h() {
- var j, O, D, q;
+ function C() {
+ var v, F, D, q;
try {
- const ee = Xn == null ? void 0 : Xn(), ce = ee == null ? void 0 : ee.workflowMinimap;
- if (ce && typeof ce == "object")
- return { ...n, ...ce };
+ const ee = kn == null ? void 0 : kn(), ae = ee == null ? void 0 : ee.workflowMinimap;
+ if (ae && typeof ae == "object")
+ return { ...n, ...ae };
} catch (ee) {
- (j = console.debug) == null || j.call(console, ee);
+ (v = console.debug) == null || v.call(console, ee);
}
try {
- const ee = (O = localStorage == null ? void 0 : localStorage.getItem) == null ? void 0 : O.call(localStorage, Od);
+ const ee = (F = localStorage == null ? void 0 : localStorage.getItem) == null ? void 0 : F.call(localStorage, Fd);
if (!ee) return { ...n };
- const ce = JSON.parse(ee);
- if (!ce || typeof ce != "object") return { ...n };
- const ue = { ...n, ...ce };
+ const ae = JSON.parse(ee);
+ if (!ae || typeof ae != "object") return { ...n };
+ const ue = { ...n, ...ae };
try {
- const U = Xn();
- U.workflowMinimap = { ...U.workflowMinimap, ...ue }, Be(U), (D = localStorage == null ? void 0 : localStorage.removeItem) == null || D.call(localStorage, Od);
- } catch (U) {
- (q = console.debug) == null || q.call(console, U);
+ const B = kn();
+ B.workflowMinimap = { ...B.workflowMinimap, ...ue }, Ue(B), (D = localStorage == null ? void 0 : localStorage.removeItem) == null || D.call(localStorage, Fd);
+ } catch (B) {
+ (q = console.debug) == null || q.call(console, B);
}
return ue;
} catch {
return { ...n };
}
}
- function G(j) {
- var O;
+ function G(v) {
+ var F;
try {
- const D = Xn();
- D.workflowMinimap = { ...D.workflowMinimap, ...j }, Be(D);
+ const D = kn();
+ D.workflowMinimap = { ...D.workflowMinimap, ...v }, Ue(D);
} catch (D) {
- (O = console.debug) == null || O.call(console, D);
+ (F = console.debug) == null || F.call(console, D);
}
}
- const W = ze(() => {
- const j = b(t.asset), O = L(t.asset);
- return !j && !O ? null : j || ev(O);
+ const Z = ze(() => {
+ const v = b(t.asset), F = L(t.asset);
+ return !v && !F ? null : v || ev(F);
}), f = ze(() => {
- var j;
- return (j = t.asset) != null && j.has_generation_data ? "Complete" : "Partial";
+ var v;
+ return (v = t.asset) != null && v.has_generation_data ? "Complete" : "Partial";
}), X = ze(
- () => W.value ? JSON.stringify(W.value, null, 2) : ""
+ () => Z.value ? JSON.stringify(Z.value, null, 2) : ""
), x = ze(() => {
- var ee, ce, ue, U, Q;
- const j = W.value;
- if (!j)
+ var ee, ae, ue, B, Q;
+ const v = Z.value;
+ if (!v)
return {
nodes: 0,
links: 0,
groups: 0,
source: ""
};
- const O = Array.isArray(j == null ? void 0 : j.nodes) ? j.nodes.length : 0, D = Array.isArray(j == null ? void 0 : j.links) && j.links.length || Array.isArray((ee = j == null ? void 0 : j.extra) == null ? void 0 : ee.links) && j.extra.links.length || 0, q = Array.isArray(j == null ? void 0 : j.groups) && j.groups.length || Array.isArray((ce = j == null ? void 0 : j.extra) == null ? void 0 : ce.groups) && j.extra.groups.length || Array.isArray((ue = j == null ? void 0 : j.extra) == null ? void 0 : ue.groupNodes) && j.extra.groupNodes.length || Array.isArray((U = j == null ? void 0 : j.extra) == null ? void 0 : U.group_nodes) && j.extra.group_nodes.length || 0;
+ const F = Array.isArray(v == null ? void 0 : v.nodes) ? v.nodes.length : 0, D = Array.isArray(v == null ? void 0 : v.links) && v.links.length || Array.isArray((ee = v == null ? void 0 : v.extra) == null ? void 0 : ee.links) && v.extra.links.length || 0, q = Array.isArray(v == null ? void 0 : v.groups) && v.groups.length || Array.isArray((ae = v == null ? void 0 : v.extra) == null ? void 0 : ae.groups) && v.extra.groups.length || Array.isArray((ue = v == null ? void 0 : v.extra) == null ? void 0 : ue.groupNodes) && v.extra.groupNodes.length || Array.isArray((B = v == null ? void 0 : v.extra) == null ? void 0 : B.group_nodes) && v.extra.group_nodes.length || 0;
return {
- nodes: O,
+ nodes: F,
links: D,
groups: q,
- source: (Q = j == null ? void 0 : j.extra) != null && Q.synthetic ? "Synthetic" : "Embedded"
+ source: (Q = v == null ? void 0 : v.extra) != null && Q.synthetic ? "Synthetic" : "Embedded"
};
- }), T = ze(() => {
- var O;
- const j = String(((O = c.value) == null ? void 0 : O.size) || "comfortable");
- return o.find((D) => D.key === j) || o[1];
- }), v = ze(() => `${T.value.height}px`), w = ze(() => [
+ }), K = ze(() => {
+ var F;
+ const v = String(((F = c.value) == null ? void 0 : F.size) || "comfortable");
+ return o.find((D) => D.key === v) || o[1];
+ }), j = ze(() => `${K.value.height}px`), w = ze(() => [
{ key: "showNodeLabels", label: "Node Labels", iconClass: "pi pi-tag" },
{ key: "nodeColors", label: "Node Colors", iconClass: "pi pi-palette" },
{ key: "showLinks", label: "Show Links", iconClass: "pi pi-share-alt" },
@@ -40335,192 +40372,192 @@ const tv = {
{ key: "showViewport", label: "Show Viewport", iconClass: "pi pi-window-maximize" }
]);
function R() {
- const j = r.value, O = W.value;
- if (!j || !O) return;
- const D = Math.max(1, j.clientWidth || 320), q = Math.max(1, j.clientHeight || 120), ee = Math.max(1, Math.min(2, window.devicePixelRatio || 1));
- j.width = Math.floor(D * ee), j.height = Math.floor(q * ee);
- const ce = j.getContext("2d");
- ce && ce.setTransform(ee, 0, 0, ee, 0, 0), y = $j(j, O, {
+ const v = r.value, F = Z.value;
+ if (!v || !F) return;
+ const D = Math.max(1, v.clientWidth || 320), q = Math.max(1, v.clientHeight || 120), ee = Math.max(1, Math.min(2, window.devicePixelRatio || 1));
+ v.width = Math.floor(D * ee), v.height = Math.floor(q * ee);
+ const ae = v.getContext("2d");
+ ae && ae.setTransform(ee, 0, 0, ee, 0, 0), A = $j(v, F, {
...c.value,
view: s.value
- }) || null, C(y == null ? void 0 : y.resolvedView);
+ }) || null, W(A == null ? void 0 : A.resolvedView);
}
- function Y() {
- const j = (window == null ? void 0 : window.app) || null, O = (j == null ? void 0 : j.canvas) || null, D = (O == null ? void 0 : O.ds) || null, q = (O == null ? void 0 : O.canvas) || (O == null ? void 0 : O.el) || null;
- if (!O || !D || !q) return null;
- const ee = Number(D == null ? void 0 : D.scale), ce = Number((q == null ? void 0 : q.width) || (q == null ? void 0 : q.clientWidth) || 0), ue = Number((q == null ? void 0 : q.height) || (q == null ? void 0 : q.clientHeight) || 0);
- return !Number.isFinite(ee) || ee <= 0 || !(ce > 0) || !(ue > 0) ? null : { app: j, graphCanvas: O, ds: D, canvas: q, scale: ee, width: ce, height: ue };
+ function V() {
+ const v = (window == null ? void 0 : window.app) || null, F = (v == null ? void 0 : v.canvas) || null, D = (F == null ? void 0 : F.ds) || null, q = (F == null ? void 0 : F.canvas) || (F == null ? void 0 : F.el) || null;
+ if (!F || !D || !q) return null;
+ const ee = Number(D == null ? void 0 : D.scale), ae = Number((q == null ? void 0 : q.width) || (q == null ? void 0 : q.clientWidth) || 0), ue = Number((q == null ? void 0 : q.height) || (q == null ? void 0 : q.clientHeight) || 0);
+ return !Number.isFinite(ee) || ee <= 0 || !(ae > 0) || !(ue > 0) ? null : { app: v, graphCanvas: F, ds: D, canvas: q, scale: ee, width: ae, height: ue };
}
- function F(j, O, D) {
- if (Array.isArray(j == null ? void 0 : j.offset)) {
- j.offset[0] = O, j.offset[1] = D;
+ function O(v, F, D) {
+ if (Array.isArray(v == null ? void 0 : v.offset)) {
+ v.offset[0] = F, v.offset[1] = D;
return;
}
- j != null && j.offset && typeof j.offset == "object" && (j.offset.x = O, j.offset.y = D);
+ v != null && v.offset && typeof v.offset == "object" && (v.offset.x = F, v.offset.y = D);
}
- function N(j, O) {
- var D, q, ee, ce, ue;
+ function k(v, F) {
+ var D, q, ee, ae, ue;
try {
- (D = O == null ? void 0 : O.setDirty) == null || D.call(O, !0, !0);
- } catch (U) {
- (q = console.debug) == null || q.call(console, U);
+ (D = F == null ? void 0 : F.setDirty) == null || D.call(F, !0, !0);
+ } catch (B) {
+ (q = console.debug) == null || q.call(console, B);
}
try {
- (ce = (ee = j == null ? void 0 : j.graph) == null ? void 0 : ee.setDirtyCanvas) == null || ce.call(ee, !0, !0);
- } catch (U) {
- (ue = console.debug) == null || ue.call(console, U);
+ (ae = (ee = v == null ? void 0 : v.graph) == null ? void 0 : ee.setDirtyCanvas) == null || ae.call(ee, !0, !0);
+ } catch (B) {
+ (ue = console.debug) == null || ue.call(console, B);
}
}
- function V(j) {
- if (!j) return;
- const O = Y();
- if (!O) return;
- const D = Math.max(1, Number(window.devicePixelRatio) || 1), q = -Number(j.x) + O.width * 0.5 / (O.scale * D), ee = -Number(j.y) + O.height * 0.5 / (O.scale * D);
- !Number.isFinite(q) || !Number.isFinite(ee) || (F(O.ds, q, ee), N(O.app, O.graphCanvas));
+ function Y(v) {
+ if (!v) return;
+ const F = V();
+ if (!F) return;
+ const D = Math.max(1, Number(window.devicePixelRatio) || 1), q = -Number(v.x) + F.width * 0.5 / (F.scale * D), ee = -Number(v.y) + F.height * 0.5 / (F.scale * D);
+ !Number.isFinite(q) || !Number.isFinite(ee) || (O(F.ds, q, ee), k(F.app, F.graphCanvas));
}
- function k(j) {
+ function N(v) {
var q;
- const O = r.value;
- if (!O) return null;
- const D = (q = O.getBoundingClientRect) == null ? void 0 : q.call(O);
+ const F = r.value;
+ if (!F) return null;
+ const D = (q = F.getBoundingClientRect) == null ? void 0 : q.call(F);
return D ? {
- x: Number(j == null ? void 0 : j.clientX) - D.left,
- y: Number(j == null ? void 0 : j.clientY) - D.top
+ x: Number(v == null ? void 0 : v.clientX) - D.left,
+ y: Number(v == null ? void 0 : v.clientY) - D.top
} : null;
}
- function K(j) {
- const O = k(j);
- return !O || !(y != null && y.canvasToWorld) ? null : {
- local: O,
- world: y.canvasToWorld(O.x, O.y)
+ function U(v) {
+ const F = N(v);
+ return !F || !(A != null && A.canvasToWorld) ? null : {
+ local: F,
+ world: A.canvasToWorld(F.x, F.y)
};
}
- function z(j) {
- const O = k(j), D = O && (y != null && y.hitTestNode) ? y.hitTestNode(O.x, O.y) : null, q = (D == null ? void 0 : D.id) !== null && (D == null ? void 0 : D.id) !== void 0 ? String(D.id) : null, ee = s.value.hoveredNodeId !== null && s.value.hoveredNodeId !== void 0 ? String(s.value.hoveredNodeId) : null;
+ function z(v) {
+ const F = N(v), D = F && (A != null && A.hitTestNode) ? A.hitTestNode(F.x, F.y) : null, q = (D == null ? void 0 : D.id) !== null && (D == null ? void 0 : D.id) !== void 0 ? String(D.id) : null, ee = s.value.hoveredNodeId !== null && s.value.hoveredNodeId !== void 0 ? String(s.value.hoveredNodeId) : null;
u.value = (D == null ? void 0 : D.label) || "", q !== ee && (s.value = {
...s.value,
hoveredNodeId: q
}, R());
}
- function B(j) {
- j && (V(j), s.value = {
+ function T(v) {
+ v && (Y(v), s.value = {
...s.value,
- centerX: Number(j.x),
- centerY: Number(j.y)
+ centerX: Number(v.x),
+ centerY: Number(v.y)
}, R());
}
- function J(j) {
- var D, q, ee, ce;
- if (Number((j == null ? void 0 : j.button) ?? 0) !== 0) return;
- const O = K(j);
- O && (S = j.pointerId ?? 1, d.value = "grabbing", (q = (D = r.value) == null ? void 0 : D.setPointerCapture) == null || q.call(D, S), B(O.world), z(j), (ee = j.preventDefault) == null || ee.call(j), (ce = j.stopPropagation) == null || ce.call(j));
+ function J(v) {
+ var D, q, ee, ae;
+ if (Number((v == null ? void 0 : v.button) ?? 0) !== 0) return;
+ const F = U(v);
+ F && (h = v.pointerId ?? 1, d.value = "grabbing", (q = (D = r.value) == null ? void 0 : D.setPointerCapture) == null || q.call(D, h), T(F.world), z(v), (ee = v.preventDefault) == null || ee.call(v), (ae = v.stopPropagation) == null || ae.call(v));
}
- function P(j) {
- var O, D;
- if (S !== null && j.pointerId === S) {
- const q = K(j);
- q && B(q.world), (O = j.preventDefault) == null || O.call(j), (D = j.stopPropagation) == null || D.call(j);
+ function P(v) {
+ var F, D;
+ if (h !== null && v.pointerId === h) {
+ const q = U(v);
+ q && T(q.world), (F = v.preventDefault) == null || F.call(v), (D = v.stopPropagation) == null || D.call(v);
return;
}
- z(j);
+ z(v);
}
- function H(j) {
- var O, D;
- S !== null && (j == null ? void 0 : j.pointerId) === S && ((D = (O = r.value) == null ? void 0 : O.releasePointerCapture) == null || D.call(O, S), S = null, d.value = "crosshair"), (j == null ? void 0 : j.type) === "pointerleave" && (u.value = "", s.value.hoveredNodeId !== null && (s.value = {
+ function E(v) {
+ var F, D;
+ h !== null && (v == null ? void 0 : v.pointerId) === h && ((D = (F = r.value) == null ? void 0 : F.releasePointerCapture) == null || D.call(F, h), h = null, d.value = "crosshair"), (v == null ? void 0 : v.type) === "pointerleave" && (u.value = "", s.value.hoveredNodeId !== null && (s.value = {
...s.value,
hoveredNodeId: null
}, R()));
}
- function $(j) {
- var le, de, se, ge, je, Se;
- const O = K(j), D = y == null ? void 0 : y.resolvedView;
- if (!O || !D) return;
- const q = Z(Number(j == null ? void 0 : j.deltaY) || 0, -240, 240), ee = Math.exp(-q * 25e-4), ce = Z(
+ function $(v) {
+ var le, ce, de, ge, Le, xe;
+ const F = U(v), D = A == null ? void 0 : A.resolvedView;
+ if (!F || !D) return;
+ const q = S(Number(v == null ? void 0 : v.deltaY) || 0, -240, 240), ee = Math.exp(-q * 25e-4), ae = S(
(Number(s.value.zoom) || 1) * ee,
zm,
Jm
);
- if (Math.abs(ce - (Number(s.value.zoom) || 1)) < 1e-3) {
- (le = j.preventDefault) == null || le.call(j), (de = j.stopPropagation) == null || de.call(j);
+ if (Math.abs(ae - (Number(s.value.zoom) || 1)) < 1e-3) {
+ (le = v.preventDefault) == null || le.call(v), (ce = v.stopPropagation) == null || ce.call(v);
return;
}
- const ue = Math.max(1, Number(((se = y == null ? void 0 : y.bounds) == null ? void 0 : se.width) || 1) / ce), U = Math.max(1, Number(((ge = y == null ? void 0 : y.bounds) == null ? void 0 : ge.height) || 1) / ce), Q = Z(
- (Number(O.world.x) - Number(D.viewMinX || 0)) / Math.max(1, Number(D.visibleW || 1)),
+ const ue = Math.max(1, Number(((de = A == null ? void 0 : A.bounds) == null ? void 0 : de.width) || 1) / ae), B = Math.max(1, Number(((ge = A == null ? void 0 : A.bounds) == null ? void 0 : ge.height) || 1) / ae), Q = S(
+ (Number(F.world.x) - Number(D.viewMinX || 0)) / Math.max(1, Number(D.visibleW || 1)),
0,
1
- ), _ = Z(
- (Number(O.world.y) - Number(D.viewMinY || 0)) / Math.max(1, Number(D.visibleH || 1)),
+ ), _ = S(
+ (Number(F.world.y) - Number(D.viewMinY || 0)) / Math.max(1, Number(D.visibleH || 1)),
0,
1
);
s.value = {
...s.value,
- zoom: ce,
- centerX: Number(O.world.x) + (0.5 - Q) * ue,
- centerY: Number(O.world.y) + (0.5 - _) * U
- }, R(), z(j), (je = j.preventDefault) == null || je.call(j), (Se = j.stopPropagation) == null || Se.call(j);
+ zoom: ae,
+ centerX: Number(F.world.x) + (0.5 - Q) * ue,
+ centerY: Number(F.world.y) + (0.5 - _) * B
+ }, R(), z(v), (Le = v.preventDefault) == null || Le.call(v), (xe = v.stopPropagation) == null || xe.call(v);
}
- function E(j) {
+ function H(v) {
var D, q;
- const O = K(j);
- g(), O && V(O.world), R(), (D = j.preventDefault) == null || D.call(j), (q = j.stopPropagation) == null || q.call(j);
+ const F = U(v);
+ g(), F && Y(F.world), R(), (D = v.preventDefault) == null || D.call(v), (q = v.stopPropagation) == null || q.call(v);
}
- function oe(j) {
- var O;
+ function ne(v) {
+ var F;
c.value = {
...c.value,
- [j]: !((O = c.value) != null && O[j])
+ [v]: !((F = c.value) != null && F[v])
}, G(c.value);
}
- function M(j) {
- o.some((O) => O.key === j) && (c.value = {
+ function M(v) {
+ o.some((F) => F.key === v) && (c.value = {
...c.value,
- size: j
+ size: v
}, G(c.value));
}
return Dn(() => {
r.value && typeof ResizeObserver == "function" && (I = new ResizeObserver(() => R()), I.observe(r.value)), R();
- }), cn(W, () => {
+ }), dn(Z, () => {
g(), R();
- }, { flush: "post" }), cn(c, () => {
+ }, { flush: "post" }), dn(c, () => {
R();
- }, { deep: !0, flush: "post" }), cn(l, () => {
+ }, { deep: !0, flush: "post" }), dn(l, () => {
R();
}, { flush: "post" }), xr(() => {
- var j, O;
+ var v, F;
try {
- (j = I == null ? void 0 : I.disconnect) == null || j.call(I);
+ (v = I == null ? void 0 : I.disconnect) == null || v.call(I);
} catch (D) {
- (O = console.debug) == null || O.call(console, D);
+ (F = console.debug) == null || F.call(console, D);
}
- I = null, S = null;
- }), (j, O) => W.value ? (be(), Ce("div", tv, [
- O[7] || (O[7] = ie("div", { style: { "font-size": "13px", "font-weight": "600", color: "var(--fg-color, #eaeaea)", "margin-bottom": "12px", "text-transform": "uppercase", "letter-spacing": "0.5px" } }, " ComfyUI Workflow ", -1)),
- ie("div", nv, [
- ie("div", iv, Ye(f.value), 1),
- x.value.source ? (be(), Ce("div", ov, Ye(x.value.source), 1)) : ft("", !0)
+ I = null, h = null;
+ }), (v, F) => Z.value ? (be(), Ze("div", tv, [
+ F[7] || (F[7] = te("div", { style: { "font-size": "13px", "font-weight": "600", color: "var(--fg-color, #eaeaea)", "margin-bottom": "12px", "text-transform": "uppercase", "letter-spacing": "0.5px" } }, " ComfyUI Workflow ", -1)),
+ te("div", nv, [
+ te("div", iv, Ne(f.value), 1),
+ x.value.source ? (be(), Ze("div", ov, Ne(x.value.source), 1)) : yt("", !0)
]),
- ie("div", rv, [
- ie("div", lv, [
- O[2] || (O[2] = ie("div", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.55)", "text-transform": "uppercase", "letter-spacing": "0.4px" } }, "Nodes", -1)),
- ie("div", av, Ye(x.value.nodes), 1)
+ te("div", rv, [
+ te("div", lv, [
+ F[2] || (F[2] = te("div", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.55)", "text-transform": "uppercase", "letter-spacing": "0.4px" } }, "Nodes", -1)),
+ te("div", av, Ne(x.value.nodes), 1)
]),
- ie("div", cv, [
- O[3] || (O[3] = ie("div", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.55)", "text-transform": "uppercase", "letter-spacing": "0.4px" } }, "Links", -1)),
- ie("div", sv, Ye(x.value.links), 1)
+ te("div", cv, [
+ F[3] || (F[3] = te("div", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.55)", "text-transform": "uppercase", "letter-spacing": "0.4px" } }, "Links", -1)),
+ te("div", sv, Ne(x.value.links), 1)
]),
- ie("div", dv, [
- O[4] || (O[4] = ie("div", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.55)", "text-transform": "uppercase", "letter-spacing": "0.4px" } }, "Groups", -1)),
- ie("div", uv, Ye(x.value.groups), 1)
+ te("div", dv, [
+ F[4] || (F[4] = te("div", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.55)", "text-transform": "uppercase", "letter-spacing": "0.4px" } }, "Groups", -1)),
+ te("div", uv, Ne(x.value.groups), 1)
])
]),
- ie("div", mv, [
- ie("div", gv, [
- (be(!0), Ce(Nt, null, Cn(xe(o), (D) => (be(), Ce("button", {
+ te("div", mv, [
+ te("div", gv, [
+ (be(!0), Ze(Nt, null, Zn(ve(o), (D) => (be(), Ze("button", {
key: D.key,
type: "button",
title: `${D.label} minimap`,
- style: Lt({
+ style: vt({
appearance: "none",
border: c.value.size === D.key ? "1px solid rgba(33,150,243,0.55)" : "1px solid rgba(255,255,255,0.12)",
borderRadius: "999px",
@@ -40532,25 +40569,25 @@ const tv = {
cursor: "pointer"
}),
onClick: (q) => M(D.key)
- }, Ye(D.label), 13, Iv))), 128))
+ }, Ne(D.label), 13, Iv))), 128))
]),
- ie("button", {
+ te("button", {
type: "button",
class: "mjr-btn mjr-icon-btn",
- title: xe(m)("tooltip.minimapSettings", "Minimap settings"),
+ title: ve(m)("tooltip.minimapSettings", "Minimap settings"),
style: { width: "28px", height: "28px", "border-radius": "8px", display: "inline-flex", "align-items": "center", "justify-content": "center", border: "1px solid var(--mjr-border, rgba(255,255,255,0.12))", background: "rgba(255,255,255,0.06)", color: "rgba(255,255,255,0.9)", cursor: "pointer" },
- onClick: O[0] || (O[0] = (D) => l.value = !l.value)
- }, [...O[5] || (O[5] = [
- ie("i", { class: "pi pi-sliders-h" }, null, -1)
+ onClick: F[0] || (F[0] = (D) => l.value = !l.value)
+ }, [...F[5] || (F[5] = [
+ te("i", { class: "pi pi-sliders-h" }, null, -1)
])], 8, bv)
]),
- l.value ? (be(), Ce("div", pv, [
- (be(!0), Ce(Nt, null, Cn(w.value, (D) => {
- var q, ee, ce, ue, U, Q;
- return be(), Ce("button", {
+ l.value ? (be(), Ze("div", pv, [
+ (be(!0), Ze(Nt, null, Zn(w.value, (D) => {
+ var q, ee, ae, ue, B, Q;
+ return be(), Ze("button", {
key: D.key,
type: "button",
- style: Lt({
+ style: vt({
display: "flex",
alignItems: "center",
gap: "10px",
@@ -40562,44 +40599,44 @@ const tv = {
color: "rgba(255,255,255,0.92)",
textAlign: "left"
}),
- onClick: (_) => oe(D.key)
+ onClick: (_) => ne(D.key)
}, [
- ie("span", {
- style: Lt({
+ te("span", {
+ style: vt({
width: "22px",
height: "22px",
borderRadius: "6px",
display: "inline-flex",
alignItems: "center",
justifyContent: "center",
- background: (ce = c.value) != null && ce[D.key] ? "rgba(76,175,80,0.95)" : "rgba(255,255,255,0.08)",
+ background: (ae = c.value) != null && ae[D.key] ? "rgba(76,175,80,0.95)" : "rgba(255,255,255,0.08)",
border: (ue = c.value) != null && ue[D.key] ? "1px solid rgba(76,175,80,0.35)" : "1px solid rgba(255,255,255,0.12)",
flex: "0 0 auto"
})
}, [
- ie("i", {
+ te("i", {
class: "pi pi-check",
- style: Lt({ fontSize: "12px", opacity: (U = c.value) != null && U[D.key] ? "1" : "0" })
+ style: vt({ fontSize: "12px", opacity: (B = c.value) != null && B[D.key] ? "1" : "0" })
}, null, 4)
], 4),
- ie("i", {
- class: Zn(D.iconClass),
+ te("i", {
+ class: An(D.iconClass),
style: { "font-size": "18px", opacity: "0.9", width: "18px" }
}, null, 2),
- ie("div", fv, [
- ie("div", hv, Ye(D.label), 1),
- ie("div", Cv, Ye((Q = c.value) != null && Q[D.key] ? "On" : "Off"), 1)
+ te("div", fv, [
+ te("div", Cv, Ne(D.label), 1),
+ te("div", hv, Ne((Q = c.value) != null && Q[D.key] ? "On" : "Off"), 1)
])
], 12, yv);
}), 128))
- ])) : ft("", !0),
- ie("div", Zv, [
- ie("canvas", {
+ ])) : yt("", !0),
+ te("div", Zv, [
+ te("canvas", {
ref_key: "canvasRef",
ref: r,
- style: Lt({
+ style: vt({
width: "100%",
- height: v.value,
+ height: j.value,
cursor: d.value,
touchAction: "none",
borderRadius: "10px",
@@ -40610,31 +40647,31 @@ const tv = {
}),
onPointerdown: J,
onPointermove: P,
- onPointerup: H,
- onPointercancel: H,
- onPointerleave: H,
+ onPointerup: E,
+ onPointercancel: E,
+ onPointerleave: E,
onWheel: $,
- onDblclick: E
+ onDblclick: H
}, null, 36)
]),
- ie("div", Av, [
- ie("span", null, Ye(u.value || "Click/drag to navigate · wheel to zoom"), 1),
- ie("span", null, Ye(Math.round((s.value.zoom || 1) * 100)) + "% · " + Ye(T.value.label), 1)
+ te("div", Av, [
+ te("span", null, Ne(u.value || "Click/drag to navigate · wheel to zoom"), 1),
+ te("span", null, Ne(Math.round((s.value.zoom || 1) * 100)) + "% · " + Ne(K.value.label), 1)
]),
- ie("details", {
+ te("details", {
open: a.value,
style: { "margin-top": "10px" },
- onToggle: O[1] || (O[1] = (D) => a.value = D.target.open)
+ onToggle: F[1] || (F[1] = (D) => a.value = D.target.open)
}, [
- O[6] || (O[6] = ie("summary", { style: { cursor: "pointer", color: "var(--mjr-muted, rgba(255,255,255,0.65))", "font-size": "12px", "user-select": "none" } }, " Show raw JSON ", -1)),
- ie("pre", wv, Ye(X.value), 1)
+ F[6] || (F[6] = te("summary", { style: { cursor: "pointer", color: "var(--mjr-muted, rgba(255,255,255,0.65))", "font-size": "12px", "user-select": "none" } }, " Show raw JSON ", -1)),
+ te("pre", wv, Ne(X.value), 1)
], 40, Wv)
- ])) : ft("", !0);
+ ])) : yt("", !0);
}
-}, Sv = {
+}, Gv = {
class: "mjr-sidebar-section",
style: { background: "rgba(255, 255, 255, 0.03)", border: "1px solid var(--mjr-border, rgba(255, 255, 255, 0.12))", "border-radius": "8px", padding: "10px" }
-}, Gv = { style: { display: "flex", "flex-direction": "column", gap: "6px" } }, xv = { style: { "font-size": "12px", opacity: "0.68", "min-width": "92px" } }, jv = ["title"], vv = {
+}, Sv = { style: { display: "flex", "flex-direction": "column", gap: "6px" } }, xv = { style: { "font-size": "12px", opacity: "0.68", "min-width": "92px" } }, jv = ["title"], vv = {
__name: "SidebarFolderSection",
props: {
asset: { type: Object, required: !0 }
@@ -40651,32 +40688,32 @@ const tv = {
return `${a.toFixed(c > 0 ? 1 : 0)} ${l[c]}`;
}
const i = ze(() => {
- const o = t.asset || {}, r = o.folder_info || o.folderInfo || {}, l = String(r.path || o.filepath || o.subfolder || ""), a = String(r.name || o.filename || "").trim(), c = Number(r.files ?? 0), s = Number(r.folders ?? 0), d = Number(r.size ?? 0), u = Number(r.mtime ?? o.mtime ?? 0), I = Number(r.ctime ?? 0), y = !!r.truncated, S = [
+ const o = t.asset || {}, r = o.folder_info || o.folderInfo || {}, l = String(r.path || o.filepath || o.subfolder || ""), a = String(r.name || o.filename || "").trim(), c = Number(r.files ?? 0), s = Number(r.folders ?? 0), d = Number(r.size ?? 0), u = Number(r.mtime ?? o.mtime ?? 0), I = Number(r.ctime ?? 0), A = !!r.truncated, h = [
{ label: "Name", value: a || "-" },
{ label: "Path", value: l || "-" },
{ label: "Folders", value: Number.isFinite(s) ? String(s) : "-" },
{ label: "Files", value: Number.isFinite(c) ? String(c) : "-" },
{ label: "Size", value: n(d) }
];
- return I > 0 && S.push({ label: "Created", value: `${za(I) || "-"} ${Ja(I) || ""}`.trim() }), u > 0 && S.push({ label: "Modified", value: `${za(u) || "-"} ${Ja(u) || ""}`.trim() }), y && S.push({ label: "Note", value: "Scan was truncated for performance", valueStyle: "color:#FFB74D;font-weight:600;" }), S;
+ return I > 0 && h.push({ label: "Created", value: `${Ja(I) || "-"} ${Ta(I) || ""}`.trim() }), u > 0 && h.push({ label: "Modified", value: `${Ja(u) || "-"} ${Ta(u) || ""}`.trim() }), A && h.push({ label: "Note", value: "Scan was truncated for performance", valueStyle: "color:#FFB74D;font-weight:600;" }), h;
});
- return (o, r) => (be(), Ce("div", Sv, [
- r[0] || (r[0] = ie("div", { style: { "font-size": "12px", "font-weight": "700", color: "#26a69a", "margin-bottom": "8px", "text-transform": "uppercase", "letter-spacing": "0.4px" } }, " Folder Details ", -1)),
- ie("div", Gv, [
- (be(!0), Ce(Nt, null, Cn(i.value, (l) => (be(), Ce("div", {
+ return (o, r) => (be(), Ze("div", Gv, [
+ r[0] || (r[0] = te("div", { style: { "font-size": "12px", "font-weight": "700", color: "#26a69a", "margin-bottom": "8px", "text-transform": "uppercase", "letter-spacing": "0.4px" } }, " Folder Details ", -1)),
+ te("div", Sv, [
+ (be(!0), Ze(Nt, null, Zn(i.value, (l) => (be(), Ze("div", {
key: l.label,
style: { display: "flex", gap: "10px", "align-items": "flex-start", "justify-content": "space-between" }
}, [
- ie("div", xv, Ye(l.label), 1),
- ie("div", {
- style: Lt(l.valueStyle || "font-size: 12px; text-align: right; word-break: break-word"),
+ te("div", xv, Ne(l.label), 1),
+ te("div", {
+ style: vt(l.valueStyle || "font-size: 12px; text-align: right; word-break: break-word"),
title: String(l.value || "")
- }, Ye(l.value), 13, jv)
+ }, Ne(l.value), 13, jv)
]))), 128))
])
]));
}
-}, Lv = ["aria-busy", "aria-disabled", "aria-label", "aria-valuenow", "tabindex"], Vv = ["aria-label", "aria-pressed", "disabled", "onClick", "onMouseenter"], Yv = {
+}, Lv = ["aria-busy", "aria-disabled", "aria-label", "aria-valuenow", "tabindex"], Yv = ["aria-label", "aria-pressed", "disabled", "onClick", "onMouseenter"], Vv = {
__name: "RatingEditor",
props: {
asset: {
@@ -40698,95 +40735,95 @@ const tv = {
function n(X) {
return Math.max(0, Math.min(5, Number(X) || 0));
}
- const i = e, o = t, r = n(((f = i.asset) == null ? void 0 : f.rating) ?? i.modelValue), l = Ae(r), a = Ae(0), c = Ae(!1);
+ const i = e, o = t, r = n(((f = i.asset) == null ? void 0 : f.rating) ?? i.modelValue), l = We(r), a = We(0), c = We(!1);
let s = r, d = r, u = null;
const I = ze(
() => a.value > 0 ? a.value : l.value
- ), y = (X) => X <= I.value ? "#FFD45A" : "#555", S = (X) => X <= I.value ? "scale(1.1)" : "scale(1)", Z = (X) => Math.min(100 * 2 ** Math.max(0, X - 1), 2e3), C = (X) => new Promise((x) => setTimeout(x, X));
+ ), A = (X) => X <= I.value ? "#FFD45A" : "#555", h = (X) => X <= I.value ? "scale(1.1)" : "scale(1)", S = (X) => Math.min(100 * 2 ** Math.max(0, X - 1), 2e3), W = (X) => new Promise((x) => setTimeout(x, X));
function g(X) {
if (c.value) return;
const x = n(X);
s = x, d = x, x !== l.value && (l.value = x);
}
- function A(X = null) {
- l.value = s, d = s, o("update:modelValue", s), X && Ze(X, "error");
+ function y(X = null) {
+ l.value = s, d = s, o("update:modelValue", s), X && Ae(X, "error");
}
async function p() {
- var x, T, v, w, R;
+ var x, K, j, w, R;
if (c.value) return;
c.value = !0;
const X = Date.now();
try {
- let Y = 0;
- for (; Y < 10; ) {
+ let V = 0;
+ for (; V < 10; ) {
if (Date.now() - X > 3e4) {
- A(m("toast.ratingUpdateFailed", "Rating update failed"));
+ y(m("toast.ratingUpdateFailed", "Rating update failed"));
break;
}
- Y > 0 && await C(Z(Y)), Y += 1;
- const F = n(d), N = typeof AbortController < "u" ? new AbortController() : null;
- u = N;
- let V = null;
+ V > 0 && await W(S(V)), V += 1;
+ const O = n(d), k = typeof AbortController < "u" ? new AbortController() : null;
+ u = k;
+ let Y = null;
try {
- V = await Ho(i.asset, F, N ? { signal: N.signal } : {});
- } catch (k) {
- console.error("Failed to update rating:", k);
+ Y = await Eo(i.asset, O, k ? { signal: k.signal } : {});
+ } catch (N) {
+ console.error("Failed to update rating:", N);
}
- if (!(V != null && V.ok)) {
- if ((V == null ? void 0 : V.code) === "ABORTED" && d !== F)
+ if (!(Y != null && Y.ok)) {
+ if ((Y == null ? void 0 : Y.code) === "ABORTED" && d !== O)
continue;
- A(
- (V == null ? void 0 : V.error) || m("toast.ratingUpdateFailed", "Rating update failed")
+ y(
+ (Y == null ? void 0 : Y.error) || m("toast.ratingUpdateFailed", "Rating update failed")
);
break;
}
try {
- const k = ((x = V == null ? void 0 : V.data) == null ? void 0 : x.asset_id) ?? null;
- k != null && !fi(i.asset.id) && (i.asset.id = k);
- } catch (k) {
- (T = console.debug) == null || T.call(console, k);
+ const N = ((x = Y == null ? void 0 : Y.data) == null ? void 0 : x.asset_id) ?? null;
+ N != null && !fi(i.asset.id) && (i.asset.id = N);
+ } catch (N) {
+ (K = console.debug) == null || K.call(console, N);
}
- s = F, l.value = F;
+ s = O, l.value = O;
try {
- i.asset.rating = F;
- } catch (k) {
- (v = console.debug) == null || v.call(console, k);
+ i.asset.rating = O;
+ } catch (N) {
+ (j = console.debug) == null || j.call(console, N);
}
- if (o("update:modelValue", F), o("rating-change", { assetId: (w = i.asset) == null ? void 0 : w.id, rating: F }), oi(Fi, {
+ if (o("update:modelValue", O), o("rating-change", { assetId: (w = i.asset) == null ? void 0 : w.id, rating: O }), oi(Oi, {
assetId: ((R = i.asset) == null ? void 0 : R.id) != null ? String(i.asset.id) : "",
- rating: F
- }), d === F) {
- Ze(m("toast.ratingSetN", { n: F }), "success", 1e3);
+ rating: O
+ }), d === O) {
+ Ae(m("toast.ratingSetN", { n: O }), "success", 1e3);
break;
}
}
- Y >= 10 && A(m("toast.ratingUpdateFailed", "Rating update failed"));
+ V >= 10 && y(m("toast.ratingUpdateFailed", "Rating update failed"));
} finally {
u = null, c.value = !1;
}
}
function b(X) {
- var T, v;
+ var K, j;
if (i.disabled) return;
const x = n(X);
d = x, l.value = x, a.value = 0, o("update:modelValue", x);
try {
- (T = u == null ? void 0 : u.abort) == null || T.call(u);
+ (K = u == null ? void 0 : u.abort) == null || K.call(u);
} catch (w) {
- (v = console.debug) == null || v.call(console, w);
+ (j = console.debug) == null || j.call(console, w);
}
p();
}
function L(X) {
b(X);
}
- function h(X) {
+ function C(X) {
i.disabled || (a.value = X);
}
function G() {
a.value = 0;
}
- function W(X) {
+ function Z(X) {
if (i.disabled) return;
let x = null;
switch (X.key) {
@@ -40813,15 +40850,15 @@ const tv = {
var X, x;
try {
(X = u == null ? void 0 : u.abort) == null || X.call(u);
- } catch (T) {
- (x = console.debug) == null || x.call(console, T);
+ } catch (K) {
+ (x = console.debug) == null || x.call(console, K);
}
- }), cn(
+ }), dn(
() => i.modelValue,
(X) => {
g(X);
}
- ), cn(
+ ), dn(
() => {
var X;
return (X = i.asset) == null ? void 0 : X.rating;
@@ -40829,9 +40866,9 @@ const tv = {
(X) => {
g(X);
}
- ), (X, x) => (be(), Ce("div", {
+ ), (X, x) => (be(), Ze("div", {
class: "mjr-rating-editor",
- style: Lt({
+ style: vt({
display: "inline-flex",
gap: "2px",
pointerEvents: e.disabled ? "none" : "auto",
@@ -40840,20 +40877,20 @@ const tv = {
"aria-busy": c.value,
"aria-disabled": e.disabled,
role: "slider",
- "aria-label": xe(m)("rating.label", "Rating"),
+ "aria-label": ve(m)("rating.label", "Rating"),
"aria-valuemin": 0,
"aria-valuemax": 5,
"aria-valuenow": l.value,
tabindex: e.disabled ? -1 : 0,
- onKeydown: W
+ onKeydown: Z
}, [
- (be(), Ce(Nt, null, Cn(5, (T) => ie("button", {
- key: T,
+ (be(), Ze(Nt, null, Zn(5, (K) => te("button", {
+ key: K,
type: "button",
class: "mjr-rating-star",
- style: Lt({
- color: y(T),
- transform: S(T),
+ style: vt({
+ color: A(K),
+ transform: h(K),
fontSize: "16px",
background: "none",
border: "none",
@@ -40861,22 +40898,22 @@ const tv = {
padding: "0",
transition: "all 0.15s ease"
}),
- "aria-label": xe(m)("rating.setN", { n: T }),
- "aria-pressed": T <= l.value,
+ "aria-label": ve(m)("rating.setN", { n: K }),
+ "aria-pressed": K <= l.value,
disabled: e.disabled,
- onClick: (v) => L(T),
- onMouseenter: (v) => h(T),
+ onClick: (j) => L(K),
+ onMouseenter: (j) => C(K),
onMouseleave: G
- }, " ★ ", 44, Vv)), 64))
+ }, " ★ ", 44, Yv)), 64))
], 44, Lv));
}
-}, kv = /* @__PURE__ */ Vr(Yv, [["__scopeId", "data-v-6d012325"]]), Xv = {
+}, Xv = /* @__PURE__ */ Yr(Vv, [["__scopeId", "data-v-6d012325"]]), Nv = {
class: "mjr-sidebar-content",
style: { flex: "1", "overflow-y": "auto", padding: "10px 12px", display: "flex", "flex-direction": "column", gap: "16px" }
-}, Nv = {
+}, kv = {
class: "mjr-sidebar-rating-tags",
style: { display: "flex", "flex-direction": "column", gap: "10px" }
-}, Rv = { style: { display: "flex", "align-items": "center", gap: "8px" } }, Fv = { style: { display: "flex", "flex-direction": "column", gap: "4px" } }, Ov = {
+}, Rv = { style: { display: "flex", "align-items": "center", gap: "8px" } }, Ov = { style: { display: "flex", "flex-direction": "column", gap: "4px" } }, Fv = {
__name: "AssetSidebarContent",
props: {
asset: { type: Object, required: !0 },
@@ -40897,7 +40934,7 @@ const tv = {
}), a = ze(() => {
var s;
try {
- const d = Xn();
+ const d = kn();
return !!(((s = d == null ? void 0 : d.sidebar) == null ? void 0 : s.showPreviewThumb) ?? !0);
} catch {
return !0;
@@ -40907,46 +40944,46 @@ const tv = {
var s;
if (n.sidebar)
try {
- Ub(n.sidebar);
+ Bb(n.sidebar);
} catch (d) {
(s = console.debug) == null || s.call(console, d);
}
else
i("close");
}
- return (s, d) => (be(), Ce(Nt, null, [
- fn(Ox, {
+ return (s, d) => (be(), Ze(Nt, null, [
+ Cn(Fx, {
asset: e.asset,
onClose: c
}, null, 8, ["asset"]),
- ie("div", Xv, [
+ te("div", Nv, [
o.value ? (be(), Pi(vv, {
key: 0,
asset: e.asset
- }, null, 8, ["asset"])) : (be(), Ce(Nt, { key: 1 }, [
- fn(Hx, {
+ }, null, 8, ["asset"])) : (be(), Ze(Nt, { key: 1 }, [
+ Cn(Ex, {
asset: e.asset,
"show-preview-thumb": a.value
}, null, 8, ["asset", "show-preview-thumb"]),
- ie("div", Nv, [
- ie("div", Rv, [
- d[0] || (d[0] = ie("span", { style: { "font-size": "0.8em", opacity: "0.6", "min-width": "44px" } }, "Rating", -1)),
- fn(kv, {
+ te("div", kv, [
+ te("div", Rv, [
+ d[0] || (d[0] = te("span", { style: { "font-size": "0.8em", opacity: "0.6", "min-width": "44px" } }, "Rating", -1)),
+ Cn(Xv, {
asset: e.asset,
"model-value": r.value
}, null, 8, ["asset", "model-value"])
]),
- ie("div", Fv, [
- d[1] || (d[1] = ie("span", { style: { "font-size": "0.8em", opacity: "0.6" } }, "Tags", -1)),
- fn(gd, {
+ te("div", Ov, [
+ d[1] || (d[1] = te("span", { style: { "font-size": "0.8em", opacity: "0.6" } }, "Tags", -1)),
+ Cn(gd, {
asset: e.asset,
"model-value": l.value
}, null, 8, ["asset", "model-value"])
])
]),
- fn($x, { asset: e.asset }, null, 8, ["asset"]),
- fn(qj, { asset: e.asset }, null, 8, ["asset"]),
- fn(Mv, { asset: e.asset }, null, 8, ["asset"])
+ Cn($x, { asset: e.asset }, null, 8, ["asset"]),
+ Cn(qj, { asset: e.asset }, null, 8, ["asset"]),
+ Cn(Mv, { asset: e.asset }, null, 8, ["asset"])
], 64))
])
], 64));
@@ -40958,66 +40995,66 @@ const tv = {
}, Jv = {
__name: "SidebarSection",
setup(e, { expose: t }) {
- const n = Ae(null), { activeAsset: i, onUpdateCallback: o } = eM();
+ const n = We(null), { activeAsset: i, onUpdateCallback: o } = e2();
return Dn(() => {
- var I, y;
+ var I, A;
const r = n.value;
if (!r) return;
r.style.flex = "0 0 0px", r.style.width = "0", r.style.maxWidth = "0", r.style.minWidth = "0", r.style.overflow = "hidden", r.style.borderLeft = "none", r.style.borderRight = "none", r._requestSeq = 0, r._currentAsset = null, r._currentFullAsset = null, r._ratingTagsSection = null;
- const l = (S) => {
- var C, g, A;
- const Z = ((C = r._currentAsset) == null ? void 0 : C.id) ?? ((g = r._currentFullAsset) == null ? void 0 : g.id) ?? ((A = i.value) == null ? void 0 : A.id);
- return Z == null || S == null ? !1 : String(Z) === String(S);
- }, a = (S) => {
- var A;
- const Z = (S == null ? void 0 : S.detail) || {}, C = Z.assetId ?? Z.id ?? null, g = Number(Z.rating);
- if (!(!l(C) || !Number.isFinite(g))) {
- ys({ rating: g }, o.value);
+ const l = (h) => {
+ var W, g, y;
+ const S = ((W = r._currentAsset) == null ? void 0 : W.id) ?? ((g = r._currentFullAsset) == null ? void 0 : g.id) ?? ((y = i.value) == null ? void 0 : y.id);
+ return S == null || h == null ? !1 : String(S) === String(h);
+ }, a = (h) => {
+ var y;
+ const S = (h == null ? void 0 : h.detail) || {}, W = S.assetId ?? S.id ?? null, g = Number(S.rating);
+ if (!(!l(W) || !Number.isFinite(g))) {
+ fs({ rating: g }, o.value);
try {
r._currentAsset && (r._currentAsset.rating = g), r._currentFullAsset && (r._currentFullAsset.rating = g);
} catch (p) {
- (A = console.debug) == null || A.call(console, p);
+ (y = console.debug) == null || y.call(console, p);
}
}
- }, c = (S) => {
- var A;
- const Z = (S == null ? void 0 : S.detail) || {}, C = Z.assetId ?? Z.id ?? null, g = Array.isArray(Z.tags) ? Z.tags : null;
- if (!(!l(C) || !g)) {
- ys({ tags: g }, o.value);
+ }, c = (h) => {
+ var y;
+ const S = (h == null ? void 0 : h.detail) || {}, W = S.assetId ?? S.id ?? null, g = Array.isArray(S.tags) ? S.tags : null;
+ if (!(!l(W) || !g)) {
+ fs({ tags: g }, o.value);
try {
r._currentAsset && (r._currentAsset.tags = g), r._currentFullAsset && (r._currentFullAsset.tags = g);
} catch (p) {
- (A = console.debug) == null || A.call(console, p);
+ (y = console.debug) == null || y.call(console, p);
}
}
}, s = [], d = typeof AbortController < "u" ? new AbortController() : null;
r._mjrAbortController = d, r.dispose = () => {
- var S, Z, C;
+ var h, S, W;
try {
- (S = d == null ? void 0 : d.abort) == null || S.call(d);
+ (h = d == null ? void 0 : d.abort) == null || h.call(d);
} catch (g) {
- (Z = console.debug) == null || Z.call(console, g);
+ (S = console.debug) == null || S.call(console, g);
}
for (const g of s.splice(0))
try {
g == null || g();
- } catch (A) {
- (C = console.debug) == null || C.call(console, A);
+ } catch (y) {
+ (W = console.debug) == null || W.call(console, y);
}
}, r._dispose = r.dispose;
const u = d ? { signal: d.signal } : void 0;
try {
- window.addEventListener(Fi, a, u), window.addEventListener(Do, c, u);
- } catch (S) {
- (I = console.debug) == null || I.call(console, S);
+ window.addEventListener(Oi, a, u), window.addEventListener(Do, c, u);
+ } catch (h) {
+ (I = console.debug) == null || I.call(console, h);
try {
- window.addEventListener(Fi, a), window.addEventListener(Do, c), s.push(
- () => window.removeEventListener(Fi, a)
+ window.addEventListener(Oi, a), window.addEventListener(Do, c), s.push(
+ () => window.removeEventListener(Oi, a)
), s.push(
() => window.removeEventListener(Do, c)
);
- } catch (Z) {
- (y = console.debug) == null || y.call(console, Z);
+ } catch (S) {
+ (A = console.debug) == null || A.call(console, S);
}
}
}), _n(() => {
@@ -41034,37 +41071,37 @@ const tv = {
get sidebar() {
return n.value;
}
- }), (r, l) => (be(), Ce("div", {
+ }), (r, l) => (be(), Ze("div", {
ref_key: "sidebarEl",
ref: n,
class: "mjr-inline-sidebar",
"data-position": "right",
style: { display: "flex", "flex-direction": "column", background: "var(--mjr-surface-1,#262626)", transition: "width 140ms ease,max-width 140ms ease,flex-basis 140ms ease,border-color 140ms ease", contain: "layout paint style" }
}, [
- xe(i) ? (be(), Pi(Ov, {
+ ve(i) ? (be(), Pi(Fv, {
key: 0,
- asset: xe(i),
- "on-update": xe(o),
+ asset: ve(i),
+ "on-update": ve(o),
sidebar: n.value
- }, null, 8, ["asset", "on-update", "sidebar"])) : (be(), Ce("div", zv, Ye(xe(m)("sidebar.placeholderSelectAsset", "Select an asset to view details")), 1))
+ }, null, 8, ["asset", "on-update", "sidebar"])) : (be(), Ze("div", zv, Ne(ve(m)("sidebar.placeholderSelectAsset", "Select an asset to view details")), 1))
], 512));
}
-}, Tv = ["aria-label"], Bv = { class: "mjr-context-menu-title" }, Uv = { class: "mjr-context-menu-item-left" }, Kv = {
+}, Tv = ["aria-label"], Kv = { class: "mjr-context-menu-title" }, Bv = { class: "mjr-context-menu-item-left" }, Uv = {
key: 0,
class: "mjr-context-menu-note"
}, Dv = {
key: 1,
class: "mjr-context-menu-note is-error"
-}, Ev = {
+}, Hv = {
key: 2,
class: "mjr-context-menu-note"
-}, Hv = ["onClick"], qv = { class: "mjr-context-menu-item-left" }, Pv = {
+}, Ev = ["onClick"], qv = { class: "mjr-context-menu-item-left" }, Pv = {
key: 0,
class: "mjr-context-menu-hint"
}, Qv = {
__name: "AddToCollectionMenu",
setup(e) {
- const t = Ae(null), n = Ae(!1), i = Ae([]), o = Ae("");
+ const t = We(null), n = We(!1), i = We([]), o = We("");
let r = 0, l = null;
const a = ze(() => ({
position: "fixed",
@@ -41075,72 +41112,72 @@ const tv = {
})), c = ze(() => Tn.assets.length || 0), s = ze(
() => m("ctx.addToCollection", "Add to collection") + (c.value > 1 ? ` (${c.value})` : "")
);
- function d({ collectionName: A, selectedCount: p, addRes: b }) {
- var X, x, T;
- const L = Number(((X = b == null ? void 0 : b.data) == null ? void 0 : X.added) ?? 0) || 0, h = Number(((x = b == null ? void 0 : b.data) == null ? void 0 : x.skipped_existing) ?? 0) || 0, G = Number(((T = b == null ? void 0 : b.data) == null ? void 0 : T.skipped_duplicate) ?? 0) || 0, W = String(A || "").trim() || m("label.collection", "collection");
+ function d({ collectionName: y, selectedCount: p, addRes: b }) {
+ var X, x, K;
+ const L = Number(((X = b == null ? void 0 : b.data) == null ? void 0 : X.added) ?? 0) || 0, C = Number(((x = b == null ? void 0 : b.data) == null ? void 0 : x.skipped_existing) ?? 0) || 0, G = Number(((K = b == null ? void 0 : b.data) == null ? void 0 : K.skipped_duplicate) ?? 0) || 0, Z = String(y || "").trim() || m("label.collection", "collection");
let f = m("msg.collectionAdd.added", 'Added {added} item(s) to "{name}".', {
added: L,
- name: W
+ name: Z
});
- return h > 0 && (f += `
+ return C > 0 && (f += `
${m(
"msg.collectionAdd.skippedExisting",
"Skipped {count} item(s): already present in the collection.",
- { count: h }
+ { count: C }
)}`), G > 0 && (f += `
${m(
"msg.collectionAdd.skippedDuplicate",
"Ignored {count} duplicate(s) in selection.",
{ count: G }
- )}`), L === 0 && h > 0 && p > 0 && (f = m(
+ )}`), L === 0 && C > 0 && p > 0 && (f = m(
"msg.collectionAdd.noneAddedExisting",
'No new items added to "{name}" (all exist).',
- { name: W }
+ { name: Z }
)), f;
}
function u() {
- const A = t.value;
- if (!Tn.open || !A) return;
- const p = A.getBoundingClientRect(), b = Number(window.innerWidth || 0), L = Number(window.innerHeight || 0);
- let h = Number(Tn.x) || 0, G = Number(Tn.y) || 0;
- h + p.width > b && (h = Math.max(8, b - p.width - 10)), G + p.height > L && (G = Math.max(8, L - p.height - 10)), h < 8 && (h = 8), G < 8 && (G = 8), Tn.x = h, Tn.y = G;
+ const y = t.value;
+ if (!Tn.open || !y) return;
+ const p = y.getBoundingClientRect(), b = Number(window.innerWidth || 0), L = Number(window.innerHeight || 0);
+ let C = Number(Tn.x) || 0, G = Number(Tn.y) || 0;
+ C + p.width > b && (C = Math.max(8, b - p.width - 10)), G + p.height > L && (G = Math.max(8, L - p.height - 10)), C < 8 && (C = 8), G < 8 && (G = 8), Tn.x = C, Tn.y = G;
}
async function I() {
- var p, b, L, h, G;
- const A = ++r;
+ var p, b, L, C, G;
+ const y = ++r;
n.value = !0, o.value = "";
try {
- const W = await Fg();
- if (A !== r) return;
- i.value = Array.isArray(W == null ? void 0 : W.data) ? W.data : [];
- } catch (W) {
- if (console.error("[AddToCollectionMenu.vue] listCollections failed:", W), A !== r) return;
+ const Z = await Og();
+ if (y !== r) return;
+ i.value = Array.isArray(Z == null ? void 0 : Z.data) ? Z.data : [];
+ } catch (Z) {
+ if (console.error("[AddToCollectionMenu.vue] listCollections failed:", Z), y !== r) return;
i.value = [], o.value = m("toast.failedLoadCollections", "Failed to load collections.");
} finally {
- if (A === r) {
+ if (y === r) {
n.value = !1, await wo(), u();
try {
- (h = (L = (b = (p = t.value) == null ? void 0 : p.querySelector) == null ? void 0 : b.call(p, '.mjr-context-menu-item:not([aria-disabled="true"])')) == null ? void 0 : L.focus) == null || h.call(L);
- } catch (W) {
- (G = console.debug) == null || G.call(console, W);
+ (C = (L = (b = (p = t.value) == null ? void 0 : p.querySelector) == null ? void 0 : b.call(p, '.mjr-context-menu-item:not([aria-disabled="true"])')) == null ? void 0 : L.focus) == null || C.call(L);
+ } catch (Z) {
+ (G = console.debug) == null || G.call(console, Z);
}
}
}
}
- async function y(A, p) {
+ async function A(y, p) {
const b = Array.isArray(Tn.assets) ? Tn.assets : [];
Po();
- const L = await Ga(A, b);
+ const L = await Sa(y, b);
if (!(L != null && L.ok)) {
- Ze(
+ Ae(
(L == null ? void 0 : L.error) || m("toast.failedAddAssetsToCollection", "Failed to add assets to collection."),
"error"
);
return;
}
- Ze(
+ Ae(
d({
collectionName: p,
selectedCount: b.length,
@@ -41150,118 +41187,118 @@ ${m(
4e3
);
}
- async function S() {
- var G, W;
- const A = Array.isArray(Tn.assets) ? Tn.assets : [];
+ async function h() {
+ var G, Z;
+ const y = Array.isArray(Tn.assets) ? Tn.assets : [];
Po();
- const p = await Vi(
+ const p = await Yi(
m("dialog.createCollection", "Create collection"),
m("dialog.collectionPlaceholder", "My collection")
);
if (!p) return;
const b = await na(p);
if (!(b != null && b.ok)) {
- Ze(
+ Ae(
(b == null ? void 0 : b.error) || m("toast.failedCreateCollectionDot", "Failed to create collection."),
"error"
);
return;
}
- const L = (G = b.data) == null ? void 0 : G.id, h = await Ga(L, A);
- if (!(h != null && h.ok)) {
- Ze(
- (h == null ? void 0 : h.error) || m("toast.failedAddAssetsToCollection", "Failed to add assets to collection."),
+ const L = (G = b.data) == null ? void 0 : G.id, C = await Sa(L, y);
+ if (!(C != null && C.ok)) {
+ Ae(
+ (C == null ? void 0 : C.error) || m("toast.failedAddAssetsToCollection", "Failed to add assets to collection."),
"error"
);
return;
}
- Ze(
+ Ae(
d({
- collectionName: ((W = b.data) == null ? void 0 : W.name) || p,
- selectedCount: A.length,
- addRes: h
+ collectionName: ((Z = b.data) == null ? void 0 : Z.name) || p,
+ selectedCount: y.length,
+ addRes: C
}),
"success",
4e3
);
}
- function Z(A) {
+ function S(y) {
var p, b;
- (b = (p = t.value) == null ? void 0 : p.contains) != null && b.call(p, A == null ? void 0 : A.target) || Po();
+ (b = (p = t.value) == null ? void 0 : p.contains) != null && b.call(p, y == null ? void 0 : y.target) || Po();
}
- function C(A) {
- (A == null ? void 0 : A.key) === "Escape" && Po();
+ function W(y) {
+ (y == null ? void 0 : y.key) === "Escape" && Po();
}
function g() {
Po();
}
- return cn(
+ return dn(
() => Tn.open,
- async (A) => {
- A && (i.value = [], await I());
+ async (y) => {
+ y && (i.value = [], await I());
}
), Dn(() => {
l = new AbortController();
- const A = {
+ const y = {
capture: !0,
passive: !0,
signal: l.signal
};
- window.addEventListener("pointerdown", Z, A), window.addEventListener("keydown", C, {
+ window.addEventListener("pointerdown", S, y), window.addEventListener("keydown", W, {
capture: !0,
signal: l.signal
- }), window.addEventListener("scroll", g, A), window.addEventListener("wheel", g, A), window.addEventListener("resize", g, {
+ }), window.addEventListener("scroll", g, y), window.addEventListener("wheel", g, y), window.addEventListener("resize", g, {
passive: !0,
signal: l.signal
}), window.addEventListener("mjr-close-all-menus", g, {
signal: l.signal
});
}), _n(() => {
- var A;
+ var y;
try {
l == null || l.abort();
} catch (p) {
- (A = console.debug) == null || A.call(console, p);
+ (y = console.debug) == null || y.call(console, p);
}
l = null, Po();
- }), (A, p) => (be(), Pi(ks, { to: "body" }, [
- xe(Tn).open ? (be(), Ce("div", {
+ }), (y, p) => (be(), Pi(Ns, { to: "body" }, [
+ ve(Tn).open ? (be(), Ze("div", {
key: 0,
ref_key: "menuRef",
ref: t,
class: "mjr-add-to-collection-menu mjr-context-menu",
- style: Lt(a.value),
+ style: vt(a.value),
role: "menu",
"aria-label": s.value
}, [
- ie("div", Bv, Ye(s.value), 1),
- ie("button", {
+ te("div", Kv, Ne(s.value), 1),
+ te("button", {
type: "button",
class: "mjr-context-menu-item",
role: "menuitem",
- onClick: S
+ onClick: h
}, [
- ie("span", Uv, [
- p[0] || (p[0] = ie("i", { class: "pi pi-plus" }, null, -1)),
- ie("span", null, Ye(xe(m)("dialog.createCollection", "Create collection")) + "...", 1)
+ te("span", Bv, [
+ p[0] || (p[0] = te("i", { class: "pi pi-plus" }, null, -1)),
+ te("span", null, Ne(ve(m)("dialog.createCollection", "Create collection")) + "...", 1)
])
]),
- p[2] || (p[2] = ie("div", { class: "mjr-context-menu-separator" }, null, -1)),
- n.value ? (be(), Ce("div", Kv, Ye(xe(m)("msg.loadingCollections", "Loading collections...")), 1)) : o.value ? (be(), Ce("div", Dv, Ye(o.value), 1)) : i.value.length ? ft("", !0) : (be(), Ce("div", Ev, Ye(xe(m)("msg.noCollections", "No collections yet.")), 1)),
- (be(!0), Ce(Nt, null, Cn(i.value, (b) => (be(), Ce("button", {
+ p[2] || (p[2] = te("div", { class: "mjr-context-menu-separator" }, null, -1)),
+ n.value ? (be(), Ze("div", Uv, Ne(ve(m)("msg.loadingCollections", "Loading collections...")), 1)) : o.value ? (be(), Ze("div", Dv, Ne(o.value), 1)) : i.value.length ? yt("", !0) : (be(), Ze("div", Hv, Ne(ve(m)("msg.noCollections", "No collections yet.")), 1)),
+ (be(!0), Ze(Nt, null, Zn(i.value, (b) => (be(), Ze("button", {
key: String((b == null ? void 0 : b.id) || ""),
type: "button",
class: "mjr-context-menu-item",
role: "menuitem",
- onClick: (L) => y(String((b == null ? void 0 : b.id) || ""), String((b == null ? void 0 : b.name) || (b == null ? void 0 : b.id) || ""))
+ onClick: (L) => A(String((b == null ? void 0 : b.id) || ""), String((b == null ? void 0 : b.name) || (b == null ? void 0 : b.id) || ""))
}, [
- ie("span", qv, [
- p[1] || (p[1] = ie("i", { class: "pi pi-bookmark" }, null, -1)),
- ie("span", null, Ye(String((b == null ? void 0 : b.name) || (b == null ? void 0 : b.id) || "")), 1)
+ te("span", qv, [
+ p[1] || (p[1] = te("i", { class: "pi pi-bookmark" }, null, -1)),
+ te("span", null, Ne(String((b == null ? void 0 : b.name) || (b == null ? void 0 : b.id) || "")), 1)
]),
- Number((b == null ? void 0 : b.count) || 0) > 0 ? (be(), Ce("span", Pv, Ye(Number((b == null ? void 0 : b.count) || 0)), 1)) : ft("", !0)
- ], 8, Hv))), 128))
- ], 12, Tv)) : ft("", !0)
+ Number((b == null ? void 0 : b.count) || 0) > 0 ? (be(), Ze("span", Pv, Ne(Number((b == null ? void 0 : b.count) || 0)), 1)) : yt("", !0)
+ ], 8, Ev))), 128))
+ ], 12, Tv)) : yt("", !0)
]));
}
}, _v = {
@@ -41282,16 +41319,16 @@ ${m(
}, cL = {
__name: "GridContextMenu",
setup(e) {
- const t = Ae(null), n = Ae(null), i = Ae(null);
+ const t = We(null), n = We(null), i = We(null);
let o = null, r = null;
- const l = ze(() => s(Dt.main, 10031)), a = ze(() => s(Dt.submenu, 10032)), c = ze(() => s(Dt.tags, 10033));
- function s(x, T) {
+ const l = ze(() => s(Ut.main, 10031)), a = ze(() => s(Ut.submenu, 10032)), c = ze(() => s(Ut.tags, 10033));
+ function s(x, K) {
return {
position: "fixed",
left: `${Math.round(Number(x == null ? void 0 : x.x) || 0)}px`,
top: `${Math.round(Number(x == null ? void 0 : x.y) || 0)}px`,
display: "block",
- zIndex: String(T)
+ zIndex: String(K)
};
}
function d() {
@@ -41302,43 +41339,43 @@ ${m(
Ir();
}, 180);
}
- function I(x, T) {
- if (!(x != null && x.open) || !T) return;
- const v = T.getBoundingClientRect(), w = Number(window.innerWidth || 0), R = Number(window.innerHeight || 0);
- let Y = Number(x.x) || 0, F = Number(x.y) || 0;
- Y + v.width > w && (Y = Math.max(8, w - v.width - 10)), F + v.height > R && (F = Math.max(8, R - v.height - 10)), Y < 8 && (Y = 8), F < 8 && (F = 8), x.x = Y, x.y = F;
+ function I(x, K) {
+ if (!(x != null && x.open) || !K) return;
+ const j = K.getBoundingClientRect(), w = Number(window.innerWidth || 0), R = Number(window.innerHeight || 0);
+ let V = Number(x.x) || 0, O = Number(x.y) || 0;
+ V + j.width > w && (V = Math.max(8, w - j.width - 10)), O + j.height > R && (O = Math.max(8, R - j.height - 10)), V < 8 && (V = 8), O < 8 && (O = 8), x.x = V, x.y = O;
}
- async function y(x, T) {
- await wo(), I(x, (T == null ? void 0 : T.value) || null);
+ async function A(x, K) {
+ await wo(), I(x, (K == null ? void 0 : K.value) || null);
}
- function S(x) {
- var T, v, w, R, Y;
+ function h(x) {
+ var K, j, w, R, V;
try {
- (R = (w = (v = (T = x == null ? void 0 : x.value) == null ? void 0 : T.querySelector) == null ? void 0 : v.call(T, '.mjr-context-menu-item:not([aria-disabled="true"])')) == null ? void 0 : w.focus) == null || R.call(w);
- } catch (F) {
- (Y = console.debug) == null || Y.call(console, F);
+ (R = (w = (j = (K = x == null ? void 0 : x.value) == null ? void 0 : K.querySelector) == null ? void 0 : j.call(K, '.mjr-context-menu-item:not([aria-disabled="true"])')) == null ? void 0 : w.focus) == null || R.call(w);
+ } catch (O) {
+ (V = console.debug) == null || V.call(console, O);
}
}
- function Z(x, T) {
+ function S(x, K) {
var R;
if (!Array.isArray(x == null ? void 0 : x.submenu) || !x.submenu.length) {
Ir();
return;
}
d();
- const v = T == null ? void 0 : T.currentTarget, w = (R = v == null ? void 0 : v.getBoundingClientRect) == null ? void 0 : R.call(v);
+ const j = K == null ? void 0 : K.currentTarget, w = (R = j == null ? void 0 : j.getBoundingClientRect) == null ? void 0 : R.call(j);
ZW({
- x: Math.round(((w == null ? void 0 : w.right) || Dt.main.x || 0) + 6),
- y: Math.round(((w == null ? void 0 : w.top) || Dt.main.y || 0) - 4),
+ x: Math.round(((w == null ? void 0 : w.right) || Ut.main.x || 0) + 6),
+ y: Math.round(((w == null ? void 0 : w.top) || Ut.main.y || 0) - 4),
items: x.submenu,
title: x.label || ""
});
}
- async function C(x, T, v = "main") {
+ async function W(x, K, j = "main") {
var w;
if (!(!x || x.type !== "item" || x.disabled)) {
if (Array.isArray(x.submenu) && x.submenu.length) {
- Z(x, T);
+ S(x, K);
return;
}
try {
@@ -41346,18 +41383,18 @@ ${m(
} catch (R) {
console.error("[GridContextMenu.vue] Action failed:", R);
} finally {
- x.closeOnSelect !== !1 ? Vo() : v === "submenu" && Ir();
+ x.closeOnSelect !== !1 ? Yo() : j === "submenu" && Ir();
}
}
}
- function g(x, T) {
+ function g(x, K) {
if (Array.isArray(x == null ? void 0 : x.submenu) && x.submenu.length) {
- Z(x, T);
+ S(x, K);
return;
}
Ir();
}
- function A(x) {
+ function y(x) {
Array.isArray(x == null ? void 0 : x.submenu) && x.submenu.length && u();
}
function p() {
@@ -41367,47 +41404,47 @@ ${m(
u();
}
function L(x) {
- var w, R, Y, F, N, V;
- const T = x == null ? void 0 : x.target;
- ((R = (w = t.value) == null ? void 0 : w.contains) == null ? void 0 : R.call(w, T)) || ((F = (Y = n.value) == null ? void 0 : Y.contains) == null ? void 0 : F.call(Y, T)) || ((V = (N = i.value) == null ? void 0 : N.contains) == null ? void 0 : V.call(N, T)) || Vo();
+ var w, R, V, O, k, Y;
+ const K = x == null ? void 0 : x.target;
+ ((R = (w = t.value) == null ? void 0 : w.contains) == null ? void 0 : R.call(w, K)) || ((O = (V = n.value) == null ? void 0 : V.contains) == null ? void 0 : O.call(V, K)) || ((Y = (k = i.value) == null ? void 0 : k.contains) == null ? void 0 : Y.call(k, K)) || Yo();
}
- function h(x) {
- (x == null ? void 0 : x.key) === "Escape" && Vo();
+ function C(x) {
+ (x == null ? void 0 : x.key) === "Escape" && Yo();
}
function G() {
- Vo();
+ Yo();
}
- function W(x) {
- var T;
- String(((T = x == null ? void 0 : x.detail) == null ? void 0 : T.source) || "") !== "grid" && Vo();
+ function Z(x) {
+ var K;
+ String(((K = x == null ? void 0 : x.detail) == null ? void 0 : K.source) || "") !== "grid" && Yo();
}
function f(x) {
- const T = Dt.tags.asset;
- T && (T.tags = Array.isArray(x) ? [...x] : []);
+ const K = Ut.tags.asset;
+ K && (K.tags = Array.isArray(x) ? [...x] : []);
}
function X(x) {
- var v, w, R;
- const T = Array.isArray(x == null ? void 0 : x.tags) ? x.tags : [];
+ var j, w, R;
+ const K = Array.isArray(x == null ? void 0 : x.tags) ? x.tags : [];
try {
- (w = (v = Dt.tags).onChanged) == null || w.call(v, T);
- } catch (Y) {
- (R = console.debug) == null || R.call(console, Y);
+ (w = (j = Ut.tags).onChanged) == null || w.call(j, K);
+ } catch (V) {
+ (R = console.debug) == null || R.call(console, V);
}
}
- return cn(
- () => Dt.main.open,
+ return dn(
+ () => Ut.main.open,
async (x) => {
- x && (await y(Dt.main, t), S(t));
+ x && (await A(Ut.main, t), h(t));
}
- ), cn(
- () => Dt.submenu.open,
+ ), dn(
+ () => Ut.submenu.open,
async (x) => {
- x && (await y(Dt.submenu, n), S(n));
+ x && (await A(Ut.submenu, n), h(n));
}
- ), cn(
- () => Dt.tags.open,
+ ), dn(
+ () => Ut.tags.open,
async (x) => {
- x && await y(Dt.tags, i);
+ x && await A(Ut.tags, i);
}
), Dn(() => {
r = new AbortController();
@@ -41416,13 +41453,13 @@ ${m(
passive: !0,
signal: r.signal
};
- window.addEventListener("pointerdown", L, x), window.addEventListener("keydown", h, {
+ window.addEventListener("pointerdown", L, x), window.addEventListener("keydown", C, {
capture: !0,
signal: r.signal
}), window.addEventListener("scroll", G, x), window.addEventListener("wheel", G, x), window.addEventListener("resize", G, {
passive: !0,
signal: r.signal
- }), window.addEventListener("mjr-close-all-menus", W, {
+ }), window.addEventListener("mjr-close-all-menus", Z, {
signal: r.signal
});
}), _n(() => {
@@ -41430,121 +41467,121 @@ ${m(
d();
try {
r == null || r.abort();
- } catch (T) {
- (x = console.debug) == null || x.call(console, T);
+ } catch (K) {
+ (x = console.debug) == null || x.call(console, K);
}
- r = null, Vo();
- }), (x, T) => {
- var v;
- return be(), Pi(ks, { to: "body" }, [
- xe(Dt).main.open ? (be(), Ce("div", {
+ r = null, Yo();
+ }), (x, K) => {
+ var j;
+ return be(), Pi(Ns, { to: "body" }, [
+ ve(Ut).main.open ? (be(), Ze("div", {
key: 0,
ref_key: "mainMenuRef",
ref: t,
class: "mjr-grid-context-menu mjr-context-menu",
- style: Lt(l.value),
+ style: vt(l.value),
role: "menu",
"aria-label": "Grid context menu"
}, [
- (be(!0), Ce(Nt, null, Cn(xe(Dt).main.items, (w) => (be(), Ce(Nt, {
+ (be(!0), Ze(Nt, null, Zn(ve(Ut).main.items, (w) => (be(), Ze(Nt, {
key: w.id
}, [
- w.type === "separator" ? (be(), Ce("div", _v)) : (be(), Ce("button", {
+ w.type === "separator" ? (be(), Ze("div", _v)) : (be(), Ze("button", {
key: 1,
type: "button",
- class: Zn(["mjr-context-menu-item", {
+ class: An(["mjr-context-menu-item", {
"is-disabled": w.disabled,
"has-submenu": Array.isArray(w.submenu) && w.submenu.length
}]),
role: "menuitem",
"aria-disabled": w.disabled ? "true" : "false",
tabindex: w.disabled ? -1 : 0,
- onClick: (R) => C(w, R),
+ onClick: (R) => W(w, R),
onMouseenter: (R) => g(w, R),
- onMouseleave: (R) => A(w)
+ onMouseleave: (R) => y(w)
}, [
- ie("span", eL, [
- w.iconClass ? (be(), Ce("i", {
+ te("span", eL, [
+ w.iconClass ? (be(), Ze("i", {
key: 0,
- class: Zn(w.iconClass)
- }, null, 2)) : ft("", !0),
- ie("span", null, Ye(w.label), 1)
+ class: An(w.iconClass)
+ }, null, 2)) : yt("", !0),
+ te("span", null, Ne(w.label), 1)
]),
- ie("span", tL, [
- w.rightHint ? (be(), Ce("span", nL, Ye(w.rightHint), 1)) : ft("", !0),
- Array.isArray(w.submenu) && w.submenu.length ? (be(), Ce("span", iL, " > ")) : ft("", !0)
+ te("span", tL, [
+ w.rightHint ? (be(), Ze("span", nL, Ne(w.rightHint), 1)) : yt("", !0),
+ Array.isArray(w.submenu) && w.submenu.length ? (be(), Ze("span", iL, " > ")) : yt("", !0)
])
], 42, $v))
], 64))), 128))
- ], 4)) : ft("", !0),
- xe(Dt).submenu.open ? (be(), Ce("div", {
+ ], 4)) : yt("", !0),
+ ve(Ut).submenu.open ? (be(), Ze("div", {
key: 1,
ref_key: "submenuRef",
ref: n,
class: "mjr-grid-rating-submenu mjr-context-menu",
- style: Lt(a.value),
+ style: vt(a.value),
role: "menu",
"aria-label": "Grid context submenu",
onMouseenter: p,
onMouseleave: b
}, [
- (be(!0), Ce(Nt, null, Cn(xe(Dt).submenu.items, (w) => (be(), Ce(Nt, {
+ (be(!0), Ze(Nt, null, Zn(ve(Ut).submenu.items, (w) => (be(), Ze(Nt, {
key: w.id
}, [
- w.type === "separator" ? (be(), Ce("div", oL)) : (be(), Ce("button", {
+ w.type === "separator" ? (be(), Ze("div", oL)) : (be(), Ze("button", {
key: 1,
type: "button",
- class: Zn(["mjr-context-menu-item", { "is-disabled": w.disabled }]),
+ class: An(["mjr-context-menu-item", { "is-disabled": w.disabled }]),
role: "menuitem",
"aria-disabled": w.disabled ? "true" : "false",
tabindex: w.disabled ? -1 : 0,
- onClick: (R) => C(w, R, "submenu")
+ onClick: (R) => W(w, R, "submenu")
}, [
- ie("span", lL, [
- w.iconClass ? (be(), Ce("i", {
+ te("span", lL, [
+ w.iconClass ? (be(), Ze("i", {
key: 0,
- class: Zn(w.iconClass)
- }, null, 2)) : ft("", !0),
- ie("span", null, Ye(w.label), 1)
+ class: An(w.iconClass)
+ }, null, 2)) : yt("", !0),
+ te("span", null, Ne(w.label), 1)
]),
- w.rightHint ? (be(), Ce("span", aL, Ye(w.rightHint), 1)) : ft("", !0)
+ w.rightHint ? (be(), Ze("span", aL, Ne(w.rightHint), 1)) : yt("", !0)
], 10, rL))
], 64))), 128))
- ], 36)) : ft("", !0),
- xe(Dt).tags.open && xe(Dt).tags.asset ? (be(), Ce("div", {
+ ], 36)) : yt("", !0),
+ ve(Ut).tags.open && ve(Ut).tags.asset ? (be(), Ze("div", {
key: 2,
ref_key: "tagsPopoverRef",
ref: i,
class: "mjr-grid-popover",
- style: Lt(c.value)
+ style: vt(c.value)
}, [
- fn(gd, {
- asset: xe(Dt).tags.asset,
- "model-value": ((v = xe(Dt).tags.asset) == null ? void 0 : v.tags) || [],
+ Cn(gd, {
+ asset: ve(Ut).tags.asset,
+ "model-value": ((j = ve(Ut).tags.asset) == null ? void 0 : j.tags) || [],
"onUpdate:modelValue": f,
onTagsChange: X
}, null, 8, ["asset", "model-value"])
- ], 4)) : ft("", !0)
+ ], 4)) : yt("", !0)
]);
};
}
}, dp = {
__name: "ContextMenuPortal",
setup(e) {
- const t = Ae(""), n = ze(() => CW(t.value));
+ const t = We(""), n = ze(() => hW(t.value));
return Dn(() => {
t.value = fW();
}), _n(() => {
- hW(t.value), t.value = "";
- }), (i, o) => n.value ? (be(), Ce(Nt, { key: 0 }, [
- fn(cL),
- fn(Qv)
- ], 64)) : ft("", !0);
+ CW(t.value), t.value = "";
+ }), (i, o) => n.value ? (be(), Ze(Nt, { key: 0 }, [
+ Cn(cL),
+ Cn(Qv)
+ ], 64)) : yt("", !0);
}
}, sL = {
__name: "App",
setup(e) {
- const t = Ae(null), n = Ae(null), i = Ae(null), o = Ae(null), r = Ae(null), l = Ae(null);
+ const t = We(null), n = We(null), i = We(null), o = We(null), r = We(null), l = We(null);
let a = null;
return Dn(async () => {
if (!t.value) return;
@@ -41562,11 +41599,11 @@ ${m(
var d, u;
return (u = (d = r.value) == null ? void 0 : d.initAssetsQueryController) == null ? void 0 : u.call(d, ...s);
}, c.loadAssets = (s, d = "*", u = {}) => {
- var I, y;
- return (y = (I = r.value) == null ? void 0 : I.loadAssets) == null ? void 0 : y.call(I, d, u);
+ var I, A;
+ return (A = (I = r.value) == null ? void 0 : I.loadAssets) == null ? void 0 : A.call(I, d, u);
}, c.loadAssetsFromList = (s, d = [], u = {}) => {
- var I, y;
- return (y = (I = r.value) == null ? void 0 : I.loadAssetsFromList) == null ? void 0 : y.call(I, d, u);
+ var I, A;
+ return (A = (I = r.value) == null ? void 0 : I.loadAssetsFromList) == null ? void 0 : A.call(I, d, u);
}, c.prepareGridForScopeSwitch = (s) => {
var d, u;
return (u = (d = r.value) == null ? void 0 : d.prepareGridForScopeSwitch) == null ? void 0 : u.call(d);
@@ -41580,20 +41617,20 @@ ${m(
var u, I;
return (I = (u = r.value) == null ? void 0 : u.restoreAnchor) == null ? void 0 : I.call(u, d);
}, c.hydrateGridFromSnapshot = (s, d = {}, u = {}) => {
- var I, y;
- return (y = (I = r.value) == null ? void 0 : I.hydrateGridFromSnapshot) == null ? void 0 : y.call(I, d, u);
+ var I, A;
+ return (A = (I = r.value) == null ? void 0 : I.hydrateGridFromSnapshot) == null ? void 0 : A.call(I, d, u);
}, c.upsertAsset = (s, d) => {
var u, I;
return (I = (u = r.value) == null ? void 0 : u.upsertAsset) == null ? void 0 : I.call(u, d);
}, c.removeAssets = (s, d = [], u = {}) => {
- var I, y;
- return (y = (I = r.value) == null ? void 0 : I.removeAssets) == null ? void 0 : y.call(I, d, u);
+ var I, A;
+ return (A = (I = r.value) == null ? void 0 : I.removeAssets) == null ? void 0 : A.call(I, d, u);
}, c.disposeGrid = (s) => {
var d, u;
return (u = (d = r.value) == null ? void 0 : d.disposeGrid) == null ? void 0 : u.call(d);
}), l.value && (c.sidebar = l.value.sidebar);
try {
- a = await b2(t.value, {
+ a = await bM(t.value, {
useComfyThemeUI: !0,
external: c
});
@@ -41607,29 +41644,29 @@ ${m(
} catch {
}
a = null;
- }), (c, s) => (be(), Ce(Nt, null, [
- fn(y2, {
+ }), (c, s) => (be(), Ze(Nt, null, [
+ Cn(yM, {
ref_key: "statusSectionRef",
ref: n
}, null, 512),
- fn(mx, {
+ Cn(mx, {
ref_key: "headerSectionRef",
ref: i
}, null, 512),
- fn(Mx, {
+ Cn(Mx, {
ref_key: "summaryBarSectionRef",
ref: o
}, null, 512),
- fn(Nx, {
+ Cn(kx, {
ref_key: "assetsGridRef",
ref: r
}, null, 512),
- fn(Jv, {
+ Cn(Jv, {
ref_key: "sidebarSectionRef",
ref: l
}, null, 512),
- fn(dp),
- ie("div", {
+ Cn(dp),
+ te("div", {
ref_key: "containerRef",
ref: t,
class: "mjr-vue-root",
@@ -41640,7 +41677,7 @@ ${m(
}, dL = {
__name: "GeneratedFeedApp",
setup(e) {
- const t = Ae(null);
+ const t = We(null);
let n = null;
function i(o) {
var l, a;
@@ -41659,19 +41696,19 @@ ${m(
return Dn(() => {
if (t.value)
try {
- i(t.value), n = kV(t.value);
+ i(t.value), n = XY(t.value);
} catch (o) {
console.warn("[Majoor] GeneratedFeedApp.vue: createGeneratedFeedHost failed", o);
}
}), _n(() => {
try {
- XV(n);
+ NY(n);
} catch {
}
n = null;
- }), (o, r) => (be(), Ce(Nt, null, [
- fn(dp),
- ie("div", {
+ }), (o, r) => (be(), Ze(Nt, null, [
+ Cn(dp),
+ te("div", {
ref_key: "containerRef",
ref: t,
class: "mjr-vue-feed-root",
@@ -41679,34 +41716,34 @@ ${m(
}, null, 512)
], 64));
}
-}, bd = "data-mjr-topbar-mfv-host", up = "data-mjr-topbar-mfv-button", Ws = "data-mjr-topbar-mfv-slot", uL = "label.floatingViewer", mL = "Viewer", gL = "V, Ctrl/Cmd+V";
-let Ii = null, ws = null, Kn = null, hr = null, Cr = null, Ia = !1, cl = null, no = !1, pd = !1;
+}, bd = "data-mjr-topbar-mfv-host", up = "data-mjr-topbar-mfv-button", ws = "data-mjr-topbar-mfv-slot", uL = "label.floatingViewer", mL = "Viewer", gL = "V, Ctrl/Cmd+V";
+let Ii = null, Ms = null, Un = null, Cr = null, hr = null, Ia = !1, cl = null, no = !1, pd = !1;
function mp(e) {
var t, n;
- if (!(Ii && ws === e)) {
+ if (!(Ii && Ms === e)) {
if (!e) {
- !Kn && typeof MutationObserver < "u" && (Kn = new MutationObserver(() => {
+ !Un && typeof MutationObserver < "u" && (Un = new MutationObserver(() => {
var o;
- rc() && ((o = Kn == null ? void 0 : Kn.disconnect) == null || o.call(Kn), Kn = null, Zr());
- }), Kn.observe(document.body, { childList: !0, subtree: !0 }));
+ lc() && ((o = Un == null ? void 0 : Un.disconnect) == null || o.call(Un), Un = null, Zr());
+ }), Un.observe(document.body, { childList: !0, subtree: !0 }));
return;
}
try {
(t = Ii == null ? void 0 : Ii.disconnect) == null || t.call(Ii);
} catch {
}
- Ii = new MutationObserver(() => Zr()), Ii.observe(e, { childList: !0 }), ws = e;
+ Ii = new MutationObserver(() => Zr()), Ii.observe(e, { childList: !0 }), Ms = e;
try {
- (n = Kn == null ? void 0 : Kn.disconnect) == null || n.call(Kn);
+ (n = Un == null ? void 0 : Un.disconnect) == null || n.call(Un);
} catch {
}
- Kn = null;
+ Un = null;
}
}
-function rc() {
+function lc() {
return typeof document > "u" ? null : document.querySelector(".actionbar-container");
}
-function Lc(e = rc()) {
+function Yc(e = lc()) {
var o;
if (typeof document > "u") return;
const t = (o = document.documentElement) == null ? void 0 : o.style;
@@ -41723,8 +41760,8 @@ function IL(e) {
}
function bL(e) {
if (!e) return null;
- let t = e.querySelector(`[${Ws}]`);
- t || (t = document.createElement("div"), t.setAttribute(Ws, "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 t = e.querySelector(`[${ws}]`);
+ t || (t = document.createElement("div"), t.setAttribute(ws, "1"), t.className = "flex h-full items-center pointer-events-auto", t.style.position = "relative", t.style.zIndex = "10030", t.style.padding = "0 4px");
const n = IL(e), i = (n == null ? void 0 : n.parentElement) || e;
return t.parentElement !== i ? n && i ? i.insertBefore(t, n.nextSibling) : i.appendChild(t) : n && i && t.previousSibling !== n ? i.insertBefore(t, n.nextSibling) : !n && t !== i.lastElementChild && i.appendChild(t), t;
}
@@ -41749,19 +41786,19 @@ function gp(e) {
function fL() {
var e;
try {
- window.dispatchEvent(new Event(ht.MFV_TOGGLE));
+ window.dispatchEvent(new Event(ft.MFV_TOGGLE));
} catch (t) {
(e = console.debug) == null || e.call(console, "[Majoor] top bar MFV launch failed", t);
}
Zr();
}
-function hL() {
+function CL() {
const e = document.createElement("button");
return e.type = "button", e.setAttribute(up, "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", fL), gp(e), e;
}
-function CL() {
+function hL() {
const e = document.createElement("div");
- return e.setAttribute(bd, "1"), e.className = "mjr-topbar-mfv-button-host", e.style.position = "relative", e.appendChild(hL()), e;
+ return e.setAttribute(bd, "1"), e.className = "mjr-topbar-mfv-button-host", e.style.position = "relative", e.appendChild(CL()), e;
}
function ZL() {
if (typeof document > "u" || pd) return;
@@ -41769,15 +41806,15 @@ function ZL() {
no !== e && (no = e);
}
function AL() {
- const e = rc();
+ const e = lc();
if (!e)
- return Lc(null), null;
+ return Yc(null), null;
mp(e), ZL();
const t = bL(e);
if (!t)
- return Lc(e), null;
+ return Yc(e), null;
let n = t.querySelector(`[${bd}]`);
- return n || (n = CL()), n.parentElement !== t && t.replaceChildren(n), Lc(e), gp(n.querySelector(`[${up}]`)), t;
+ return n || (n = hL()), n.parentElement !== t && t.replaceChildren(n), Yc(e), gp(n.querySelector(`[${up}]`)), t;
}
function Zr() {
Ia || (Ia = !0, cl = window.setTimeout(() => {
@@ -41785,10 +41822,10 @@ function Zr() {
}, 32));
}
function WL() {
- return typeof window > "u" || typeof document > "u" || !document.body ? !1 : (Zr(), hr || (hr = (e) => {
+ return typeof window > "u" || typeof document > "u" || !document.body ? !1 : (Zr(), Cr || (Cr = (e) => {
var t;
no = !!((t = e == null ? void 0 : e.detail) != null && t.visible), pd = !0, Zr();
- }, window.addEventListener(ht.MFV_VISIBILITY_CHANGED, hr)), Cr || (Cr = () => Zr(), window.addEventListener("resize", Cr)), mp(rc()), !0);
+ }, window.addEventListener(ft.MFV_VISIBILITY_CHANGED, Cr)), hr || (hr = () => Zr(), window.addEventListener("resize", hr)), mp(lc()), !0);
}
function Ip() {
var e, t, n, i, o, r, l, a, c, s, d, u;
@@ -41797,26 +41834,26 @@ function Ip() {
} catch (I) {
(t = console.debug) == null || t.call(console, I);
}
- Ii = null, ws = null;
+ Ii = null, Ms = null;
try {
- (n = Kn == null ? void 0 : Kn.disconnect) == null || n.call(Kn);
+ (n = Un == null ? void 0 : Un.disconnect) == null || n.call(Un);
} catch (I) {
(i = console.debug) == null || i.call(console, I);
}
- Kn = null;
+ Un = null;
try {
cl && window.clearTimeout(cl);
} catch (I) {
(o = console.debug) == null || o.call(console, I);
}
- cl = null, hr && typeof window < "u" && window.removeEventListener(ht.MFV_VISIBILITY_CHANGED, hr), hr = null, Cr && typeof window < "u" && window.removeEventListener("resize", Cr), Cr = null, Ia = !1, no = !1, pd = !1;
+ cl = null, Cr && typeof window < "u" && window.removeEventListener(ft.MFV_VISIBILITY_CHANGED, Cr), Cr = null, hr && typeof window < "u" && window.removeEventListener("resize", hr), hr = null, Ia = !1, no = !1, pd = !1;
try {
- (l = (r = document.documentElement) == null ? void 0 : r.style) == null || l.setProperty("--mjr-mfv-top-offset", "60px"), (c = (a = document.querySelector(`[${bd}]`)) == null ? void 0 : a.remove) == null || c.call(a), (d = (s = document.querySelector(`[${Ws}]`)) == null ? void 0 : s.remove) == null || d.call(s);
+ (l = (r = document.documentElement) == null ? void 0 : r.style) == null || l.setProperty("--mjr-mfv-top-offset", "60px"), (c = (a = document.querySelector(`[${bd}]`)) == null ? void 0 : a.remove) == null || c.call(a), (d = (s = document.querySelector(`[${ws}]`)) == null ? void 0 : s.remove) == null || d.call(s);
} catch (I) {
(u = console.debug) == null || u.call(console, I);
}
}
-const Ms = "mjr-global-runtime-root", bp = "_mjrGlobalRuntimeVueApp", pp = "_mjrSidebarVueApp", yp = "_mjrFeedVueApp";
+const Gs = "mjr-global-runtime-root", bp = "_mjrGlobalRuntimeVueApp", pp = "_mjrSidebarVueApp", yp = "_mjrFeedVueApp";
let Di = null, Ar = null;
const fp = 15e3;
let Ss = 0, ii = null;
@@ -41831,7 +41868,7 @@ try {
}, { once: !0 });
} catch {
}
-function hp() {
+function Cp() {
var e;
try {
return !!String(((e = window == null ? void 0 : window.__MJR_EXECUTION_RUNTIME__) == null ? void 0 : e.active_prompt_id) || "").trim();
@@ -41839,9 +41876,9 @@ function hp() {
return !1;
}
}
-function Cp() {
+function hp() {
var n;
- if (hp())
+ if (Cp())
return null;
const e = Date.now(), t = "output:*:mtime_desc";
if (Di && Ar === t && e - Ss < fp)
@@ -41853,9 +41890,9 @@ function Cp() {
} catch {
}
ii = typeof AbortController < "u" ? new AbortController() : null;
- const i = Ns({
+ const i = Rs({
query: "*",
- limit: fe.DEFAULT_PAGE_SIZE || 200,
+ limit: he.DEFAULT_PAGE_SIZE || 200,
offset: 0,
scope: "output",
sort: "mtime_desc",
@@ -41881,25 +41918,25 @@ function wL(e = "output:*:mtime_desc") {
}
function ML() {
if (typeof document > "u" || !(document != null && document.body)) return null;
- let e = document.getElementById(Ms);
- return e || (e = document.createElement("div"), e.id = Ms, e.setAttribute("role", "presentation"), e.style.cssText = // Keep runtime hosts above panel layers so main viewer overlay cannot render underneath.
+ let e = document.getElementById(Gs);
+ return e || (e = document.createElement("div"), e.id = Gs, e.setAttribute("role", "presentation"), e.style.cssText = // Keep runtime hosts above panel layers so main viewer overlay cannot render underneath.
"position:fixed;inset:0;overflow:visible;pointer-events:none;z-index:10020;", document.body.appendChild(e), e);
}
-function SL() {
+function GL() {
try {
const e = ML();
if (!e) return !1;
- const t = dd(e, S0, bp);
+ const t = dd(e, G0, bp);
return WL(), t;
} catch {
return !1;
}
}
-function GL() {
+function SL() {
var e;
try {
Ip();
- const t = document.getElementById(Ms);
+ const t = document.getElementById(Gs);
if (!t) return;
ud(t, bp), (e = t.remove) == null || e.call(t);
} catch {
@@ -41910,7 +41947,7 @@ function Zp(e, t) {
const n = xy(e, t);
if (!n)
try {
- window.dispatchEvent(new Event(ht.OPEN_ASSETS_MANAGER));
+ window.dispatchEvent(new Event(ft.OPEN_ASSETS_MANAGER));
} catch (o) {
(i = console.debug) == null || i.call(console, o);
}
@@ -41920,7 +41957,7 @@ function Ap() {
var e;
try {
window.dispatchEvent(
- new CustomEvent(ht.RELOAD_GRID, { detail: { reason: "command" } })
+ new CustomEvent(ft.RELOAD_GRID, { detail: { reason: "command" } })
);
} catch (t) {
(e = console.debug) == null || e.call(console, t);
@@ -41947,7 +41984,7 @@ function Wp(e, { sidebarTabId: t, triggerStartupScan: n }) {
function: () => {
var i;
try {
- window.dispatchEvent(new Event(ht.MFV_TOGGLE));
+ window.dispatchEvent(new Event(ft.MFV_TOGGLE));
} catch (o) {
(i = console.debug) == null || i.call(console, o);
}
@@ -41974,7 +42011,7 @@ function jL(e, { sidebarTabId: t }) {
tooltip: m("tooltip.sidebarTab"),
type: "custom",
render(n) {
- hp() || (Cp(), yh({ idleOnly: !0 }).catch(() => null)), dd(n, sL, pp);
+ Cp() || (hp(), yC({ idleOnly: !0 }).catch(() => null)), dd(n, sL, pp);
},
destroy(n) {
}
@@ -41999,16 +42036,16 @@ function LL() {
}
};
}
-function VL() {
+function YL() {
return [LL()];
}
-function YL() {
+function VL() {
try {
ud(null, yp);
} catch {
}
}
-function kL(e) {
+function XL(e) {
var n;
const t = String(
(e == null ? void 0 : e.comfyClass) || (e == null ? void 0 : e.type) || ((n = e == null ? void 0 : e.constructor) == null ? void 0 : n.type) || ""
@@ -42018,8 +42055,8 @@ function kL(e) {
function Vc(e, t) {
return { content: e, callback: t };
}
-function XL(e, t, { sidebarTabId: n }) {
- return kL(e) ? [
+function NL(e, t, { sidebarTabId: n }) {
+ return XL(e) ? [
Vc(
"View in Assets Manager",
() => Zp(t, n)
@@ -42027,7 +42064,7 @@ function XL(e, t, { sidebarTabId: n }) {
Vc("Open in Floating Viewer", () => {
var i;
try {
- window.dispatchEvent(new Event(ht.MFV_OPEN));
+ window.dispatchEvent(new Event(ft.MFV_OPEN));
} catch (o) {
(i = console.debug) == null || i.call(console, o);
}
@@ -42035,14 +42072,14 @@ function XL(e, t, { sidebarTabId: n }) {
Vc("Index Output", () => {
var i;
try {
- Ap(), Ze(m("toast.rescanningFile", "Rescanning file…"), "info", 1800);
+ Ap(), Ae(m("toast.rescanningFile", "Rescanning file…"), "info", 1800);
} catch (o) {
(i = console.debug) == null || i.call(console, o);
}
})
] : [];
}
-function NL({ count: e = 0, limit: t = 0, offset: n = 0, total: i = null } = {}) {
+function kL({ count: e = 0, limit: t = 0, offset: n = 0, total: i = null } = {}) {
const o = Math.max(0, Number(e) || 0);
if (o <= 0) return 0;
const r = Math.max(0, Number(t) || 0), l = Math.max(0, Number(n) || 0), a = i == null ? null : Math.max(0, Number(i) || 0), c = a == null ? null : Math.max(0, a - l);
@@ -42054,13 +42091,13 @@ function NL({ count: e = 0, limit: t = 0, offset: n = 0, total: i = null } = {})
return s <= 0 ? o : Math.max(o, s);
}
function RL(e, t) {
- var Z, C, g, A, p, b, L;
+ var S, W, g, y, p, b, L;
if (!t || typeof t != "object") return !1;
- const n = String(((Z = e == null ? void 0 : e.dataset) == null ? void 0 : Z.mjrScope) || "output").trim().toLowerCase(), i = String(((C = e == null ? void 0 : e.dataset) == null ? void 0 : C.mjrSubfolder) || "").trim().toLowerCase(), o = String(((g = e == null ? void 0 : e.dataset) == null ? void 0 : g.mjrFilterKind) || "").trim().toLowerCase(), r = ((A = e == null ? void 0 : e.dataset) == null ? void 0 : A.mjrFilterWorkflowOnly) === "1", l = Number(((p = e == null ? void 0 : e.dataset) == null ? void 0 : p.mjrFilterMinRating) || 0) || 0, a = String(((b = e == null ? void 0 : e.dataset) == null ? void 0 : b.mjrFilterWorkflowType) || "").trim().toLowerCase(), c = String(((L = e == null ? void 0 : e.dataset) == null ? void 0 : L.mjrFilterDateExact) || "").trim(), s = String((t == null ? void 0 : t.subfolder) || "").trim().toLowerCase(), d = String((t == null ? void 0 : t.type) || (t == null ? void 0 : t.source) || "output").trim().toLowerCase(), u = String((t == null ? void 0 : t.kind) || "").trim().toLowerCase(), I = String((t == null ? void 0 : t.workflow_type) || (t == null ? void 0 : t.workflowType) || "").trim().toLowerCase(), y = String((t == null ? void 0 : t.date_exact) || (t == null ? void 0 : t.date) || "").trim(), S = (t == null ? void 0 : t.has_workflow) ?? (t == null ? void 0 : t.hasWorkflow) ?? null;
- return !(n && n !== "all" && d && d !== n || i && s !== i || o && u && u !== o || r && S !== null && !S || l > 0 && (Number((t == null ? void 0 : t.rating) || 0) || 0) < l || a && I !== a || c && y && y !== c);
+ const n = String(((S = e == null ? void 0 : e.dataset) == null ? void 0 : S.mjrScope) || "output").trim().toLowerCase(), i = String(((W = e == null ? void 0 : e.dataset) == null ? void 0 : W.mjrSubfolder) || "").trim().toLowerCase(), o = String(((g = e == null ? void 0 : e.dataset) == null ? void 0 : g.mjrFilterKind) || "").trim().toLowerCase(), r = ((y = e == null ? void 0 : e.dataset) == null ? void 0 : y.mjrFilterWorkflowOnly) === "1", l = Number(((p = e == null ? void 0 : e.dataset) == null ? void 0 : p.mjrFilterMinRating) || 0) || 0, a = String(((b = e == null ? void 0 : e.dataset) == null ? void 0 : b.mjrFilterWorkflowType) || "").trim().toLowerCase(), c = String(((L = e == null ? void 0 : e.dataset) == null ? void 0 : L.mjrFilterDateExact) || "").trim(), s = String((t == null ? void 0 : t.subfolder) || "").trim().toLowerCase(), d = String((t == null ? void 0 : t.type) || (t == null ? void 0 : t.source) || "output").trim().toLowerCase(), u = String((t == null ? void 0 : t.kind) || "").trim().toLowerCase(), I = String((t == null ? void 0 : t.workflow_type) || (t == null ? void 0 : t.workflowType) || "").trim().toLowerCase(), A = String((t == null ? void 0 : t.date_exact) || (t == null ? void 0 : t.date) || "").trim(), h = (t == null ? void 0 : t.has_workflow) ?? (t == null ? void 0 : t.hasWorkflow) ?? null;
+ return !(n && n !== "all" && d && d !== n || i && s !== i || o && u && u !== o || r && h !== null && !h || l > 0 && (Number((t == null ? void 0 : t.rating) || 0) || 0) < l || a && I !== a || c && A && A !== c);
}
-async function FL(e, t, n, i, o, { requestId: r = 0, signal: l = null } = {}) {
- var w, R, Y, F, N, V, k, K, z, B, J, P, H, $, E, oe, M, j, O, D, q, ee, ce, ue, U;
+async function OL(e, t, n, i, o, { requestId: r = 0, signal: l = null } = {}) {
+ var w, R, V, O, k, Y, N, U, z, T, J, P, E, $, H, ne, M, v, F, D, q, ee, ae, ue, B;
const a = (Q) => {
var _;
if (typeof Q == "string") return Q;
@@ -42069,10 +42106,10 @@ async function FL(e, t, n, i, o, { requestId: r = 0, signal: l = null } = {}) {
if (typeof ((_ = Q.target) == null ? void 0 : _.value) == "string") return Q.target.value;
}
return String(Q || "");
- }, c = ((w = e == null ? void 0 : e.dataset) == null ? void 0 : w.mjrScope) || "output", s = ((R = e == null ? void 0 : e.dataset) == null ? void 0 : R.mjrCustomRootId) || "", d = ((Y = e == null ? void 0 : e.dataset) == null ? void 0 : Y.mjrSubfolder) || "", u = ((F = e == null ? void 0 : e.dataset) == null ? void 0 : F.mjrFilterKind) || "", I = ((N = e == null ? void 0 : e.dataset) == null ? void 0 : N.mjrFilterWorkflowOnly) === "1", y = Number(((V = e == null ? void 0 : e.dataset) == null ? void 0 : V.mjrFilterMinRating) || 0) || 0, S = Number(((k = e == null ? void 0 : e.dataset) == null ? void 0 : k.mjrFilterMinSizeMB) || 0) || 0, Z = Number(((K = e == null ? void 0 : e.dataset) == null ? void 0 : K.mjrFilterMaxSizeMB) || 0) || 0, C = String(((z = e == null ? void 0 : e.dataset) == null ? void 0 : z.mjrFilterResolutionCompare) || "gte") === "lte" ? "lte" : "gte", g = Number(((B = e == null ? void 0 : e.dataset) == null ? void 0 : B.mjrFilterMinWidth) || 0) || 0, A = Number(((J = e == null ? void 0 : e.dataset) == null ? void 0 : J.mjrFilterMinHeight) || 0) || 0, p = Number(((P = e == null ? void 0 : e.dataset) == null ? void 0 : P.mjrFilterMaxWidth) || 0) || 0, b = Number(((H = e == null ? void 0 : e.dataset) == null ? void 0 : H.mjrFilterMaxHeight) || 0) || 0, L = String((($ = e == null ? void 0 : e.dataset) == null ? void 0 : $.mjrFilterWorkflowType) || "").trim().toUpperCase(), h = String(((E = e == null ? void 0 : e.dataset) == null ? void 0 : E.mjrFilterDateRange) || "").trim().toLowerCase(), G = String(((oe = e == null ? void 0 : e.dataset) == null ? void 0 : oe.mjrFilterDateExact) || "").trim(), W = ((M = e == null ? void 0 : e.dataset) == null ? void 0 : M.mjrSort) || "mtime_desc", f = String(((j = e == null ? void 0 : e.dataset) == null ? void 0 : j.mjrGroupStacks) || "") === "1", x = a(t).trim() || "*", T = /^\[object\s+HTML.*Element\]$/i.test(x) ? "*" : x, v = o.sanitizeQuery(T) || T;
+ }, c = ((w = e == null ? void 0 : e.dataset) == null ? void 0 : w.mjrScope) || "output", s = ((R = e == null ? void 0 : e.dataset) == null ? void 0 : R.mjrCustomRootId) || "", d = ((V = e == null ? void 0 : e.dataset) == null ? void 0 : V.mjrSubfolder) || "", u = ((O = e == null ? void 0 : e.dataset) == null ? void 0 : O.mjrFilterKind) || "", I = ((k = e == null ? void 0 : e.dataset) == null ? void 0 : k.mjrFilterWorkflowOnly) === "1", A = Number(((Y = e == null ? void 0 : e.dataset) == null ? void 0 : Y.mjrFilterMinRating) || 0) || 0, h = Number(((N = e == null ? void 0 : e.dataset) == null ? void 0 : N.mjrFilterMinSizeMB) || 0) || 0, S = Number(((U = e == null ? void 0 : e.dataset) == null ? void 0 : U.mjrFilterMaxSizeMB) || 0) || 0, W = String(((z = e == null ? void 0 : e.dataset) == null ? void 0 : z.mjrFilterResolutionCompare) || "gte") === "lte" ? "lte" : "gte", g = Number(((T = e == null ? void 0 : e.dataset) == null ? void 0 : T.mjrFilterMinWidth) || 0) || 0, y = Number(((J = e == null ? void 0 : e.dataset) == null ? void 0 : J.mjrFilterMinHeight) || 0) || 0, p = Number(((P = e == null ? void 0 : e.dataset) == null ? void 0 : P.mjrFilterMaxWidth) || 0) || 0, b = Number(((E = e == null ? void 0 : e.dataset) == null ? void 0 : E.mjrFilterMaxHeight) || 0) || 0, L = String((($ = e == null ? void 0 : e.dataset) == null ? void 0 : $.mjrFilterWorkflowType) || "").trim().toUpperCase(), C = String(((H = e == null ? void 0 : e.dataset) == null ? void 0 : H.mjrFilterDateRange) || "").trim().toLowerCase(), G = String(((ne = e == null ? void 0 : e.dataset) == null ? void 0 : ne.mjrFilterDateExact) || "").trim(), Z = ((M = e == null ? void 0 : e.dataset) == null ? void 0 : M.mjrSort) || "mtime_desc", f = String(((v = e == null ? void 0 : e.dataset) == null ? void 0 : v.mjrGroupStacks) || "") === "1", x = a(t).trim() || "*", K = /^\[object\s+HTML.*Element\]$/i.test(x) ? "*" : x, j = o.sanitizeQuery(K) || K;
try {
- const Q = String(c || "").toLowerCase() === "output", _ = !!(d || s || u || I || y > 0 || S > 0 || Z > 0 || g > 0 || A > 0 || p > 0 || b > 0 || L || h || G || f), le = Q && Number(i ?? 0) === 0 && v === "*" && !_ && String(W || "mtime_desc").toLowerCase() === "mtime_desc", de = !(Q && (Number(i ?? 0) > 0 || le)), se = o.buildListURL({
- q: v,
+ const Q = String(c || "").toLowerCase() === "output", _ = !!(d || s || u || I || A > 0 || h > 0 || S > 0 || g > 0 || y > 0 || p > 0 || b > 0 || L || C || G || f), le = Q && Number(i ?? 0) === 0 && j === "*" && !_ && String(Z || "mtime_desc").toLowerCase() === "mtime_desc", ce = !(Q && (Number(i ?? 0) > 0 || le)), de = o.buildListURL({
+ q: j,
limit: n,
offset: i,
scope: c,
@@ -42080,46 +42117,46 @@ async function FL(e, t, n, i, o, { requestId: r = 0, signal: l = null } = {}) {
customRootId: s || null,
kind: u || null,
hasWorkflow: I ? !0 : null,
- minRating: y > 0 ? y : null,
- minSizeMB: S > 0 ? S : null,
- maxSizeMB: Z > 0 ? Z : null,
- resolutionCompare: C,
+ minRating: A > 0 ? A : null,
+ minSizeMB: h > 0 ? h : null,
+ maxSizeMB: S > 0 ? S : null,
+ resolutionCompare: W,
minWidth: g > 0 ? g : null,
- minHeight: A > 0 ? A : null,
+ minHeight: y > 0 ? y : null,
maxWidth: p > 0 ? p : null,
maxHeight: b > 0 ? b : null,
workflowType: L || null,
- dateRange: h || null,
+ dateRange: C || null,
dateExact: G || null,
- sort: W,
- includeTotal: de,
+ sort: Z,
+ includeTotal: ce,
groupStacks: f
- }), ge = await o.get(se, { timeoutMs: 12e4, ...l ? { signal: l } : {} });
+ }), ge = await o.get(de, { timeoutMs: 12e4, ...l ? { signal: l } : {} });
try {
- const je = o.getGridState(e);
- if (je && Number(je.requestId) !== Number(r))
+ const Le = o.getGridState(e);
+ if (Le && Number(Le.requestId) !== Number(r))
return { ok: !1, stale: !0, error: "Stale response" };
- } catch (je) {
- (O = console.debug) == null || O.call(console, je);
+ } catch (Le) {
+ (F = console.debug) == null || F.call(console, Le);
}
if (ge.ok) {
- const je = ((D = ge.data) == null ? void 0 : D.assets) || [], Se = Array.isArray(je) ? je.length : 0, ke = (q = ge.data) == null ? void 0 : q.total, we = ke == null ? null : Number(ke ?? 0) || 0, Je = Math.max(0, Number((ee = ge.data) == null ? void 0 : ee.limit) || 0), $e = Math.max(0, Number((ce = ge.data) == null ? void 0 : ce.offset) || 0);
+ const Le = ((D = ge.data) == null ? void 0 : D.assets) || [], xe = Array.isArray(Le) ? Le.length : 0, Xe = (q = ge.data) == null ? void 0 : q.total, Me = Xe == null ? null : Number(Xe ?? 0) || 0, Fe = Math.max(0, Number((ee = ge.data) == null ? void 0 : ee.limit) || 0), it = Math.max(0, Number((ae = ge.data) == null ? void 0 : ae.offset) || 0);
return {
ok: !0,
- assets: je,
- total: we,
- count: Se,
- limit: Je,
- offset: $e,
- sortKey: W,
- safeQuery: v
+ assets: Le,
+ total: Me,
+ count: xe,
+ limit: Fe,
+ offset: it,
+ sortKey: Z,
+ safeQuery: j
};
}
try {
if (String((ge == null ? void 0 : ge.code) || "") === "ABORTED")
return { ok: !1, aborted: !0, error: "Aborted" };
- } catch (je) {
- (ue = console.debug) == null || ue.call(console, je);
+ } catch (Le) {
+ (ue = console.debug) == null || ue.call(console, Le);
}
return { ok: !1, error: ge.error };
} catch (Q) {
@@ -42127,7 +42164,7 @@ async function FL(e, t, n, i, o, { requestId: r = 0, signal: l = null } = {}) {
if (String((Q == null ? void 0 : Q.name) || "") === "AbortError")
return { ok: !1, aborted: !0, error: "Aborted" };
} catch (_) {
- (U = console.debug) == null || U.call(console, _);
+ (B = console.debug) == null || B.call(console, _);
}
return { ok: !1, error: Q.message };
}
@@ -42145,7 +42182,7 @@ function Ba(e, t) {
return -(Number(e == null ? void 0 : e.mtime) || 0);
}
}
-function OL(e, t, n) {
+function FL(e, t, n) {
if (n === "name_desc") {
const r = String((e == null ? void 0 : e.filename) || "").toLowerCase(), l = String((t == null ? void 0 : t.filename) || "").toLowerCase();
return r > l ? -1 : r < l ? 1 : 0;
@@ -42174,7 +42211,7 @@ function Dr(e) {
function Mp(e) {
return (e == null ? void 0 : e._mjrLivePlaceholder) === !0 || (e == null ? void 0 : e.is_live_placeholder) === !0 || String((e == null ? void 0 : e.id) || "").trim().toLowerCase().startsWith("live:");
}
-function Yc(e) {
+function Xc(e) {
var t;
if (!e || typeof e != "object") return e;
try {
@@ -42202,7 +42239,7 @@ function TL(e, t, n) {
const o = Tm(n);
return o ? i.findIndex((r) => Tm(r) === o) : -1;
}
-function BL(e, t) {
+function KL(e, t) {
return !t || typeof t != "object" || !e || typeof e != "object" ? !1 : Mp(t) ? !0 : ![
"filename",
"filepath",
@@ -42222,7 +42259,7 @@ function BL(e, t) {
"date"
].some((i) => Object.prototype.hasOwnProperty.call(e, i));
}
-function UL(e, t) {
+function BL(e, t) {
const n = /* @__PURE__ */ new Set(), i = /* @__PURE__ */ new Set(), o = /* @__PURE__ */ new Map(), r = [];
for (const l of Array.isArray(e == null ? void 0 : e.assets) ? e.assets : []) {
const a = (l == null ? void 0 : l.id) != null ? String(l.id) : "", c = t.assetKey(l), s = fr(l == null ? void 0 : l.filename);
@@ -42230,11 +42267,11 @@ function UL(e, t) {
if (s) {
const d = o.get(s);
if (d) {
- const u = Array.isArray(d._mjrDupMembers) ? d._mjrDupMembers : [d], I = new Set(u.map((S) => String((S == null ? void 0 : S.id) || ""))), y = [
+ const u = Array.isArray(d._mjrDupMembers) ? d._mjrDupMembers : [d], I = new Set(u.map((h) => String((h == null ? void 0 : h.id) || ""))), A = [
...u,
- ...[l].filter((S) => !I.has(String((S == null ? void 0 : S.id) || "")))
+ ...[l].filter((h) => !I.has(String((h == null ? void 0 : h.id) || "")))
];
- d._mjrDupStack = !0, d._mjrDupMembers = y, d._mjrDupCount = y.length, d._mjrNameCollision = !1, delete d._mjrNameCollisionCount, delete d._mjrNameCollisionPaths, l._mjrNameCollision = !1, delete l._mjrNameCollisionCount, delete l._mjrNameCollisionPaths, l._mjrDupStack = !1, l._mjrDupMembers = null, l._mjrDupCount = 0;
+ d._mjrDupStack = !0, d._mjrDupMembers = A, d._mjrDupCount = A.length, d._mjrNameCollision = !1, delete d._mjrNameCollisionCount, delete d._mjrNameCollisionPaths, l._mjrNameCollision = !1, delete l._mjrNameCollisionCount, delete l._mjrNameCollisionPaths, l._mjrDupStack = !1, l._mjrDupMembers = null, l._mjrDupCount = 0;
continue;
}
}
@@ -42244,7 +42281,7 @@ function UL(e, t) {
e.assets = r, e.assetIdSet = n, e.seenKeys = i;
}
function Ua(e, t) {
- var l, a, c, s, d, u, I, y, S, Z, C;
+ var l, a, c, s, d, u, I, A, h, S, W;
const n = t.upsertState.get(e);
if (!n || n.pending.size === 0 || n.flushing) return;
n.flushing = !0, n.timer && (clearTimeout(n.timer), n.timer = null);
@@ -42253,15 +42290,15 @@ function Ua(e, t) {
const o = t.getOrCreateState(e), r = t.ensureVirtualGrid(e, o);
try {
let g = !1;
- for (const [A, p] of i.entries()) {
+ for (const [y, p] of i.entries()) {
const b = Mp(p);
o.assetKeyFn = t.assetKey;
- const L = FI(p, o, t.loadMajoorSettings);
+ const L = OI(p, o, t.loadMajoorSettings);
if (Array.isArray(L == null ? void 0 : L.removed) && L.removed.length) {
const w = new Set(L.removed);
o.assets = o.assets.filter((R) => {
- const Y = !w.has(R);
- return Y || as(o, R, o), Y;
+ const V = !w.has(R);
+ return V || cs(o, R, o), V;
});
try {
o.hiddenPngSiblings = (Number(o.hiddenPngSiblings || 0) || 0) + L.removed.length;
@@ -42278,36 +42315,36 @@ function Ua(e, t) {
}
continue;
}
- const h = o.assets.findIndex((w) => String(w.id) === A), G = h > -1 ? o.assets[h] : null, W = G ? { ...G, ...p } : p, f = h > -1 ? h : TL(o, A, W), X = f > -1 ? o.assets[f] : null, x = X ? { ...X, ...p } : W, T = t.assetKey(W);
+ const C = o.assets.findIndex((w) => String(w.id) === y), G = C > -1 ? o.assets[C] : null, Z = G ? { ...G, ...p } : p, f = C > -1 ? C : TL(o, y, Z), X = f > -1 ? o.assets[f] : null, x = X ? { ...X, ...p } : Z, K = t.assetKey(Z);
if (!RL(e, x)) {
if (f > -1) {
- if (BL(p, X)) {
- Object.assign(X, p), b || Yc(X), o.assets[f] = { ...X }, g = !0;
+ if (KL(p, X)) {
+ Object.assign(X, p), b || Xc(X), o.assets[f] = { ...X }, g = !0;
continue;
}
const [w] = o.assets.splice(f, 1);
- as(o, w, o), g = !0;
+ cs(o, w, o), g = !0;
}
continue;
}
if (f > -1) {
const w = t.assetKey(X);
- Object.assign(X, p), b || Yc(X);
- const R = { ...X }, Y = t.assetKey(R);
- o.assets[f] = R, w && w !== Y && ((s = (c = o.seenKeys) == null ? void 0 : c.delete) == null || s.call(c, w), Y && ((u = (d = o.seenKeys) == null ? void 0 : d.add) == null || u.call(d, Y))), g = !0;
- } else if (!(o.seenKeys.has(T) || p.id != null && ((y = (I = o.assetIdSet) == null ? void 0 : I.has) == null ? void 0 : y.call(I, A)))) {
- const R = e.dataset.mjrSort || "mtime_desc", Y = b ? W : Yc({ ...W }), F = JL(o.assets, Y, R);
- o.seenKeys.add(T), p.id != null && ((Z = (S = o.assetIdSet) == null ? void 0 : S.add) == null || Z.call(S, A)), o.assets.splice(F, 0, Y), g = !0;
+ Object.assign(X, p), b || Xc(X);
+ const R = { ...X }, V = t.assetKey(R);
+ o.assets[f] = R, w && w !== V && ((s = (c = o.seenKeys) == null ? void 0 : c.delete) == null || s.call(c, w), V && ((u = (d = o.seenKeys) == null ? void 0 : d.add) == null || u.call(d, V))), g = !0;
+ } else if (!(o.seenKeys.has(K) || p.id != null && ((A = (I = o.assetIdSet) == null ? void 0 : I.has) == null ? void 0 : A.call(I, y)))) {
+ const R = e.dataset.mjrSort || "mtime_desc", V = b ? Z : Xc({ ...Z }), O = JL(o.assets, V, R);
+ o.seenKeys.add(K), p.id != null && ((S = (h = o.assetIdSet) == null ? void 0 : h.add) == null || S.call(h, y)), o.assets.splice(O, 0, V), g = !0;
}
}
if (g && r) {
- UL(o, t);
+ BL(o, t);
try {
e.dataset.mjrHiddenPngSiblings = String(
Number(o.hiddenPngSiblings || 0) || 0
);
- } catch (A) {
- (C = console.debug) == null || C.call(console, A);
+ } catch (y) {
+ (W = console.debug) == null || W.call(console, y);
}
r.setItems(o.assets);
}
@@ -42320,7 +42357,7 @@ function Ua(e, t) {
}
}
}
-function Bm(e, t, n) {
+function Km(e, t, n) {
if (!t || !t.id) return !1;
const i = n.getOrCreateState(e), o = String(t.id);
if (!n.ensureVirtualGrid(e, i)) return !1;
@@ -42329,8 +42366,8 @@ function Bm(e, t, n) {
l.timer = null, Ua(e, n);
}, n.debounceMs)), !0;
}
-const pi = /* @__PURE__ */ new Map(), KL = 8, DL = 800, Sp = "mjr_grid_snapshot_cache_v2", Gp = 1800 * 1e3, EL = 200, HL = 50, kc = /* @__PURE__ */ new WeakMap(), Hl = 50;
-let Um = !1;
+const pi = /* @__PURE__ */ new Map(), UL = 8, DL = 800, Gp = "mjr_grid_snapshot_cache_v2", Sp = 1800 * 1e3, HL = 200, EL = 50, Nc = /* @__PURE__ */ new WeakMap(), El = 50;
+let Bm = !1;
const qL = [
"id",
"filename",
@@ -42383,10 +42420,10 @@ const qL = [
"date",
"date_exact"
];
-function Km(e) {
+function Um(e) {
return new Promise((t) => setTimeout(t, Math.max(0, Number(e) || 0)));
}
-function Fn(e, t = "") {
+function On(e, t = "") {
try {
return String(e ?? t).trim();
} catch {
@@ -42404,29 +42441,29 @@ function PL(e) {
).trim().toLowerCase();
return r ? `${t}|${n}|path|${r}` : "";
}
-function Xc(e = {}) {
+function kc(e = {}) {
return JSON.stringify({
- scope: Fn(e.scope || "output", "output"),
- query: Fn(e.query || "*", "*"),
- customRootId: Fn(e.customRootId || ""),
- subfolder: Fn(e.subfolder || ""),
- collectionId: Fn(e.collectionId || ""),
- viewScope: Fn(e.viewScope || ""),
- kind: Fn(e.kind || ""),
- workflowOnly: Fn(e.workflowOnly ? "1" : ""),
- minRating: Fn(e.minRating || ""),
- minSizeMB: Fn(e.minSizeMB || ""),
- maxSizeMB: Fn(e.maxSizeMB || ""),
- resolutionCompare: Fn(e.resolutionCompare || ""),
- minWidth: Fn(e.minWidth || ""),
- minHeight: Fn(e.minHeight || ""),
- maxWidth: Fn(e.maxWidth || ""),
- maxHeight: Fn(e.maxHeight || ""),
- workflowType: Fn(e.workflowType || "").toUpperCase(),
- dateRange: Fn(e.dateRange || ""),
- dateExact: Fn(e.dateExact || ""),
- sort: Fn(e.sort || "mtime_desc", "mtime_desc"),
- semanticMode: Fn(e.semanticMode ? "1" : "")
+ scope: On(e.scope || "output", "output"),
+ query: On(e.query || "*", "*"),
+ customRootId: On(e.customRootId || ""),
+ subfolder: On(e.subfolder || ""),
+ collectionId: On(e.collectionId || ""),
+ viewScope: On(e.viewScope || ""),
+ kind: On(e.kind || ""),
+ workflowOnly: On(e.workflowOnly ? "1" : ""),
+ minRating: On(e.minRating || ""),
+ minSizeMB: On(e.minSizeMB || ""),
+ maxSizeMB: On(e.maxSizeMB || ""),
+ resolutionCompare: On(e.resolutionCompare || ""),
+ minWidth: On(e.minWidth || ""),
+ minHeight: On(e.minHeight || ""),
+ maxWidth: On(e.maxWidth || ""),
+ maxHeight: On(e.maxHeight || ""),
+ workflowType: On(e.workflowType || "").toUpperCase(),
+ dateRange: On(e.dateRange || ""),
+ dateExact: On(e.dateExact || ""),
+ sort: On(e.sort || "mtime_desc", "mtime_desc"),
+ semanticMode: On(e.semanticMode ? "1" : "")
});
}
function xp() {
@@ -42446,27 +42483,27 @@ function jp(e) {
function vp(e) {
if (!e || typeof e != "object") return null;
const t = Number(e.at || 0) || 0;
- if (!t || Date.now() - t > Gp) return null;
+ if (!t || Date.now() - t > Sp) return null;
const n = Array.isArray(e.assets) ? e.assets.map(jp).filter(Boolean) : [];
if (!n.length) return null;
const i = Number(e.total ?? n.length), o = Number(e.offset ?? n.length);
return {
assets: n,
- title: Fn(e.title || "Cached", "Cached"),
+ title: On(e.title || "Cached", "Cached"),
at: t,
total: Number.isFinite(i) ? Math.max(0, i) : n.length,
offset: Number.isFinite(o) ? Math.max(n.length, o) : n.length,
done: !!e.done,
- query: Fn(e.query || "*", "*")
+ query: On(e.query || "*", "*")
};
}
function Lp() {
const e = Date.now();
for (const [t, n] of pi.entries()) {
const i = Number((n == null ? void 0 : n.at) || 0) || 0;
- (!i || e - i > Gp) && pi.delete(t);
+ (!i || e - i > Sp) && pi.delete(t);
}
- for (; pi.size > KL; ) {
+ for (; pi.size > UL; ) {
const t = pi.keys().next().value;
if (!t) break;
pi.delete(t);
@@ -42474,10 +42511,10 @@ function Lp() {
}
function QL() {
var e, t;
- if (!Um) {
- Um = !0;
+ if (!Bm) {
+ Bm = !0;
try {
- const n = xp(), i = (e = n == null ? void 0 : n.getItem) == null ? void 0 : e.call(n, Sp);
+ const n = xp(), i = (e = n == null ? void 0 : n.getItem) == null ? void 0 : e.call(n, Gp);
if (!i) return;
const o = JSON.parse(i), r = Array.isArray(o == null ? void 0 : o.entries) ? o.entries : [];
for (const l of r) {
@@ -42491,14 +42528,14 @@ function QL() {
}
}
}
-function Gs() {
+function xs() {
var e;
try {
Lp();
const t = xp();
if (!t) return;
t.setItem(
- Sp,
+ Gp,
JSON.stringify({
version: 2,
entries: Array.from(pi.entries())
@@ -42511,7 +42548,7 @@ function Gs() {
function _L(e) {
QL();
const t = vp(pi.get(e));
- return t ? (pi.delete(e), pi.set(e, t), Gs(), t) : (pi.delete(e), Gs(), null);
+ return t ? (pi.delete(e), pi.set(e, t), xs(), t) : (pi.delete(e), xs(), null);
}
function Dm(e) {
if (e == null) return e;
@@ -42535,10 +42572,10 @@ function $L(e) {
}
return String(e || "");
}
-function eV(e) {
+function eY(e) {
return e ? typeof e == "object" && "value" in e ? e.value || null : e : null;
}
-function tV(e) {
+function tY(e) {
var n;
const t = String(e ?? "");
try {
@@ -42549,7 +42586,7 @@ function tV(e) {
}
return t.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1");
}
-async function Em() {
+async function Hm() {
await wo(), await new Promise((e) => {
try {
requestAnimationFrame(() => requestAnimationFrame(e));
@@ -42558,7 +42595,7 @@ async function Em() {
}
});
}
-function Nc(e, t) {
+function Rc(e, t) {
const n = String(e || "Failed to load");
try {
const i = String((t == null ? void 0 : t.message) || t || "").trim(), o = i.toLowerCase();
@@ -42567,16 +42604,16 @@ function Nc(e, t) {
return n;
}
}
-function nV(e, t) {
- const n = Math.max(1, Math.min(fe.MAX_PAGE_SIZE, Number(e) || 1)), i = Math.max(0, Number(t) || 0);
+function nY(e, t) {
+ const n = Math.max(1, Math.min(he.MAX_PAGE_SIZE, Number(e) || 1)), i = Math.max(0, Number(t) || 0);
if (i <= 0) return n;
const o = 2 ** Math.min(i, 5);
- return Math.max(1, Math.min(fe.MAX_PAGE_SIZE, n * o));
+ return Math.max(1, Math.min(he.MAX_PAGE_SIZE, n * o));
}
function ql(e) {
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 = 0;
}
-function iV({
+function iY({
gridContainerRef: e,
state: t,
setLoadingMessage: n,
@@ -42592,106 +42629,106 @@ function iV({
},
canLoadMore: I = null
} = {}) {
- var oe;
- let y = !1, S = null, Z = null;
- function C() {
- return eV(e);
+ var ne;
+ let A = !1, h = null, S = null;
+ function W() {
+ return eY(e);
}
function g() {
- var j, O, D, q, ee, ce, ue, U, Q, _, le, de, se, ge, je, Se, ke, we, Je, $e, qe;
- const M = C();
+ var v, F, D, q, ee, ae, ue, B, Q, _, le, ce, de, ge, Le, xe, Xe, Me, Fe, it, qe;
+ const M = W();
return {
- scope: ((j = M == null ? void 0 : M.dataset) == null ? void 0 : j.mjrScope) || "output",
- query: ((O = M == null ? void 0 : M.dataset) == null ? void 0 : O.mjrQuery) || t.query || "*",
+ scope: ((v = M == null ? void 0 : M.dataset) == null ? void 0 : v.mjrScope) || "output",
+ query: ((F = M == null ? void 0 : M.dataset) == null ? void 0 : F.mjrQuery) || t.query || "*",
customRootId: ((D = M == null ? void 0 : M.dataset) == null ? void 0 : D.mjrCustomRootId) || "",
subfolder: ((q = M == null ? void 0 : M.dataset) == null ? void 0 : q.mjrSubfolder) || "",
collectionId: ((ee = M == null ? void 0 : M.dataset) == null ? void 0 : ee.mjrCollectionId) || "",
- viewScope: ((ce = M == null ? void 0 : M.dataset) == null ? void 0 : ce.mjrViewScope) || "",
+ viewScope: ((ae = M == null ? void 0 : M.dataset) == null ? void 0 : ae.mjrViewScope) || "",
kind: ((ue = M == null ? void 0 : M.dataset) == null ? void 0 : ue.mjrFilterKind) || "",
- workflowOnly: ((U = M == null ? void 0 : M.dataset) == null ? void 0 : U.mjrFilterWorkflowOnly) === "1",
+ workflowOnly: ((B = M == null ? void 0 : M.dataset) == null ? void 0 : B.mjrFilterWorkflowOnly) === "1",
minRating: ((Q = M == null ? void 0 : M.dataset) == null ? void 0 : Q.mjrFilterMinRating) || "",
minSizeMB: ((_ = M == null ? void 0 : M.dataset) == null ? void 0 : _.mjrFilterMinSizeMB) || "",
maxSizeMB: ((le = M == null ? void 0 : M.dataset) == null ? void 0 : le.mjrFilterMaxSizeMB) || "",
- resolutionCompare: ((de = M == null ? void 0 : M.dataset) == null ? void 0 : de.mjrFilterResolutionCompare) || "",
- minWidth: ((se = M == null ? void 0 : M.dataset) == null ? void 0 : se.mjrFilterMinWidth) || "",
+ resolutionCompare: ((ce = M == null ? void 0 : M.dataset) == null ? void 0 : ce.mjrFilterResolutionCompare) || "",
+ minWidth: ((de = M == null ? void 0 : M.dataset) == null ? void 0 : de.mjrFilterMinWidth) || "",
minHeight: ((ge = M == null ? void 0 : M.dataset) == null ? void 0 : ge.mjrFilterMinHeight) || "",
- maxWidth: ((je = M == null ? void 0 : M.dataset) == null ? void 0 : je.mjrFilterMaxWidth) || "",
- maxHeight: ((Se = M == null ? void 0 : M.dataset) == null ? void 0 : Se.mjrFilterMaxHeight) || "",
- workflowType: ((ke = M == null ? void 0 : M.dataset) == null ? void 0 : ke.mjrFilterWorkflowType) || "",
- dateRange: ((we = M == null ? void 0 : M.dataset) == null ? void 0 : we.mjrFilterDateRange) || "",
- dateExact: ((Je = M == null ? void 0 : M.dataset) == null ? void 0 : Je.mjrFilterDateExact) || "",
- sort: (($e = M == null ? void 0 : M.dataset) == null ? void 0 : $e.mjrSort) || "mtime_desc",
+ maxWidth: ((Le = M == null ? void 0 : M.dataset) == null ? void 0 : Le.mjrFilterMaxWidth) || "",
+ maxHeight: ((xe = M == null ? void 0 : M.dataset) == null ? void 0 : xe.mjrFilterMaxHeight) || "",
+ workflowType: ((Xe = M == null ? void 0 : M.dataset) == null ? void 0 : Xe.mjrFilterWorkflowType) || "",
+ dateRange: ((Me = M == null ? void 0 : M.dataset) == null ? void 0 : Me.mjrFilterDateRange) || "",
+ dateExact: ((Fe = M == null ? void 0 : M.dataset) == null ? void 0 : Fe.mjrFilterDateExact) || "",
+ sort: ((it = M == null ? void 0 : M.dataset) == null ? void 0 : it.mjrSort) || "mtime_desc",
semanticMode: ((qe = M == null ? void 0 : M.dataset) == null ? void 0 : qe.mjrSemanticMode) === "1"
};
}
- function A({ reset: M = !0, preserveVisibleUntilReady: j = !0 } = {}) {
- return !M || j === !1 ? !1 : Array.isArray(t.assets) && t.assets.length > 0;
+ function y({ reset: M = !0, preserveVisibleUntilReady: v = !0 } = {}) {
+ return !M || v === !1 ? !1 : Array.isArray(t.assets) && t.assets.length > 0;
}
function p() {
var M;
try {
if (typeof I == "function")
return !!I();
- } catch (j) {
- (M = console.debug) == null || M.call(console, j);
+ } catch (v) {
+ (M = console.debug) == null || M.call(console, v);
}
- return md(C(), s());
+ return md(W(), s());
}
function b() {
- var M, j;
- if (!fe.DEFER_GRID_FETCH_DURING_EXECUTION)
+ var M, v;
+ if (!he.DEFER_GRID_FETCH_DURING_EXECUTION)
return !1;
try {
return !!String(((M = window == null ? void 0 : window.__MJR_EXECUTION_RUNTIME__) == null ? void 0 : M.active_prompt_id) || "").trim();
- } catch (O) {
- return (j = console.debug) == null || j.call(console, O), !1;
+ } catch (F) {
+ return (v = console.debug) == null || v.call(console, F), !1;
}
}
function L() {
- var M, j;
+ var M, v;
try {
- S != null && S.timer && clearTimeout(S.timer);
- } catch (O) {
- (M = console.debug) == null || M.call(console, O);
+ h != null && h.timer && clearTimeout(h.timer);
+ } catch (F) {
+ (M = console.debug) == null || M.call(console, F);
}
try {
- S != null && S.listener && window.removeEventListener(ht.RUNTIME_STATUS, S.listener);
- } catch (O) {
- (j = console.debug) == null || j.call(console, O);
+ h != null && h.listener && window.removeEventListener(ft.RUNTIME_STATUS, h.listener);
+ } catch (F) {
+ (v = console.debug) == null || v.call(console, F);
+ }
+ h = null;
+ }
+ function C() {
+ var M;
+ try {
+ S && clearTimeout(S);
+ } catch (v) {
+ (M = console.debug) == null || M.call(console, v);
}
S = null;
}
- function h() {
- var M;
- try {
- Z && clearTimeout(Z);
- } catch (j) {
- (M = console.debug) == null || M.call(console, j);
- }
- Z = null;
- }
- function G(M, j = fe.PREFETCH_NEXT_PAGE_DELAY_MS) {
- if (!fe.PREFETCH_NEXT_PAGE)
+ function G(M, v = he.PREFETCH_NEXT_PAGE_DELAY_MS) {
+ if (!he.PREFETCH_NEXT_PAGE)
return;
- h();
- const O = Math.max(0, Number(j) || 0);
- Z = setTimeout(() => {
- Z = null, !(t.requestId !== M || t.done || t.loading) && R().catch((D) => {
+ C();
+ const F = Math.max(0, Number(v) || 0);
+ S = setTimeout(() => {
+ S = null, !(t.requestId !== M || t.done || t.loading) && R().catch((D) => {
var q;
(q = console.debug) == null || q.call(console, "[AssetsManager][GridLoader] Delayed prefetch failed", D);
});
- }, O);
+ }, F);
}
- function W(M, j = {}) {
+ function Z(M, v = {}) {
var q;
L();
- const O = () => {
- var ue, U;
+ const F = () => {
+ var ue, B;
if (b()) {
try {
- S = {
- ...S,
- timer: setTimeout(O, 1250)
+ h = {
+ ...h,
+ timer: setTimeout(F, 1250)
};
} catch (Q) {
(ue = console.debug) == null || ue.call(console, Q);
@@ -42699,10 +42736,10 @@ function iV({
return;
}
L();
- const ee = C(), ce = String(((U = ee == null ? void 0 : ee.dataset) == null ? void 0 : U.mjrQuery) || "").trim() || M;
+ const ee = W(), ae = String(((B = ee == null ? void 0 : ee.dataset) == null ? void 0 : B.mjrQuery) || "").trim() || M;
Promise.resolve().then(
- () => Y(ce, {
- ...j || {},
+ () => V(ae, {
+ ...v || {},
reset: !0,
preserveVisibleUntilReady: !0
})
@@ -42712,138 +42749,138 @@ function iV({
});
}, D = (ee) => {
var ue;
- String(((ue = ee == null ? void 0 : ee.detail) == null ? void 0 : ue.active_prompt_id) || "").trim() || O();
+ String(((ue = ee == null ? void 0 : ee.detail) == null ? void 0 : ue.active_prompt_id) || "").trim() || F();
};
- S = {
+ h = {
listener: D,
- timer: setTimeout(O, 1250)
+ timer: setTimeout(F, 1250)
};
try {
- window.addEventListener(ht.RUNTIME_STATUS, D);
+ window.addEventListener(ft.RUNTIME_STATUS, D);
} catch (ee) {
(q = console.debug) == null || q.call(console, ee);
}
}
- function f(M, j = null) {
+ function f(M, v = null) {
var D;
if (!M || typeof M != "object") return "";
- const O = M.id != null ? `id:${M.id}` : `${M.type || ""}|${Mi(M)}|${M.filepath || ""}|${M.subfolder || ""}|${M.filename || ""}`;
+ const F = M.id != null ? `id:${M.id}` : `${M.type || ""}|${Mi(M)}|${M.filepath || ""}|${M.subfolder || ""}|${M.filename || ""}`;
try {
- const q = j || C() || (globalThis == null ? void 0 : globalThis.__MJR_LAST_ASSETKEY_GRID__);
- return OW(q, M, O);
+ const q = v || W() || (globalThis == null ? void 0 : globalThis.__MJR_LAST_ASSETKEY_GRID__);
+ return FW(q, M, F);
} catch (q) {
- return (D = console.debug) == null || D.call(console, q), O;
+ return (D = console.debug) == null || D.call(console, q), F;
}
}
function X(M = "") {
- var j, O, D, q, ee, ce, ue, U, Q, _, le, de, se, ge, je, Se, ke, we, Je, $e, qe, Ue;
+ var v, F, D, q, ee, ae, ue, B, Q, _, le, ce, de, ge, Le, xe, Xe, Me, Fe, it, qe, Pe;
try {
- const Te = C(), Oe = Array.isArray(t.assets) ? t.assets : [];
- if (!Te || !Oe.length) return;
- const pt = Oe.slice(0, DL).map(jp).filter(Boolean);
- if (!pt.length) return;
- const Me = pt.length < Oe.length, Xt = Number(t.offset || pt.length) || pt.length, Mt = Number(t.total ?? pt.length), me = Xc({
- scope: ((j = Te.dataset) == null ? void 0 : j.mjrScope) || "output",
- query: ((O = Te.dataset) == null ? void 0 : O.mjrQuery) || t.query || "*",
- customRootId: ((D = Te.dataset) == null ? void 0 : D.mjrCustomRootId) || "",
- subfolder: ((q = Te.dataset) == null ? void 0 : q.mjrSubfolder) || "",
- collectionId: ((ee = Te.dataset) == null ? void 0 : ee.mjrCollectionId) || "",
- viewScope: ((ce = Te.dataset) == null ? void 0 : ce.mjrViewScope) || "",
- kind: ((ue = Te.dataset) == null ? void 0 : ue.mjrFilterKind) || "",
- workflowOnly: ((U = Te.dataset) == null ? void 0 : U.mjrFilterWorkflowOnly) === "1",
- minRating: ((Q = Te.dataset) == null ? void 0 : Q.mjrFilterMinRating) || "",
- minSizeMB: ((_ = Te.dataset) == null ? void 0 : _.mjrFilterMinSizeMB) || "",
- maxSizeMB: ((le = Te.dataset) == null ? void 0 : le.mjrFilterMaxSizeMB) || "",
- resolutionCompare: ((de = Te.dataset) == null ? void 0 : de.mjrFilterResolutionCompare) || "",
- minWidth: ((se = Te.dataset) == null ? void 0 : se.mjrFilterMinWidth) || "",
- minHeight: ((ge = Te.dataset) == null ? void 0 : ge.mjrFilterMinHeight) || "",
- maxWidth: ((je = Te.dataset) == null ? void 0 : je.mjrFilterMaxWidth) || "",
- maxHeight: ((Se = Te.dataset) == null ? void 0 : Se.mjrFilterMaxHeight) || "",
- workflowType: ((ke = Te.dataset) == null ? void 0 : ke.mjrFilterWorkflowType) || "",
- dateRange: ((we = Te.dataset) == null ? void 0 : we.mjrFilterDateRange) || "",
- dateExact: ((Je = Te.dataset) == null ? void 0 : Je.mjrFilterDateExact) || "",
- sort: (($e = Te.dataset) == null ? void 0 : $e.mjrSort) || "mtime_desc"
+ const Re = W(), rt = Array.isArray(t.assets) ? t.assets : [];
+ if (!Re || !rt.length) return;
+ const Te = rt.slice(0, DL).map(jp).filter(Boolean);
+ if (!Te.length) return;
+ const qt = Te.length < rt.length, kt = Number(t.offset || Te.length) || Te.length, we = Number(t.total ?? Te.length), me = kc({
+ scope: ((v = Re.dataset) == null ? void 0 : v.mjrScope) || "output",
+ query: ((F = Re.dataset) == null ? void 0 : F.mjrQuery) || t.query || "*",
+ customRootId: ((D = Re.dataset) == null ? void 0 : D.mjrCustomRootId) || "",
+ subfolder: ((q = Re.dataset) == null ? void 0 : q.mjrSubfolder) || "",
+ collectionId: ((ee = Re.dataset) == null ? void 0 : ee.mjrCollectionId) || "",
+ viewScope: ((ae = Re.dataset) == null ? void 0 : ae.mjrViewScope) || "",
+ kind: ((ue = Re.dataset) == null ? void 0 : ue.mjrFilterKind) || "",
+ workflowOnly: ((B = Re.dataset) == null ? void 0 : B.mjrFilterWorkflowOnly) === "1",
+ minRating: ((Q = Re.dataset) == null ? void 0 : Q.mjrFilterMinRating) || "",
+ minSizeMB: ((_ = Re.dataset) == null ? void 0 : _.mjrFilterMinSizeMB) || "",
+ maxSizeMB: ((le = Re.dataset) == null ? void 0 : le.mjrFilterMaxSizeMB) || "",
+ resolutionCompare: ((ce = Re.dataset) == null ? void 0 : ce.mjrFilterResolutionCompare) || "",
+ minWidth: ((de = Re.dataset) == null ? void 0 : de.mjrFilterMinWidth) || "",
+ minHeight: ((ge = Re.dataset) == null ? void 0 : ge.mjrFilterMinHeight) || "",
+ maxWidth: ((Le = Re.dataset) == null ? void 0 : Le.mjrFilterMaxWidth) || "",
+ maxHeight: ((xe = Re.dataset) == null ? void 0 : xe.mjrFilterMaxHeight) || "",
+ workflowType: ((Xe = Re.dataset) == null ? void 0 : Xe.mjrFilterWorkflowType) || "",
+ dateRange: ((Me = Re.dataset) == null ? void 0 : Me.mjrFilterDateRange) || "",
+ dateExact: ((Fe = Re.dataset) == null ? void 0 : Fe.mjrFilterDateExact) || "",
+ sort: ((it = Re.dataset) == null ? void 0 : it.mjrSort) || "mtime_desc"
});
if (!me) return;
pi.delete(me), pi.set(me, {
- assets: pt,
+ assets: Te,
title: String(M || "").trim(),
- query: String(t.query || ((qe = Te.dataset) == null ? void 0 : qe.mjrQuery) || "*").trim() || "*",
- total: Number.isFinite(Mt) ? Mt : pt.length,
- offset: Me ? pt.length : Math.max(pt.length, Xt),
- done: Me ? !1 : !!t.done,
+ query: String(t.query || ((qe = Re.dataset) == null ? void 0 : qe.mjrQuery) || "*").trim() || "*",
+ total: Number.isFinite(we) ? we : Te.length,
+ offset: qt ? Te.length : Math.max(Te.length, kt),
+ done: qt ? !1 : !!t.done,
at: Date.now()
- }), Gs();
- } catch (Te) {
- (Ue = console.debug) == null || Ue.call(console, Te);
+ }), xs();
+ } catch (Re) {
+ (Pe = console.debug) == null || Pe.call(console, Re);
}
}
function x() {
- var j;
- const M = C();
+ var v;
+ const M = W();
if (M)
try {
- const O = kc.get(M);
- if (!O) return;
- O.timer && (clearTimeout(O.timer), O.timer = null), O.pending.clear(), O.flushing = !1;
- } catch (O) {
- (j = console.debug) == null || j.call(console, O);
+ const F = Nc.get(M);
+ if (!F) return;
+ F.timer && (clearTimeout(F.timer), F.timer = null), F.pending.clear(), F.flushing = !1;
+ } catch (F) {
+ (v = console.debug) == null || v.call(console, F);
}
}
- function T(M, j) {
- return IZ(M, j, t, {
- loadMajoorSettings: Xn,
+ function K(M, v) {
+ return IZ(M, v, t, {
+ loadMajoorSettings: kn,
clearGridMessage: () => {
r();
},
ensureVirtualGrid: () => t.virtualGrid,
setFileBadgeCollision: pZ,
- assetKey: (O) => f(O, M),
- ensureDupStackCard: (O, D, q) => JW(O, D, q)
+ assetKey: (F) => f(F, M),
+ ensureDupStackCard: (F, D, q) => JW(F, D, q)
});
}
- async function v(M, j, O, { requestId: D = 0, signal: q = null } = {}) {
- var ce, ue, U, Q, _;
- const ee = C();
+ async function j(M, v, F, { requestId: D = 0, signal: q = null } = {}) {
+ var ae, ue, B, Q, _;
+ const ee = W();
if (!ee)
return { ok: !1, error: "Grid unavailable" };
- if (O === 0) {
- const le = String(((ce = ee.dataset) == null ? void 0 : ce.mjrScope) || "output").toLowerCase(), de = String(((ue = ee.dataset) == null ? void 0 : ue.mjrSort) || "mtime_desc").toLowerCase(), se = String(M || "*").trim() || "*";
- if (le === "output" && se === "*" && de === "mtime_desc") {
- const je = wL("output:*:mtime_desc");
- if (je)
+ if (F === 0) {
+ const le = String(((ae = ee.dataset) == null ? void 0 : ae.mjrScope) || "output").toLowerCase(), ce = String(((ue = ee.dataset) == null ? void 0 : ue.mjrSort) || "mtime_desc").toLowerCase(), de = String(M || "*").trim() || "*";
+ if (le === "output" && de === "*" && ce === "mtime_desc") {
+ const Le = wL("output:*:mtime_desc");
+ if (Le)
try {
- const Se = await je;
+ const xe = await Le;
if (Number(t.requestId) !== Number(D))
return { ok: !1, stale: !0, error: "Stale early fetch" };
if (q != null && q.aborted)
return { ok: !1, aborted: !0, error: "Aborted" };
- const ke = (U = Se == null ? void 0 : Se.data) == null ? void 0 : U.assets;
- if (Se != null && Se.ok && Array.isArray(ke)) {
- io("[Grid] Using early-fetched data:", ke.length, "assets");
- const we = ((Q = Se.data) == null ? void 0 : Q.total) ?? ((_ = Se.meta) == null ? void 0 : _.total) ?? null;
+ const Xe = (B = xe == null ? void 0 : xe.data) == null ? void 0 : B.assets;
+ if (xe != null && xe.ok && Array.isArray(Xe)) {
+ io("[Grid] Using early-fetched data:", Xe.length, "assets");
+ const Me = ((Q = xe.data) == null ? void 0 : Q.total) ?? ((_ = xe.meta) == null ? void 0 : _.total) ?? null;
return {
ok: !0,
- assets: ke,
- total: we != null ? Number(we) || 0 : null,
- count: ke.length,
- limit: j,
+ assets: Xe,
+ total: Me != null ? Number(Me) || 0 : null,
+ count: Xe.length,
+ limit: v,
offset: 0
};
}
- } catch (Se) {
- io("[Grid] Early fetch failed, falling back to normal fetch", Se);
+ } catch (xe) {
+ io("[Grid] Early fetch failed, falling back to normal fetch", xe);
}
}
}
- return FL(
+ return OL(
ee,
M,
- j,
- O,
+ v,
+ F,
{
sanitizeQuery: Dm,
- buildListURL: Ns,
+ buildListURL: Rs,
get: Ft,
getGridState: () => t
},
@@ -42852,21 +42889,21 @@ function iV({
}
function w({ title: M = "" } = {}) {
i(), Array.isArray(t.assets) && t.assets.length ? (r(), X(M || t.query)) : (!t.statusMessage || !t.statusError) && o("No assets found");
- const j = (Array.isArray(t.assets) ? t.assets : []).map((O) => String((O == null ? void 0 : O.id) || "")).filter(Boolean);
- c(j, { activeId: t.activeId });
+ const v = (Array.isArray(t.assets) ? t.assets : []).map((F) => String((F == null ? void 0 : F.id) || "")).filter(Boolean);
+ c(v, { activeId: t.activeId });
}
async function R() {
- var ee, ce, ue, U;
- const M = C();
+ var ee, ae, ue, B;
+ const M = W();
if (!M || t.loading || t.done) return { ok: !0, skipped: !0 };
if (!p())
- return { ok: !0, skipped: !0, hidden: !0 };
+ return !t.assets.length && !t.loading && he.PREFETCH_NEXT_PAGE && G(t.requestId, 400), { ok: !0, skipped: !0, hidden: !0 };
if (b())
return { ok: !0, skipped: !0, busy: !0 };
- const j = Math.max(
+ const v = Math.max(
1,
- Math.min(fe.MAX_PAGE_SIZE, fe.DEFAULT_PAGE_SIZE)
- ), O = Date.now(), D = Number(t.total || 0) || 1e3, q = Math.min(
+ Math.min(he.MAX_PAGE_SIZE, he.DEFAULT_PAGE_SIZE)
+ ), F = Date.now(), D = Number(t.total || 0) || 1e3, q = Math.min(
200,
Math.max(8, Math.ceil(D / 1e3 * 30))
);
@@ -42876,28 +42913,28 @@ function iV({
for (; !t.done; ) {
if (!p())
return { ok: !0, skipped: !0, hidden: !0 };
- const _ = nV(j, Q), le = await v(t.query, _, t.offset, {
+ const _ = nY(v, Q), le = await j(t.query, _, t.offset, {
requestId: Number(t.requestId ?? 0) || 0,
signal: ((ee = t.abortController) == null ? void 0 : ee.signal) || null
});
if (!le.ok)
return le.aborted || le.stale || (t.done = !0, o(
- Nc("Failed to load assets", (le == null ? void 0 : le.error) || "Unknown error"),
+ Rc("Failed to load assets", (le == null ? void 0 : le.error) || "Unknown error"),
{ error: !0 }
)), le;
- le.total != null && (t.total = Number(le.total) || 0), y && (l({ query: t.query || "*", total: null, done: !1 }), ql(t), y = !1);
- const de = Number(le.count || 0) || 0, se = NL({
- count: de,
+ le.total != null && (t.total = Number(le.total) || 0), A && (l({ query: t.query || "*", total: null, done: !1 }), ql(t), A = !1);
+ const ce = Number(le.count || 0) || 0, de = kL({
+ count: ce,
limit: Number(le.limit || _) || _,
offset: t.offset,
total: le.total != null ? le.total : t.total
- }), ge = Number(T(M, le.assets || []) || 0) || 0;
- t.offset += se;
- const je = t.done;
- if (t.done = se <= 0 || Number.isFinite(Number(t.total)) && Number(t.total || 0) > 0 && t.offset >= Number(t.total || 0), (Q > 0 || t.done) && io(`[Grid LoadPage] offset=${t.offset}, fetched=${de}, consumed=${se}, added=${ge}, limit=${_}, done=${t.done}, visibleCount=${t.assets.length}, total=${t.total}, emptyBatches=${Q}/${q}`), t.done || ge > 0)
- return (ge > 0 || t.done) && X(t.query || ((ce = M.dataset) == null ? void 0 : ce.mjrQuery) || "*"), {
+ }), ge = Number(K(M, le.assets || []) || 0) || 0;
+ t.offset += de;
+ const Le = t.done;
+ if (t.done = de <= 0 || Number.isFinite(Number(t.total)) && Number(t.total || 0) > 0 && t.offset >= Number(t.total || 0), (Q > 0 || t.done) && io(`[Grid LoadPage] offset=${t.offset}, fetched=${ce}, consumed=${de}, added=${ge}, limit=${_}, done=${t.done}, visibleCount=${t.assets.length}, total=${t.total}, emptyBatches=${Q}/${q}`), t.done || ge > 0)
+ return (ge > 0 || t.done) && X(t.query || ((ae = M.dataset) == null ? void 0 : ae.mjrQuery) || "*"), {
ok: !0,
- count: de,
+ count: ce,
total: t.total
};
if (Q += 1, Q >= q)
@@ -42920,22 +42957,22 @@ function iV({
} catch (_) {
(ue = console.debug) == null || ue.call(console, _);
}
- return o(Nc("Failed to load assets", Q), {
+ return o(Rc("Failed to load assets", Q), {
error: !0
}), { ok: !1, error: (Q == null ? void 0 : Q.message) || String(Q) };
} finally {
try {
- const Q = Date.now() - O;
- Q < Hl && await Km(Hl - Q);
+ const Q = Date.now() - F;
+ Q < El && await Um(El - Q);
} catch (Q) {
- (U = console.debug) == null || U.call(console, Q);
+ (B = console.debug) == null || B.call(console, Q);
}
t.loading = !1, i();
}
}
- async function Y(M = "*", j = {}) {
- var Q, _, le, de, se;
- const { reset: O = !0, preserveVisibleUntilReady: D = !0 } = j || {}, q = C();
+ async function V(M = "*", v = {}) {
+ var Q, _, le, ce, de;
+ const { reset: F = !0, preserveVisibleUntilReady: D = !0 } = v || {}, q = W();
if (!q)
return { ok: !1, error: "Grid unavailable" };
try {
@@ -42943,44 +42980,44 @@ function iV({
} catch (ge) {
(Q = console.debug) == null || Q.call(console, ge);
}
- const ee = $L(M).trim() || "*", ce = /^\[object\s+HTML.*Element\]$/i.test(ee) ? "*" : ee, ue = Dm(ce) || ce;
- if (t.query = ue, O && b())
- return n("Grid refresh deferred while ComfyUI is generating..."), W(ue, j || {}), {
+ const ee = $L(M).trim() || "*", ae = /^\[object\s+HTML.*Element\]$/i.test(ee) ? "*" : ee, ue = Dm(ae) || ae;
+ if (t.query = ue, F && b())
+ return n("Grid refresh deferred while ComfyUI is generating..."), Z(ue, v || {}), {
ok: !0,
deferred: !0,
count: Number(t.offset || 0) || 0,
total: Number(t.total || 0) || 0
};
- if (O) {
- y = A({
- reset: O,
+ if (F) {
+ A = y({
+ reset: F,
preserveVisibleUntilReady: D
});
try {
(le = (_ = t.abortController) == null ? void 0 : _.abort) == null || le.call(_);
} catch (ge) {
- (de = console.debug) == null || de.call(console, ge);
+ (ce = console.debug) == null || ce.call(console, ge);
}
try {
t.abortController = typeof AbortController < "u" ? new AbortController() : null;
} catch {
t.abortController = null;
}
- if (t.requestId = (Number(t.requestId) || 0) + 1, h(), x(), r(), y ? (t.query = ue, t.offset = 0, t.total = null, t.done = !1) : l({ query: ue, total: null, done: !1 }), n(
+ if (t.requestId = (Number(t.requestId) || 0) + 1, C(), x(), r(), A ? (t.query = ue, t.offset = 0, t.total = null, t.done = !1) : l({ query: ue, total: null, done: !1 }), n(
ue === "*" ? "Loading assets..." : `Searching for "${ue}"...`
- ), ue === "*" && y)
+ ), ue === "*" && A)
try {
const ge = g();
ge.query = "*";
- const je = Xc(ge);
- if (pi.has(je) ? await B(ge, {
+ const Le = kc(ge);
+ if (pi.has(Le) ? await T(ge, {
allowReplaceExisting: !0
}) : !1) {
t.offset = 0, t.done = !1, t.loading = !1, i();
- const we = t.requestId;
+ const Me = t.requestId;
return G(
- we,
- Math.min(fe.PREFETCH_NEXT_PAGE_DELAY_MS ?? 700, 250)
+ Me,
+ Math.min(he.PREFETCH_NEXT_PAGE_DELAY_MS ?? 700, 250)
), {
ok: !0,
count: Number(t.offset || 0) || 0,
@@ -42989,80 +43026,80 @@ function iV({
};
}
} catch (ge) {
- (se = console.debug) == null || se.call(console, "[Grid] Snapshot fast-path failed, falling back", ge);
+ (de = console.debug) == null || de.call(console, "[Grid] Snapshot fast-path failed, falling back", ge);
}
}
- const U = await R();
- return fe.PREFETCH_NEXT_PAGE && (U != null && U.ok) && !(U != null && U.skipped) && !t.done && !(U != null && U.aborted) && G(t.requestId), O && w({ title: ue }), {
- ok: !!(U != null && U.ok),
+ const B = await R();
+ return he.PREFETCH_NEXT_PAGE && (B != null && B.ok) && !(B != null && B.skipped) && !t.done && !(B != null && B.aborted) && G(t.requestId), F && w({ title: ue }), {
+ ok: !!(B != null && B.ok),
count: Number(t.offset || 0) || 0,
total: Number(t.total || 0) || 0,
- error: U == null ? void 0 : U.error,
- aborted: !!(U != null && U.aborted)
+ error: B == null ? void 0 : B.error,
+ aborted: !!(B != null && B.aborted)
};
}
- async function F(M, j = {}) {
- var _, le, de, se, ge;
+ async function O(M, v = {}) {
+ var _, le, ce, de, ge;
const {
- title: O = "Collection",
+ title: F = "Collection",
reset: D = !0,
showLoading: q = !0,
preserveVisibleUntilReady: ee = !0
- } = j || {}, ce = C();
- if (!ce)
+ } = v || {}, ae = W();
+ if (!ae)
return { ok: !1, error: "Grid unavailable" };
- const ue = Array.isArray(M) ? M.slice() : [], U = Date.now(), Q = A({
+ const ue = Array.isArray(M) ? M.slice() : [], B = Date.now(), Q = y({
reset: D,
preserveVisibleUntilReady: ee
});
if (D) {
try {
(le = (_ = t.abortController) == null ? void 0 : _.abort) == null || le.call(_);
- } catch (je) {
- (de = console.debug) == null || de.call(console, je);
+ } catch (Le) {
+ (ce = console.debug) == null || ce.call(console, Le);
}
try {
t.abortController = typeof AbortController < "u" ? new AbortController() : null;
} catch {
t.abortController = null;
}
- t.requestId = (Number(t.requestId) || 0) + 1, x(), r(), Q ? (t.query = String(O || "Collection"), t.offset = 0, t.total = ue.length, t.done = !0) : (l({
- query: String(O || "Collection"),
+ t.requestId = (Number(t.requestId) || 0) + 1, x(), r(), Q ? (t.query = String(F || "Collection"), t.offset = 0, t.total = ue.length, t.done = !0) : (l({
+ query: String(F || "Collection"),
total: ue.length,
done: !0
- }), ql(t)), q ? (n(ue.length ? `Loading ${O}...` : `${O} is empty`), t.loading = !0) : (i(), t.loading = !1);
+ }), ql(t)), q ? (n(ue.length ? `Loading ${F}...` : `${F} is empty`), t.loading = !0) : (i(), t.loading = !1);
}
try {
- const je = ((se = ce.dataset) == null ? void 0 : se.mjrSort) || "mtime_desc", Se = ue.sort((ke, we) => OL(ke, we, je));
+ const Le = ((de = ae.dataset) == null ? void 0 : de.mjrSort) || "mtime_desc", xe = ue.sort((Xe, Me) => FL(Xe, Me, Le));
return D && Q && (l({
- query: String(O || "Collection"),
+ query: String(F || "Collection"),
total: ue.length,
done: !0
- }), ql(t)), T(ce, Se), t.offset = Se.length, t.total = Se.length, t.done = !0, w({ title: O }), { ok: !0, count: Se.length, total: Se.length };
- } catch (je) {
- return o(Nc("Failed to load collection", je), {
+ }), ql(t)), K(ae, xe), t.offset = xe.length, t.total = xe.length, t.done = !0, w({ title: F }), { ok: !0, count: xe.length, total: xe.length };
+ } catch (Le) {
+ return o(Rc("Failed to load collection", Le), {
error: !0
- }), { ok: !1, error: (je == null ? void 0 : je.message) || String(je) };
+ }), { ok: !1, error: (Le == null ? void 0 : Le.message) || String(Le) };
} finally {
if (q)
try {
- const je = Date.now() - U;
- je < Hl && await Km(Hl - je);
- } catch (je) {
- (ge = console.debug) == null || ge.call(console, je);
+ const Le = Date.now() - B;
+ Le < El && await Um(El - Le);
+ } catch (Le) {
+ (ge = console.debug) == null || ge.call(console, Le);
}
t.loading = !1, q && i();
}
}
- function N() {
- var M, j, O, D;
+ function k() {
+ var M, v, F, D;
try {
- zW(C());
+ zW(W());
} catch (q) {
(M = console.debug) == null || M.call(console, q);
}
try {
- (O = (j = t.abortController) == null ? void 0 : j.abort) == null || O.call(j);
+ (F = (v = t.abortController) == null ? void 0 : v.abort) == null || F.call(v);
} catch (q) {
(D = console.debug) == null || D.call(console, q);
}
@@ -43071,33 +43108,33 @@ function iV({
} catch {
t.abortController = null;
}
- t.requestId = (Number(t.requestId) || 0) + 1, t.loading = !1, h(), x(), i(), r(), y = !0, B(g(), { allowReplaceExisting: !0 }), a([], "");
+ t.requestId = (Number(t.requestId) || 0) + 1, t.loading = !1, C(), x(), i(), r(), A = !0, T(g(), { allowReplaceExisting: !0 }), a([], "");
}
- function V() {
- var M, j;
- (j = (M = t.virtualGrid) == null ? void 0 : M.setItems) == null || j.call(M, t.assets || []);
+ function Y() {
+ var M, v;
+ (v = (M = t.virtualGrid) == null ? void 0 : M.setItems) == null || v.call(M, t.assets || []);
}
- function k(M, { updateSelection: j = !0 } = {}) {
- const O = new Set(
+ function N(M, { updateSelection: v = !0 } = {}) {
+ const F = new Set(
(Array.isArray(M) ? M : [M]).map((q) => q == null ? "" : typeof q == "object" && (q == null ? void 0 : q.id) != null ? String(q.id) : String(q)).filter(Boolean)
);
- if (!O.size)
+ if (!F.size)
return { ok: !1, removed: 0, selectedIds: t.selectedIds.slice() };
let D = 0;
if (t.assets = (Array.isArray(t.assets) ? t.assets : []).filter((q) => {
- var ce;
+ var ae;
const ee = (q == null ? void 0 : q.id) != null ? String(q.id) : "";
- if (ee && O.has(ee)) {
+ if (ee && F.has(ee)) {
D += 1;
try {
t.assetIdSet.delete(ee);
} catch (ue) {
- (ce = console.debug) == null || ce.call(console, ue);
+ (ae = console.debug) == null || ae.call(console, ue);
}
return !1;
}
return !0;
- }), Number.isFinite(Number(t.total)) && (t.total = Math.max(0, Number(t.total || 0) - D)), j) {
+ }), Number.isFinite(Number(t.total)) && (t.total = Math.max(0, Number(t.total || 0) - D)), v) {
const q = t.assets.map((ee) => String((ee == null ? void 0 : ee.id) || "")).filter(Boolean);
c(q, { activeId: t.activeId });
}
@@ -43107,26 +43144,26 @@ function iV({
selectedIds: t.selectedIds.slice()
};
}
- function K() {
- var U, Q;
- const M = C(), j = s();
- if (!M || !j) return null;
- const O = (_) => {
+ function U() {
+ var B, Q;
+ const M = W(), v = s();
+ if (!M || !v) return null;
+ const F = (_) => {
if (!_) return !1;
try {
- const le = _.getBoundingClientRect(), de = j.getBoundingClientRect();
- return le.bottom >= de.top && le.top <= de.bottom;
+ const le = _.getBoundingClientRect(), ce = v.getBoundingClientRect();
+ return le.bottom >= ce.top && le.top <= ce.bottom;
} catch {
return !1;
}
- }, D = M.querySelector(".mjr-asset-card.is-selected"), q = d(), ee = q.find((_) => O(_)) || q[0] || null, ue = O(D) ? D : ee;
+ }, D = M.querySelector(".mjr-asset-card.is-selected"), q = d(), ee = q.find((_) => F(_)) || q[0] || null, ue = F(D) ? D : ee;
if (!ue) return null;
try {
- const _ = ue.getBoundingClientRect(), le = j.getBoundingClientRect();
+ const _ = ue.getBoundingClientRect(), le = v.getBoundingClientRect();
return {
- id: String(((U = ue.dataset) == null ? void 0 : U.mjrAssetId) || ""),
+ id: String(((B = ue.dataset) == null ? void 0 : B.mjrAssetId) || ""),
top: _.top - le.top,
- scrollTop: Number(j.scrollTop || 0) || 0
+ scrollTop: Number(v.scrollTop || 0) || 0
};
} catch (_) {
return (Q = console.debug) == null || Q.call(console, _), null;
@@ -43134,126 +43171,126 @@ function iV({
}
async function z(M) {
var ee;
- const j = C(), O = s();
- if (!j || !O || !M) return;
- await Em();
+ const v = W(), F = s();
+ if (!v || !F || !M) return;
+ await Hm();
const D = String(M.id || "").trim();
if (!D) {
- O.scrollTop = Number(M.scrollTop || 0) || 0;
+ F.scrollTop = Number(M.scrollTop || 0) || 0;
return;
}
- u(D, { align: "start" }), await Em();
- const q = j.querySelector(
- `.mjr-asset-card[data-mjr-asset-id="${tV(D)}"]`
+ u(D, { align: "start" }), await Hm();
+ const q = v.querySelector(
+ `.mjr-asset-card[data-mjr-asset-id="${tY(D)}"]`
);
if (!q) {
- O.scrollTop = Number(M.scrollTop || 0) || 0;
+ F.scrollTop = Number(M.scrollTop || 0) || 0;
return;
}
try {
- const ce = q.getBoundingClientRect(), ue = O.getBoundingClientRect(), U = ce.top - ue.top - Number(M.top || 0);
- O.scrollTop = (Number(O.scrollTop || 0) || 0) + U;
- } catch (ce) {
- (ee = console.debug) == null || ee.call(console, ce), O.scrollTop = Number(M.scrollTop || 0) || 0;
+ const ae = q.getBoundingClientRect(), ue = F.getBoundingClientRect(), B = ae.top - ue.top - Number(M.top || 0);
+ F.scrollTop = (Number(F.scrollTop || 0) || 0) + B;
+ } catch (ae) {
+ (ee = console.debug) == null || ee.call(console, ae), F.scrollTop = Number(M.scrollTop || 0) || 0;
}
}
- async function B(M = {}, j = {}) {
- var ee, ce, ue;
- const O = C();
- if (!O) return !1;
- const D = Xc(M), q = _L(D);
- if (!q || !Array.isArray(q.assets) || !q.assets.length || !j.allowReplaceExisting && Array.isArray(t.assets) && t.assets.length)
+ async function T(M = {}, v = {}) {
+ var ee, ae, ue;
+ const F = W();
+ if (!F) return !1;
+ const D = kc(M), q = _L(D);
+ if (!q || !Array.isArray(q.assets) || !q.assets.length || !v.allowReplaceExisting && Array.isArray(t.assets) && t.assets.length)
return !1;
try {
- (ce = (ee = t.abortController) == null ? void 0 : ee.abort) == null || ce.call(ee);
- } catch (U) {
- (ue = console.debug) == null || ue.call(console, U);
+ (ae = (ee = t.abortController) == null ? void 0 : ee.abort) == null || ae.call(ee);
+ } catch (B) {
+ (ue = console.debug) == null || ue.call(console, B);
}
try {
t.abortController = typeof AbortController < "u" ? new AbortController() : null;
} catch {
t.abortController = null;
}
- return t.requestId = (Number(t.requestId) || 0) + 1, h(), x(), l({
- query: q.query || j.title || "Cached",
+ return t.requestId = (Number(t.requestId) || 0) + 1, C(), x(), l({
+ query: q.query || v.title || "Cached",
total: Number(q.total ?? q.assets.length) || q.assets.length,
done: !!q.done
- }), ql(t), r(), i(), t.loading = !1, T(O, q.assets), t.offset = Math.max(
+ }), ql(t), r(), i(), t.loading = !1, K(F, q.assets), t.offset = Math.max(
Number(q.assets.length || 0) || 0,
Number(q.offset || q.assets.length) || q.assets.length
- ), t.total = Number(q.total ?? q.assets.length) || q.assets.length, t.done = !!q.done, w({ title: q.title || j.title || "Cached" }), !0;
+ ), t.total = Number(q.total ?? q.assets.length) || q.assets.length, t.done = !!q.done, w({ title: q.title || v.title || "Cached" }), !0;
}
function J(M) {
return {
getOrCreateState: () => t,
ensureVirtualGrid: () => t.virtualGrid,
- upsertState: kc,
- maxBatchSize: HL,
- debounceMs: EL,
- assetKey: (j) => PL(j) || f(j, M),
- loadMajoorSettings: Xn
+ upsertState: Nc,
+ maxBatchSize: EL,
+ debounceMs: HL,
+ assetKey: (v) => PL(v) || f(v, M),
+ loadMajoorSettings: kn
};
}
function P(M) {
- const j = C();
- return !j || !M || !M.id ? !1 : Bm(j, M, J(j));
+ const v = W();
+ return !v || !M || !M.id ? !1 : Km(v, M, J(v));
}
- let H = !1;
+ let E = !1;
function $(M) {
- const j = C();
- if (!j || !M || !M.id) return !1;
- const O = J(j), D = Bm(j, M, O);
- return D && !H && (H = !0, queueMicrotask(() => {
- H = !1;
- const q = C();
+ const v = W();
+ if (!v || !M || !M.id) return !1;
+ const F = J(v), D = Km(v, M, F);
+ return D && !E && (E = !0, queueMicrotask(() => {
+ E = !1;
+ const q = W();
q && Ua(q, J(q));
})), D;
}
- function E() {
- var j, O, D, q, ee, ce;
- X(t.query || "Cached"), L(), h();
+ function H() {
+ var v, F, D, q, ee, ae;
+ X(t.query || "Cached"), L(), C();
try {
- (O = (j = t.abortController) == null ? void 0 : j.abort) == null || O.call(j);
+ (F = (v = t.abortController) == null ? void 0 : v.abort) == null || F.call(v);
} catch (ue) {
(D = console.debug) == null || D.call(console, ue);
}
- const M = C();
+ const M = W();
if (M)
try {
- const ue = wp(M, kc);
+ const ue = wp(M, Nc);
ue != null && ue.timer && (clearTimeout(ue.timer), ue.timer = null), (ee = (q = ue == null ? void 0 : ue.pending) == null ? void 0 : q.clear) == null || ee.call(q);
} catch (ue) {
- (ce = console.debug) == null || ce.call(console, ue);
+ (ae = console.debug) == null || ae.call(console, ue);
}
}
try {
- window.addEventListener("pagehide", E, { once: !0 });
+ window.addEventListener("pagehide", H, { once: !0 });
} catch (M) {
- (oe = console.debug) == null || oe.call(console, M);
+ (ne = console.debug) == null || ne.call(console, M);
}
return {
- loadAssets: Y,
- loadAssetsFromList: F,
+ loadAssets: V,
+ loadAssetsFromList: O,
loadNextPage: R,
- prepareGridForScopeSwitch: N,
- refreshGrid: V,
- removeAssets: k,
- captureAnchor: K,
+ prepareGridForScopeSwitch: k,
+ refreshGrid: Y,
+ removeAssets: N,
+ captureAnchor: U,
restoreAnchor: z,
- hydrateFromSnapshot: B,
+ hydrateFromSnapshot: T,
upsertAsset: P,
upsertAssetNow: $,
- dispose: E
+ dispose: H
};
}
-const oV = {
+const oY = {
key: 0,
class: "mjr-grid-loading-overlay",
style: { position: "absolute", inset: "0", "z-index": "4", display: "flex", "align-items": "flex-start", "justify-content": "center", padding: "14px", "pointer-events": "none" }
-}, rV = { style: { width: "100%" } }, lV = { class: "mjr-grid-skeleton-layout" }, aV = { style: { "margin-top": "10px", "font-size": "12px", opacity: "0.68", "text-align": "center" } }, cV = ["data-index"], sV = ["data-mjr-asset-id", "data-mjr-filename-key", "data-mjr-ext", "data-mjr-stem", "data-mjr-kind", "data-mjr-live-placeholder", "data-mjr-stacked", "data-mjr-stack-count", "data-mjr-dup-stacked", "data-mjr-dup-count", "aria-label", "aria-selected", "onMousedown", "onClick", "onDblclick"], dV = {
+}, rY = { style: { width: "100%" } }, lY = { class: "mjr-grid-skeleton-layout" }, aY = { style: { "margin-top": "10px", "font-size": "12px", opacity: "0.68", "text-align": "center" } }, cY = ["data-index"], sY = ["data-mjr-asset-id", "data-mjr-filename-key", "data-mjr-ext", "data-mjr-stem", "data-mjr-kind", "data-mjr-live-placeholder", "data-mjr-stacked", "data-mjr-stack-count", "data-mjr-dup-stacked", "data-mjr-dup-count", "aria-label", "aria-selected", "onMousedown", "onClick", "onDblclick"], dY = {
key: 3,
style: { display: "flex", "flex-direction": "column", width: "100%" }
-}, uV = ["data-mjr-asset-id", "data-mjr-filename-key", "data-mjr-ext", "data-mjr-stem", "data-mjr-kind", "data-mjr-live-placeholder", "data-mjr-stacked", "data-mjr-stack-count", "data-mjr-dup-stacked", "data-mjr-dup-count", "aria-label", "aria-selected", "onMousedown", "onClick", "onDblclick"], mV = {
+}, uY = ["data-mjr-asset-id", "data-mjr-filename-key", "data-mjr-ext", "data-mjr-stem", "data-mjr-kind", "data-mjr-live-placeholder", "data-mjr-stacked", "data-mjr-stack-count", "data-mjr-dup-stacked", "data-mjr-dup-count", "aria-label", "aria-selected", "onMousedown", "onClick", "onDblclick"], mY = {
__name: "VirtualAssetGridHost",
props: {
scrollElement: {
@@ -43282,53 +43319,53 @@ const oV = {
}
},
setup(e, { expose: t }) {
- const n = e, i = Ae(null), o = Ae(0), r = Ae(!1), l = Ae(0), a = /* @__PURE__ */ new WeakMap();
- function c(te) {
- return (Array.isArray(te) ? te : []).slice().sort((ye, We) => {
- const pe = Number((ye == null ? void 0 : ye.mtime) || (ye == null ? void 0 : ye.created_at) || 0) || 0;
- return (Number((We == null ? void 0 : We.mtime) || (We == null ? void 0 : We.created_at) || 0) || 0) - pe;
+ const n = e, i = We(null), o = We(0), r = We(!1), l = We(0), a = /* @__PURE__ */ new WeakMap();
+ function c(ie) {
+ return (Array.isArray(ie) ? ie : []).slice().sort((pe, Ce) => {
+ const ye = Number((pe == null ? void 0 : pe.mtime) || (pe == null ? void 0 : pe.created_at) || 0) || 0;
+ return (Number((Ce == null ? void 0 : Ce.mtime) || (Ce == null ? void 0 : Ce.created_at) || 0) || 0) - ye;
});
}
cg("mjrStackService", {
- openStackGroup: async (te) => {
- const ye = i.value;
- if (!ye || !te) return;
- const We = String(te.stack_id || "").trim();
- if (!We) return;
- const pe = `stack:${We}`;
- ye._mjrStackMembersCache || (ye._mjrStackMembersCache = /* @__PURE__ */ new Map());
- let De = ye._mjrStackMembersCache.get(pe);
+ openStackGroup: async (ie) => {
+ const pe = i.value;
+ if (!pe || !ie) return;
+ const Ce = String(ie.stack_id || "").trim();
+ if (!Ce) return;
+ const ye = `stack:${Ce}`;
+ pe._mjrStackMembersCache || (pe._mjrStackMembersCache = /* @__PURE__ */ new Map());
+ let De = pe._mjrStackMembersCache.get(ye);
if (!Array.isArray(De)) {
- const Zt = await Ft(ry(We), { timeoutMs: 3e4 });
- if (Zt != null && Zt.ok && Array.isArray(Zt == null ? void 0 : Zt.data))
- De = Zt.data, ye._mjrStackMembersCache.set(pe, De);
+ const At = await Ft(ry(Ce), { timeoutMs: 3e4 });
+ if (At != null && At.ok && Array.isArray(At == null ? void 0 : At.data))
+ De = At.data, pe._mjrStackMembersCache.set(ye, De);
else
return;
}
- const ot = c(De);
- ye.dispatchEvent(
- new CustomEvent(ht.OPEN_STACK_GROUP, {
+ const ut = c(De);
+ pe.dispatchEvent(
+ new CustomEvent(ft.OPEN_STACK_GROUP, {
bubbles: !0,
detail: {
- asset: te,
- members: ot,
- title: `Generation group (${ot.length} assets)`,
- stackId: We
+ asset: ie,
+ members: ut,
+ title: `Generation group (${ut.length} assets)`,
+ stackId: Ce
}
})
);
},
- openDupGroup: (te) => {
- const ye = i.value;
- if (!ye || !te) return;
- const We = Array.isArray(te._mjrDupMembers) ? te._mjrDupMembers : [te];
- ye.dispatchEvent(
- new CustomEvent(ht.OPEN_STACK_GROUP, {
+ openDupGroup: (ie) => {
+ const pe = i.value;
+ if (!pe || !ie) return;
+ const Ce = Array.isArray(ie._mjrDupMembers) ? ie._mjrDupMembers : [ie];
+ pe.dispatchEvent(
+ new CustomEvent(ft.OPEN_STACK_GROUP, {
bubbles: !0,
detail: {
- asset: te,
- members: We,
- title: `Duplicates — ${We.length} copies`,
+ asset: ie,
+ members: Ce,
+ title: `Duplicates — ${Ce.length} copies`,
isDupGroup: !0
}
})
@@ -43340,359 +43377,359 @@ const oV = {
selectedIdSet: d,
setLoadingMessage: u,
clearLoadingMessage: I,
- setStatusMessage: y,
- clearStatusMessage: S,
- resetAssets: Z,
- setSelection: C,
+ setStatusMessage: A,
+ clearStatusMessage: h,
+ resetAssets: S,
+ setSelection: W,
reconcileSelection: g,
- getSelectedAssets: A,
+ getSelectedAssets: y,
getActiveAsset: p
} = _w();
- function b(te) {
- return te ? typeof te == "object" && "value" in te ? te.value || null : te : null;
+ function b(ie) {
+ return ie ? typeof ie == "object" && "value" in ie ? ie.value || null : ie : null;
}
const L = ze(() => b(n.scrollElement));
- function h() {
- var ye;
- const te = i.value;
- if (!te) return [];
+ function C() {
+ var pe;
+ const ie = i.value;
+ if (!ie) return [];
try {
- return Array.from(te.querySelectorAll(".mjr-asset-card"));
- } catch (We) {
- return (ye = console.debug) == null || ye.call(console, We), [];
+ return Array.from(ie.querySelectorAll(".mjr-asset-card"));
+ } catch (Ce) {
+ return (pe = console.debug) == null || pe.call(console, Ce), [];
}
}
- function G(te, { align: ye = "auto" } = {}) {
- var ot, Zt, tn, Pt;
- const We = String(te || "").trim();
- if (!We) return;
- const De = (Array.isArray(K.value) ? K.value : []).findIndex(
- (vt) => String((vt == null ? void 0 : vt.id) || "") === We
+ function G(ie, { align: pe = "auto" } = {}) {
+ var ut, At, Ht, Qt;
+ const Ce = String(ie || "").trim();
+ if (!Ce) return;
+ const De = (Array.isArray(U.value) ? U.value : []).findIndex(
+ (xt) => String((xt == null ? void 0 : xt.id) || "") === Ce
);
if (!(De < 0)) {
if (n.virtualize) {
- const vt = Math.floor(De / Math.max(1, $.value));
+ const xt = Math.floor(De / Math.max(1, $.value));
try {
- ce.value.scrollToIndex(vt, { align: ye });
- } catch (re) {
- (ot = console.debug) == null || ot.call(console, re);
+ ae.value.scrollToIndex(xt, { align: pe });
+ } catch (Gt) {
+ (ut = console.debug) == null || ut.call(console, Gt);
}
return;
}
try {
- (tn = (Zt = s.cardElements.get(We)) == null ? void 0 : Zt.scrollIntoView) == null || tn.call(Zt, {
+ (Ht = (At = s.cardElements.get(Ce)) == null ? void 0 : At.scrollIntoView) == null || Ht.call(At, {
block: "nearest",
inline: "nearest"
});
- } catch (vt) {
- (Pt = console.debug) == null || Pt.call(console, vt);
+ } catch (xt) {
+ (Qt = console.debug) == null || Qt.call(console, xt);
}
}
}
- function W() {
+ function Z() {
return md(i.value, L.value);
}
- const f = iV({
+ const f = iY({
gridContainerRef: i,
state: s,
setLoadingMessage: u,
clearLoadingMessage: I,
- setStatusMessage: y,
- clearStatusMessage: S,
- resetAssets: Z,
- setSelection: C,
+ setStatusMessage: A,
+ clearStatusMessage: h,
+ resetAssets: S,
+ setSelection: W,
reconcileSelection: g,
readScrollElement: () => L.value,
- readRenderedCards: h,
+ readRenderedCards: C,
scrollToAssetId: G,
- canLoadMore: W
+ canLoadMore: Z
});
- function X(te) {
- const ye = String((te == null ? void 0 : te.filename) || ""), We = ye.lastIndexOf(".");
- return We >= 0 ? ye.slice(We + 1).toUpperCase() : "";
+ function X(ie) {
+ const pe = String((ie == null ? void 0 : ie.filename) || ""), Ce = pe.lastIndexOf(".");
+ return Ce >= 0 ? pe.slice(Ce + 1).toUpperCase() : "";
}
- function x(te) {
- const ye = String((te == null ? void 0 : te.filename) || ""), We = ye.lastIndexOf(".");
- return We >= 0 ? ye.slice(0, We).toLowerCase() : ye.toLowerCase();
+ function x(ie) {
+ const pe = String((ie == null ? void 0 : ie.filename) || ""), Ce = pe.lastIndexOf(".");
+ return Ce >= 0 ? pe.slice(0, Ce).toLowerCase() : pe.toLowerCase();
}
- function T(te) {
- return d.value.has(String((te == null ? void 0 : te.id) || ""));
+ function K(ie) {
+ return d.value.has(String((ie == null ? void 0 : ie.id) || ""));
}
- function v(te) {
- return String((te == null ? void 0 : te.kind) || "").toLowerCase() === "folder";
+ function j(ie) {
+ return String((ie == null ? void 0 : ie.kind) || "").toLowerCase() === "folder";
}
- function w(te) {
- var We;
- const ye = i.value;
- return !ye || String(((We = ye.dataset) == null ? void 0 : We.mjrGroupStacks) || "") !== "1" ? !1 : !!String((te == null ? void 0 : te.stack_id) || "").trim() && Number((te == null ? void 0 : te.stack_asset_count) || 0) > 1;
+ function w(ie) {
+ var Ce;
+ const pe = i.value;
+ return !pe || String(((Ce = pe.dataset) == null ? void 0 : Ce.mjrGroupStacks) || "") !== "1" ? !1 : !!String((ie == null ? void 0 : ie.stack_id) || "").trim() && Number((ie == null ? void 0 : ie.stack_asset_count) || 0) > 1;
}
- function R(te) {
- return (te == null ? void 0 : te._mjrLivePlaceholder) === !0 || (te == null ? void 0 : te.is_live_placeholder) === !0 || String((te == null ? void 0 : te.id) || "").trim().toLowerCase().startsWith("live:");
+ function R(ie) {
+ return (ie == null ? void 0 : ie._mjrLivePlaceholder) === !0 || (ie == null ? void 0 : ie.is_live_placeholder) === !0 || String((ie == null ? void 0 : ie.id) || "").trim().toLowerCase().startsWith("live:");
}
- function Y(te) {
- return !!te && te._mjrDupHidden !== !0;
+ function V(ie) {
+ return !!ie && ie._mjrDupHidden !== !0;
}
- function F() {
- var We;
- const te = i.value;
- if (!te) return;
- const ye = new Set(
- (Array.isArray(s.selectedIds) ? s.selectedIds : []).map((pe) => String(pe || "").trim()).filter(Boolean)
+ function O() {
+ var Ce;
+ const ie = i.value;
+ if (!ie) return;
+ const pe = new Set(
+ (Array.isArray(s.selectedIds) ? s.selectedIds : []).map((ye) => String(ye || "").trim()).filter(Boolean)
);
- rI(te, ye, s.activeId || "");
+ rI(ie, pe, s.activeId || "");
try {
- ye.size ? te.dataset.mjrSelectedAssetId = String(s.activeId || Array.from(ye)[0] || "") : delete te.dataset.mjrSelectedAssetId;
- } catch (pe) {
- (We = console.debug) == null || We.call(console, pe);
+ pe.size ? ie.dataset.mjrSelectedAssetId = String(s.activeId || Array.from(pe)[0] || "") : delete ie.dataset.mjrSelectedAssetId;
+ } catch (ye) {
+ (Ce = console.debug) == null || Ce.call(console, ye);
}
}
- function N() {
- var Zt, tn;
- const te = i.value;
- if (!te) return;
- const ye = Array.isArray(s.selectedIds) ? s.selectedIds.slice() : [], We = String(s.activeId || ""), pe = `${ye.join("|")}::${We}`;
- if (pe === N._lastSelectionKey) return;
- N._lastSelectionKey = pe;
- const De = A(), ot = {
- selectedIds: ye,
- activeId: We,
+ function k() {
+ var At, Ht;
+ const ie = i.value;
+ if (!ie) return;
+ const pe = Array.isArray(s.selectedIds) ? s.selectedIds.slice() : [], Ce = String(s.activeId || ""), ye = `${pe.join("|")}::${Ce}`;
+ if (ye === k._lastSelectionKey) return;
+ k._lastSelectionKey = ye;
+ const De = y(), ut = {
+ selectedIds: pe,
+ activeId: Ce,
selectedAssets: De
};
try {
- te.dispatchEvent(new CustomEvent("mjr:selection-changed", { detail: ot }));
- } catch (Pt) {
- (Zt = console.debug) == null || Zt.call(console, Pt);
+ ie.dispatchEvent(new CustomEvent("mjr:selection-changed", { detail: ut }));
+ } catch (Qt) {
+ (At = console.debug) == null || At.call(console, Qt);
}
if (n.emitWindowSelectionEvents)
try {
- window.dispatchEvent(new CustomEvent("mjr:selection-changed", { detail: ot }));
- } catch (Pt) {
- (tn = console.debug) == null || tn.call(console, Pt);
+ window.dispatchEvent(new CustomEvent("mjr:selection-changed", { detail: ut }));
+ } catch (Qt) {
+ (Ht = console.debug) == null || Ht.call(console, Qt);
}
}
- N._lastSelectionKey = "";
- function V(te) {
- const ye = Array.isArray(te) ? te : [], We = /* @__PURE__ */ new Map();
- for (const De of ye) {
- const ot = fr(De == null ? void 0 : De.filename);
- if (!ot)
+ k._lastSelectionKey = "";
+ function Y(ie) {
+ const pe = Array.isArray(ie) ? ie : [], Ce = /* @__PURE__ */ new Map();
+ for (const De of pe) {
+ const ut = fr(De == null ? void 0 : De.filename);
+ if (!ut)
continue;
- let Zt = We.get(ot);
- Zt || (Zt = [], We.set(ot, Zt)), Zt.push(De);
+ let At = Ce.get(ut);
+ At || (At = [], Ce.set(ut, At)), At.push(De);
}
- const pe = [];
- for (const De of ye) {
- const ot = fr(De == null ? void 0 : De.filename);
- if (!ot) {
- De._mjrNameCollision = !1, delete De._mjrNameCollisionCount, delete De._mjrNameCollisionPaths, De._mjrDupStack = !1, De._mjrDupMembers = null, De._mjrDupCount = 0, pe.push(De);
+ const ye = [];
+ for (const De of pe) {
+ const ut = fr(De == null ? void 0 : De.filename);
+ if (!ut) {
+ De._mjrNameCollision = !1, delete De._mjrNameCollisionCount, delete De._mjrNameCollisionPaths, De._mjrDupStack = !1, De._mjrDupMembers = null, De._mjrDupCount = 0, ye.push(De);
continue;
}
- const Zt = We.get(ot) || [];
- if (Zt.length && Zt[0] === De) {
- for (const tn of Zt)
- tn._mjrNameCollision = !1, delete tn._mjrNameCollisionCount, delete tn._mjrNameCollisionPaths, tn._mjrDupStack = !1, tn._mjrDupMembers = null, tn._mjrDupCount = 0;
- if (Zt.length >= 2) {
- const tn = Array.isArray(De._mjrDupMembers) ? De._mjrDupMembers : [], Pt = new Set(tn.map((re) => String((re == null ? void 0 : re.id) || ""))), vt = [
- ...tn,
- ...Zt.filter((re) => !Pt.has(String((re == null ? void 0 : re.id) || "")))
+ const At = Ce.get(ut) || [];
+ if (At.length && At[0] === De) {
+ for (const Ht of At)
+ Ht._mjrNameCollision = !1, delete Ht._mjrNameCollisionCount, delete Ht._mjrNameCollisionPaths, Ht._mjrDupStack = !1, Ht._mjrDupMembers = null, Ht._mjrDupCount = 0;
+ if (At.length >= 2) {
+ const Ht = Array.isArray(De._mjrDupMembers) ? De._mjrDupMembers : [], Qt = new Set(Ht.map((Gt) => String((Gt == null ? void 0 : Gt.id) || ""))), xt = [
+ ...Ht,
+ ...At.filter((Gt) => !Qt.has(String((Gt == null ? void 0 : Gt.id) || "")))
];
- De._mjrDupStack = !0, De._mjrDupMembers = vt, De._mjrDupCount = vt.length;
+ De._mjrDupStack = !0, De._mjrDupMembers = xt, De._mjrDupCount = xt.length;
}
- pe.push(De);
+ ye.push(De);
}
}
- return pe;
+ return ye;
}
- const k = ze(() => V(s.assets)), K = ze(() => (Array.isArray(k.value) ? k.value : []).filter((ye) => Y(ye)));
+ const N = ze(() => Y(s.assets)), U = ze(() => (Array.isArray(N.value) ? N.value : []).filter((pe) => V(pe)));
function z() {
- var We, pe;
- const te = i.value;
- if (!te) return;
- const ye = {
- count: Array.isArray(K.value) ? K.value.length : 0,
+ var Ce, ye;
+ const ie = i.value;
+ if (!ie) return;
+ const pe = {
+ count: Array.isArray(U.value) ? U.value.length : 0,
total: Number(s.total || 0) || 0
};
try {
- te.dataset.mjrShown = String(ye.count), te.dataset.mjrTotal = String(ye.total), te.dataset.mjrHiddenPngSiblings = String(
+ ie.dataset.mjrShown = String(pe.count), ie.dataset.mjrTotal = String(pe.total), ie.dataset.mjrHiddenPngSiblings = String(
Number(s.hiddenPngSiblings || 0) || 0
);
} catch (De) {
- (We = console.debug) == null || We.call(console, De);
+ (Ce = console.debug) == null || Ce.call(console, De);
}
try {
- te.dispatchEvent(new CustomEvent("mjr:grid-stats", { detail: ye }));
+ ie.dispatchEvent(new CustomEvent("mjr:grid-stats", { detail: pe }));
} catch (De) {
- (pe = console.debug) == null || pe.call(console, De);
+ (ye = console.debug) == null || ye.call(console, De);
}
}
- function B(te) {
- var We;
- if (!(te != null && te.id)) return;
- const ye = (Array.isArray(s.assets) ? s.assets : []).find(
- (pe) => String((pe == null ? void 0 : pe.id) || "") === String(te.id)
+ function T(ie) {
+ var Ce;
+ if (!(ie != null && ie.id)) return;
+ const pe = (Array.isArray(s.assets) ? s.assets : []).find(
+ (ye) => String((ye == null ? void 0 : ye.id) || "") === String(ie.id)
);
- if (ye)
+ if (pe)
try {
- ye.rating = te.rating, ye.tags = te.tags;
- } catch (pe) {
- (We = console.debug) == null || We.call(console, pe);
+ pe.rating = ie.rating, pe.tags = ie.tags;
+ } catch (ye) {
+ (Ce = console.debug) == null || Ce.call(console, ye);
}
}
function J() {
- var te;
+ var ie;
try {
window.dispatchEvent(new CustomEvent("mjr:open-sidebar", { detail: { tab: "details" } }));
- } catch (ye) {
- (te = console.debug) == null || te.call(console, ye);
+ } catch (pe) {
+ (ie = console.debug) == null || ie.call(console, pe);
}
}
- function P(te) {
- var ye, We, pe, De;
- if (te) {
- te._mjrSelectionManagedByVue = !0;
+ function P(ie) {
+ var pe, Ce, ye, De;
+ if (ie) {
+ ie._mjrSelectionManagedByVue = !0;
try {
- (ye = te._mjrPrimaryPointerSelectionUnbind) == null || ye.call(te);
- } catch (ot) {
- (We = console.debug) == null || We.call(console, ot);
+ (pe = ie._mjrPrimaryPointerSelectionUnbind) == null || pe.call(ie);
+ } catch (ut) {
+ (Ce = console.debug) == null || Ce.call(console, ut);
}
try {
- Oe == null || Oe();
- } catch (ot) {
- (pe = console.debug) == null || pe.call(console, ot);
+ rt == null || rt();
+ } catch (ut) {
+ (ye = console.debug) == null || ye.call(console, ut);
}
- eZ(te, {
+ eZ(ie, {
applySettingsClasses: n.applyDefaultSettingsClasses
});
try {
- Oe = aw(te);
- } catch (ot) {
- (De = console.debug) == null || De.call(console, ot), Oe = null;
+ rt = aw(ie);
+ } catch (ut) {
+ (De = console.debug) == null || De.call(console, ut), rt = null;
}
- te._mjrPrimaryPointerSelectionUnbind = () => {
- }, te._mjrGetAssets = () => Array.isArray(K.value) ? K.value : [], te._mjrSetSelection = (ot, Zt = "") => {
- const tn = C(ot, Zt);
- return F(), N(), tn.selectedIds;
- }, te._mjrRemoveAssets = (ot, Zt = {}) => {
- const tn = f.removeAssets(ot, Zt);
- return z(), tn;
- }, te._mjrGetRenderedCards = () => h(), te._mjrScrollToAssetId = (ot, Zt = {}) => {
- G(ot, Zt);
- }, te._mjrHasAssetId = (ot) => (Array.isArray(s.assets) ? s.assets : []).some(
- (Zt) => String((Zt == null ? void 0 : Zt.id) || "") === String(ot || "")
- ), te._mjrGetGridState = () => s, te._mjrGetSelectedAssets = () => A(), te._mjrGetActiveAsset = () => p(), te._mjrOnKeyboardAssetChanged = (ot) => B(ot), te._mjrOpenKeyboardDetails = () => J(), te._mjrLoadAssets = (...ot) => f.loadAssets(...ot), te._mjrLoadAssetsFromList = (...ot) => f.loadAssetsFromList(...ot), te._mjrPrepareForScopeSwitch = () => f.prepareGridForScopeSwitch(), te._mjrRefreshGrid = () => (n.applyDefaultSettingsClasses && (ol(te), l.value += 1), f.refreshGrid()), te._mjrCaptureAnchor = () => f.captureAnchor(), te._mjrRestoreAnchor = (ot) => f.restoreAnchor(ot), te._mjrHydrateFromSnapshot = (...ot) => f.hydrateFromSnapshot(...ot), te._mjrUpsertAsset = (ot) => f.upsertAsset(ot), te._mjrUpsertAssetNow = (ot) => f.upsertAssetNow(ot), te._mjrDispose = () => {
+ ie._mjrPrimaryPointerSelectionUnbind = () => {
+ }, ie._mjrGetAssets = () => Array.isArray(U.value) ? U.value : [], ie._mjrSetSelection = (ut, At = "") => {
+ const Ht = W(ut, At);
+ return O(), k(), Ht.selectedIds;
+ }, ie._mjrRemoveAssets = (ut, At = {}) => {
+ const Ht = f.removeAssets(ut, At);
+ return z(), Ht;
+ }, ie._mjrGetRenderedCards = () => C(), ie._mjrScrollToAssetId = (ut, At = {}) => {
+ G(ut, At);
+ }, ie._mjrHasAssetId = (ut) => (Array.isArray(s.assets) ? s.assets : []).some(
+ (At) => String((At == null ? void 0 : At.id) || "") === String(ut || "")
+ ), ie._mjrGetGridState = () => s, ie._mjrGetSelectedAssets = () => y(), ie._mjrGetActiveAsset = () => p(), ie._mjrOnKeyboardAssetChanged = (ut) => T(ut), ie._mjrOpenKeyboardDetails = () => J(), ie._mjrLoadAssets = (...ut) => f.loadAssets(...ut), ie._mjrLoadAssetsFromList = (...ut) => f.loadAssetsFromList(...ut), ie._mjrPrepareForScopeSwitch = () => f.prepareGridForScopeSwitch(), ie._mjrRefreshGrid = () => (n.applyDefaultSettingsClasses && (ol(ie), l.value += 1), f.refreshGrid()), ie._mjrCaptureAnchor = () => f.captureAnchor(), ie._mjrRestoreAnchor = (ut) => f.restoreAnchor(ut), ie._mjrHydrateFromSnapshot = (...ut) => f.hydrateFromSnapshot(...ut), ie._mjrUpsertAsset = (ut) => f.upsertAsset(ut), ie._mjrUpsertAssetNow = (ut) => f.upsertAssetNow(ut), ie._mjrDispose = () => {
f.prepareGridForScopeSwitch(), f.dispose(), s.cardElements.clear();
};
}
}
- cn(
+ dn(
i,
- (te) => {
- te && (P(te), F(), z());
+ (ie) => {
+ ie && (P(ie), O(), z());
},
{ immediate: !0 }
- ), cn(
+ ), dn(
() => `${(s.selectedIds || []).join("|")}::${String(s.activeId || "")}`,
() => {
- i.value && (F(), N());
+ i.value && (O(), k());
},
{ flush: "post" }
- ), cn(
- () => `${Array.isArray(K.value) ? K.value.length : 0}::${Number(s.total || 0)}::${Number(s.hiddenPngSiblings || 0)}`,
+ ), dn(
+ () => `${Array.isArray(U.value) ? U.value.length : 0}::${Number(s.total || 0)}::${Number(s.hiddenPngSiblings || 0)}`,
() => {
i.value && z();
},
{ flush: "post", immediate: !0 }
);
- function H() {
- var pe;
- const te = i.value, ye = String(((pe = te == null ? void 0 : te.dataset) == null ? void 0 : pe.mjrBottomFeed) || "").toLowerCase() === "true", We = Number(fe.GRID_MIN_SIZE || 120) || 120;
- return ye ? Math.max(
+ function E() {
+ var ye;
+ const ie = i.value, pe = String(((ye = ie == null ? void 0 : ie.dataset) == null ? void 0 : ye.mjrBottomFeed) || "").toLowerCase() === "true", Ce = Number(he.GRID_MIN_SIZE || 120) || 120;
+ return pe ? Math.max(
80,
- Number(fe.FEED_GRID_MIN_SIZE || We) || We
- ) : Math.max(80, We);
+ Number(he.FEED_GRID_MIN_SIZE || Ce) || Ce
+ ) : Math.max(80, Ce);
}
const $ = ze(() => {
- var pe;
- l.value;
- const te = Math.max(0, Number(fe.GRID_GAP || 10) || 10), ye = H(), We = Number(o.value || 0) || Number(((pe = L.value) == null ? void 0 : pe.clientWidth) || 0) || 0;
- return We <= 0 ? 1 : Math.max(1, Math.floor((We + te) / (ye + te)));
- }), E = ze(() => {
var ye;
- return (Number(o.value || 0) || Number(((ye = L.value) == null ? void 0 : ye.clientWidth) || 0) || 0) > 0;
- }), oe = ze(() => (l.value, Math.max(0, Number(fe.GRID_GAP || 10) || 10))), M = ze(() => {
- var We;
- const te = Math.max(1, $.value), ye = Number(o.value || 0) || Number(((We = L.value) == null ? void 0 : We.clientWidth) || 0) || 0;
- return ye <= 0 ? H() : Math.max(80, Math.floor((ye - oe.value * Math.max(0, te - 1)) / te));
- }), j = ze(() => {
l.value;
- const te = !!fe.GRID_SHOW_DETAILS;
- return M.value + (te ? 82 : 0) + oe.value;
- }), O = ze(() => {
- const te = Array.isArray(K.value) ? K.value : [], ye = Math.max(1, $.value);
+ const ie = Math.max(0, Number(he.GRID_GAP || 10) || 10), pe = E(), Ce = Number(o.value || 0) || Number(((ye = L.value) == null ? void 0 : ye.clientWidth) || 0) || 0;
+ return Ce <= 0 ? 1 : Math.max(1, Math.floor((Ce + ie) / (pe + ie)));
+ }), H = ze(() => {
+ var pe;
+ return (Number(o.value || 0) || Number(((pe = L.value) == null ? void 0 : pe.clientWidth) || 0) || 0) > 0;
+ }), ne = ze(() => (l.value, Math.max(0, Number(he.GRID_GAP || 10) || 10))), M = ze(() => {
+ var Ce;
+ const ie = Math.max(1, $.value), pe = Number(o.value || 0) || Number(((Ce = L.value) == null ? void 0 : Ce.clientWidth) || 0) || 0;
+ return pe <= 0 ? E() : Math.max(80, Math.floor((pe - ne.value * Math.max(0, ie - 1)) / ie));
+ }), v = ze(() => {
+ l.value;
+ const ie = !!he.GRID_SHOW_DETAILS;
+ return M.value + (ie ? 82 : 0) + ne.value;
+ }), F = ze(() => {
+ const ie = Array.isArray(U.value) ? U.value : [], pe = Math.max(1, $.value);
if (n.virtualize) return [];
- const We = [];
- for (let pe = 0; pe < te.length; pe += ye)
- We.push({
- index: Math.floor(pe / ye),
- items: te.slice(pe, pe + ye)
+ const Ce = [];
+ for (let ye = 0; ye < ie.length; ye += pe)
+ Ce.push({
+ index: Math.floor(ye / pe),
+ items: ie.slice(ye, ye + pe)
});
- return We;
+ return Ce;
}), D = ze(() => {
- const te = Array.isArray(K.value) ? K.value : [], ye = Math.max(1, $.value);
- return Math.ceil(te.length / ye);
+ const ie = Array.isArray(U.value) ? U.value : [], pe = Math.max(1, $.value);
+ return Math.ceil(ie.length / pe);
});
- function q(te) {
- const ye = Array.isArray(K.value) ? K.value : [], We = Math.max(1, $.value), pe = Math.max(0, Number(te) || 0) * We;
- return ye.slice(pe, pe + We);
+ function q(ie) {
+ const pe = Array.isArray(U.value) ? U.value : [], Ce = Math.max(1, $.value), ye = Math.max(0, Number(ie) || 0) * Ce;
+ return pe.slice(ye, ye + Ce);
}
const ee = ze(() => {
- var We;
- const te = Math.max(1, j.value), ye = ((We = L.value) == null ? void 0 : We.clientHeight) || 0;
- return ye <= 0 ? 6 : Math.max(3, Math.min(20, Math.ceil(ye / te)));
- }), ce = t1(
+ var Ce;
+ const ie = Math.max(1, v.value), pe = ((Ce = L.value) == null ? void 0 : Ce.clientHeight) || 0;
+ return pe <= 0 ? 6 : Math.max(3, Math.min(20, Math.ceil(pe / ie)));
+ }), ae = t1(
ze(() => ({
count: n.virtualize ? D.value : 0,
getScrollElement: () => L.value,
- estimateSize: () => j.value,
+ estimateSize: () => v.value,
overscan: ee.value,
measureElement: fb
}))
- ), ue = ze(() => n.virtualize ? ce.value.getVirtualItems() : []), U = ze(
- () => ue.value.map((te) => ({
- key: te.key,
- index: te.index,
- items: q(te.index)
+ ), ue = ze(() => n.virtualize ? ae.value.getVirtualItems() : []), B = ze(
+ () => ue.value.map((ie) => ({
+ key: ie.key,
+ index: ie.index,
+ items: q(ie.index)
}))
), Q = ze(() => {
- const te = /* @__PURE__ */ new Map();
- for (const ye of ue.value)
- te.set(ye.index, ye);
- return te;
- }), _ = ze(() => n.virtualize ? ce.value.getTotalSize() : 0), le = ze(() => (l.value, !!fe.GRID_SHOW_DETAILS)), de = ze(() => {
- const te = Math.max(1, Number($.value || 1));
- return Math.max(12, Math.min(36, te * 4));
- }), se = ze(
- () => Array.from({ length: Number(de.value || 12) }, (te, ye) => ye)
+ const ie = /* @__PURE__ */ new Map();
+ for (const pe of ue.value)
+ ie.set(pe.index, pe);
+ return ie;
+ }), _ = ze(() => n.virtualize ? ae.value.getTotalSize() : 0), le = ze(() => (l.value, !!he.GRID_SHOW_DETAILS)), ce = ze(() => {
+ const ie = Math.max(1, Number($.value || 1));
+ return Math.max(12, Math.min(36, ie * 4));
+ }), de = ze(
+ () => Array.from({ length: Number(ce.value || 12) }, (ie, pe) => pe)
), ge = ze(() => {
- const te = Math.max(1, Number($.value || 1)), ye = se.value, We = [];
- for (let pe = 0; pe < ye.length; pe += te)
- We.push(ye.slice(pe, pe + te));
- return We;
- }), je = ze(() => {
- const te = Math.max(80, Number(j.value || 0) - Number(oe.value || 0)), ye = Math.max(80, Number(M.value || 0));
- return Math.max(0, te - ye);
- }), Se = ze(() => ({
+ const ie = Math.max(1, Number($.value || 1)), pe = de.value, Ce = [];
+ for (let ye = 0; ye < pe.length; ye += ie)
+ Ce.push(pe.slice(ye, ye + ie));
+ return Ce;
+ }), Le = ze(() => {
+ const ie = Math.max(80, Number(v.value || 0) - Number(ne.value || 0)), pe = Math.max(80, Number(M.value || 0));
+ return Math.max(0, ie - pe);
+ }), xe = ze(() => ({
display: "flex",
- gap: `${oe.value}px`,
- paddingBottom: `${oe.value}px`,
+ gap: `${ne.value}px`,
+ paddingBottom: `${ne.value}px`,
boxSizing: "border-box"
- })), ke = ze(() => {
- const te = Math.max(80, Number(M.value || 0)), ye = Math.max(80, Number(j.value || 0) - Number(oe.value || 0));
+ })), Xe = ze(() => {
+ const ie = Math.max(80, Number(M.value || 0)), pe = Math.max(80, Number(v.value || 0) - Number(ne.value || 0));
return {
- width: `${te}px`,
- flex: `0 0 ${te}px`,
- minWidth: `${te}px`,
- height: `${ye}px`,
+ width: `${ie}px`,
+ flex: `0 0 ${ie}px`,
+ minWidth: `${ie}px`,
+ height: `${pe}px`,
borderRadius: "12px",
border: "1px solid rgba(255,255,255,0.22)",
background: "rgba(192,198,206,0.20)",
@@ -43700,13 +43737,13 @@ const oV = {
boxShadow: "0 6px 18px rgba(0,0,0,0.24)",
boxSizing: "border-box"
};
- }), we = ze(() => ({
+ }), Me = ze(() => ({
width: "100%",
height: `${Math.max(80, Number(M.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"
- })), Je = ze(() => ({
+ })), Fe = ze(() => ({
height: "10px",
margin: "10px 10px 6px",
borderRadius: "8px",
@@ -43714,7 +43751,7 @@ const oV = {
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"
- })), $e = ze(() => ({
+ })), it = ze(() => ({
height: "10px",
margin: "0 10px 10px",
borderRadius: "8px",
@@ -43724,391 +43761,389 @@ const oV = {
animation: "mjr-skeleton-shimmer 2.2s ease-in-out infinite"
})), qe = ze(() => ({
display: le.value ? "block" : "none",
- minHeight: `${Math.max(0, Number(je.value || 0))}px`
+ minHeight: `${Math.max(0, Number(Le.value || 0))}px`
}));
- function Ue() {
- var ye;
- const te = Number(((ye = L.value) == null ? void 0 : ye.clientWidth) || 0) || 0;
- if (te > 0) {
- o.value = te, r.value = !0;
+ function Pe() {
+ var pe;
+ const ie = Number(((pe = L.value) == null ? void 0 : pe.clientWidth) || 0) || 0;
+ if (ie > 0) {
+ o.value = ie, r.value = !0;
return;
}
r.value || (o.value = 0);
}
- let Te = null, Oe = null, pt = !1;
- cn(
+ let Re = null, rt = null, Te = !1;
+ dn(
L,
- (te, ye) => {
- var We, pe, De;
+ (ie, pe) => {
+ var Ce, ye, De;
try {
- (We = Te == null ? void 0 : Te.disconnect) == null || We.call(Te);
- } catch (ot) {
- (pe = console.debug) == null || pe.call(console, ot);
+ (Ce = Re == null ? void 0 : Re.disconnect) == null || Ce.call(Re);
+ } catch (ut) {
+ (ye = console.debug) == null || ye.call(console, ut);
}
- if (te) {
- Ue();
+ if (ie) {
+ Pe();
try {
- Te = new ResizeObserver(() => {
- Ue();
- }), Te.observe(te);
- } catch (ot) {
- (De = console.debug) == null || De.call(console, ot), Te = null;
+ Re = new ResizeObserver(() => {
+ Pe();
+ }), Re.observe(ie);
+ } catch (ut) {
+ (De = console.debug) == null || De.call(console, ut), Re = null;
}
}
},
{ immediate: !0 }
- ), cn(
+ ), dn(
() => D.value,
async () => {
- var te;
- if (E.value) {
+ var ie;
+ if (H.value) {
await wo(), me();
try {
- ce.value.measure();
- } catch (ye) {
- (te = console.debug) == null || te.call(console, ye);
+ ae.value.measure();
+ } catch (pe) {
+ (ie = console.debug) == null || ie.call(console, pe);
}
}
}
- ), cn(
+ ), dn(
() => s.assets,
- async (te) => {
- if (!Array.isArray(te) || te.length === 0) {
- const ye = i.value;
- ye != null && ye._mjrStackMembersCache && ye._mjrStackMembersCache.clear();
+ async (ie) => {
+ if (!Array.isArray(ie) || ie.length === 0) {
+ const pe = i.value;
+ pe != null && pe._mjrStackMembersCache && pe._mjrStackMembersCache.clear();
}
await wo(), me();
}
);
- function Me(te, ye) {
- const We = String((ye == null ? void 0 : ye.filename) || "").trim().toLowerCase(), pe = a.get(te);
- if (pe && pe !== We) {
- const ot = s.renderedFilenameMap.get(pe);
- ot && (ot.delete(te), ot.size || s.renderedFilenameMap.delete(pe));
+ function qt(ie, pe) {
+ const Ce = String((pe == null ? void 0 : pe.filename) || "").trim().toLowerCase(), ye = a.get(ie);
+ if (ye && ye !== Ce) {
+ const ut = s.renderedFilenameMap.get(ye);
+ ut && (ut.delete(ie), ut.size || s.renderedFilenameMap.delete(ye));
}
- if (!We) {
- a.delete(te);
+ if (!Ce) {
+ a.delete(ie);
return;
}
- let De = s.renderedFilenameMap.get(We);
- De || (De = /* @__PURE__ */ new Set(), s.renderedFilenameMap.set(We, De)), De.add(te), a.set(te, We);
+ let De = s.renderedFilenameMap.get(Ce);
+ De || (De = /* @__PURE__ */ new Set(), s.renderedFilenameMap.set(Ce, De)), De.add(ie), a.set(ie, Ce);
}
- function Xt(te) {
- if (!te) return;
- const ye = a.get(te);
- if (!ye) return;
- const We = s.renderedFilenameMap.get(ye);
- We && (We.delete(te), We.size || s.renderedFilenameMap.delete(ye)), a.delete(te);
+ function kt(ie) {
+ if (!ie) return;
+ const pe = a.get(ie);
+ if (!pe) return;
+ const Ce = s.renderedFilenameMap.get(pe);
+ Ce && (Ce.delete(ie), Ce.size || s.renderedFilenameMap.delete(pe)), a.delete(ie);
}
- function Mt(te) {
- var re, ne, Ie;
- const ye = String(te || "").trim().toLowerCase();
- if (!ye) return;
- const We = s.renderedFilenameMap.get(ye), pe = Array.from(We || []);
- if (!pe.length) return;
+ function we(ie) {
+ var Gt, je, oe;
+ const pe = String(ie || "").trim().toLowerCase();
+ if (!pe) return;
+ const Ce = s.renderedFilenameMap.get(pe), ye = Array.from(Ce || []);
+ if (!ye.length) return;
const De = (Array.isArray(s.assets) ? s.assets : []).filter(
- (Ne) => String((Ne == null ? void 0 : Ne.filename) || "").trim().toLowerCase() === ye
- ), ot = Math.max(
- Number(((ne = (re = s.filenameCounts) == null ? void 0 : re.get) == null ? void 0 : ne.call(re, ye)) || 0) || 0,
+ (se) => String((se == null ? void 0 : se.filename) || "").trim().toLowerCase() === pe
+ ), ut = Math.max(
+ Number(((je = (Gt = s.filenameCounts) == null ? void 0 : Gt.get) == null ? void 0 : je.call(Gt, pe)) || 0) || 0,
De.length
- ), Zt = VI(De), Pt = pe.find((Ne) => {
- var St;
- const He = String(((St = Ne._mjrAsset) == null ? void 0 : St.id) || ""), rt = String((Zt == null ? void 0 : Zt.id) || "");
- return He && rt && He === rt;
- }) || pe[0] || pe[0] || null, vt = (Pt == null ? void 0 : Pt._mjrAsset) || Zt || De[0] || null;
- YI(vt, De);
- for (const Ne of pe) {
- delete Ne.dataset.mjrDupHidden;
- const He = Ne._mjrAsset;
- He && (He._mjrNameCollision = !1, delete He._mjrNameCollisionCount, delete He._mjrNameCollisionPaths, He._mjrDupStack = !1, He._mjrDupMembers = null, He._mjrDupCount = 0, He._mjrDupHidden = !1);
+ ), At = YI(De), Qt = ye.find((se) => {
+ var gt;
+ const fe = String(((gt = se._mjrAsset) == null ? void 0 : gt.id) || ""), Be = String((At == null ? void 0 : At.id) || "");
+ return fe && Be && fe === Be;
+ }) || ye[0] || ye[0] || null, xt = (Qt == null ? void 0 : Qt._mjrAsset) || At || De[0] || null;
+ VI(xt, De);
+ for (const se of ye) {
+ delete se.dataset.mjrDupHidden;
+ const fe = se._mjrAsset;
+ fe && (fe._mjrNameCollision = !1, delete fe._mjrNameCollisionCount, delete fe._mjrNameCollisionPaths, fe._mjrDupStack = !1, fe._mjrDupMembers = null, fe._mjrDupCount = 0, fe._mjrDupHidden = !1);
}
- if (!Pt || !vt || ot < 2) {
- for (const Ne of pe)
+ if (!Qt || !xt || ut < 2) {
+ for (const se of ye)
try {
r && s.loadingMessage;
- } catch (He) {
- (Ie = console.debug) == null || Ie.call(console, He);
+ } catch (fe) {
+ (oe = console.debug) == null || oe.call(console, fe);
}
return;
}
- vt._mjrDupStack = !0, vt._mjrDupMembers = De.length ? De : [vt], vt._mjrDupCount = vt._mjrDupMembers.length, vt._mjrNameCollision = !1;
- for (let Ne = 1; Ne < pe.length; Ne += 1)
- pe[Ne].dataset.mjrDupHidden = "true", pe[Ne]._mjrAsset && (pe[Ne]._mjrAsset._mjrDupHidden = !0);
+ xt._mjrDupStack = !0, xt._mjrDupMembers = De.length ? De : [xt], xt._mjrDupCount = xt._mjrDupMembers.length, xt._mjrNameCollision = !1;
+ for (let se = 1; se < ye.length; se += 1)
+ ye[se].dataset.mjrDupHidden = "true", ye[se]._mjrAsset && (ye[se]._mjrAsset._mjrDupHidden = !0);
}
function me() {
- for (const te of s.renderedFilenameMap.keys())
- Mt(te);
+ for (const ie of s.renderedFilenameMap.keys())
+ we(ie);
}
- function Pe(te, ye) {
- var De, ot;
- const We = String((te == null ? void 0 : te.id) || "").trim();
- if (!We) return;
- if (!ye) {
- const Zt = s.cardElements.get(We), tn = Zt ? a.get(Zt) : "";
- Xt(Zt), s.cardElements.delete(We), Mt(tn);
+ function He(ie, pe) {
+ var De, ut;
+ const Ce = String((ie == null ? void 0 : ie.id) || "").trim();
+ if (!Ce) return;
+ if (!pe) {
+ const At = s.cardElements.get(Ce), Ht = At ? a.get(At) : "";
+ kt(At), s.cardElements.delete(Ce), we(Ht);
return;
}
- const pe = (ye == null ? void 0 : ye.$el) ?? ye;
- if (pe instanceof HTMLElement) {
- s.cardElements.set(We, pe), pe._mjrIsVue = !0, pe._mjrAsset = te, pe._mjrReactiveAsset = te, pe.dataset.mjrKind = String((te == null ? void 0 : te.kind) || ""), Me(pe, te), Mt(String((te == null ? void 0 : te.filename) || "").trim().toLowerCase());
+ const ye = (pe == null ? void 0 : pe.$el) ?? pe;
+ if (ye instanceof HTMLElement) {
+ s.cardElements.set(Ce, ye), ye._mjrIsVue = !0, ye._mjrAsset = ie, ye._mjrReactiveAsset = ie, ye.dataset.mjrKind = String((ie == null ? void 0 : ie.kind) || ""), qt(ye, ie), we(String((ie == null ? void 0 : ie.filename) || "").trim().toLowerCase());
try {
- (De = n.onCardRendered) == null || De.call(n, pe, te, i.value);
- } catch (Zt) {
- (ot = console.debug) == null || ot.call(console, Zt);
+ (De = n.onCardRendered) == null || De.call(n, ye, ie, i.value);
+ } catch (At) {
+ (ut = console.debug) == null || ut.call(console, At);
}
}
}
- function Le(te) {
- return (ye) => Pe(te, ye);
+ function Ye(ie) {
+ return (pe) => He(ie, pe);
}
- function Ot(te, ye) {
- var We, pe;
+ function Pt(ie, pe) {
+ var Ce, ye;
try {
- const De = (We = te == null ? void 0 : te.closest) == null ? void 0 : We.call(te, "a, button, input, textarea, select, label");
- return !!(De && ((pe = ye == null ? void 0 : ye.contains) != null && pe.call(ye, De)));
+ const De = (Ce = ie == null ? void 0 : ie.closest) == null ? void 0 : Ce.call(ie, "a, button, input, textarea, select, label");
+ return !!(De && ((ye = pe == null ? void 0 : pe.contains) != null && ye.call(pe, De)));
} catch {
return !1;
}
}
- const Xe = {
+ const ke = {
assetId: "",
at: 0
};
- function Ee(te, ye) {
- var Zt, tn, Pt;
- const We = String((ye == null ? void 0 : ye.id) || "").trim();
- if (!We) return;
- if ((te == null ? void 0 : te.type) === "click" && Number((te == null ? void 0 : te.detail) || 0) > 0) {
- const vt = Date.now() - Number(Xe.at || 0);
- if (Xe.assetId === We && vt >= 0 && vt < 500) {
- Xe.assetId = "", Xe.at = 0;
+ function Ee(ie, pe) {
+ var At, Ht, Qt;
+ const Ce = String((pe == null ? void 0 : pe.id) || "").trim();
+ if (!Ce) return;
+ if ((ie == null ? void 0 : ie.type) === "click" && Number((ie == null ? void 0 : ie.detail) || 0) > 0) {
+ const xt = Date.now() - Number(ke.at || 0);
+ if (ke.assetId === Ce && xt >= 0 && xt < 500) {
+ ke.assetId = "", ke.at = 0;
return;
}
}
- if (Ot(te == null ? void 0 : te.target, te == null ? void 0 : te.currentTarget)) return;
- const pe = Array.isArray(s.assets) ? s.assets : [], De = pe.findIndex((vt) => String((vt == null ? void 0 : vt.id) || "") === We), ot = Array.isArray(s.selectedIds) ? s.selectedIds.slice() : [];
- if (te != null && te.shiftKey && De >= 0) {
- const vt = String(s.selectionAnchorId || s.activeId || We).trim(), re = pe.findIndex((rt) => String((rt == null ? void 0 : rt.id) || "") === vt), ne = re >= 0 ? re : De, Ie = Math.min(ne, De), Ne = Math.max(ne, De), He = pe.slice(Ie, Ne + 1).map((rt) => String((rt == null ? void 0 : rt.id) || "")).filter(Boolean);
- C(He, We);
+ if (Pt(ie == null ? void 0 : ie.target, ie == null ? void 0 : ie.currentTarget)) return;
+ const ye = Array.isArray(s.assets) ? s.assets : [], De = ye.findIndex((xt) => String((xt == null ? void 0 : xt.id) || "") === Ce), ut = Array.isArray(s.selectedIds) ? s.selectedIds.slice() : [];
+ if (ie != null && ie.shiftKey && De >= 0) {
+ const xt = String(s.selectionAnchorId || s.activeId || Ce).trim(), Gt = ye.findIndex((Be) => String((Be == null ? void 0 : Be.id) || "") === xt), je = Gt >= 0 ? Gt : De, oe = Math.min(je, De), se = Math.max(je, De), fe = ye.slice(oe, se + 1).map((Be) => String((Be == null ? void 0 : Be.id) || "")).filter(Boolean);
+ W(fe, Ce);
return;
}
- if (te != null && te.ctrlKey || te != null && te.metaKey) {
- const vt = new Set(ot.map(String));
- vt.has(We) ? vt.delete(We) : vt.add(We);
- const re = Array.from(vt);
- C(re, vt.has(We) ? We : re[0] || "");
+ if (ie != null && ie.ctrlKey || ie != null && ie.metaKey) {
+ const xt = new Set(ut.map(String));
+ xt.has(Ce) ? xt.delete(Ce) : xt.add(Ce);
+ const Gt = Array.from(xt);
+ W(Gt, xt.has(Ce) ? Ce : Gt[0] || "");
return;
}
- C([We], We);
+ W([Ce], Ce);
try {
- (tn = (Zt = s.cardElements.get(We)) == null ? void 0 : Zt.focus) == null || tn.call(Zt, { preventScroll: !0 });
- } catch (vt) {
- (Pt = console.debug) == null || Pt.call(console, vt);
+ (Ht = (At = s.cardElements.get(Ce)) == null ? void 0 : At.focus) == null || Ht.call(At, { preventScroll: !0 });
+ } catch (xt) {
+ (Qt = console.debug) == null || Qt.call(console, xt);
}
}
- function Ke(te, ye) {
- Number((te == null ? void 0 : te.button) ?? 0) === 0 && (Xe.assetId = String((ye == null ? void 0 : ye.id) || "").trim(), Xe.at = Date.now(), Ee(te, ye));
+ function Ke(ie, pe) {
+ Number((ie == null ? void 0 : ie.button) ?? 0) === 0 && (ke.assetId = String((pe == null ? void 0 : pe.id) || "").trim(), ke.at = Date.now(), Ee(ie, pe));
}
- function nt(te) {
- const ye = (Array.isArray(s.assets) ? s.assets : []).filter(
- (pe) => !v(pe)
- ), We = ye.findIndex(
- (pe) => String((pe == null ? void 0 : pe.id) || "") === String((te == null ? void 0 : te.id) || "")
+ function lt(ie) {
+ const pe = (Array.isArray(s.assets) ? s.assets : []).filter(
+ (ye) => !j(ye)
+ ), Ce = pe.findIndex(
+ (ye) => String((ye == null ? void 0 : ye.id) || "") === String((ie == null ? void 0 : ie.id) || "")
);
- !ye.length || We < 0 || tc({ assets: ye, index: We });
+ !pe.length || Ce < 0 || nc({ assets: pe, index: Ce });
}
- function ut(te) {
- var ye, We, pe, De;
+ function wt(ie) {
+ var pe, Ce, ye, De;
try {
if (typeof n.onCardDblclick == "function") {
n.onCardDblclick({
- asset: te,
+ asset: ie,
assets: Array.isArray(s.assets) ? s.assets : [],
gridContainer: i.value
});
return;
}
- } catch (ot) {
- (ye = console.debug) == null || ye.call(console, ot);
+ } catch (ut) {
+ (pe = console.debug) == null || pe.call(console, ut);
}
- if (v(te)) {
+ if (j(ie)) {
try {
- (pe = (We = i.value) == null ? void 0 : We.dispatchEvent) == null || pe.call(
- We,
+ (ye = (Ce = i.value) == null ? void 0 : Ce.dispatchEvent) == null || ye.call(
+ Ce,
new CustomEvent("mjr:open-folder-asset", {
bubbles: !0,
- detail: { asset: te }
+ detail: { asset: ie }
})
);
- } catch (ot) {
- (De = console.debug) == null || De.call(console, ot);
+ } catch (ut) {
+ (De = console.debug) == null || De.call(console, ut);
}
return;
}
- nt(te);
+ lt(ie);
}
- let It = null;
- function dt() {
- var te, ye, We;
- Ue();
+ let at = null;
+ function tt() {
+ var ie, pe, Ce;
+ Pe();
try {
- (ye = (te = ce.value) == null ? void 0 : te.measure) == null || ye.call(te);
- } catch (pe) {
- (We = console.debug) == null || We.call(console, pe);
+ (pe = (ie = ae.value) == null ? void 0 : ie.measure) == null || pe.call(ie);
+ } catch (ye) {
+ (Ce = console.debug) == null || Ce.call(console, ye);
}
}
- function Re() {
- if (dt(), !W()) {
+ function Oe() {
+ tt(), requestAnimationFrame(() => {
requestAnimationFrame(() => {
- requestAnimationFrame(() => {
- dt(), lt();
- });
+ tt(), nt();
});
- return;
- }
- lt();
+ }), setTimeout(() => {
+ tt(), nt();
+ }, 150);
}
- function Wt(te) {
- if (!te || !n.virtualize) return () => {
+ function Rt(ie) {
+ if (!ie || !n.virtualize) return () => {
};
- const ye = () => {
+ const pe = () => {
if (s.loading || s.done) return;
- Number(te.scrollHeight || 0) - (Number(te.scrollTop || 0) + Number(te.clientHeight || 0)) <= Math.max(600, j.value * 4) && f.loadNextPage();
+ Number(ie.scrollHeight || 0) - (Number(ie.scrollTop || 0) + Number(ie.clientHeight || 0)) <= Math.max(600, v.value * 4) && f.loadNextPage();
};
- return te.addEventListener("scroll", ye, { passive: !0 }), () => {
- var We;
+ return ie.addEventListener("scroll", pe, { passive: !0 }), () => {
+ var Ce;
try {
- te.removeEventListener("scroll", ye);
- } catch (pe) {
- (We = console.debug) == null || We.call(console, pe);
+ ie.removeEventListener("scroll", pe);
+ } catch (ye) {
+ (Ce = console.debug) == null || Ce.call(console, ye);
}
};
}
- cn(
+ dn(
L,
- (te) => {
- var ye;
+ (ie) => {
+ var pe;
try {
- It == null || It();
- } catch (We) {
- (ye = console.debug) == null || ye.call(console, We);
+ at == null || at();
+ } catch (Ce) {
+ (pe = console.debug) == null || pe.call(console, Ce);
}
- It = Wt(te);
+ at = Rt(ie);
},
{ immediate: !0 }
);
- async function lt() {
- if (!n.virtualize || !E.value || s.loading || s.done) return;
- const te = L.value;
- if (!te) return;
+ async function nt() {
+ if (!n.virtualize || !H.value || s.loading || s.done) return;
+ const ie = L.value;
+ if (!ie) return;
await wo();
- const ye = Number(te.scrollHeight || 0) || 0, We = Number(te.clientHeight || 0) || 0;
- ye <= We + 40 && f.loadNextPage();
+ const pe = Number(ie.scrollHeight || 0) || 0, Ce = Number(ie.clientHeight || 0) || 0;
+ pe <= Ce + 40 && f.loadNextPage();
}
- cn(
+ dn(
() => `${Array.isArray(s.assets) ? s.assets.length : 0}::${$.value}::${s.loading}::${s.done}`,
() => {
- lt();
+ nt();
},
{ flush: "post" }
);
- function qt(te) {
- var ye;
- if (!(!te || !n.virtualize))
+ function Mt(ie) {
+ var pe;
+ if (!(!ie || !n.virtualize))
try {
- ce.value.measureElement(te);
- } catch (We) {
- (ye = console.debug) == null || ye.call(console, We);
+ ae.value.measureElement(ie);
+ } catch (Ce) {
+ (pe = console.debug) == null || pe.call(console, Ce);
}
}
- function yt() {
+ function dt() {
return {
width: `${M.value}px`,
flex: `0 0 ${M.value}px`,
minWidth: `${M.value}px`
};
}
- function mt(te) {
- return Q.value.get(te) || null;
+ function bt(ie) {
+ return Q.value.get(ie) || null;
}
- function kt(te) {
- const ye = mt(te);
+ function Yt(ie) {
+ const pe = bt(ie);
return {
position: "absolute",
left: "0",
top: "0",
- transform: `translateY(${Number((ye == null ? void 0 : ye.start) || 0)}px)`,
+ transform: `translateY(${Number((pe == null ? void 0 : pe.start) || 0)}px)`,
width: "100%",
display: "flex",
- gap: `${oe.value}px`,
- paddingBottom: `${oe.value}px`,
+ gap: `${ne.value}px`,
+ paddingBottom: `${ne.value}px`,
boxSizing: "border-box"
};
}
function $t() {
return {
display: "flex",
- gap: `${oe.value}px`,
- paddingBottom: `${oe.value}px`,
+ gap: `${ne.value}px`,
+ paddingBottom: `${ne.value}px`,
boxSizing: "border-box"
};
}
- function Tt() {
+ function nn() {
l.value += 1, n.applyDefaultSettingsClasses && i.value && ol(i.value);
}
- return cn(
+ return dn(
() => n.applyDefaultSettingsClasses,
() => {
i.value && n.applyDefaultSettingsClasses && ol(i.value);
},
{ immediate: !0 }
), xr(() => {
- var te, ye, We, pe, De, ot, Zt, tn, Pt, vt, re;
+ var ie, pe, Ce, ye, De, ut, At, Ht, Qt, xt, Gt;
try {
- (ye = (te = i.value) == null ? void 0 : te._mjrPrimaryPointerSelectionUnbind) == null || ye.call(te);
- } catch (ne) {
- (We = console.debug) == null || We.call(console, ne);
+ (pe = (ie = i.value) == null ? void 0 : ie._mjrPrimaryPointerSelectionUnbind) == null || pe.call(ie);
+ } catch (je) {
+ (Ce = console.debug) == null || Ce.call(console, je);
}
try {
i.value && (i.value._mjrPrimaryPointerSelectionUnbind = null, i.value._mjrSelectionManagedByVue = !1);
- } catch (ne) {
- (pe = console.debug) == null || pe.call(console, ne);
+ } catch (je) {
+ (ye = console.debug) == null || ye.call(console, je);
}
try {
- (De = Te == null ? void 0 : Te.disconnect) == null || De.call(Te);
- } catch (ne) {
- (ot = console.debug) == null || ot.call(console, ne);
+ (De = Re == null ? void 0 : Re.disconnect) == null || De.call(Re);
+ } catch (je) {
+ (ut = console.debug) == null || ut.call(console, je);
}
try {
- It == null || It();
- } catch (ne) {
- (Zt = console.debug) == null || Zt.call(console, ne);
+ at == null || at();
+ } catch (je) {
+ (At = console.debug) == null || At.call(console, je);
}
try {
f.dispose();
- } catch (ne) {
- (tn = console.debug) == null || tn.call(console, ne);
+ } catch (je) {
+ (Ht = console.debug) == null || Ht.call(console, je);
}
try {
- Oe == null || Oe();
- } catch (ne) {
- (Pt = console.debug) == null || Pt.call(console, ne);
+ rt == null || rt();
+ } catch (je) {
+ (Qt = console.debug) == null || Qt.call(console, je);
}
- Oe = null;
+ rt = null;
try {
- window.removeEventListener("mjr-settings-changed", Tt), pt = !1;
- } catch (ne) {
- (vt = console.debug) == null || vt.call(console, ne);
+ window.removeEventListener("mjr-settings-changed", nn), Te = !1;
+ } catch (je) {
+ (xt = console.debug) == null || xt.call(console, je);
}
try {
- window.removeEventListener("mjr:keepalive-attached", Re);
- } catch (ne) {
- (re = console.debug) == null || re.call(console, ne);
+ window.removeEventListener("mjr:keepalive-attached", Oe);
+ } catch (je) {
+ (Gt = console.debug) == null || Gt.call(console, je);
}
- }), cn(
+ }), dn(
i,
- (te) => {
- te && (pt || (window.addEventListener("mjr-settings-changed", Tt), window.addEventListener("mjr:keepalive-attached", Re), pt = !0));
+ (ie) => {
+ ie && (Te || (window.addEventListener("mjr-settings-changed", nn), window.addEventListener("mjr:keepalive-attached", Oe), Te = !0));
},
{ immediate: !0 }
), t({
@@ -44118,40 +44153,40 @@ const oV = {
get assets() {
return Array.isArray(s.assets) ? s.assets : [];
},
- loadAssets(...te) {
- return f.loadAssets(...te);
+ loadAssets(...ie) {
+ return f.loadAssets(...ie);
},
- loadAssetsFromList(...te) {
- return f.loadAssetsFromList(...te);
+ loadAssetsFromList(...ie) {
+ return f.loadAssetsFromList(...ie);
},
- loadNextPage(...te) {
- return f.loadNextPage(...te);
+ loadNextPage(...ie) {
+ return f.loadNextPage(...ie);
},
- prepareGridForScopeSwitch(...te) {
- return f.prepareGridForScopeSwitch(...te);
+ prepareGridForScopeSwitch(...ie) {
+ return f.prepareGridForScopeSwitch(...ie);
},
- refreshGrid(...te) {
- return f.refreshGrid(...te);
+ refreshGrid(...ie) {
+ return f.refreshGrid(...ie);
},
- removeAssets(...te) {
- return f.removeAssets(...te);
+ removeAssets(...ie) {
+ return f.removeAssets(...ie);
},
- upsertAsset(...te) {
- return f.upsertAsset(...te);
+ upsertAsset(...ie) {
+ return f.upsertAsset(...ie);
},
- captureAnchor(...te) {
- return f.captureAnchor(...te);
+ captureAnchor(...ie) {
+ return f.captureAnchor(...ie);
},
- restoreAnchor(...te) {
- return f.restoreAnchor(...te);
+ restoreAnchor(...ie) {
+ return f.restoreAnchor(...ie);
},
- hydrateFromSnapshot(...te) {
- return f.hydrateFromSnapshot(...te);
+ hydrateFromSnapshot(...ie) {
+ return f.hydrateFromSnapshot(...ie);
},
dispose() {
return f.dispose();
}
- }), (te, ye) => (be(), Ce("div", {
+ }), (ie, pe) => (be(), Ze("div", {
ref_key: "gridContainerRef",
ref: i,
class: "mjr-grid",
@@ -44159,44 +44194,44 @@ const oV = {
role: "grid",
style: { position: "relative", "min-height": "100%" }
}, [
- xe(s).loading && !xe(s).assets.length || !r.value && xe(s).assets.length ? (be(), Ce("div", oV, [
- ie("div", rV, [
- ie("div", lV, [
- (be(!0), Ce(Nt, null, Cn(ge.value, (We, pe) => (be(), Ce("div", {
- key: `skr-${pe}`,
- style: Lt(Se.value)
+ ve(s).loading && !ve(s).assets.length || !r.value && ve(s).assets.length ? (be(), Ze("div", oY, [
+ te("div", rY, [
+ te("div", lY, [
+ (be(!0), Ze(Nt, null, Zn(ge.value, (Ce, ye) => (be(), Ze("div", {
+ key: `skr-${ye}`,
+ style: vt(xe.value)
}, [
- (be(!0), Ce(Nt, null, Cn(We, (De) => (be(), Ce("div", {
+ (be(!0), Ze(Nt, null, Zn(Ce, (De) => (be(), Ze("div", {
key: `sk-${De}`,
class: "mjr-grid-skeleton-card",
- style: Lt(ke.value)
+ style: vt(Xe.value)
}, [
- ie("div", {
+ te("div", {
class: "mjr-grid-skeleton-thumb mjr-grid-skeleton-shimmer",
- style: Lt(we.value)
+ style: vt(Me.value)
}, null, 4),
- ie("div", {
- style: Lt(qe.value)
+ te("div", {
+ style: vt(qe.value)
}, [
- ie("div", {
+ te("div", {
class: "mjr-grid-skeleton-line mjr-grid-skeleton-line--title mjr-grid-skeleton-shimmer",
- style: Lt(Je.value)
+ style: vt(Fe.value)
}, null, 4),
- ie("div", {
+ te("div", {
class: "mjr-grid-skeleton-line mjr-grid-skeleton-line--meta mjr-grid-skeleton-shimmer",
- style: Lt($e.value)
+ style: vt(it.value)
}, null, 4)
], 4)
], 4))), 128))
], 4))), 128))
]),
- ie("div", aV, Ye(r.value ? xe(s).loadingMessage || "Loading assets..." : "Preparing grid..."), 1)
+ te("div", aY, Ne(r.value ? ve(s).loadingMessage || "Loading assets..." : "Preparing grid..."), 1)
])
- ])) : ft("", !0),
- xe(s).statusMessage && !xe(s).assets.length && !xe(s).loading ? (be(), Ce("div", {
+ ])) : yt("", !0),
+ ve(s).statusMessage && !ve(s).assets.length && !ve(s).loading ? (be(), Ze("div", {
key: 1,
class: "mjr-grid-message",
- style: Lt({
+ style: vt({
position: "absolute",
inset: "0",
zIndex: 3,
@@ -44208,125 +44243,125 @@ const oV = {
pointerEvents: "none",
fontSize: "14px",
lineHeight: "1.4",
- color: xe(s).statusError ? "var(--error-text, #f44336)" : "var(--muted-text, #bdbdbd)",
+ color: ve(s).statusError ? "var(--error-text, #f44336)" : "var(--muted-text, #bdbdbd)",
background: "rgba(0, 0, 0, 0.35)"
})
- }, Ye(xe(s).statusMessage), 5)) : ft("", !0),
- e.virtualize && r.value ? (be(), Ce("div", {
+ }, Ne(ve(s).statusMessage), 5)) : yt("", !0),
+ e.virtualize && r.value ? (be(), Ze("div", {
key: 2,
- style: Lt({
+ style: vt({
height: `${_.value}px`,
position: "relative",
width: "100%"
})
}, [
- (be(!0), Ce(Nt, null, Cn(U.value, (We) => (be(), Ce("div", {
- key: We.key,
+ (be(!0), Ze(Nt, null, Zn(B.value, (Ce) => (be(), Ze("div", {
+ key: Ce.key,
ref_for: !0,
- ref: qt,
- "data-index": We.index,
- style: Lt(kt(We.index))
+ ref: Mt,
+ "data-index": Ce.index,
+ style: vt(Yt(Ce.index))
}, [
- We.items.length ? (be(!0), Ce(Nt, { key: 0 }, Cn(We.items, (pe) => (be(), Ce(Nt, {
- key: String(pe.id)
+ Ce.items.length ? (be(!0), Ze(Nt, { key: 0 }, Zn(Ce.items, (ye) => (be(), Ze(Nt, {
+ key: String(ye.id)
}, [
- v(pe) ? (be(), Pi(cm, {
+ j(ye) ? (be(), Pi(cm, {
key: 0,
ref_for: !0,
- ref: Le(pe),
- asset: pe,
- selected: T(pe),
- style: Lt(yt()),
- onMousedown: On((De) => Ke(De, pe), ["left"]),
- onClick: (De) => Ee(De, pe),
- onDblclick: On((De) => ut(pe), ["stop"])
- }, null, 8, ["asset", "selected", "style", "onMousedown", "onClick", "onDblclick"])) : (be(), Ce("div", {
+ ref: Ye(ye),
+ asset: ye,
+ selected: K(ye),
+ style: vt(dt()),
+ onMousedown: Fn((De) => Ke(De, ye), ["left"]),
+ onClick: (De) => Ee(De, ye),
+ onDblclick: Fn((De) => wt(ye), ["stop"])
+ }, null, 8, ["asset", "selected", "style", "onMousedown", "onClick", "onDblclick"])) : (be(), Ze("div", {
key: 1,
ref_for: !0,
- ref: Le(pe),
- class: Zn(["mjr-asset-card mjr-card", {
- "is-selected": T(pe),
- "mjr-live-placeholder": R(pe)
+ ref: Ye(ye),
+ class: An(["mjr-asset-card mjr-card", {
+ "is-selected": K(ye),
+ "mjr-live-placeholder": R(ye)
}]),
role: "button",
tabindex: "0",
draggable: "true",
- style: Lt([yt(), pe._mjrDupHidden ? { display: "none" } : null]),
- "data-mjr-asset-id": String(pe.id ?? ""),
- "data-mjr-filename-key": String(pe.filename || "").toLowerCase(),
- "data-mjr-ext": X(pe),
- "data-mjr-stem": x(pe),
- "data-mjr-kind": String(pe.kind || ""),
- "data-mjr-live-placeholder": R(pe) ? "true" : void 0,
- "data-mjr-stacked": w(pe) ? "true" : void 0,
- "data-mjr-stack-count": w(pe) ? String(pe.stack_asset_count || 0) : void 0,
- "data-mjr-dup-stacked": pe._mjrDupStack ? "true" : void 0,
- "data-mjr-dup-count": pe._mjrDupStack ? String(pe._mjrDupCount || 0) : void 0,
- "aria-label": `Asset ${pe.filename || ""}`,
- "aria-selected": T(pe) ? "true" : "false",
- onMousedown: On((De) => Ke(De, pe), ["left"]),
- onClick: (De) => Ee(De, pe),
- onDblclick: On((De) => ut(pe), ["stop"])
+ style: vt([dt(), ye._mjrDupHidden ? { display: "none" } : null]),
+ "data-mjr-asset-id": String(ye.id ?? ""),
+ "data-mjr-filename-key": String(ye.filename || "").toLowerCase(),
+ "data-mjr-ext": X(ye),
+ "data-mjr-stem": x(ye),
+ "data-mjr-kind": String(ye.kind || ""),
+ "data-mjr-live-placeholder": R(ye) ? "true" : void 0,
+ "data-mjr-stacked": w(ye) ? "true" : void 0,
+ "data-mjr-stack-count": w(ye) ? String(ye.stack_asset_count || 0) : void 0,
+ "data-mjr-dup-stacked": ye._mjrDupStack ? "true" : void 0,
+ "data-mjr-dup-count": ye._mjrDupStack ? String(ye._mjrDupCount || 0) : void 0,
+ "aria-label": `Asset ${ye.filename || ""}`,
+ "aria-selected": K(ye) ? "true" : "false",
+ onMousedown: Fn((De) => Ke(De, ye), ["left"]),
+ onClick: (De) => Ee(De, ye),
+ onDblclick: Fn((De) => wt(ye), ["stop"])
}, [
- fn(am, { asset: pe }, null, 8, ["asset"])
- ], 46, sV))
- ], 64))), 128)) : ft("", !0)
- ], 12, cV))), 128))
- ], 4)) : (be(), Ce("div", dV, [
- (be(!0), Ce(Nt, null, Cn(O.value, (We) => (be(), Ce("div", {
- key: We.index,
- style: Lt($t())
+ Cn(am, { asset: ye }, null, 8, ["asset"])
+ ], 46, sY))
+ ], 64))), 128)) : yt("", !0)
+ ], 12, cY))), 128))
+ ], 4)) : (be(), Ze("div", dY, [
+ (be(!0), Ze(Nt, null, Zn(F.value, (Ce) => (be(), Ze("div", {
+ key: Ce.index,
+ style: vt($t())
}, [
- (be(!0), Ce(Nt, null, Cn(We.items, (pe) => (be(), Ce(Nt, {
- key: String(pe.id)
+ (be(!0), Ze(Nt, null, Zn(Ce.items, (ye) => (be(), Ze(Nt, {
+ key: String(ye.id)
}, [
- v(pe) ? (be(), Pi(cm, {
+ j(ye) ? (be(), Pi(cm, {
key: 0,
ref_for: !0,
- ref: Le(pe),
- asset: pe,
- selected: T(pe),
- style: Lt(yt()),
- onMousedown: On((De) => Ke(De, pe), ["left"]),
- onClick: (De) => Ee(De, pe),
- onDblclick: On((De) => ut(pe), ["stop"])
- }, null, 8, ["asset", "selected", "style", "onMousedown", "onClick", "onDblclick"])) : (be(), Ce("div", {
+ ref: Ye(ye),
+ asset: ye,
+ selected: K(ye),
+ style: vt(dt()),
+ onMousedown: Fn((De) => Ke(De, ye), ["left"]),
+ onClick: (De) => Ee(De, ye),
+ onDblclick: Fn((De) => wt(ye), ["stop"])
+ }, null, 8, ["asset", "selected", "style", "onMousedown", "onClick", "onDblclick"])) : (be(), Ze("div", {
key: 1,
ref_for: !0,
- ref: Le(pe),
- class: Zn(["mjr-asset-card mjr-card", {
- "is-selected": T(pe),
- "mjr-live-placeholder": R(pe)
+ ref: Ye(ye),
+ class: An(["mjr-asset-card mjr-card", {
+ "is-selected": K(ye),
+ "mjr-live-placeholder": R(ye)
}]),
role: "button",
tabindex: "0",
draggable: "true",
- style: Lt([yt(), pe._mjrDupHidden ? { display: "none" } : null]),
- "data-mjr-asset-id": String(pe.id ?? ""),
- "data-mjr-filename-key": String(pe.filename || "").toLowerCase(),
- "data-mjr-ext": X(pe),
- "data-mjr-stem": x(pe),
- "data-mjr-kind": String(pe.kind || ""),
- "data-mjr-live-placeholder": R(pe) ? "true" : void 0,
- "data-mjr-stacked": w(pe) ? "true" : void 0,
- "data-mjr-stack-count": w(pe) ? String(pe.stack_asset_count || 0) : void 0,
- "data-mjr-dup-stacked": pe._mjrDupStack ? "true" : void 0,
- "data-mjr-dup-count": pe._mjrDupStack ? String(pe._mjrDupCount || 0) : void 0,
- "aria-label": `Asset ${pe.filename || ""}`,
- "aria-selected": T(pe) ? "true" : "false",
- onMousedown: On((De) => Ke(De, pe), ["left"]),
- onClick: (De) => Ee(De, pe),
- onDblclick: On((De) => ut(pe), ["stop"])
+ style: vt([dt(), ye._mjrDupHidden ? { display: "none" } : null]),
+ "data-mjr-asset-id": String(ye.id ?? ""),
+ "data-mjr-filename-key": String(ye.filename || "").toLowerCase(),
+ "data-mjr-ext": X(ye),
+ "data-mjr-stem": x(ye),
+ "data-mjr-kind": String(ye.kind || ""),
+ "data-mjr-live-placeholder": R(ye) ? "true" : void 0,
+ "data-mjr-stacked": w(ye) ? "true" : void 0,
+ "data-mjr-stack-count": w(ye) ? String(ye.stack_asset_count || 0) : void 0,
+ "data-mjr-dup-stacked": ye._mjrDupStack ? "true" : void 0,
+ "data-mjr-dup-count": ye._mjrDupStack ? String(ye._mjrDupCount || 0) : void 0,
+ "aria-label": `Asset ${ye.filename || ""}`,
+ "aria-selected": K(ye) ? "true" : "false",
+ onMousedown: Fn((De) => Ke(De, ye), ["left"]),
+ onClick: (De) => Ee(De, ye),
+ onDblclick: Fn((De) => wt(ye), ["stop"])
}, [
- fn(am, { asset: pe }, null, 8, ["asset"])
- ], 46, uV))
+ Cn(am, { asset: ye }, null, 8, ["asset"])
+ ], 46, uY))
], 64))), 128))
], 4))), 128))
]))
], 512));
}
-}, Vp = /* @__PURE__ */ Vr(mV, [["__scopeId", "data-v-d9ff3613"]]), Hm = 240, qm = 120, gV = 80;
-function IV(e) {
+}, Yp = /* @__PURE__ */ Yr(mY, [["__scopeId", "data-v-c8da1cb5"]]), Em = 240, qm = 120, gY = 80;
+function IY(e) {
var i;
const 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;";
@@ -44356,54 +44391,54 @@ function yd(e) {
}
function ba(e, t, n = "") {
const i = Array.isArray(t) ? t.map(String).filter(Boolean) : [];
- return jC(
+ return jh(
e,
i,
{ activeId: n || i[0] || "" },
yd
);
}
-function bV(e) {
+function bY(e) {
const t = e == null ? void 0 : e.grid;
if (!t) return;
const n = (i) => {
- var d, u, I, y, S, Z, C, g;
+ var d, u, I, A, h, S, W, g;
if (i.defaultPrevented) return;
const o = (u = (d = i.target) == null ? void 0 : d.closest) == null ? void 0 : u.call(d, ".mjr-asset-card");
if (!o || !t.contains(o)) return;
- const r = (y = (I = i.target) == null ? void 0 : I.closest) == null ? void 0 : y.call(I, "a, button, input, textarea, select, label");
+ const r = (A = (I = i.target) == null ? void 0 : I.closest) == null ? void 0 : A.call(I, "a, button, input, textarea, select, label");
if (r && r !== o && o.contains(r)) return;
- const l = String(((S = o.dataset) == null ? void 0 : S.mjrAssetId) || "").trim();
+ const l = String(((h = o.dataset) == null ? void 0 : h.mjrAssetId) || "").trim();
if (!l) return;
try {
window.__MJR_LAST_SELECTION_GRID__ = t;
- } catch (A) {
- (Z = console.debug) == null || Z.call(console, A);
+ } catch (y) {
+ (S = console.debug) == null || S.call(console, y);
}
- const a = yd(t), c = a.indexOf(o), s = Qa(t);
+ const a = yd(t), c = a.indexOf(o), s = _a(t);
if (i.shiftKey && c >= 0) {
- const A = Number.isFinite(Number(t._mjrLastSelectedIndex)) ? Number(t._mjrLastSelectedIndex) : c, p = Math.min(A, c), b = Math.max(A, c), L = a.slice(p, b + 1).map((h) => {
+ const y = Number.isFinite(Number(t._mjrLastSelectedIndex)) ? Number(t._mjrLastSelectedIndex) : c, p = Math.min(y, c), b = Math.max(y, c), L = a.slice(p, b + 1).map((C) => {
var G;
- return String(((G = h == null ? void 0 : h.dataset) == null ? void 0 : G.mjrAssetId) || "").trim();
+ return String(((G = C == null ? void 0 : C.dataset) == null ? void 0 : G.mjrAssetId) || "").trim();
}).filter(Boolean);
ba(t, L, l), t._mjrLastSelectedIndex = c, i.preventDefault(), i.stopPropagation();
return;
}
if (i.ctrlKey || i.metaKey) {
s.has(l) ? s.delete(l) : s.add(l);
- const A = Array.from(s);
+ const y = Array.from(s);
ba(
t,
- A,
- s.has(l) ? l : A[0] || ""
+ y,
+ s.has(l) ? l : y[0] || ""
), c >= 0 && (t._mjrLastSelectedIndex = c), i.preventDefault(), i.stopPropagation();
return;
}
ba(t, [l], l), c >= 0 && (t._mjrLastSelectedIndex = c);
try {
- (C = o.focus) == null || C.call(o, { preventScroll: !0 });
- } catch (A) {
- (g = console.debug) == null || g.call(console, A);
+ (W = o.focus) == null || W.call(o, { preventScroll: !0 });
+ } catch (y) {
+ (g = console.debug) == null || g.call(console, y);
}
i.preventDefault(), i.stopPropagation();
};
@@ -44420,20 +44455,20 @@ const qi = {
hosts: /* @__PURE__ */ new Set(),
pendingAssets: /* @__PURE__ */ new Map()
};
-function pV(e) {
- if (!fe.EXECUTION_GROUPING_ENABLED)
- return Ka(e);
+function pY(e) {
+ if (!he.EXECUTION_GROUPING_ENABLED)
+ return Da(e);
const t = String((e == null ? void 0 : e.stack_id) || "").trim();
if (t) return `stack:${t}`;
const n = String((e == null ? void 0 : e.job_id) || "").trim();
- return n ? `job:${n}` : Ka(e);
+ return n ? `job:${n}` : Da(e);
}
function fd(e) {
const t = /* @__PURE__ */ new Map();
for (const i of Array.isArray(e) ? e : []) {
- const o = hd(i);
+ const o = Cd(i);
if (!o) continue;
- const r = pV(o);
+ const r = pY(o);
let l = t.get(r);
l || (l = { key: r, members: [] }, t.set(r, l)), l.members.push(o);
}
@@ -44460,16 +44495,16 @@ function Ml(e) {
var t, n;
return Array.from(((n = (t = e == null ? void 0 : e.assetsByKey) == null ? void 0 : t.values) == null ? void 0 : n.call(t)) || []);
}
-function xs(e, t) {
- const n = hd(t);
- return !e || !n ? null : (e.assetsByKey || (e.assetsByKey = /* @__PURE__ */ new Map()), e.assetsByKey.set(Ka(n), n), n);
+function js(e, t) {
+ const n = Cd(t);
+ return !e || !n ? null : (e.assetsByKey || (e.assetsByKey = /* @__PURE__ */ new Map()), e.assetsByKey.set(Da(n), n), n);
}
-function Yp(e) {
+function Vp(e) {
!(e != null && e.grid) || !e.loaded || e._renderTimer || (e._renderTimer = setTimeout(() => {
- e._renderTimer = null, hV(e);
- }, gV));
+ e._renderTimer = null, CY(e);
+ }, gY));
}
-function yV(e, t, n = 0) {
+function yY(e, t, n = 0) {
var a;
const i = Array.isArray(t == null ? void 0 : t._mjrFeedGroupAssets) ? t._mjrFeedGroupAssets.filter(Boolean) : [t].filter(Boolean);
if (!i.length) return;
@@ -44482,9 +44517,9 @@ function yV(e, t, n = 0) {
}
ba(e.grid, [l], l);
}
- tc({ assets: i, index: o });
+ nc({ assets: i, index: o });
}
-function fV(e, t) {
+function fY(e, t) {
const n = document.createElement("div");
n.className = "mjr-popover mjr-feed-group-popover", n.style.cssText = "display:none; width:min(440px, 92vw); padding:10px;";
const i = document.createElement("div");
@@ -44493,37 +44528,37 @@ function fV(e, t) {
o.className = "mjr-feed-group-popover-grid", o.style.cssText = "display:grid; grid-template-columns:repeat(auto-fill, minmax(110px, 1fr)); gap:8px; max-height:360px; overflow-y:auto; overscroll-behavior:contain;";
const r = Array.isArray(t == null ? void 0 : t._mjrFeedGroupAssets) ? t._mjrFeedGroupAssets : [];
for (let l = 0; l < r.length; l += 1) {
- const a = r[l], c = IV(a);
+ const a = r[l], c = IY(a);
c.classList.add("mjr-feed-group-member-card"), l === 0 && c.classList.add("mjr-feed-group-member-card--cover"), c.addEventListener("click", (s) => {
var d, u;
- s.preventDefault(), s.stopPropagation(), (u = (d = e.popoverManager) == null ? void 0 : d.close) == null || u.call(d, n), yV(e, t, l);
+ s.preventDefault(), s.stopPropagation(), (u = (d = e.popoverManager) == null ? void 0 : d.close) == null || u.call(d, n), yY(e, t, l);
}), o.appendChild(c);
}
return n.appendChild(o), e.root.appendChild(n), n;
}
-function kp(e, t, n) {
+function Xp(e, t, n) {
if (!t || !n) return;
const i = Number((n == null ? void 0 : n._mjrFeedGroupCount) || 0) || 0;
if (i <= 1 || (t.dataset.mjrFeedGrouped = "true", t.dataset.mjrFeedGroupCount = String(i), t.dataset.mjrStacked = "true", t.dataset.mjrStackCount = String(i), t.querySelector(".mjr-feed-group-button"))) return;
const o = document.createElement("button");
o.type = "button", o.className = "mjr-feed-group-button", o.title = m("bottomFeed.groupOpen", "Show other assets from this generation"), o.setAttribute("aria-label", `${i} assets`), o.innerHTML = `${i}`, o.style.cssText = "position:absolute; top:34px; right:6px; z-index:11;", pb(o);
- const r = fV(e, n);
+ const r = fY(e, n);
o.addEventListener("click", (l) => {
var a, c;
l.preventDefault(), l.stopPropagation(), (c = (a = e.popoverManager) == null ? void 0 : a.toggle) == null || c.call(a, r, o);
}), t.appendChild(o);
}
-function Xp(e, t) {
+function Np(e, t) {
var i;
const n = new Map(
(Array.isArray(t) ? t : []).map((o) => [String((o == null ? void 0 : o.id) || "").trim(), o]).filter(([o]) => !!o)
);
for (const o of yd(e == null ? void 0 : e.grid)) {
const r = String(((i = o == null ? void 0 : o.dataset) == null ? void 0 : i.mjrAssetId) || "").trim(), l = n.get(r);
- l && kp(e, o, l);
+ l && Xp(e, o, l);
}
}
-async function hV(e) {
+async function CY(e) {
var o, r, l, a, c, s, d;
if (!(e != null && e.grid)) return;
try {
@@ -44541,27 +44576,27 @@ async function hV(e) {
title: m("bottomFeed.title", "Generated Feed"),
reset: !0
});
- Xp(e, t), Number((n == null ? void 0 : n.count) || 0) <= 0 ? (e.empty.textContent = m("bottomFeed.empty", "No generated assets yet."), e.empty.style.display = "") : e.empty.style.display = "none";
+ Np(e, t), Number((n == null ? void 0 : n.count) || 0) <= 0 ? (e.empty.textContent = m("bottomFeed.empty", "No generated assets yet."), e.empty.style.display = "") : e.empty.style.display = "none";
}
-function Ka(e) {
+function Da(e) {
const t = String((e == null ? void 0 : e.id) || "").trim();
if (t) return `id:${t}`;
const n = String((e == null ? void 0 : e.filename) || "").trim(), i = String((e == null ? void 0 : e.subfolder) || "").trim();
return `file:${String((e == null ? void 0 : e.source) || (e == null ? void 0 : e.type) || "").trim()}:${i}:${n}`;
}
-function CV(e) {
+function hY(e) {
const t = String(e || "").split(".").pop().toUpperCase(), n = /* @__PURE__ */ new Set(["MP4", "WEBM", "MOV", "AVI", "MKV"]), i = /* @__PURE__ */ new Set(["MP3", "WAV", "OGG", "FLAC", "AAC", "M4A"]), o = /* @__PURE__ */ new Set(["OBJ", "FBX", "GLB", "GLTF", "STL", "PLY", "SPLAT", "KSPLAT", "SPZ"]);
return n.has(t) ? "video" : i.has(t) ? "audio" : o.has(t) ? "model3d" : "image";
}
-function hd(e) {
+function Cd(e) {
if (!e || typeof e != "object") return null;
const t = { ...e };
- return !t.type && t.source && (t.type = t.source), !t.source && t.type && (t.source = t.type), t.kind || (t.kind = CV(t.ext || t.filename || "")), t;
+ return !t.type && t.source && (t.type = t.source), !t.source && t.type && (t.source = t.type), t.kind || (t.kind = hY(t.ext || t.filename || "")), t;
}
-function ZV(e) {
- const t = hd(e);
+function ZY(e) {
+ const t = Cd(e);
if (!t) return null;
- const n = Ka(t);
+ const n = Da(t);
if (!n) return null;
if (qi.pendingAssets.set(n, t), qi.pendingAssets.size > 64) {
const i = qi.pendingAssets.keys().next().value;
@@ -44569,10 +44604,10 @@ function ZV(e) {
}
return t;
}
-function AV() {
+function AY() {
return Array.from(qi.pendingAssets.values());
}
-async function Np(e) {
+async function kp(e) {
var t, n;
if (e != null && e.grid) {
e.empty.style.display = "none", e.empty.textContent = m("bottomFeed.loading", "Loading recent assets...");
@@ -44580,10 +44615,10 @@ async function Np(e) {
e.assetsByKey = /* @__PURE__ */ new Map();
const i = [];
let o = 0;
- for (; o < Hm; ) {
- const s = Ns({
+ for (; o < Em; ) {
+ const s = Rs({
q: "*",
- limit: Math.min(qm, Hm - o),
+ limit: Math.min(qm, Em - o),
offset: o,
scope: "output",
sort: "mtime_desc",
@@ -44594,20 +44629,20 @@ async function Np(e) {
const u = Array.isArray((t = d == null ? void 0 : d.data) == null ? void 0 : t.assets) ? d.data.assets : [];
if (!u.length) break;
for (const I of u) {
- const y = xs(e, I);
- y && i.push(y);
+ const A = js(e, I);
+ A && i.push(A);
}
if (u.length < qm) break;
o += u.length;
}
- for (const s of AV())
- xs(e, s);
+ for (const s of AY())
+ js(e, s);
qi.pendingAssets.clear();
const r = Ml(e), l = fd(r), a = await td(e.grid, l, {
title: m("bottomFeed.title", "Generated Feed"),
reset: !0
});
- Xp(e, l), Number((a == null ? void 0 : a.count) || 0) <= 0 ? (e.empty.textContent = m("bottomFeed.empty", "No generated assets yet."), e.empty.style.display = "") : e.empty.style.display = "none";
+ Np(e, l), Number((a == null ? void 0 : a.count) || 0) <= 0 ? (e.empty.textContent = m("bottomFeed.empty", "No generated assets yet."), e.empty.style.display = "") : e.empty.style.display = "none";
} catch (i) {
(n = console.debug) == null || n.call(console, i), e.empty.textContent = m("bottomFeed.loadFailed", "Failed to load generated assets."), e.empty.style.display = "";
} finally {
@@ -44615,23 +44650,23 @@ async function Np(e) {
}
}
}
-async function WV() {
+async function WY() {
var e;
for (const t of Array.from(qi.hosts))
try {
- await Np(t);
+ await kp(t);
} catch (n) {
(e = console.debug) == null || e.call(console, n);
}
}
-function wV() {
- WV();
+function wY() {
+ WY();
}
-function MV(e) {
+function MY(e) {
const t = document.createElement("div");
t.textContent = m("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 SV(e) {
+function GY(e) {
var n, i, o;
if (!e) return;
const t = [e, e.parentElement, (n = e.parentElement) == null ? void 0 : n.parentElement];
@@ -44653,9 +44688,9 @@ function Pm(e) {
const t = (n, i) => {
i ? e.classList.add(n) : e.classList.remove(n);
};
- t("mjr-feed-show-info", fe.FEED_SHOW_INFO), t("mjr-feed-show-filename", fe.FEED_SHOW_FILENAME), t("mjr-feed-show-dimensions", fe.FEED_SHOW_DIMENSIONS), t("mjr-feed-show-date", fe.FEED_SHOW_DATE), t("mjr-feed-show-gentime", fe.FEED_SHOW_GENTIME), t("mjr-show-hover-info", fe.GRID_SHOW_HOVER_INFO), t("mjr-feed-show-dot", fe.FEED_SHOW_WORKFLOW_DOT), t("mjr-feed-show-badges-ext", fe.FEED_SHOW_BADGES_EXTENSION), t("mjr-feed-show-badges-rating", fe.FEED_SHOW_BADGES_RATING), t("mjr-feed-show-badges-tags", fe.FEED_SHOW_BADGES_TAGS);
+ t("mjr-feed-show-info", he.FEED_SHOW_INFO), t("mjr-feed-show-filename", he.FEED_SHOW_FILENAME), t("mjr-feed-show-dimensions", he.FEED_SHOW_DIMENSIONS), t("mjr-feed-show-date", he.FEED_SHOW_DATE), t("mjr-feed-show-gentime", he.FEED_SHOW_GENTIME), t("mjr-show-hover-info", he.GRID_SHOW_HOVER_INFO), t("mjr-feed-show-dot", he.FEED_SHOW_WORKFLOW_DOT), t("mjr-feed-show-badges-ext", he.FEED_SHOW_BADGES_EXTENSION), t("mjr-feed-show-badges-rating", he.FEED_SHOW_BADGES_RATING), t("mjr-feed-show-badges-tags", he.FEED_SHOW_BADGES_TAGS);
}
-function GV(e, t = null) {
+function SY(e, t = null) {
var d;
const 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";
@@ -44670,24 +44705,24 @@ function GV(e, t = null) {
var u;
i();
try {
- window.dispatchEvent(new Event(ht.MFV_OPEN));
+ window.dispatchEvent(new Event(ft.MFV_OPEN));
} catch (I) {
(u = console.debug) == null || u.call(console, I);
}
}, r = document.createElement("div");
n.appendChild(r), e.root.appendChild(n);
- const { app: l } = yb(Vp, {
+ const { app: l } = yb(Yp, {
scrollElement: n,
virtualize: !1,
applyDefaultSettingsClasses: !1,
// MFV listens on window selection events; feed selection changes must be forwarded too.
emitWindowSelectionEvents: !0,
onCardRendered: (u, I) => {
- var y;
+ var A;
try {
- kp(e, u, I);
- } catch (S) {
- (y = console.debug) == null || y.call(console, S);
+ Xp(e, u, I);
+ } catch (h) {
+ (A = console.debug) == null || A.call(console, h);
}
},
onCardDblclick: () => {
@@ -44696,17 +44731,17 @@ function GV(e, t = null) {
}), a = l.mount(r), c = (a == null ? void 0 : a.gridContainer) || ((d = r.querySelector) == null ? void 0 : d.call(r, ".mjr-grid")) || null;
if (e.gridApp = l, e.gridVm = a, e.grid = c, !c) return;
c.style.minHeight = "100%", c.style.height = "auto", c.dataset.mjrScope = "output", c.dataset.mjrQuery = "*", c.dataset.mjrSort = "mtime_desc", c.dataset.mjrBottomFeed = "true";
- const s = Number(fe.FEED_GRID_MIN_SIZE || fe.GRID_MIN_SIZE || 120);
+ const s = Number(he.FEED_GRID_MIN_SIZE || he.GRID_MIN_SIZE || 120);
c.dataset.mjrFeedMinItemWidth = String(s), c.style.setProperty("--mjr-grid-min-size", `${s}px`), c.addEventListener("keydown", (u) => {
- var y, S, Z, C, g, A, p;
- const I = ((S = (y = u == null ? void 0 : u.key) == null ? void 0 : y.toLowerCase) == null ? void 0 : S.call(y)) || "";
+ var A, h, S, W, g, y, p;
+ const I = ((h = (A = u == null ? void 0 : u.key) == null ? void 0 : A.toLowerCase) == null ? void 0 : h.call(A)) || "";
if (!(u != null && u.ctrlKey || u != null && u.metaKey || u != null && u.altKey)) {
if (I === "v") {
- (Z = u.preventDefault) == null || Z.call(u), (C = u.stopPropagation) == null || C.call(u), o();
+ (S = u.preventDefault) == null || S.call(u), (W = u.stopPropagation) == null || W.call(u), o();
return;
}
if (I === "c") {
- (g = u.preventDefault) == null || g.call(u), (A = u.stopPropagation) == null || A.call(u), i();
+ (g = u.preventDefault) == null || g.call(u), (y = u.stopPropagation) == null || y.call(u), i();
try {
zn.open().then(() => zn.toggleCompareAB());
} catch (b) {
@@ -44718,30 +44753,30 @@ function GV(e, t = null) {
var u, I;
try {
c.removeEventListener("pointerdown", i, !0);
- } catch (y) {
- (u = console.debug) == null || u.call(console, y);
+ } catch (A) {
+ (u = console.debug) == null || u.call(console, A);
}
try {
c.removeEventListener("focusin", i, !0);
- } catch (y) {
- (I = console.debug) == null || I.call(console, y);
+ } catch (A) {
+ (I = console.debug) == null || I.call(console, A);
}
};
}
function Rp(e) {
const t = e == null ? void 0 : e.grid;
if (!t) return [];
- const n = Qa(t);
+ const n = _a(t);
return n.size ? Ml(e).filter((o) => n.has(String((o == null ? void 0 : o.id) || ""))) : [];
}
-function xV(e) {
+function xY(e) {
var i;
const t = e == null ? void 0 : e.grid;
if (!t) return null;
const n = String(((i = t.dataset) == null ? void 0 : i.mjrSelectedAssetId) || "").trim();
return n ? Ml(e).find((o) => String((o == null ? void 0 : o.id) || "") === n) || null : Rp(e)[0] || null;
}
-function jV(e) {
+function jY(e) {
var n;
const t = String(e ?? "");
try {
@@ -44752,13 +44787,13 @@ function jV(e) {
}
return t.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1");
}
-function vV(e) {
+function vY(e) {
const t = e == null ? void 0 : e.grid;
if (!t) return;
const n = () => {
var i;
try {
- Yp(e);
+ Vp(e);
} catch (o) {
(i = console.debug) == null || i.call(console, o);
}
@@ -44767,12 +44802,12 @@ function vV(e) {
gridContainer: t,
getState: () => ({ assets: fd(Ml(e)) }),
getSelectedAssets: () => Rp(e),
- getActiveAsset: () => xV(e),
+ getActiveAsset: () => xY(e),
onOpenTagsEditor: (i) => {
var c, s, d;
const o = ((c = t.querySelector) == null ? void 0 : c.call(
t,
- `.mjr-asset-card[data-mjr-asset-id="${jV((i == null ? void 0 : i.id) || "")}"]`
+ `.mjr-asset-card[data-mjr-asset-id="${jY((i == null ? void 0 : i.id) || "")}"]`
)) || null;
let r = null;
try {
@@ -44786,15 +44821,15 @@ function vV(e) {
onAssetChanged: n
}), e.keyboard.bind(), e.ratingHotkeys = bb({
gridContainer: t,
- createRatingBadge: Ya
+ createRatingBadge: Xa
}), e.ratingHotkeys.bind();
}
-const js = 60, Fp = 600, sl = 10;
-function Rc(e, t) {
+const vs = 60, Op = 600, sl = 10;
+function Oc(e, t) {
var i, o, r, l;
const n = Math.max(
- js,
- Math.min(Fp, Math.round(Number(t) / sl) * sl)
+ vs,
+ Math.min(Op, Math.round(Number(t) / sl) * sl)
);
if (e != null && e.grid)
try {
@@ -44802,10 +44837,10 @@ function Rc(e, t) {
} catch (a) {
(i = console.debug) == null || i.call(console, a);
}
- fe.FEED_GRID_MIN_SIZE = n;
+ he.FEED_GRID_MIN_SIZE = n;
try {
- const a = Xn();
- a.feed.minSize = n, Be(a), At(a);
+ const a = kn();
+ a.feed.minSize = n, Ue(a), Zt(a);
} catch (a) {
(o = console.debug) == null || o.call(console, a);
}
@@ -44823,10 +44858,10 @@ function Rc(e, t) {
}
return n;
}
-function LV(e) {
+function LY(e) {
const t = Math.max(
- js,
- Number(fe.FEED_GRID_MIN_SIZE || 120) || 120
+ vs,
+ Number(he.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;";
const i = document.createElement("span");
@@ -44834,19 +44869,19 @@ function LV(e) {
const o = document.createElement("button");
o.type = "button", o.className = "mjr-feed-size-btn", o.textContent = "−", o.title = m("bottomFeed.cardSizeDecrease", "Decrease card size"), o.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(o);
const r = document.createElement("input");
- r.type = "range", r.className = "mjr-feed-size-slider", r.min = String(js), r.max = String(Fp), r.step = String(sl), r.value = String(t), r.title = m("bottomFeed.cardSizeSlider", "Card size"), r.style.cssText = "flex:1 1 auto; min-width:40px; max-width:180px; height:4px; cursor:pointer; accent-color:var(--mjr-accent,#64b5f6);", n.appendChild(r);
+ r.type = "range", r.className = "mjr-feed-size-slider", r.min = String(vs), r.max = String(Op), r.step = String(sl), r.value = String(t), r.title = m("bottomFeed.cardSizeSlider", "Card size"), r.style.cssText = "flex:1 1 auto; min-width:40px; max-width:180px; height:4px; cursor:pointer; accent-color:var(--mjr-accent,#64b5f6);", n.appendChild(r);
const l = document.createElement("button");
l.type = "button", l.className = "mjr-feed-size-btn", l.textContent = "+", l.title = m("bottomFeed.cardSizeIncrease", "Increase card size"), l.style.cssText = o.style.cssText, n.appendChild(l);
const a = document.createElement("span");
a.className = "mjr-feed-size-display", a.textContent = `${t}px`, a.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(a), o.addEventListener("click", () => {
- Rc(e, Number(r.value) - sl);
+ Oc(e, Number(r.value) - sl);
}), l.addEventListener("click", () => {
- Rc(e, Number(r.value) + sl);
+ Oc(e, Number(r.value) + sl);
}), r.addEventListener("input", () => {
- Rc(e, Number(r.value));
+ Oc(e, Number(r.value));
}), e.root.appendChild(n), e._sizeToolbar = n;
}
-function VV(e, t = {}) {
+function YY(e, t = {}) {
const 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);
const i = {
@@ -44858,10 +44893,10 @@ function VV(e, t = {}) {
assetsByKey: /* @__PURE__ */ new Map(),
popoverManager: null
};
- LV(i), MV(i), GV(i, t.gridWrapper ?? null), bV(i), i.popoverManager = lb(n), i._disposeContextMenu = sd({
+ LY(i), MY(i), SY(i, t.gridWrapper ?? null), bY(i), i.popoverManager = lb(n), i._disposeContextMenu = sd({
gridContainer: i.grid,
getState: () => ({ scope: "output" })
- }), vV(i), Pm(i.grid);
+ }), vY(i), Pm(i.grid);
const o = () => {
var r;
try {
@@ -44879,31 +44914,31 @@ function VV(e, t = {}) {
}
}, i;
}
-function YV(e) {
+function VY(e) {
var n;
- const t = ZV(e);
+ const t = ZY(e);
if (t)
for (const i of Array.from(qi.hosts))
try {
- if (!(i != null && i.grid) || (xs(i, t), !i.loaded)) continue;
- i.empty.style.display = "none", Yp(i);
+ if (!(i != null && i.grid) || (js(i, t), !i.loaded)) continue;
+ i.empty.style.display = "none", Vp(i);
} catch (o) {
(n = console.debug) == null || n.call(console, o);
}
}
-function kV(e, t = {}) {
+function XY(e, t = {}) {
var i;
- SV(e);
- const n = VV(e, t);
+ GY(e);
+ const n = YY(e, t);
try {
e._mjrGeneratedFeedHost = n;
} catch (o) {
(i = console.debug) == null || i.call(console, o);
}
- return qi.hosts.add(n), Np(n), n;
+ return qi.hosts.add(n), kp(n), n;
}
-function XV(e) {
- var i, o, r, l, a, c, s, d, u, I, y, S, Z, C, g, A, p, b, L, h, G, W, f, X, x, T, v;
+function NY(e) {
+ var i, o, r, l, a, c, s, d, u, I, A, h, S, W, g, y, p, b, L, C, G, Z, f, X, x, K, j;
const t = (e == null ? void 0 : e._mjrGeneratedFeedHost) || e || null;
if (!t) return;
const n = t.container || null;
@@ -44940,14 +44975,14 @@ function XV(e) {
(I = console.debug) == null || I.call(console, w);
}
try {
- (S = (y = t.keyboard) == null ? void 0 : y.dispose) == null || S.call(y);
+ (h = (A = t.keyboard) == null ? void 0 : A.dispose) == null || h.call(A);
} catch (w) {
- (Z = console.debug) == null || Z.call(console, w);
+ (S = console.debug) == null || S.call(console, w);
}
try {
- (g = (C = t.ratingHotkeys) == null ? void 0 : C.dispose) == null || g.call(C);
+ (g = (W = t.ratingHotkeys) == null ? void 0 : W.dispose) == null || g.call(W);
} catch (w) {
- (A = console.debug) == null || A.call(console, w);
+ (y = console.debug) == null || y.call(console, w);
}
try {
(b = (p = t.popoverManager) == null ? void 0 : p.dispose) == null || b.call(p);
@@ -44955,9 +44990,9 @@ function XV(e) {
(L = console.debug) == null || L.call(console, w);
}
try {
- (G = (h = t.gridApp) == null ? void 0 : h.unmount) == null || G.call(h);
+ (G = (C = t.gridApp) == null ? void 0 : C.unmount) == null || G.call(C);
} catch (w) {
- (W = console.debug) == null || W.call(console, w);
+ (Z = console.debug) == null || Z.call(console, w);
}
try {
t._renderTimer && (clearTimeout(t._renderTimer), t._renderTimer = null);
@@ -44965,24 +45000,24 @@ function XV(e) {
(f = console.debug) == null || f.call(console, w);
}
try {
- GI(t.grid);
+ SI(t.grid);
} catch (w) {
(X = console.debug) == null || X.call(console, w);
}
try {
- (T = (x = t.container) == null ? void 0 : x.replaceChildren) == null || T.call(x);
+ (K = (x = t.container) == null ? void 0 : x.replaceChildren) == null || K.call(x);
} catch (w) {
- (v = console.debug) == null || v.call(console, w);
+ (j = console.debug) == null || j.call(console, w);
}
}
function Fc(e) {
return String(e || "").trim();
}
-function NV(e) {
+function kY(e) {
const t = String((e == null ? void 0 : e.filename) || "").trim(), n = String((e == null ? void 0 : e.subfolder) || "").trim(), i = String((e == null ? void 0 : e.type) || "output").trim().toLowerCase(), o = String((e == null ? void 0 : e.root_id) || (e == null ? void 0 : e.custom_root_id) || "").trim();
return `${i}|${o}|${n}|${t}`;
}
-function RV() {
+function RY() {
const e = /* @__PURE__ */ new Map();
function t(o, r) {
const l = Fc(o);
@@ -44992,7 +45027,7 @@ function RV() {
let c = e.get(l);
c || (c = /* @__PURE__ */ new Map(), e.set(l, c));
for (const s of a) {
- const d = NV(s);
+ const d = kY(s);
d && c.set(d, { ...c.get(d) || {}, ...s || {} });
}
return Array.from(c.values());
@@ -45015,7 +45050,7 @@ function RV() {
_jobs: e
};
}
-function FV({ defaultDelayMs: e = 900, postJob: t } = {}) {
+function OY({ defaultDelayMs: e = 900, postJob: t } = {}) {
const n = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Set();
let o = !1;
async function r() {
@@ -45053,20 +45088,20 @@ function FV({ defaultDelayMs: e = 900, postJob: t } = {}) {
_timers: n
};
}
-function Oc(e) {
+function zc(e) {
return String(e || "").trim();
}
function Qm(e) {
const t = String((e == null ? void 0 : e.filename) || "").trim(), n = String((e == null ? void 0 : e.filepath) || "").trim(), i = String((e == null ? void 0 : e.subfolder) || "").trim(), o = String((e == null ? void 0 : e.type) || (e == null ? void 0 : e.source) || "output").trim().toLowerCase(), r = String((e == null ? void 0 : e.root_id) || (e == null ? void 0 : e.custom_root_id) || "").trim();
return `${o}|${r}|${i}|${t || n}`;
}
-function OV(e, t) {
+function FY(e, t) {
return !t || String((e == null ? void 0 : e.job_id) || "").trim() === t ? e : { ...e || {}, job_id: t };
}
-function zV() {
+function zY() {
const e = /* @__PURE__ */ new Map();
function t(r, { files: l = [], expectedCount: a = null } = {}) {
- const c = Oc(r);
+ const c = zc(r);
if (!c) return;
const s = /* @__PURE__ */ new Set();
for (const d of Array.isArray(l) ? l : []) {
@@ -45080,24 +45115,24 @@ function zV() {
});
}
function n(r) {
- const l = Oc(r);
+ const l = zc(r);
l && e.delete(l);
}
function i(r) {
var d, u;
- const l = Oc(r == null ? void 0 : r.job_id);
+ const l = zc(r == null ? void 0 : r.job_id);
if (l) return l;
const a = Qm(r);
if (!a) return "";
let c = "", s = 1 / 0;
- for (const [I, y] of e.entries())
- (u = (d = y == null ? void 0 : y.fileKeys) == null ? void 0 : d.has) != null && u.call(d, a) && (y.markedAt ?? 1 / 0) < s && (s = y.markedAt ?? 1 / 0, c = I);
+ for (const [I, A] of e.entries())
+ (u = (d = A == null ? void 0 : A.fileKeys) == null ? void 0 : d.has) != null && u.call(d, a) && (A.markedAt ?? 1 / 0) < s && (s = A.markedAt ?? 1 / 0, c = I);
return c;
}
function o(r) {
const l = i(r);
if (!l) return { detail: r, jobId: "", defer: !1 };
- const a = OV(r, l), c = e.get(l);
+ const a = FY(r, l), c = e.get(l);
if (!c) return { detail: a, jobId: l, defer: !1 };
const s = String((a == null ? void 0 : a.stack_id) || "").trim(), u = Math.max(0, Number((c == null ? void 0 : c.expectedCount) || 0) || 0) > 1;
return {
@@ -45114,13 +45149,13 @@ function zV() {
_pendingJobs: e
};
}
-const JV = 2e3, TV = 2e3, BV = /* @__PURE__ */ new Set([
+const JY = 2e3, TY = 2e3, KY = /* @__PURE__ */ new Set([
"DB_MAINTENANCE",
"TIMEOUT",
"NETWORK_ERROR",
"SERVICE_UNAVAILABLE"
-]), UV = 8, KV = 1200, DV = 15e3, EV = 600 * 1e3, HV = 500, qV = 6, PV = 3e4, QV = 500;
-function _V({
+]), BY = 8, UY = 1200, DY = 15e3, HY = 600 * 1e3, EY = 500, qY = 6, PY = 3e4, QY = 500;
+function _Y({
post: e,
ENDPOINTS: t,
reportError: n,
@@ -45130,33 +45165,33 @@ function _V({
refreshGeneratedFeedHosts: l,
getActiveGridContainer: a
}) {
- const c = Wr({ ttlMs: JV, maxSize: TV }), s = Wr({
- ttlMs: EV,
- maxSize: HV
+ const c = Wr({ ttlMs: JY, maxSize: TY }), s = Wr({
+ ttlMs: HY,
+ maxSize: EY
}), d = Math.max(
0,
- Number(fe.EXECUTION_IDLE_GRACE_MS) || 6e3
- ), u = /* @__PURE__ */ new Map(), I = RV(), y = zV();
- let S = "", Z = 0, C = null;
+ Number(he.EXECUTION_IDLE_GRACE_MS) || 6e3
+ ), u = /* @__PURE__ */ new Map(), I = RY(), A = zY();
+ let h = "", S = 0, W = null;
function g() {
- var M, j;
+ var M, v;
try {
return typeof window > "u" ? !1 : window.__MJR_DEBUG_JOB_TRACKING__ === !0 ? !0 : String(((M = window.localStorage) == null ? void 0 : M.getItem("mjr.debug.jobTracking")) || "").trim() === "1";
- } catch (O) {
- return (j = console.debug) == null || j.call(console, O), !1;
+ } catch (F) {
+ return (v = console.debug) == null || v.call(console, F), !1;
}
}
- function A(M, j = {}) {
- var O;
+ function y(M, v = {}) {
+ var F;
if (g())
try {
- console.debug("[Majoor][job-tracking]", M, j);
+ console.debug("[Majoor][job-tracking]", M, v);
} catch (D) {
- (O = console.debug) == null || O.call(console, D);
+ (F = console.debug) == null || F.call(console, D);
}
}
function p() {
- return !!fe.EXECUTION_GROUPING_ENABLED;
+ return !!he.EXECUTION_GROUPING_ENABLED;
}
function b() {
const M = p();
@@ -45168,8 +45203,8 @@ function _V({
};
}
function L(M = {}) {
- var j, O, D, q;
- A("stacks-updated", {
+ var v, F, D, q;
+ y("stacks-updated", {
targeted_job_id: String((M == null ? void 0 : M.targeted_job_id) || ""),
stacks: Array.isArray(M == null ? void 0 : M.stacks) ? M.stacks.map((ee) => ({
job_id: String((ee == null ? void 0 : ee.job_id) || ""),
@@ -45179,29 +45214,29 @@ function _V({
});
try {
const ee = String((M == null ? void 0 : M.targeted_job_id) || "").trim();
- ee && y.clearPendingJob(ee);
- const ce = Array.isArray(M == null ? void 0 : M.stacks) ? M.stacks : [];
- for (const ue of ce) {
- const U = String((ue == null ? void 0 : ue.job_id) || "").trim();
- U && y.clearPendingJob(U);
+ ee && A.clearPendingJob(ee);
+ const ae = Array.isArray(M == null ? void 0 : M.stacks) ? M.stacks : [];
+ for (const ue of ae) {
+ const B = String((ue == null ? void 0 : ue.job_id) || "").trim();
+ B && A.clearPendingJob(B);
}
} catch (ee) {
- (j = console.debug) == null || j.call(console, ee);
+ (v = console.debug) == null || v.call(console, ee);
}
try {
- const ee = Array.isArray(M == null ? void 0 : M.stacks) ? M.stacks : [], ce = JSON.stringify({
+ const ee = Array.isArray(M == null ? void 0 : M.stacks) ? M.stacks : [], ae = JSON.stringify({
targeted_job_id: String((M == null ? void 0 : M.targeted_job_id) || ""),
- stacks: ee.map((U) => ({
- job_id: String((U == null ? void 0 : U.job_id) || ""),
- stack_id: String((U == null ? void 0 : U.stack_id) || ""),
- asset_count: Number((U == null ? void 0 : U.asset_count) || 0) || 0
+ stacks: ee.map((B) => ({
+ job_id: String((B == null ? void 0 : B.job_id) || ""),
+ stack_id: String((B == null ? void 0 : B.stack_id) || ""),
+ asset_count: Number((B == null ? void 0 : B.asset_count) || 0) || 0
}))
}), ue = Date.now();
- if (ce && ce === S && ue - Z < 1500)
+ if (ae && ae === h && ue - S < 1500)
return;
- S = ce, Z = ue;
+ h = ae, S = ue;
} catch (ee) {
- (O = console.debug) == null || O.call(console, ee);
+ (F = console.debug) == null || F.call(console, ee);
}
try {
window.dispatchEvent(
@@ -45216,278 +45251,278 @@ function _V({
(q = console.debug) == null || q.call(console, ee);
}
}
- const h = FV({
+ const C = OY({
defaultDelayMs: 900,
async postJob(M) {
- var j;
- A("auto-stack:start", { job_id: M });
+ var v;
+ y("auto-stack:start", { job_id: M });
try {
- const O = await e(t.STACKS_AUTO_STACK, {
+ const F = await e(t.STACKS_AUTO_STACK, {
mode: "job_id",
job_id: M
});
- if (!(O != null && O.ok)) {
- y.clearPendingJob(M), n(
- new Error(String((O == null ? void 0 : O.error) || "Auto stack failed")),
+ if (!(F != null && F.ok)) {
+ A.clearPendingJob(M), n(
+ new Error(String((F == null ? void 0 : F.error) || "Auto stack failed")),
"executionRuntime.execution_end.auto_stack"
);
return;
}
- A("auto-stack:done", {
+ y("auto-stack:done", {
job_id: M,
- stacks: Array.isArray((j = O == null ? void 0 : O.data) == null ? void 0 : j.stacks) ? O.data.stacks.length : 0
- }), L((O == null ? void 0 : O.data) || { targeted_job_id: M });
- } catch (O) {
- n(O, "executionRuntime.execution_end.auto_stack");
+ stacks: Array.isArray((v = F == null ? void 0 : F.data) == null ? void 0 : v.stacks) ? F.data.stacks.length : 0
+ }), L((F == null ? void 0 : F.data) || { targeted_job_id: M });
+ } catch (F) {
+ n(F, "executionRuntime.execution_end.auto_stack");
}
}
});
- function G(M, j) {
+ function G(M, v) {
if (!M) return;
- const O = Number(j) || Date.now();
- s.set(String(M), O, { at: O }), s.prune();
+ const F = Number(v) || Date.now();
+ s.set(String(M), F, { at: F }), s.prune();
}
- function W(M) {
+ function Z(M) {
c.prune();
- const j = [];
- for (const O of M) {
- const D = `${O.type || ""}|${O.subfolder || ""}|${O.filename || ""}`.toLowerCase();
- c.has(D) || (c.set(D, !0), j.push(O));
+ const v = [];
+ for (const F of M) {
+ const D = `${F.type || ""}|${F.subfolder || ""}|${F.filename || ""}`.toLowerCase();
+ c.has(D) || (c.set(D, !0), v.push(F));
}
- return j;
+ return v;
}
function f(M) {
- const j = Math.max(1, Number(M) || 1), O = Math.min(6, j - 1);
- return Math.min(DV, KV * 2 ** O);
+ const v = Math.max(1, Number(M) || 1), F = Math.min(6, v - 1);
+ return Math.min(DY, UY * 2 ** F);
}
function X() {
- C && (clearTimeout(C), C = null);
+ W && (clearTimeout(W), W = null);
}
- function x(M, j = d) {
- const O = Math.max(0, Number(j) || 0);
- X(), C = setTimeout(() => {
- C = null;
+ function x(M, v = d) {
+ const F = Math.max(0, Number(v) || 0);
+ X(), W = setTimeout(() => {
+ W = null;
try {
M == null || M();
} catch (D) {
n(D, "executionRuntime.post_execution");
}
- }, O);
+ }, F);
}
- function T(M) {
- const j = String((M == null ? void 0 : M.code) || "").trim().toUpperCase();
- return BV.has(j);
+ function K(M) {
+ const v = String((M == null ? void 0 : M.code) || "").trim().toUpperCase();
+ return KY.has(v);
}
- function v(M, j = 1, O = {}) {
+ function j(M, v = 1, F = {}) {
const D = Array.isArray(M) ? M : [];
if (!D.length) return;
const q = { files: D, origin: "generation" };
- (O != null && O.prompt_id || O != null && O.promptId) && (q.prompt_id = String(O.prompt_id || O.promptId)), A("index:direct", {
+ (F != null && F.prompt_id || F != null && F.promptId) && (q.prompt_id = String(F.prompt_id || F.promptId)), y("index:direct", {
prompt_id: String(q.prompt_id || ""),
- attempt: j,
+ attempt: v,
files: D.map((ee) => String((ee == null ? void 0 : ee.filename) || (ee == null ? void 0 : ee.filepath) || ""))
}), e(t.INDEX_FILES, q).then((ee) => {
- var ce;
+ var ae;
if (!(ee != null && ee.ok)) {
- if (T(ee) && j < UV) {
- const ue = f(j);
+ if (K(ee) && v < BY) {
+ const ue = f(v);
setTimeout(
- () => v(D, j + 1, O),
+ () => j(D, v + 1, F),
ue
);
return;
}
try {
- const ue = String((ee == null ? void 0 : ee.code) || "INDEX_FAILED"), U = String((ee == null ? void 0 : ee.error) || "Indexing generated files failed");
- n(new Error(`${ue}: ${U}`), "executionRuntime.executed.index");
+ const ue = String((ee == null ? void 0 : ee.code) || "INDEX_FAILED"), B = String((ee == null ? void 0 : ee.error) || "Indexing generated files failed");
+ n(new Error(`${ue}: ${B}`), "executionRuntime.executed.index");
} catch (ue) {
- (ce = console.debug) == null || ce.call(console, ue);
+ (ae = console.debug) == null || ae.call(console, ue);
}
}
}).catch((ee) => n(ee, "executionRuntime.executed.index"));
}
function w(M = {}) {
- var O, D;
- const j = String((M == null ? void 0 : M.prompt_id) || (M == null ? void 0 : M.promptId) || "").trim();
- if (j) return j;
+ var F, D;
+ const v = String((M == null ? void 0 : M.prompt_id) || (M == null ? void 0 : M.promptId) || "").trim();
+ if (v) return v;
try {
- return String(((O = o()) == null ? void 0 : O.active_prompt_id) || "").trim();
+ return String(((F = o()) == null ? void 0 : F.active_prompt_id) || "").trim();
} catch (q) {
return (D = console.debug) == null || D.call(console, q), "";
}
}
function R(M) {
- return !Array.isArray(M) || !M.length ? "" : M.map((j) => String((j == null ? void 0 : j.filepath) || (j == null ? void 0 : j.filename) || "")).filter(Boolean).sort().join("|");
+ return !Array.isArray(M) || !M.length ? "" : M.map((v) => String((v == null ? void 0 : v.filepath) || (v == null ? void 0 : v.filename) || "")).filter(Boolean).sort().join("|");
}
- function Y(M, j = {}, O = 1) {
+ function V(M, v = {}, F = 1) {
const D = Array.isArray(M) ? M : [];
if (!D.length) return;
const q = R(D);
if (!q) {
- v(D, 1, j);
+ j(D, 1, v);
return;
}
const ee = u.get(q);
ee != null && ee.timer && clearTimeout(ee.timer);
- const ce = (ee == null ? void 0 : ee.firstAttemptAt) ?? Date.now();
- if (Date.now() - ce >= PV) {
- v(D, 1, j);
+ const ae = (ee == null ? void 0 : ee.firstAttemptAt) ?? Date.now();
+ if (Date.now() - ae >= PY) {
+ j(D, 1, v);
return;
}
- const ue = Math.max(1, Number(O) || 1), U = Math.min(2e3, 250 * ue), Q = setTimeout(() => {
- u.delete(q), V(D, j, ue + 1);
- }, U);
+ const ue = Math.max(1, Number(F) || 1), B = Math.min(2e3, 250 * ue), Q = setTimeout(() => {
+ u.delete(q), Y(D, v, ue + 1);
+ }, B);
u.set(q, {
files: D,
- meta: j,
+ meta: v,
attempt: ue,
timer: Q,
- firstAttemptAt: ce
+ firstAttemptAt: ae
});
}
- function F(M) {
- var O;
- const j = String(M || "").trim();
- if (!(!j || u.size <= 0))
+ function O(M) {
+ var F;
+ const v = String(M || "").trim();
+ if (!(!v || u.size <= 0))
for (const [D, q] of Array.from(u.entries())) {
try {
q != null && q.timer && clearTimeout(q.timer);
} catch (ee) {
- (O = console.debug) == null || O.call(console, ee);
+ (F = console.debug) == null || F.call(console, ee);
}
- u.delete(D), I.add(j, (q == null ? void 0 : q.files) || []);
+ u.delete(D), I.add(v, (q == null ? void 0 : q.files) || []);
}
}
- function N() {
+ function k() {
var M;
- for (const [j, O] of Array.from(u.entries())) {
+ for (const [v, F] of Array.from(u.entries())) {
try {
- O != null && O.timer && clearTimeout(O.timer);
+ F != null && F.timer && clearTimeout(F.timer);
} catch (D) {
(M = console.debug) == null || M.call(console, D);
}
- u.delete(j);
+ u.delete(v);
}
}
- function V(M, j = {}, O = 1) {
- const D = w(j);
- if (A("buffer:add", {
+ function Y(M, v = {}, F = 1) {
+ const D = w(v);
+ if (y("buffer:add", {
prompt_id: D,
- explicit_prompt_id: String((j == null ? void 0 : j.prompt_id) || (j == null ? void 0 : j.promptId) || ""),
- attempt: O,
+ explicit_prompt_id: String((v == null ? void 0 : v.prompt_id) || (v == null ? void 0 : v.promptId) || ""),
+ attempt: F,
file_count: Array.isArray(M) ? M.length : 0,
files: Array.isArray(M) ? M.map((q) => String((q == null ? void 0 : q.filename) || (q == null ? void 0 : q.filepath) || "")) : []
}), !D) {
- if (O < qV) {
- Y(M, j, O);
+ if (F < qY) {
+ V(M, v, F);
return;
}
- v(M, 1, j);
+ j(M, 1, v);
return;
}
I.add(D, M);
}
- function k(M, j = 900) {
- p() && (A("finalize:schedule", { job_id: String(M || ""), delay_ms: j }), h.schedule(M, j));
+ function N(M, v = 900) {
+ p() && (y("finalize:schedule", { job_id: String(M || ""), delay_ms: v }), C.schedule(M, v));
}
- function K(M = 1200) {
+ function U(M = 1200) {
x(() => {
e(t.SCAN, {
recursive: !0,
incremental: !0,
fast: !0,
background_metadata: !0
- }).catch((j) => n(j, "executionRuntime.execution_end.scan"));
+ }).catch((v) => n(v, "executionRuntime.execution_end.scan"));
}, M);
}
function z(M) {
- const j = b(), O = String(M || "").trim();
- if (!O) return;
- const D = I.take(O);
- if (A("buffer:flush", {
- prompt_id: O,
+ const v = b(), F = String(M || "").trim();
+ if (!F) return;
+ const D = I.take(F);
+ if (y("buffer:flush", {
+ prompt_id: F,
file_count: D.length,
files: D.map((q) => String((q == null ? void 0 : q.filename) || (q == null ? void 0 : q.filepath) || ""))
- }), j.allowLiveStackFinalize && y.markPendingJob(O, { files: D, expectedCount: D.length }), !D.length) {
- j.allowLiveStackFinalize && k(O);
+ }), v.allowLiveStackFinalize && A.markPendingJob(F, { files: D, expectedCount: D.length }), !D.length) {
+ v.allowLiveStackFinalize && N(F);
return;
}
e(t.INDEX_FILES, {
files: D,
origin: "generation",
- prompt_id: O
+ prompt_id: F
}).then((q) => {
if (!(q != null && q.ok)) {
- j.allowLiveStackFinalize && y.clearPendingJob(O), n(
+ v.allowLiveStackFinalize && A.clearPendingJob(F), n(
new Error(String((q == null ? void 0 : q.error) || "Indexing generated files failed")),
"executionRuntime.executed.index"
);
return;
}
- A("index:flush:done", {
- prompt_id: O,
+ y("index:flush:done", {
+ prompt_id: F,
file_count: D.length
- }), j.allowLiveStackFinalize && k(O, 1800);
+ }), v.allowLiveStackFinalize && N(F, 1800);
}).catch((q) => {
- j.allowLiveStackFinalize && y.clearPendingJob(O), n(q, "executionRuntime.executed.index");
+ v.allowLiveStackFinalize && A.clearPendingJob(F), n(q, "executionRuntime.executed.index");
});
}
- function B(M) {
- var O, D, q;
- const j = String(M || "").trim();
- if (!j) return !1;
+ function T(M) {
+ var F, D, q;
+ const v = String(M || "").trim();
+ if (!v) return !1;
try {
- const ee = (D = (O = I == null ? void 0 : I._jobs) == null ? void 0 : O.get) == null ? void 0 : D.call(O, j);
+ const ee = (D = (F = I == null ? void 0 : I._jobs) == null ? void 0 : F.get) == null ? void 0 : D.call(F, v);
return !!ee && typeof ee.size == "number" && ee.size > 0;
} catch (ee) {
return (q = console.debug) == null || q.call(console, ee), !1;
}
}
function J(M) {
- var j;
+ var v;
if (!p())
return { detail: M, jobId: "", defer: !1 };
try {
- return y.prepare(M);
- } catch (O) {
- return (j = console.debug) == null || j.call(console, O), { detail: M, jobId: "", defer: !1 };
+ return A.prepare(M);
+ } catch (F) {
+ return (v = console.debug) == null || v.call(console, F), { detail: M, jobId: "", defer: !1 };
}
}
function P(M) {
- const j = String((M == null ? void 0 : M.kind) || "").trim(), O = String((M == null ? void 0 : M.filename) || "").trim(), D = String((M == null ? void 0 : M.filepath) || "").trim();
- return !!j && (!!O || !!D);
+ const v = String((M == null ? void 0 : M.kind) || "").trim(), F = String((M == null ? void 0 : M.filename) || "").trim(), D = String((M == null ? void 0 : M.filepath) || "").trim();
+ return !!v && (!!F || !!D);
}
- function H(M, { appRef: j }) {
- var de, se, ge, je, Se, ke, we;
+ function E(M, { appRef: v }) {
+ var ce, de, ge, Le, xe, Xe, Me;
if (!b().useExecutionBuffer) return;
- const D = W(i((de = M == null ? void 0 : M.detail) == null ? void 0 : de.output));
+ const D = Z(i((ce = M == null ? void 0 : M.detail) == null ? void 0 : ce.output));
if (!D.length) return;
- const q = ((se = M == null ? void 0 : M.detail) == null ? void 0 : se.prompt_id) || ((ge = M == null ? void 0 : M.detail) == null ? void 0 : ge.promptId), ee = String(((je = M == null ? void 0 : M.detail) == null ? void 0 : je.node) || ((Se = M == null ? void 0 : M.detail) == null ? void 0 : Se.display_node) || "").trim(), ce = q ? s.get(String(q)) : null, ue = ce ? Math.max(0, Date.now() - ce) : 0;
- let U = "";
+ const q = ((de = M == null ? void 0 : M.detail) == null ? void 0 : de.prompt_id) || ((ge = M == null ? void 0 : M.detail) == null ? void 0 : ge.promptId), ee = String(((Le = M == null ? void 0 : M.detail) == null ? void 0 : Le.node) || ((xe = M == null ? void 0 : M.detail) == null ? void 0 : xe.display_node) || "").trim(), ae = q ? s.get(String(q)) : null, ue = ae ? Math.max(0, Date.now() - ae) : 0;
+ let B = "";
try {
- if (ee && typeof j < "u" && (j != null && j.graph)) {
- const Je = j.graph.getNodeById(Number(ee));
- Je && (U = String(Je.type || Je.comfyClass || "").trim());
+ if (ee && typeof v < "u" && (v != null && v.graph)) {
+ const Fe = v.graph.getNodeById(Number(ee));
+ Fe && (B = String(Fe.type || Fe.comfyClass || "").trim());
}
- } catch (Je) {
- (ke = console.debug) == null || ke.call(console, Je);
+ } catch (Fe) {
+ (Xe = console.debug) == null || Xe.call(console, Fe);
}
- const Q = D.map((Je) => ({
- ...Je,
+ const Q = D.map((Fe) => ({
+ ...Fe,
...ue > 0 ? { generation_time_ms: ue } : {},
...ee ? { source_node_id: ee } : {},
- ...U ? { source_node_type: U } : {}
+ ...B ? { source_node_type: B } : {}
}));
- A("executed:event", {
+ y("executed:event", {
prompt_id: String(q || ""),
source_node_id: ee,
- source_node_type: U,
+ source_node_type: B,
file_count: Q.length,
- files: Q.map((Je) => String((Je == null ? void 0 : Je.filename) || (Je == null ? void 0 : Je.filepath) || ""))
+ files: Q.map((Fe) => String((Fe == null ? void 0 : Fe.filename) || (Fe == null ? void 0 : Fe.filepath) || ""))
});
try {
window.dispatchEvent(
- new CustomEvent(ht.NEW_GENERATION_OUTPUT, {
+ new CustomEvent(ft.NEW_GENERATION_OUTPUT, {
detail: {
files: Q,
prompt_id: String(q || ""),
@@ -45495,146 +45530,146 @@ function _V({
}
})
);
- } catch (Je) {
- (we = console.debug) == null || we.call(console, Je);
+ } catch (Fe) {
+ (Me = console.debug) == null || Me.call(console, Fe);
}
const _ = Q.length > 0 ? [Q[0]] : [], le = Q.length > 1 ? Q.slice(1) : [];
- _.length > 0 && v(_, 1, { prompt_id: q }), le.length > 0 && V(le, { prompt_id: q });
+ _.length > 0 && j(_, 1, { prompt_id: q }), le.length > 0 && Y(le, { prompt_id: q });
}
- function $(M, { setCurrentJobId: j }) {
- var q, ee, ce;
- const O = ((q = M == null ? void 0 : M.detail) == null ? void 0 : q.prompt_id) || ((ee = M == null ? void 0 : M.detail) == null ? void 0 : ee.promptId), D = (ce = M == null ? void 0 : M.detail) == null ? void 0 : ce.timestamp;
- A("execution:start", {
- prompt_id: String(O || ""),
+ function $(M, { setCurrentJobId: v }) {
+ var q, ee, ae;
+ const F = ((q = M == null ? void 0 : M.detail) == null ? void 0 : q.prompt_id) || ((ee = M == null ? void 0 : M.detail) == null ? void 0 : ee.promptId), D = (ae = M == null ? void 0 : M.detail) == null ? void 0 : ae.timestamp;
+ y("execution:start", {
+ prompt_id: String(F || ""),
timestamp: Number(D) || null
- }), G(O, D), X(), j == null || j(O || null), r({
- active_prompt_id: O || null,
+ }), G(F, D), X(), v == null || v(F || null), r({
+ active_prompt_id: F || null,
cached_nodes: [],
progress_node: null,
progress_value: null,
progress_max: null
- }), O && F(O);
+ }), F && O(F);
}
- function E(M, { setCurrentJobId: j }) {
+ function H(M, { setCurrentJobId: v }) {
var q, ee;
- const O = b(), D = ((q = M == null ? void 0 : M.detail) == null ? void 0 : q.prompt_id) || ((ee = M == null ? void 0 : M.detail) == null ? void 0 : ee.promptId);
- if (A("execution:end", {
+ const F = b(), D = ((q = M == null ? void 0 : M.detail) == null ? void 0 : q.prompt_id) || ((ee = M == null ? void 0 : M.detail) == null ? void 0 : ee.promptId);
+ if (y("execution:end", {
type: String((M == null ? void 0 : M.type) || ""),
prompt_id: String(D || "")
- }), D && s.delete(String(D)), s.prune(), j == null || j(null), r({
+ }), D && s.delete(String(D)), s.prune(), v == null || v(null), r({
active_prompt_id: null,
cached_nodes: [],
progress_node: null,
progress_value: null,
progress_max: null
- }), D && String((M == null ? void 0 : M.type) || "") !== "execution_success" && (A("buffer:clear", {
+ }), D && String((M == null ? void 0 : M.type) || "") !== "execution_success" && (y("buffer:clear", {
prompt_id: String(D || ""),
reason: String((M == null ? void 0 : M.type) || "")
- }), X(), I.clear(D), O.allowLiveStackFinalize && y.clearPendingJob(D), N()), String((M == null ? void 0 : M.type) || "") === "execution_success")
- if (O.usePostExecutionScan)
- K(d);
+ }), X(), I.clear(D), F.allowLiveStackFinalize && A.clearPendingJob(D), k()), String((M == null ? void 0 : M.type) || "") === "execution_success")
+ if (F.usePostExecutionScan)
+ U(d);
else {
- const ce = B(D) ? Math.min(d, QV) : d;
+ const ae = T(D) ? Math.min(d, QY) : d;
x(() => {
- D && F(D), z(D);
- }, ce);
+ D && O(D), z(D);
+ }, ae);
}
}
- function oe(M) {
+ function ne(M) {
if (!p()) return;
- const j = [];
- for (const [, O] of M instanceof Map ? M.entries() : []) {
- const D = i(O);
+ const v = [];
+ for (const [, F] of M instanceof Map ? M.entries() : []) {
+ const D = i(F);
if (D != null && D.length)
- for (const q of D) j.push(q);
+ for (const q of D) v.push(q);
}
- !j.length || !p() || (A("node-outputs:updated", {
+ !v.length || !p() || (y("node-outputs:updated", {
prompt_id: w(),
- file_count: j.length
- }), V(j, { prompt_id: w() }));
+ file_count: v.length
+ }), Y(v, { prompt_id: w() }));
}
return {
notifyStacksUpdated: L,
prepareLiveAssetEvent: J,
isRenderableLiveAsset: P,
- handleExecutedEvent: H,
+ handleExecutedEvent: E,
handleExecutionStart: $,
- handleExecutionEnd: E,
- handleNodeOutputsUpdated: oe
+ handleExecutionEnd: H,
+ handleNodeOutputsUpdated: ne
};
}
-function $V(e) {
- const t = [], n = /* @__PURE__ */ new Set(), i = 500, o = 4, r = 2e3, l = /\.(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, c = ({ type: y, subfolder: S, filename: Z, path: C }) => C ? `path|${String(C).trim().toLowerCase()}` : `${y || ""}|${S || ""}|${Z || ""}`.toLowerCase(), s = (y) => {
- if (!y) return;
- const S = y.path || y.filepath || y.fullpath || y.fullPath || y.full_path;
- let Z = y.filename;
- if (!Z && S) {
- const b = String(S).split(/[/\\\\]/);
- Z = b[b.length - 1];
+function $Y(e) {
+ const t = [], n = /* @__PURE__ */ new Set(), i = 500, o = 4, r = 2e3, l = /\.(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, c = ({ type: A, subfolder: h, filename: S, path: W }) => W ? `path|${String(W).trim().toLowerCase()}` : `${A || ""}|${h || ""}|${S || ""}`.toLowerCase(), s = (A) => {
+ if (!A) return;
+ const h = A.path || A.filepath || A.fullpath || A.fullPath || A.full_path;
+ let S = A.filename;
+ if (!S && h) {
+ const b = String(h).split(/[/\\\\]/);
+ S = b[b.length - 1];
}
- if (!Z || (Z = String(Z), !Z)) return;
- const C = y.subfolder || y.sub_folder || y.subFolder || "", g = y.type || y.output_type || "output", A = c({ type: g, subfolder: C, filename: Z, path: S });
- if (n.has(A)) return;
- n.add(A);
- const p = { filename: Z, subfolder: C, type: g };
- S && (p.path = S), t.push(p);
- }, d = (y) => {
- if (typeof y != "string") return;
- const S = y.trim().replace(/^['"]|['"]$/g, "");
- if (!S || !l.test(S)) return;
- const Z = S.split(/[/\\\\]/), C = Z[Z.length - 1];
- if (!C) return;
- const g = c({ type: "output", subfolder: "", filename: C, path: S });
- n.has(g) || (n.add(g), t.push({ filename: C, subfolder: "", type: "output", path: S }));
- }, u = (y) => {
- if (typeof y == "string") {
- d(y);
+ if (!S || (S = String(S), !S)) return;
+ const W = A.subfolder || A.sub_folder || A.subFolder || "", g = A.type || A.output_type || "output", y = c({ type: g, subfolder: W, filename: S, path: h });
+ if (n.has(y)) return;
+ n.add(y);
+ const p = { filename: S, subfolder: W, type: g };
+ h && (p.path = h), t.push(p);
+ }, d = (A) => {
+ if (typeof A != "string") return;
+ const h = A.trim().replace(/^['"]|['"]$/g, "");
+ if (!h || !l.test(h)) return;
+ const S = h.split(/[/\\\\]/), W = S[S.length - 1];
+ if (!W) return;
+ const g = c({ type: "output", subfolder: "", filename: W, path: h });
+ n.has(g) || (n.add(g), t.push({ filename: W, subfolder: "", type: "output", path: h }));
+ }, u = (A) => {
+ if (typeof A == "string") {
+ d(A);
return;
}
- if (!Array.isArray(y)) return;
- let S = 0;
- for (const Z of y) {
- if (t.length >= i || S >= r) break;
- S += 1, Z && typeof Z == "object" && "filename" in Z ? s(Z) : typeof Z == "string" ? d(Z) : I(Z, 1);
+ if (!Array.isArray(A)) return;
+ let h = 0;
+ for (const S of A) {
+ if (t.length >= i || h >= r) break;
+ h += 1, S && typeof S == "object" && "filename" in S ? s(S) : typeof S == "string" ? d(S) : I(S, 1);
}
- }, I = (y, S) => {
- if (!(!y || S > o || t.length >= i) && typeof y == "object") {
+ }, I = (A, h) => {
+ if (!(!A || h > o || t.length >= i) && typeof A == "object") {
if (a) {
- if (a.has(y)) return;
- a.add(y);
+ if (a.has(A)) return;
+ a.add(A);
}
- if (Array.isArray(y)) {
- let Z = 0;
- for (const C of y) {
- if (t.length >= i || Z >= r) break;
- Z += 1, C && typeof C == "object" && "filename" in C ? s(C) : typeof C == "string" ? d(C) : I(C, S + 1);
+ if (Array.isArray(A)) {
+ let S = 0;
+ for (const W of A) {
+ if (t.length >= i || S >= r) break;
+ S += 1, W && typeof W == "object" && "filename" in W ? s(W) : typeof W == "string" ? d(W) : I(W, h + 1);
}
return;
}
- if ((y.images || y.gifs || y.videos || y.meshes || y.mesh || y.audio) && (u(y.images), u(y.gifs), u(y.videos), u(y.meshes), u(y.mesh), u(y.audio)), y.output && I(y.output, S + 1), y.outputs && I(y.outputs, S + 1), y.result && I(y.result, S + 1), y.data && I(y.data, S + 1), S < o)
- for (const Z of Object.values(y)) {
+ if ((A.images || A.gifs || A.videos || A.meshes || A.mesh || A.audio) && (u(A.images), u(A.gifs), u(A.videos), u(A.meshes), u(A.mesh), u(A.audio)), A.output && I(A.output, h + 1), A.outputs && I(A.outputs, h + 1), A.result && I(A.result, h + 1), A.data && I(A.data, h + 1), h < o)
+ for (const S of Object.values(A)) {
if (t.length >= i) break;
- if (typeof Z == "string") {
- d(Z);
+ if (typeof S == "string") {
+ d(S);
continue;
}
- if (!(!Z || typeof Z != "object")) {
- if (Z.images || Z.gifs || Z.videos || Z.meshes || Z.mesh || Z.audio) {
- u(Z.images), u(Z.gifs), u(Z.videos), u(Z.meshes), u(Z.mesh), u(Z.audio);
+ if (!(!S || typeof S != "object")) {
+ if (S.images || S.gifs || S.videos || S.meshes || S.mesh || S.audio) {
+ u(S.images), u(S.gifs), u(S.videos), u(S.meshes), u(S.mesh), u(S.audio);
continue;
}
- I(Z, S + 1);
+ I(S, h + 1);
}
}
}
};
return I(e, 0), t;
}
-const _m = 3e4, Er = /* @__PURE__ */ new Map(), eY = "live";
-function tY(e) {
+const _m = 3e4, Hr = /* @__PURE__ */ new Map(), eV = "live";
+function tV(e) {
return e === !0 || e === 1 || e === "1" ? !0 : e === !1 || e === 0 || e === "0" ? !1 : null;
}
-function nY(e) {
+function nV(e) {
const t = [
e == null ? void 0 : e.has_ai_vector,
e == null ? void 0 : e.hasAiVector,
@@ -45644,30 +45679,30 @@ function nY(e) {
e == null ? void 0 : e.vectorIndexed
];
for (const n of t) {
- const i = tY(n);
+ const i = tV(n);
if (i !== null) return i;
}
return !1;
}
-function iY(e) {
- const t = Date.now(), n = Number(Er.get(e) || 0);
+function iV(e) {
+ const t = Date.now(), n = Number(Hr.get(e) || 0);
if (n > 0 && t - n < _m)
return !0;
- if (Er.set(e, t), Er.size > 500) {
+ if (Hr.set(e, t), Hr.size > 500) {
const i = t - 5 * _m;
- for (const [o, r] of Er.entries())
- Number(r) < i && Er.delete(o);
+ for (const [o, r] of Hr.entries())
+ Number(r) < i && Hr.delete(o);
}
return !1;
}
function $m(e) {
const t = String((e == null ? void 0 : e.id) || "").trim();
- t && (nY(e) || iY(t) || Jg(t).catch((n) => {
+ t && (nV(e) || iV(t) || Jg(t).catch((n) => {
var i;
return (i = console.debug) == null ? void 0 : i.call(console, "[Majoor] auto vector index failed", n);
}));
}
-function oY(e) {
+function oV(e) {
var o, r;
const t = String((e == null ? void 0 : e.kind) || "").trim().toLowerCase();
if (t) return t;
@@ -45676,10 +45711,10 @@ function oY(e) {
).trim(), i = n.includes(".") && ((r = (o = n.split(".").pop()) == null ? void 0 : o.toLowerCase) == null ? void 0 : r.call(o)) || "";
return i ? ["png", "jpg", "jpeg", "webp", "gif", "bmp", "tif", "tiff", "avif", "heic", "heif"].includes(i) ? "image" : ["mp4", "webm", "mov", "mkv", "avi", "m4v"].includes(i) ? "video" : ["mp3", "wav", "flac", "ogg"].includes(i) ? "audio" : ["glb", "gltf", "obj", "fbx", "ply", "stl", "splat", "ksplat", "spz"].includes(i) ? "model3d" : "unknown" : "";
}
-function rY(e, { jobId: t = "" } = {}) {
+function rV(e, { jobId: t = "" } = {}) {
const n = String((e == null ? void 0 : e.filename) || "").trim(), i = String(
(e == null ? void 0 : e.filepath) || (e == null ? void 0 : e.path) || (e == null ? void 0 : e.fullpath) || (e == null ? void 0 : e.full_path) || ""
- ).trim(), o = String((e == null ? void 0 : e.subfolder) || (e == null ? void 0 : e.sub_folder) || (e == null ? void 0 : e.subFolder) || "").trim(), r = String((e == null ? void 0 : e.type) || (e == null ? void 0 : e.source) || "output").trim().toLowerCase(), l = String((e == null ? void 0 : e.root_id) || (e == null ? void 0 : e.custom_root_id) || "").trim(), a = oY(e);
+ ).trim(), o = String((e == null ? void 0 : e.subfolder) || (e == null ? void 0 : e.sub_folder) || (e == null ? void 0 : e.subFolder) || "").trim(), r = String((e == null ? void 0 : e.type) || (e == null ? void 0 : e.source) || "output").trim().toLowerCase(), l = String((e == null ? void 0 : e.root_id) || (e == null ? void 0 : e.custom_root_id) || "").trim(), a = oV(e);
if (!a || !n && !i) return null;
const c = n || i.split(/[/\\]/).filter(Boolean).pop() || "";
if (!c) return null;
@@ -45688,9 +45723,9 @@ function rY(e, { jobId: t = "" } = {}) {
l,
o,
c
- ].map((y) => String(y || "").trim().toLowerCase()).join("|"), u = Date.now() / 1e3, I = String((e == null ? void 0 : e.job_id) || t || "").trim();
+ ].map((A) => String(A || "").trim().toLowerCase()).join("|"), u = Date.now() / 1e3, I = String((e == null ? void 0 : e.job_id) || t || "").trim();
return {
- id: `${eY}:${d || s.toLowerCase()}`,
+ id: `${eV}:${d || s.toLowerCase()}`,
filename: c,
filepath: s,
path: s,
@@ -45713,7 +45748,7 @@ function rY(e, { jobId: t = "" } = {}) {
_mjrLiveLabel: "In progress"
};
}
-function lY(e) {
+function lV(e) {
var n;
const t = String(e || "");
try {
@@ -45724,11 +45759,11 @@ function lY(e) {
}
return t.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1");
}
-function aY(e, t) {
+function aV(e, t) {
const 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 cY(e, t) {
+function cV(e, t) {
const n = String(e || "").trim().toLowerCase(), i = String(t || "").trim().toLowerCase(), o = {
delete_db: ["started", "stopping_workers", "resetting_db", "delete_db", "recreate_db", "restarting_scan", "done"],
reset_index: ["started", "stopping_workers", "resetting_db", "restarting_scan", "done"],
@@ -45741,7 +45776,7 @@ function cY(e, t) {
label: i.replace(/[_-]+/g, " ")
};
}
-async function sY({
+async function sV({
api: e,
runtime: t,
executionRuntime: n,
@@ -45755,246 +45790,246 @@ async function sY({
upsertAssetNow: d,
removeAssetsFromGrid: u,
getEnrichmentState: I,
- setEnrichmentState: y,
- comfyToast: S,
- t: Z,
- reportError: C,
+ setEnrichmentState: A,
+ comfyToast: h,
+ t: S,
+ reportError: W,
registerCleanableListener: g,
- syncExecutionBackendState: A
+ syncExecutionBackendState: y
}) {
- e._mjrExecutedHandler = (h) => {
+ e._mjrExecutedHandler = (C) => {
try {
- n.handleExecutedEvent(h, { appRef: i });
+ n.handleExecutedEvent(C, { appRef: i });
} catch (G) {
- C(G, "entry.executed");
+ W(G, "entry.executed");
}
- }, g(t, e, "executed", e._mjrExecutedHandler), e._mjrExecutionStartHandler = (h) => {
- var G, W;
+ }, g(t, e, "executed", e._mjrExecutedHandler), e._mjrExecutionStartHandler = (C) => {
+ var G, Z;
try {
- n.handleExecutionStart(h, {
+ n.handleExecutionStart(C, {
setCurrentJobId: (f) => o == null ? void 0 : o.setCurrentJobId(f)
- }), A == null || A({
+ }), y == null || y({
active: !0,
- promptId: ((G = h == null ? void 0 : h.detail) == null ? void 0 : G.prompt_id) || ((W = h == null ? void 0 : h.detail) == null ? void 0 : W.promptId) || ""
+ promptId: ((G = C == null ? void 0 : C.detail) == null ? void 0 : G.prompt_id) || ((Z = C == null ? void 0 : C.detail) == null ? void 0 : Z.promptId) || ""
});
} catch (f) {
- C(f, "entry.execution_start");
+ W(f, "entry.execution_start");
}
- }, e._mjrExecutionEndHandler = (h) => {
- var G, W;
+ }, e._mjrExecutionEndHandler = (C) => {
+ var G, Z;
try {
- n.handleExecutionEnd(h, {
+ n.handleExecutionEnd(C, {
setCurrentJobId: (f) => o == null ? void 0 : o.setCurrentJobId(f)
- }), A == null || A({
+ }), y == null || y({
active: !1,
- promptId: ((G = h == null ? void 0 : h.detail) == null ? void 0 : G.prompt_id) || ((W = h == null ? void 0 : h.detail) == null ? void 0 : W.promptId) || ""
+ promptId: ((G = C == null ? void 0 : C.detail) == null ? void 0 : G.prompt_id) || ((Z = C == null ? void 0 : C.detail) == null ? void 0 : Z.promptId) || ""
});
} catch (f) {
- C(f, "entry.execution_end");
+ W(f, "entry.execution_end");
}
- }, e._mjrStacksUpdatedHandler = (h) => {
+ }, e._mjrStacksUpdatedHandler = (C) => {
try {
- n.notifyStacksUpdated((h == null ? void 0 : h.detail) || {});
+ n.notifyStacksUpdated((C == null ? void 0 : C.detail) || {});
} catch (G) {
- C(G, "entry.stacks_updated");
+ W(G, "entry.stacks_updated");
}
- }, e._mjrRuntimeStatusHandler = (h) => {
+ }, e._mjrRuntimeStatusHandler = (C) => {
var G;
try {
- const W = (h == null ? void 0 : h.detail) || {};
+ const Z = (C == null ? void 0 : C.detail) || {};
l({
- progress_node: (W == null ? void 0 : W.node) ?? null,
- progress_value: Number.isFinite(Number(W == null ? void 0 : W.value)) ? Number(W.value) : null,
- progress_max: Number.isFinite(Number(W == null ? void 0 : W.max)) ? Number(W.max) : null,
- queue_remaining: Number.isFinite(Number((G = W == null ? void 0 : W.exec_info) == null ? void 0 : G.queue_remaining)) ? Number(W.exec_info.queue_remaining) : Number.isFinite(Number(W == null ? void 0 : W.queue_remaining)) ? Number(W.queue_remaining) : r().queue_remaining
+ progress_node: (Z == null ? void 0 : Z.node) ?? null,
+ progress_value: Number.isFinite(Number(Z == null ? void 0 : Z.value)) ? Number(Z.value) : null,
+ progress_max: Number.isFinite(Number(Z == null ? void 0 : Z.max)) ? Number(Z.max) : null,
+ queue_remaining: Number.isFinite(Number((G = Z == null ? void 0 : Z.exec_info) == null ? void 0 : G.queue_remaining)) ? Number(Z.exec_info.queue_remaining) : Number.isFinite(Number(Z == null ? void 0 : Z.queue_remaining)) ? Number(Z.queue_remaining) : r().queue_remaining
});
- } catch (W) {
- C(W, "entry.runtime_status");
+ } catch (Z) {
+ W(Z, "entry.runtime_status");
}
- }, e._mjrExecutionCachedHandler = (h) => {
+ }, e._mjrExecutionCachedHandler = (C) => {
try {
- const G = (h == null ? void 0 : h.detail) || {};
+ const G = (C == null ? void 0 : C.detail) || {};
l({
active_prompt_id: (G == null ? void 0 : G.prompt_id) || (G == null ? void 0 : G.promptId) || r().active_prompt_id || null,
cached_nodes: Array.isArray(G == null ? void 0 : G.nodes) ? G.nodes.slice() : []
});
} catch (G) {
- C(G, "entry.execution_cached");
+ W(G, "entry.execution_cached");
}
- }, g(t, e, "execution_start", e._mjrExecutionStartHandler), g(t, e, "execution_success", e._mjrExecutionEndHandler), g(t, e, "execution_error", e._mjrExecutionEndHandler), g(t, e, "execution_interrupted", e._mjrExecutionEndHandler), g(t, e, "mjr.stacks.updated", e._mjrStacksUpdatedHandler), g(t, e, "progress", e._mjrRuntimeStatusHandler), g(t, e, "status", e._mjrRuntimeStatusHandler), g(t, e, ht.RUNTIME_STATUS, e._mjrRuntimeStatusHandler), g(t, e, "execution_cached", e._mjrExecutionCachedHandler);
+ }, g(t, e, "execution_start", e._mjrExecutionStartHandler), g(t, e, "execution_success", e._mjrExecutionEndHandler), g(t, e, "execution_error", e._mjrExecutionEndHandler), g(t, e, "execution_interrupted", e._mjrExecutionEndHandler), g(t, e, "mjr.stacks.updated", e._mjrStacksUpdatedHandler), g(t, e, "progress", e._mjrRuntimeStatusHandler), g(t, e, "status", e._mjrRuntimeStatusHandler), g(t, e, ft.RUNTIME_STATUS, e._mjrRuntimeStatusHandler), g(t, e, "execution_cached", e._mjrExecutionCachedHandler);
function p() {
- var h;
+ var C;
try {
window.__mjrLastAssetUpsert = Date.now(), window.__mjrLastAssetUpsertCount = (Number(window.__mjrLastAssetUpsertCount || 0) || 0) + 1;
} catch (G) {
- (h = console.debug) == null || h.call(console, G);
+ (C = console.debug) == null || C.call(console, G);
}
}
- function b(h, G, { immediate: W = !1, force: f = !1 } = {}) {
- var k, K;
- const X = String((G == null ? void 0 : G.id) || "").trim(), x = String((G == null ? void 0 : G.kind) || "").trim(), T = String((G == null ? void 0 : G.filename) || "").trim(), v = String((G == null ? void 0 : G.filepath) || "").trim(), w = !!x && (!!T || !!v);
+ function b(C, G, { immediate: Z = !1, force: f = !1 } = {}) {
+ var N, U;
+ const X = String((G == null ? void 0 : G.id) || "").trim(), x = String((G == null ? void 0 : G.kind) || "").trim(), K = String((G == null ? void 0 : G.filename) || "").trim(), j = String((G == null ? void 0 : G.filepath) || "").trim(), w = !!x && (!!K || !!j);
let R = !1;
if (X)
try {
- typeof (h == null ? void 0 : h._mjrHasAssetId) == "function" ? R = !!h._mjrHasAssetId(X) : R = !!h.querySelector(
- `.mjr-asset-card[data-mjr-asset-id="${lY(X)}"]`
+ typeof (C == null ? void 0 : C._mjrHasAssetId) == "function" ? R = !!C._mjrHasAssetId(X) : R = !!C.querySelector(
+ `.mjr-asset-card[data-mjr-asset-id="${lV(X)}"]`
);
} catch (z) {
- (k = console.debug) == null || k.call(console, z);
+ (N = console.debug) == null || N.call(console, z);
}
- const Y = w || R;
- if (!R && Y && !f && (String(((K = h == null ? void 0 : h.dataset) == null ? void 0 : K.mjrQuery) || "*").trim() || "*") !== "*")
+ const V = w || R;
+ if (!R && V && !f && (String(((U = C == null ? void 0 : C.dataset) == null ? void 0 : U.mjrQuery) || "*").trim() || "*") !== "*")
return;
- let F = !R && Y && !G.mtime ? { ...G, mtime: Date.now() / 1e3 } : G;
- if (!R && Y) {
- const z = G.has_workflow ?? G.hasWorkflow, B = G.has_generation_data ?? G.hasGenerationData;
- z == null && B == null || (z == null || B == null) && (F = {
- ...F,
+ let O = !R && V && !G.mtime ? { ...G, mtime: Date.now() / 1e3 } : G;
+ if (!R && V) {
+ const z = G.has_workflow ?? G.hasWorkflow, T = G.has_generation_data ?? G.hasGenerationData;
+ z == null && T == null || (z == null || T == null) && (O = {
+ ...O,
has_workflow: z ?? null,
- has_generation_data: B ?? null
+ has_generation_data: T ?? null
});
}
- (Y ? !!(W && typeof d == "function" ? d : s)(h, F) : !1) && p();
+ (V ? !!(Z && typeof d == "function" ? d : s)(C, O) : !1) && p();
}
- e._mjrNewGenerationOutputHandler = (h) => {
- var G, W, f, X;
+ e._mjrNewGenerationOutputHandler = (C) => {
+ var G, Z, f, X;
try {
const x = a();
if (!x) return;
- const T = String(((G = x == null ? void 0 : x.dataset) == null ? void 0 : G.mjrScope) || "output").trim().toLowerCase();
- if (T !== "output" && T !== "all") return;
- const v = Array.isArray((W = h == null ? void 0 : h.detail) == null ? void 0 : W.files) ? h.detail.files : [], w = String(((f = h == null ? void 0 : h.detail) == null ? void 0 : f.prompt_id) || ((X = h == null ? void 0 : h.detail) == null ? void 0 : X.promptId) || "").trim();
- for (const R of v) {
- const Y = rY(R, { jobId: w });
- Y && b(x, Y, { immediate: !0, force: !0 });
+ const K = String(((G = x == null ? void 0 : x.dataset) == null ? void 0 : G.mjrScope) || "output").trim().toLowerCase();
+ if (K !== "output" && K !== "all") return;
+ const j = Array.isArray((Z = C == null ? void 0 : C.detail) == null ? void 0 : Z.files) ? C.detail.files : [], w = String(((f = C == null ? void 0 : C.detail) == null ? void 0 : f.prompt_id) || ((X = C == null ? void 0 : C.detail) == null ? void 0 : X.promptId) || "").trim();
+ for (const R of j) {
+ const V = rV(R, { jobId: w });
+ V && b(x, V, { immediate: !0, force: !0 });
}
} catch (x) {
- C(x, "entry.new_generation_output");
+ W(x, "entry.new_generation_output");
}
- }, g(t, window, ht.NEW_GENERATION_OUTPUT, e._mjrNewGenerationOutputHandler), e._mjrAssetAddedHandler = (h) => {
- var G, W;
+ }, g(t, window, ft.NEW_GENERATION_OUTPUT, e._mjrNewGenerationOutputHandler), e._mjrAssetAddedHandler = (C) => {
+ var G, Z;
try {
const f = a();
- if (f && (h != null && h.detail)) {
- const X = n.prepareLiveAssetEvent(h.detail), x = (X == null ? void 0 : X.detail) || h.detail, T = n.isRenderableLiveAsset(x);
- T && c(x), $m(x);
- const v = ((G = f.dataset) == null ? void 0 : G.mjrScope) || "output";
- if (v !== "output" && v !== "all") return;
- const w = ((W = f.dataset) == null ? void 0 : W.mjrQuery) || "*";
- String(w).trim() === "*" && T && b(f, x, { immediate: !0 });
+ if (f && (C != null && C.detail)) {
+ const X = n.prepareLiveAssetEvent(C.detail), x = (X == null ? void 0 : X.detail) || C.detail, K = n.isRenderableLiveAsset(x);
+ K && c(x), $m(x);
+ const j = ((G = f.dataset) == null ? void 0 : G.mjrScope) || "output";
+ if (j !== "output" && j !== "all") return;
+ const w = ((Z = f.dataset) == null ? void 0 : Z.mjrQuery) || "*";
+ String(w).trim() === "*" && K && b(f, x, { immediate: !0 });
}
} catch (f) {
- C(f, "entry.asset_added");
+ W(f, "entry.asset_added");
}
- }, g(t, e, "mjr-asset-added", e._mjrAssetAddedHandler), e._mjrAssetUpdatedHandler = (h) => {
+ }, g(t, e, "mjr-asset-added", e._mjrAssetAddedHandler), e._mjrAssetUpdatedHandler = (C) => {
try {
const G = a();
- if (G && (h != null && h.detail)) {
- const W = n.prepareLiveAssetEvent(h.detail), f = (W == null ? void 0 : W.detail) || h.detail;
+ if (G && (C != null && C.detail)) {
+ const Z = n.prepareLiveAssetEvent(C.detail), f = (Z == null ? void 0 : Z.detail) || C.detail;
n.isRenderableLiveAsset(f) && c(f), b(G, f, { immediate: !0 });
}
} catch (G) {
- C(G, "entry.asset_updated");
+ W(G, "entry.asset_updated");
}
- }, g(t, e, "mjr-asset-updated", e._mjrAssetUpdatedHandler), e._mjrScanCompleteHandler = (h) => {
+ }, g(t, e, "mjr-asset-updated", e._mjrAssetUpdatedHandler), e._mjrScanCompleteHandler = (C) => {
var G;
try {
- const W = (h == null ? void 0 : h.detail) || {};
- window.dispatchEvent(new CustomEvent(ht.SCAN_COMPLETE, { detail: W }));
- } catch (W) {
- (G = console.debug) == null || G.call(console, W);
+ const Z = (C == null ? void 0 : C.detail) || {};
+ window.dispatchEvent(new CustomEvent(ft.SCAN_COMPLETE, { detail: Z }));
+ } catch (Z) {
+ (G = console.debug) == null || G.call(console, Z);
}
- }, g(t, e, ht.SCAN_COMPLETE, e._mjrScanCompleteHandler), e._mjrScanProgressHandler = (h) => {
+ }, g(t, e, ft.SCAN_COMPLETE, e._mjrScanCompleteHandler), e._mjrScanProgressHandler = (C) => {
var G;
try {
- const W = (h == null ? void 0 : h.detail) || {};
- window.dispatchEvent(new CustomEvent(ht.SCAN_PROGRESS, { detail: W }));
- } catch (W) {
- (G = console.debug) == null || G.call(console, W);
+ const Z = (C == null ? void 0 : C.detail) || {};
+ window.dispatchEvent(new CustomEvent(ft.SCAN_PROGRESS, { detail: Z }));
+ } catch (Z) {
+ (G = console.debug) == null || G.call(console, Z);
}
- }, g(t, e, ht.SCAN_PROGRESS, e._mjrScanProgressHandler), e._mjrAssetIndexingHandler = (h) => {
+ }, g(t, e, ft.SCAN_PROGRESS, e._mjrScanProgressHandler), e._mjrAssetIndexingHandler = (C) => {
var G;
try {
- const W = (h == null ? void 0 : h.detail) || {};
- window.dispatchEvent(new CustomEvent(ht.ASSET_INDEXING, { detail: W }));
- } catch (W) {
- (G = console.debug) == null || G.call(console, W);
+ const Z = (C == null ? void 0 : C.detail) || {};
+ window.dispatchEvent(new CustomEvent(ft.ASSET_INDEXING, { detail: Z }));
+ } catch (Z) {
+ (G = console.debug) == null || G.call(console, Z);
}
- }, g(t, e, ht.ASSET_INDEXING, e._mjrAssetIndexingHandler), e._mjrAssetIndexedHandler = (h) => {
+ }, g(t, e, ft.ASSET_INDEXING, e._mjrAssetIndexingHandler), e._mjrAssetIndexedHandler = (C) => {
var G;
try {
- const W = (h == null ? void 0 : h.detail) || {};
- window.dispatchEvent(new CustomEvent(ht.ASSET_INDEXED, { detail: W }));
+ const Z = (C == null ? void 0 : C.detail) || {};
+ window.dispatchEvent(new CustomEvent(ft.ASSET_INDEXED, { detail: Z }));
const f = a();
- if (f && W) {
- const X = n.prepareLiveAssetEvent(W), x = (X == null ? void 0 : X.detail) || W;
+ if (f && Z) {
+ const X = n.prepareLiveAssetEvent(Z), x = (X == null ? void 0 : X.detail) || Z;
n.isRenderableLiveAsset(x) && c(x), $m(x), b(f, x, { immediate: !0, force: !0 });
}
- } catch (W) {
- (G = console.debug) == null || G.call(console, W);
+ } catch (Z) {
+ (G = console.debug) == null || G.call(console, Z);
}
- }, g(t, e, ht.ASSET_INDEXED, e._mjrAssetIndexedHandler), e._mjrEnrichmentStatusHandler = (h) => {
+ }, g(t, e, ft.ASSET_INDEXED, e._mjrAssetIndexedHandler), e._mjrEnrichmentStatusHandler = (C) => {
var G;
try {
- const W = (h == null ? void 0 : h.detail) || {}, f = Number(W == null ? void 0 : W.queued), X = Number(W == null ? void 0 : W.queue_left), x = Number.isFinite(f) ? Math.max(0, Math.floor(f)) : Number.isFinite(X) ? Math.max(0, Math.floor(X)) : 0, T = !!(W != null && W.active) || x > 0, v = I().active;
- y(T, x), window.dispatchEvent(new CustomEvent(ht.ENRICHMENT_STATUS, { detail: W })), v && !T && S(Z("toast.enrichmentComplete", "Metadata enrichment complete"), "success", 2600);
- } catch (W) {
- (G = console.debug) == null || G.call(console, W);
+ const Z = (C == null ? void 0 : C.detail) || {}, f = Number(Z == null ? void 0 : Z.queued), X = Number(Z == null ? void 0 : Z.queue_left), x = Number.isFinite(f) ? Math.max(0, Math.floor(f)) : Number.isFinite(X) ? Math.max(0, Math.floor(X)) : 0, K = !!(Z != null && Z.active) || x > 0, j = I().active;
+ A(K, x), window.dispatchEvent(new CustomEvent(ft.ENRICHMENT_STATUS, { detail: Z })), j && !K && h(S("toast.enrichmentComplete", "Metadata enrichment complete"), "success", 2600);
+ } catch (Z) {
+ (G = console.debug) == null || G.call(console, Z);
}
- }, g(t, e, ht.ENRICHMENT_STATUS, e._mjrEnrichmentStatusHandler), e._mjrDbRestoreStatusHandler = (h) => {
+ }, g(t, e, ft.ENRICHMENT_STATUS, e._mjrEnrichmentStatusHandler), e._mjrDbRestoreStatusHandler = (C) => {
var G;
try {
- const W = (h == null ? void 0 : h.detail) || {}, f = String((W == null ? void 0 : W.step) || ""), X = String((W == null ? void 0 : W.level) || "info"), x = String((W == null ? void 0 : W.operation) || "");
- window.dispatchEvent(new CustomEvent(ht.DB_RESTORE_STATUS, { detail: W }));
- const T = x === "delete_db", v = x === "reset_index", R = {
- started: T ? Z("toast.dbDeleteTriggered", "Deleting database and rebuilding...") : v ? Z("toast.resetTriggered", "Reset triggered: Reindexing all files...") : Z("toast.dbRestoreStarted", "DB restore started"),
- stopping_workers: Z("toast.dbRestoreStopping", "Stopping running workers"),
- resetting_db: Z("toast.dbRestoreResetting", "Unlocking and resetting database"),
- delete_db: Z("toast.dbDeleteTriggered", "Deleting database and rebuilding..."),
- recreate_db: Z("toast.dbRestoreReplacing", "Recreating database"),
- replacing_files: Z("toast.dbRestoreReplacing", "Replacing database files"),
- restarting_scan: Z("toast.dbRestoreRescan", "Restarting scan"),
- done: T ? Z("toast.dbDeleteSuccess", "Database deleted and rebuilt. Files are being reindexed.") : v ? Z("toast.resetStarted", "Index reset started. Files will be reindexed in the background.") : Z("toast.dbRestoreSuccess", "Database backup restored"),
+ const Z = (C == null ? void 0 : C.detail) || {}, f = String((Z == null ? void 0 : Z.step) || ""), X = String((Z == null ? void 0 : Z.level) || "info"), x = String((Z == null ? void 0 : Z.operation) || "");
+ window.dispatchEvent(new CustomEvent(ft.DB_RESTORE_STATUS, { detail: Z }));
+ const K = x === "delete_db", j = x === "reset_index", R = {
+ started: K ? S("toast.dbDeleteTriggered", "Deleting database and rebuilding...") : j ? S("toast.resetTriggered", "Reset triggered: Reindexing all files...") : S("toast.dbRestoreStarted", "DB restore started"),
+ stopping_workers: S("toast.dbRestoreStopping", "Stopping running workers"),
+ resetting_db: S("toast.dbRestoreResetting", "Unlocking and resetting database"),
+ delete_db: S("toast.dbDeleteTriggered", "Deleting database and rebuilding..."),
+ recreate_db: S("toast.dbRestoreReplacing", "Recreating database"),
+ replacing_files: S("toast.dbRestoreReplacing", "Replacing database files"),
+ restarting_scan: S("toast.dbRestoreRescan", "Restarting scan"),
+ done: K ? S("toast.dbDeleteSuccess", "Database deleted and rebuilt. Files are being reindexed.") : j ? S("toast.resetStarted", "Index reset started. Files will be reindexed in the background.") : S("toast.dbRestoreSuccess", "Database backup restored"),
failed: String(
- (W == null ? void 0 : W.message) || (T ? Z("toast.dbDeleteFailed", "Failed to delete database") : v ? Z("toast.resetFailed", "Failed to reset index") : Z("toast.dbRestoreFailed", "Failed to restore DB backup"))
+ (Z == null ? void 0 : Z.message) || (K ? S("toast.dbDeleteFailed", "Failed to delete database") : j ? S("toast.resetFailed", "Failed to reset index") : S("toast.dbRestoreFailed", "Failed to restore DB backup"))
)
- }[f] || String((W == null ? void 0 : W.message) || "");
+ }[f] || String((Z == null ? void 0 : Z.message) || "");
if (!R) return;
- const Y = X === "error" || f === "failed" ? "error" : f === "done" ? "success" : "info", F = {
+ const V = X === "error" || f === "failed" ? "error" : f === "done" ? "success" : "info", O = {
history: {
trackId: `maintenance:${String(x || "db_restore").trim().toLowerCase() || "db_restore"}`,
- title: aY(x, Z),
+ title: aV(x, S),
detail: R,
status: f,
operation: String(x || "db_restore").trim().toLowerCase(),
- progress: cY(x, f),
- source: String((W == null ? void 0 : W.name) || "").trim() || "maintenance",
+ progress: cV(x, f),
+ source: String((Z == null ? void 0 : Z.name) || "").trim() || "maintenance",
forceStore: !0
}
};
- if (T && !["started", "done", "failed"].includes(f)) {
- tl(R, Y, 0, F);
+ if (K && !["started", "done", "failed"].includes(f)) {
+ tl(R, V, 0, O);
return;
}
- S(R, Y, f === "done" || f === "failed" ? 2800 : 1800, F);
- } catch (W) {
- (G = console.debug) == null || G.call(console, W);
+ h(R, V, f === "done" || f === "failed" ? 2800 : 1800, O);
+ } catch (Z) {
+ (G = console.debug) == null || G.call(console, Z);
}
- }, g(t, e, ht.DB_RESTORE_STATUS, e._mjrDbRestoreStatusHandler);
- const L = (h) => {
- var G, W;
+ }, g(t, e, ft.DB_RESTORE_STATUS, e._mjrDbRestoreStatusHandler);
+ const L = (C) => {
+ var G, Z;
try {
- const f = Array.isArray((G = h == null ? void 0 : h.detail) == null ? void 0 : G.ids) ? h.detail.ids.map((x) => String(x || "")).filter(Boolean) : [];
+ const f = Array.isArray((G = C == null ? void 0 : C.detail) == null ? void 0 : G.ids) ? C.detail.ids.map((x) => String(x || "")).filter(Boolean) : [];
if (!f.length) return;
const X = a();
X && u(X, f);
} catch (f) {
- (W = console.debug) == null || W.call(console, f);
+ (Z = console.debug) == null || Z.call(console, f);
}
};
- g(t, window, ht.ASSETS_DELETED, L), t && typeof t == "object" && (t.api = e, t.assetsDeletedHandler = L), console.debug("[Majoor] Real-time listener registered");
+ g(t, window, ft.ASSETS_DELETED, L), t && typeof t == "object" && (t.api = e, t.assetsDeletedHandler = L), console.debug("[Majoor] Real-time listener registered");
}
-function dY({ resolveNodeStreamModule: e }) {
+function dV({ resolveNodeStreamModule: e }) {
var t;
if (!(typeof window > "u")) {
window.MajoorDebug = {
@@ -46024,19 +46059,19 @@ function dY({ resolveNodeStreamModule: e }) {
}
}
}
-const vs = "__MJR_ENTRY_RUNTIME__";
-function Ls(e, t) {
+const Ls = "__MJR_ENTRY_RUNTIME__";
+function Ys(e, t) {
if (e)
try {
- e._mjrAssetUpdateReloadTimer && (clearTimeout(e._mjrAssetUpdateReloadTimer), 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._mjrScanCompleteHandler && e.removeEventListener(ht.SCAN_COMPLETE, e._mjrScanCompleteHandler), e._mjrScanProgressHandler && e.removeEventListener(ht.SCAN_PROGRESS, e._mjrScanProgressHandler), e._mjrAssetIndexingHandler && e.removeEventListener(ht.ASSET_INDEXING, e._mjrAssetIndexingHandler), e._mjrAssetIndexedHandler && e.removeEventListener(ht.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(ht.ENRICHMENT_STATUS, e._mjrEnrichmentStatusHandler), e._mjrDbRestoreStatusHandler && e.removeEventListener(ht.DB_RESTORE_STATUS, e._mjrDbRestoreStatusHandler), e._mjrRuntimeStatusHandler && (e.removeEventListener("progress", e._mjrRuntimeStatusHandler), e.removeEventListener("status", e._mjrRuntimeStatusHandler), e.removeEventListener(ht.RUNTIME_STATUS, e._mjrRuntimeStatusHandler), e.removeEventListener("execution_cached", e._mjrExecutionCachedHandler));
+ e._mjrAssetUpdateReloadTimer && (clearTimeout(e._mjrAssetUpdateReloadTimer), 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._mjrScanCompleteHandler && e.removeEventListener(ft.SCAN_COMPLETE, e._mjrScanCompleteHandler), e._mjrScanProgressHandler && e.removeEventListener(ft.SCAN_PROGRESS, e._mjrScanProgressHandler), e._mjrAssetIndexingHandler && e.removeEventListener(ft.ASSET_INDEXING, e._mjrAssetIndexingHandler), e._mjrAssetIndexedHandler && e.removeEventListener(ft.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(ft.ENRICHMENT_STATUS, e._mjrEnrichmentStatusHandler), e._mjrDbRestoreStatusHandler && e.removeEventListener(ft.DB_RESTORE_STATUS, e._mjrDbRestoreStatusHandler), e._mjrRuntimeStatusHandler && (e.removeEventListener("progress", e._mjrRuntimeStatusHandler), e.removeEventListener("status", e._mjrRuntimeStatusHandler), e.removeEventListener(ft.RUNTIME_STATUS, e._mjrRuntimeStatusHandler), e.removeEventListener("execution_cached", e._mjrExecutionCachedHandler));
} catch (n) {
t == null || t(n, "entry.removeApiHandlers");
}
}
-function Op(e, t) {
+function Fp(e, t) {
try {
const n = e == null ? void 0 : e.assetsDeletedHandler;
- n && typeof window < "u" && window.removeEventListener(ht.ASSETS_DELETED, n);
+ n && typeof window < "u" && window.removeEventListener(ft.ASSETS_DELETED, n);
} catch (n) {
t == null || t(n, "entry.removeRuntimeWindowHandlers");
}
@@ -46069,13 +46104,13 @@ function zp(e, { reportError: t } = {}) {
console.warn("[MJR teardown]", r);
}
try {
- Ls(e.api || null, t), Op(e, t);
+ Ys(e.api || null, t), Fp(e, t);
} catch (r) {
console.warn("[MJR teardown]", r);
}
}
}
-function uY(e, t, n, i, o = void 0) {
+function uV(e, t, n, i, o = void 0) {
var l;
if (!e || !(t != null && t.addEventListener) || typeof i != "function") return null;
const r = o && typeof o == "object" ? { ...o } : o;
@@ -46095,7 +46130,7 @@ function uY(e, t, n, i, o = void 0) {
}
}), null;
}
-function mY({
+function mV({
cleanupEntryRuntimeFn: e = zp,
teardownLiveStreamTracker: t,
teardownNodeStream: n,
@@ -46109,7 +46144,7 @@ function mY({
try {
if (typeof window < "u") {
try {
- const s = window[vs];
+ const s = window[Ls];
e(s, { reportError: c });
} catch (s) {
console.warn("[MJR teardown]", s);
@@ -46149,7 +46184,7 @@ function mY({
} catch (s) {
console.warn("[MJR teardown]", s);
}
- window[vs] = {
+ window[Ls] = {
api: null,
assetsDeletedHandler: null,
_cleanupControllers: [],
@@ -46161,9 +46196,9 @@ function mY({
}
}
let dl = null, rr = null;
-const Pl = "majoor-assets", Ql = "__MJR_EXECUTION_RUNTIME__", gY = "Majoor.AssetsManager";
-let zc = { active: null, promptId: "" }, _l = null;
-function lc() {
+const Pl = "majoor-assets", Ql = "__MJR_EXECUTION_RUNTIME__", gV = "Majoor.AssetsManager";
+let Jc = { active: null, promptId: "" }, _l = null;
+function ac() {
var e;
try {
return typeof window > "u" ? {
@@ -46188,21 +46223,21 @@ function lc() {
function Jp(e = {}) {
var t;
try {
- const n = lc();
- Object.assign(n, e || {}), window.dispatchEvent(new CustomEvent(ht.RUNTIME_STATUS, { detail: { ...n } }));
+ const n = ac();
+ Object.assign(n, e || {}), window.dispatchEvent(new CustomEvent(ft.RUNTIME_STATUS, { detail: { ...n } }));
} catch (n) {
(t = console.debug) == null || t.call(console, n);
}
}
-async function IY({ active: e, promptId: t = "" } = {}) {
+async function IV({ active: e, promptId: t = "" } = {}) {
const n = !!e, i = String(t || "").trim();
- if (!(zc.active === n && zc.promptId === i)) {
- zc = { active: n, promptId: i };
+ if (!(Jc.active === n && Jc.promptId === i)) {
+ Jc = { active: n, promptId: i };
try {
- await Et(ct.RUNTIME_EXECUTION, {
+ await Dt(st.RUNTIME_EXECUTION, {
active: n,
prompt_id: i || void 0,
- cooldown_ms: Number(fe.EXECUTION_IDLE_GRACE_MS) || 6e3
+ cooldown_ms: Number(he.EXECUTION_IDLE_GRACE_MS) || 6e3
});
} catch (o) {
ai(o, "entry.execution_state_sync");
@@ -46212,12 +46247,12 @@ async function IY({ active: e, promptId: t = "" } = {}) {
function Tp() {
var e, t;
try {
- return !!String(((e = lc()) == null ? void 0 : e.active_prompt_id) || "").trim();
+ return !!String(((e = ac()) == null ? void 0 : e.active_prompt_id) || "").trim();
} catch (n) {
return (t = console.debug) == null || t.call(console, n), !1;
}
}
-function Bp(e = 1200) {
+function Kp(e = 1200) {
var t;
try {
_l && clearTimeout(_l);
@@ -46226,15 +46261,15 @@ function Bp(e = 1200) {
}
_l = setTimeout(() => {
if (_l = null, Tp()) {
- Bp(e);
+ Kp(e);
return;
}
- const n = So();
+ const n = Go();
n && ed(n);
}, Math.max(250, Number(e) || 0));
}
-function bY(e) {
- import("./LiveStreamTracker-CC4jZbCd.js").then((t) => {
+function bV(e) {
+ import("./LiveStreamTracker-BWRfNIz3.js").then((t) => {
dl = t;
try {
t.initLiveStreamTracker(e);
@@ -46247,14 +46282,14 @@ function bY(e) {
return;
}
}
-async function pY(e, t) {
+async function pV(e, t) {
var o;
- const n = await hg({ app: e, timeoutMs: 4e3 }) || Ca(e);
+ const n = await Cg({ app: e, timeoutMs: 4e3 }) || ha(e);
if (Wy(n || null), !n) {
console.warn("Majoor API not available, real-time updates disabled");
return;
}
- SI({ api: n, app: e }).catch(
+ GI({ api: n, app: e }).catch(
(r) => {
var l;
return (l = console.debug) == null ? void 0 : l.call(console, "[Majoor] MFV progress tracking init failed", r);
@@ -46262,49 +46297,49 @@ async function pY(e, t) {
);
let i = null;
try {
- i = typeof window < "u" && window[vs] || null;
+ i = typeof window < "u" && window[Ls] || null;
} catch (r) {
(o = console.debug) == null || o.call(console, r);
}
- Ls((i == null ? void 0 : i.api) || null, ai), n !== (i == null ? void 0 : i.api) && Ls(n, ai), Op(i, ai), await sY({
+ Ys((i == null ? void 0 : i.api) || null, ai), n !== (i == null ? void 0 : i.api) && Ys(n, ai), Fp(i, ai), await sV({
api: n,
runtime: i,
executionRuntime: t,
appRef: vo,
liveStreamModule: dl,
- ensureExecutionRuntime: lc,
+ ensureExecutionRuntime: ac,
emitRuntimeStatus: Jp,
- getActiveGridContainer: So,
- pushGeneratedAsset: YV,
+ getActiveGridContainer: Go,
+ pushGeneratedAsset: VY,
upsertAsset: lZ,
upsertAssetNow: aZ,
- removeAssetsFromGrid: ls,
- getEnrichmentState: $a,
+ removeAssetsFromGrid: as,
+ getEnrichmentState: ec,
setEnrichmentState: vI,
- comfyToast: Ze,
+ comfyToast: Ae,
t: m,
reportError: ai,
- registerCleanableListener: uY,
- syncExecutionBackendState: IY
+ registerCleanableListener: uV,
+ syncExecutionBackendState: IV
});
}
-const eg = _V({
- post: Et,
- ENDPOINTS: ct,
+const eg = _Y({
+ post: Dt,
+ ENDPOINTS: st,
reportError: ai,
- extractOutputFiles: $V,
- ensureExecutionRuntime: lc,
+ extractOutputFiles: $Y,
+ ensureExecutionRuntime: ac,
emitRuntimeStatus: Jp,
- refreshGeneratedFeedHosts: wV,
- getActiveGridContainer: So
+ refreshGeneratedFeedHosts: wY,
+ getActiveGridContainer: Go
});
vo.registerExtension({
- name: gY,
+ name: gV,
/**
* Declarative settings — registered with ComfyUI's settings panel.
* Replaces the imperative registerMajoorSettings() call for the settings UI.
*/
- settings: SC(vo),
+ settings: Gh(vo),
/**
* Declarative commands — ComfyUI surfaces these in the command palette
* and the shortcut editor without additional imperative calls.
@@ -46318,18 +46353,18 @@ vo.registerExtension({
* Each tab's render/destroy callbacks mount/unmount the Vue app via
* mountKeepAlive() so state survives panel collapse/expand cycles.
*/
- bottomPanelTabs: VL(),
+ bottomPanelTabs: YL(),
// ── lifecycle ──────────────────────────────────────────────────────────────
async setup() {
var t;
- mY({
+ mV({
cleanupEntryRuntimeFn: zp,
teardownLiveStreamTracker: (n) => dl == null ? void 0 : dl.teardownLiveStreamTracker(n),
teardownNodeStream: (n) => rr == null ? void 0 : rr.teardownNodeStream(n),
teardownFloatingViewerManager: MI,
- teardownGeneratedFeed: YL,
+ teardownGeneratedFeed: VL,
teardownAssetsSidebar: vL,
- teardownGlobalRuntime: GL,
+ teardownGlobalRuntime: SL,
teardownTopBarMfvButton: Ip,
reportError: ai
}), Td(vo);
@@ -46340,11 +46375,11 @@ vo.registerExtension({
} catch (n) {
(t = console.debug) == null || t.call(console, n);
}
- fh(), Jh({ enabled: !0 }), SL(), bY(e), MC(e, () => {
- const n = So();
+ fC(), JC({ enabled: !0 }), GL(), bV(e), Mh(e, () => {
+ const n = Go();
if (n) {
- if (fe.DEFER_GRID_FETCH_DURING_EXECUTION && Tp()) {
- Bp();
+ if (he.DEFER_GRID_FETCH_DURING_EXECUTION && Tp()) {
+ Kp();
return;
}
ed(n);
@@ -46353,16 +46388,16 @@ vo.registerExtension({
sidebarTabId: Pl,
triggerStartupScan: Il
}), setTimeout(() => {
- zh();
+ zC();
}, 5e3), setTimeout(() => {
- Cp();
- }, 4e3), pY(e, eg).catch(
+ hp();
+ }, 800), pV(e, eg).catch(
(n) => ai(n, "entry.api_setup")
), jL(e, {
sidebarTabId: Pl
}) ? io("[Majoor] Sidebar tab registered (Vue)") : console.warn(
"Majoor Assets Manager: extensionManager.registerSidebarTab is unavailable"
- ), dY({
+ ), dV({
resolveNodeStreamModule: async () => (rr || (rr = await import("./NodeStreamController-CLm6-3VG.js")), rr)
});
},
@@ -46382,48 +46417,50 @@ vo.registerExtension({
},
/** Context-menu items injected into ComfyUI node right-click menus. */
getNodeMenuItems(e) {
- return XL(e, vo, { sidebarTabId: Pl });
+ return NL(e, vo, { sidebarTabId: Pl });
}
});
export {
- fe as A,
- hY as B,
- CY as C,
- eb as D,
- ht as E,
- Sr as F,
- Ze as G,
- Eg as H,
- gl as I,
- mA as J,
- ZY as K,
+ he as A,
+ GI as B,
+ ha as C,
+ CV as D,
+ ft as E,
+ hV as F,
+ eb as G,
+ Gr as H,
+ Ae as I,
+ Hg as J,
+ gl as K,
+ mA as L,
vA as M,
+ ZV as N,
LA as P,
$x as _,
ib as a,
RA as b,
- Xu as c,
- wc as d,
+ Nu as c,
+ Mc as d,
zn as e,
- WY as f,
- AY as g,
- In as h,
- ku as i,
+ WV as f,
+ AV as g,
+ pn as h,
+ Xu as i,
qj as j,
Mv as k,
gj as l,
- bt as m,
+ It as m,
cp as n,
yb as o,
PI as p,
ul as q,
- NA as r,
+ kA as r,
Wo as s,
- Ki as t,
- Qn as u,
- m as v,
- hg as w,
- Ao as x,
- SI as y,
- Ca as z
+ Ui as t,
+ eA as u,
+ QI as v,
+ Cg as w,
+ Qn as x,
+ m as y,
+ Ao as z
};
diff --git a/js_dist/chunks/genInfo-CgFRoaPM.js b/js_dist/chunks/genInfo-cg-2k0dV.js
similarity index 99%
rename from js_dist/chunks/genInfo-CgFRoaPM.js
rename to js_dist/chunks/genInfo-cg-2k0dV.js
index 9c1f05b7..9d7625d7 100644
--- a/js_dist/chunks/genInfo-CgFRoaPM.js
+++ b/js_dist/chunks/genInfo-cg-2k0dV.js
@@ -1,4 +1,4 @@
-import { _ as nn, j as on, k as tn, A as B, l as en, m as rn, o as cn } from "./entry-CuODMrGh.js";
+import { _ as nn, j as on, k as tn, A as B, l as en, m as rn, o as cn } from "./entry-CfyS4_5Z.js";
import { o as E, c as R, t as $, a as O, b as I, n as ln, d as z, e as j } from "./mjr-vue-vendor-DZo-ZbFS.js";
const un = { style: { display: "flex", "flex-direction": "column", gap: "10px", "margin-bottom": "14px" } }, fn = {
key: 0,
diff --git a/js_dist/chunks/model3dRenderer-BJokSmes.js b/js_dist/chunks/model3dRenderer-B8p2IdLl.js
similarity index 87%
rename from js_dist/chunks/model3dRenderer-BJokSmes.js
rename to js_dist/chunks/model3dRenderer-B8p2IdLl.js
index a99dbdb7..984c2e0c 100644
--- a/js_dist/chunks/model3dRenderer-BJokSmes.js
+++ b/js_dist/chunks/model3dRenderer-B8p2IdLl.js
@@ -1,4 +1,4 @@
-import { M as s, a as o, P as D, b as t, c as M, f as d, g as l, i as E, d as r, r as i } from "./entry-CuODMrGh.js";
+import { M as s, a as o, P as D, b as t, c as M, f as d, g as l, i as E, d as r, r as i } from "./entry-CfyS4_5Z.js";
export {
s as MODEL3D_EXTS,
o as MODEL3D_EXT_TO_LOADER,
diff --git a/js_dist/chunks/scopes-B0qS9yvv.js b/js_dist/chunks/scopes-BfKBxPqI.js
similarity index 99%
rename from js_dist/chunks/scopes-B0qS9yvv.js
rename to js_dist/chunks/scopes-BfKBxPqI.js
index ef64de50..99bc8880 100644
--- a/js_dist/chunks/scopes-B0qS9yvv.js
+++ b/js_dist/chunks/scopes-BfKBxPqI.js
@@ -1,4 +1,4 @@
-import { h as C } from "./entry-CuODMrGh.js";
+import { h as C } from "./entry-CfyS4_5Z.js";
function H(t, n, o) {
return 0.2126 * t + 0.7152 * n + 0.0722 * o;
}
diff --git a/js_dist/chunks/sideBySide-DsvoFFQr.js b/js_dist/chunks/sideBySide-Cxerzz-Z.js
similarity index 99%
rename from js_dist/chunks/sideBySide-DsvoFFQr.js
rename to js_dist/chunks/sideBySide-Cxerzz-Z.js
index 2124da25..ea4754ff 100644
--- a/js_dist/chunks/sideBySide-DsvoFFQr.js
+++ b/js_dist/chunks/sideBySide-Cxerzz-Z.js
@@ -1,4 +1,4 @@
-import { i as q, n as Y, s as k } from "./entry-CuODMrGh.js";
+import { i as q, n as Y, s as k } from "./entry-CfyS4_5Z.js";
function Z(o) {
if (!o) return null;
try {
diff --git a/js_dist/entry.js b/js_dist/entry.js
index 8c212afa..2aa79533 100644
--- a/js_dist/entry.js
+++ b/js_dist/entry.js
@@ -1,2 +1,2 @@
-import "./chunks/entry-CuODMrGh.js";
+import "./chunks/entry-CfyS4_5Z.js";
import "../../scripts/app.js";