');
var Sc = (e) => {
let t, [n2, o2] = B2(0), [l2, a] = B2(0), [i, c] = B2(false), [s, d2] = B2(false), [f, p2] = B2("bottom"), y2, T2, H2 = () => {
t && (o2(t.offsetWidth), a(t.offsetHeight));
};
pe2(() => {
let b2 = e.position;
b2 ? (p2(b2.edge), clearTimeout(y2), c(true), T2 !== void 0 && q(T2), T2 = D(() => {
H2(), t?.offsetHeight, d2(true);
})) : (T2 !== void 0 && q(T2), d2(false), y2 = setTimeout(() => {
c(false);
}, is));
});
let $2 = se2((b2) => {
let w3 = Fo2({ anchor: e.position, measuredWidth: n2(), measuredHeight: l2(), viewportWidth: window.innerWidth, viewportHeight: window.innerHeight, anchorGapPx: cs, viewportPaddingPx: ls, offscreenPosition: Es });
return w3.left !== Es.left ? w3 : b2;
}, Es);
return lt2(() => {
H2();
let b2 = (g2) => {
if (!e.position || xt2(g2)) return;
let v2 = g2.code === "Enter", I2 = g2.code === "Escape";
(v2 || I2) && (g2.preventDefault(), g2.stopImmediatePropagation(), I2 ? e.onCancel() : e.onConfirm());
};
window.addEventListener("keydown", b2, { capture: true });
let w3 = (g2) => {
!e.position || At2(g2, "data-react-grab-ignore-events") || e.onCancel();
}, h2 = D(() => {
window.addEventListener("mousedown", w3, { capture: true }), window.addEventListener("touchstart", w3, { capture: true });
});
Te2(() => {
q(h2), clearTimeout(y2), T2 !== void 0 && q(T2), window.removeEventListener("keydown", b2, { capture: true }), window.removeEventListener("mousedown", w3, { capture: true }), window.removeEventListener("touchstart", w3, { capture: true });
});
}), E2(fe2, { get when() {
return i();
}, get children() {
var b2 = dg(), w3 = b2.firstChild;
Pe2(b2, "contextmenu", ct2, true), Pe2(b2, "click", ct2, true), Pe2(b2, "mousedown", ct2, true), Pe2(b2, "pointerdown", ct2, true);
var h2 = t;
return typeof h2 == "function" ? Ue2(h2, b2) : t = b2, _2(w3, E2(hr2, { label: "Clear history?", cancelOnEscape: true, get onConfirm() {
return e.onConfirm;
}, get onCancel() {
return e.onCancel;
} })), Y2((g2) => {
var v2 = `${$2().top}px`, I2 = `${$2().left}px`, K = s() ? "auto" : "none", Q2 = _s[f()], X2 = s() ? "1" : "0", te2 = s() ? "scale(1)" : "scale(0.95)", ye2 = me2("contain-layout flex flex-col rounded-[10px] antialiased w-fit h-fit [font-synthesis:none] [corner-shape:superellipse(1.25)]", gs);
return v2 !== g2.e && de2(b2, "top", g2.e = v2), I2 !== g2.t && de2(b2, "left", g2.t = I2), K !== g2.a && de2(b2, "pointer-events", g2.a = K), Q2 !== g2.o && de2(b2, "transform-origin", g2.o = Q2), X2 !== g2.i && de2(b2, "opacity", g2.i = X2), te2 !== g2.n && de2(b2, "transform", g2.n = te2), ye2 !== g2.s && we2(w3, g2.s = ye2), g2;
}, { e: void 0, t: void 0, a: void 0, o: void 0, i: void 0, n: void 0, s: void 0 }), b2;
} });
};
Qe2(["pointerdown", "mousedown", "click", "contextmenu"]);
var ug = N2('
');
var Ac = (e) => [E2(Xl, { get crosshairVisible() {
return e.crosshairVisible;
}, get selectionVisible() {
return e.selectionVisible;
}, get selectionBounds() {
return e.selectionBounds;
}, get selectionBoundsMultiple() {
return e.selectionBoundsMultiple;
}, get selectionShouldSnap() {
return e.selectionShouldSnap;
}, get selectionIsFading() {
return e.selectionLabelStatus === "fading";
}, get dragVisible() {
return e.dragVisible;
}, get dragBounds() {
return e.dragBounds;
}, get grabbedBoxes() {
return e.grabbedBoxes;
}, get agentSessions() {
return e.agentSessions;
}, get labelInstances() {
return e.labelInstances;
} }), (() => {
var t = ug();
return de2(t, "z-index", 2147483645), de2(t, "box-shadow", `inset 0 0 ${bo}px ${So}`), Y2((n2) => de2(t, "opacity", e.isFrozen ? 1 : 0)), t;
})(), E2(oi, { get each() {
return Fe2(() => !!e.agentSessions)() ? Array.from(e.agentSessions.values()) : [];
}, children: (t) => E2(fe2, { get when() {
return t().selectionBounds.length > 0;
}, get children() {
return E2(wi, { get tagName() {
return t().tagName;
}, get componentName() {
return t().componentName;
}, get selectionBounds() {
return t().selectionBounds[0];
}, get mouseX() {
return t().position.x;
}, visible: true, hasAgent: true, isAgentConnected: true, get status() {
return t().isFading ? "fading" : t().isStreaming ? "copying" : "copied";
}, get statusText() {
return t().lastStatus || "Thinking…";
}, get inputValue() {
return t().context.prompt;
}, get previousPrompt() {
return t().context.prompt;
}, get supportsUndo() {
return e.supportsUndo;
}, get supportsFollowUp() {
return e.supportsFollowUp;
}, get dismissButtonText() {
return e.dismissButtonText;
}, onAbort: () => e.onRequestAbortSession?.(t().id), get onDismiss() {
return t().isStreaming ? void 0 : () => e.onDismissSession?.(t().id);
}, get onUndo() {
return t().isStreaming ? void 0 : () => e.onUndoSession?.(t().id);
}, get onFollowUpSubmit() {
return t().isStreaming ? void 0 : (n2) => e.onFollowUpSubmitSession?.(t().id, n2);
}, get error() {
return t().error;
}, onAcknowledgeError: () => e.onAcknowledgeSessionError?.(t().id), onRetry: () => e.onRetrySession?.(t().id), get isPendingAbort() {
return Fe2(() => !!t().isStreaming)() && e.pendingAbortSessionId === t().id;
}, onConfirmAbort: () => e.onAbortSession?.(t().id, true), onCancelAbort: () => e.onAbortSession?.(t().id, false), onShowContextMenu: void 0 });
} }) }), E2(fe2, { get when() {
return Fe2(() => !!e.selectionLabelVisible)() && e.selectionBounds;
}, get children() {
return E2(wi, { get tagName() {
return e.selectionTagName;
}, get componentName() {
return e.selectionComponentName;
}, get elementsCount() {
return e.selectionElementsCount;
}, get selectionBounds() {
return e.selectionBounds;
}, get mouseX() {
return e.mouseX;
}, get visible() {
return e.selectionLabelVisible;
}, get isPromptMode() {
return e.isPromptMode;
}, get inputValue() {
return e.inputValue;
}, get replyToPrompt() {
return e.replyToPrompt;
}, get hasAgent() {
return e.hasAgent;
}, get isAgentConnected() {
return e.isAgentConnected;
}, get status() {
return e.selectionLabelStatus;
}, get actionCycleState() {
return e.selectionActionCycleState;
}, get arrowNavigationState() {
return e.selectionArrowNavigationState;
}, get onArrowNavigationSelect() {
return e.onArrowNavigationSelect;
}, get filePath() {
return e.selectionFilePath;
}, get lineNumber() {
return e.selectionLineNumber;
}, get onInputChange() {
return e.onInputChange;
}, get onSubmit() {
return e.onInputSubmit;
}, get onCancel() {
return e.onInputCancel;
}, get onToggleExpand() {
return e.onToggleExpand;
}, get isPendingDismiss() {
return e.isPendingDismiss;
}, get onConfirmDismiss() {
return e.onConfirmDismiss;
}, get onCancelDismiss() {
return e.onCancelDismiss;
}, onOpen: () => {
e.selectionFilePath && Zi(e.selectionFilePath, e.selectionLineNumber);
}, get isContextMenuOpen() {
return e.contextMenuPosition !== null;
} });
} }), E2(oi, { get each() {
return e.labelInstances ?? [];
}, children: (t) => E2(wi, { get tagName() {
return t().tagName;
}, get componentName() {
return t().componentName;
}, get elementsCount() {
return t().elementsCount;
}, get selectionBounds() {
return t().bounds;
}, get mouseX() {
return t().mouseX;
}, visible: true, get status() {
return t().status;
}, get statusText() {
return t().statusText;
}, get hasAgent() {
return !!t().statusText;
}, get isPromptMode() {
return t().isPromptMode;
}, get inputValue() {
return t().inputValue;
}, get error() {
return t().errorMessage;
}, get hideArrow() {
return t().hideArrow;
}, get onShowContextMenu() {
let n2 = t();
if (!(!(n2.status === "copied" || n2.status === "fading") || !qe2(n2.element))) return () => e.onShowContextMenuInstance?.(n2.id);
}, onHoverChange: (n2) => e.onLabelInstanceHoverChange?.(t().id, n2) }) }), E2(fe2, { get when() {
return e.toolbarVisible !== false;
}, get children() {
return E2(wc, { get isActive() {
return e.isActive;
}, get isContextMenuOpen() {
return e.contextMenuPosition !== null;
}, get onToggle() {
return e.onToggleActive;
}, get enabled() {
return e.enabled;
}, get onToggleEnabled() {
return e.onToggleEnabled;
}, get shakeCount() {
return e.shakeCount;
}, get onStateChange() {
return e.onToolbarStateChange;
}, get onSubscribeToStateChanges() {
return e.onSubscribeToToolbarStateChanges;
}, get onSelectHoverChange() {
return e.onToolbarSelectHoverChange;
}, get onContainerRef() {
return e.onToolbarRef;
}, get historyItemCount() {
return e.historyItemCount;
}, get clockFlashTrigger() {
return e.clockFlashTrigger;
}, get hasUnreadHistoryItems() {
return e.hasUnreadHistoryItems;
}, get onToggleHistory() {
return e.onToggleHistory;
}, get onCopyAll() {
return e.onCopyAll;
}, get onCopyAllHover() {
return e.onCopyAllHover;
}, get onHistoryButtonHover() {
return e.onHistoryButtonHover;
}, get isHistoryDropdownOpen() {
return !!e.historyDropdownPosition;
}, get isHistoryPinned() {
return e.isHistoryPinned;
}, get toolbarActions() {
return e.toolbarActions;
}, get onToggleMenu() {
return e.onToggleMenu;
}, get isMenuOpen() {
return !!e.toolbarMenuPosition;
}, get isClearPromptOpen() {
return !!e.clearPromptPosition;
} });
} }), E2(vc, { get position() {
return e.contextMenuPosition ?? null;
}, get selectionBounds() {
return e.contextMenuBounds ?? null;
}, get tagName() {
return e.contextMenuTagName;
}, get componentName() {
return e.contextMenuComponentName;
}, get hasFilePath() {
return e.contextMenuHasFilePath ?? false;
}, get actions() {
return e.actions;
}, get actionContext() {
return e.actionContext;
}, get onDismiss() {
return e.onContextMenuDismiss ?? (() => {
});
}, get onHide() {
return e.onContextMenuHide ?? (() => {
});
} }), E2(xc, { get position() {
return e.toolbarMenuPosition ?? null;
}, get actions() {
return e.toolbarActions ?? [];
}, get onDismiss() {
return e.onToolbarMenuDismiss ?? (() => {
});
} }), E2(Sc, { get position() {
return e.clearPromptPosition ?? null;
}, get onConfirm() {
return e.onClearHistoryConfirm ?? (() => {
});
}, get onCancel() {
return e.onClearHistoryCancel ?? (() => {
});
} }), E2(Ec, { get position() {
return e.historyDropdownPosition ?? null;
}, get items() {
return e.historyItems ?? [];
}, get disconnectedItemIds() {
return e.historyDisconnectedItemIds;
}, get onSelectItem() {
return e.onHistoryItemSelect;
}, get onRemoveItem() {
return e.onHistoryItemRemove;
}, get onCopyItem() {
return e.onHistoryItemCopy;
}, get onItemHover() {
return e.onHistoryItemHover;
}, get onCopyAll() {
return e.onHistoryCopyAll;
}, get onCopyAllHover() {
return e.onHistoryCopyAllHover;
}, get onClearAll() {
return e.onHistoryClear;
}, get onDismiss() {
return e.onHistoryDismiss;
}, get onDropdownHover() {
return e.onHistoryDropdownHover;
} })];
var $s = () => ({ activate: () => {
}, deactivate: () => {
}, toggle: () => {
}, comment: () => {
}, isActive: () => false, isEnabled: () => false, setEnabled: () => {
}, getToolbarState: () => null, setToolbarState: () => {
}, onToolbarStateChange: () => () => {
}, dispose: () => {
}, copyElement: () => Promise.resolve(false), getSource: () => Promise.resolve(null), getStackContext: () => Promise.resolve(""), getState: () => ({ isActive: false, isDragging: false, isCopying: false, isPromptMode: false, isCrosshairVisible: false, isSelectionBoxVisible: false, isDragBoxVisible: false, targetElement: null, dragBounds: null, grabbedBoxes: [], labelInstances: [], selectionFilePath: null, toolbarState: null }), setOptions: () => {
}, registerPlugin: () => {
}, unregisterPlugin: () => {
}, getPlugins: () => [], getDisplayName: () => null });
var Tc = () => {
let e = new AbortController(), t = (o2, l2, a = {}) => {
window.addEventListener(o2, l2, { ...a, signal: e.signal });
}, n2 = (o2, l2, a = {}) => {
document.addEventListener(o2, l2, { ...a, signal: e.signal });
};
return { signal: e.signal, abort: () => e.abort(), addWindowListener: t, addDocumentListener: n2 };
};
var fg = "application/x-lexical-editor";
var mg = "application/x-react-grab";
var kc = () => "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (e) => {
let t = Math.random() * 16 | 0;
return (e === "x" ? t : t & 3 | 8).toString(16);
});
var gg = (e, t, n2, o2) => ({ detail: 1, format: 0, mode: "segmented", style: "", text: `@${e}`, type: "mention", version: 1, mentionName: e, typeaheadType: n2, storedKey: t, metadata: o2, source: "chat" });
var pg = (e) => ({ detail: 0, format: 0, mode: "normal", style: "", text: e, type: "text", version: 1 });
var hg = (e) => e.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """);
var bg = (e, t) => {
let n2 = String(Math.floor(Math.random() * 1e4)), o2 = kc(), l2 = `<${t}>`, a = { case: "file", path: `${l2}.tsx`, content: e }, i = { key: l2, type: a, payload: { file: { path: `${l2}.tsx`, content: e } }, id: kc(), name: l2, _score: 20, isSlash: false, labelMatch: [{ start: 0, end: 2 }] }, c = { selection: { type: 0 }, selectedOption: i };
return { plainText: `@${l2}
${e}
`, htmlContent: `
${hg(e)}
`, lexicalData: JSON.stringify({ namespace: `chat-input${o2}-pane`, nodes: [gg(l2, n2, a, c), pg(`
${e}`)] }) };
};
var Gt2 = (e, t) => {
let n2 = t?.componentName ?? "div", { plainText: o2, htmlContent: l2, lexicalData: a$1 } = bg(e, n2), i = t?.entries ?? [{ tagName: t?.tagName, componentName: n2, content: e, commentText: t?.commentText }], c = { version: mo, content: e, entries: i, timestamp: Date.now() }, s = (f) => {
f.preventDefault(), f.clipboardData?.setData("text/plain", o2), f.clipboardData?.setData("text/html", l2), f.clipboardData?.setData(fg, a$1), f.clipboardData?.setData(mg, JSON.stringify(c));
};
document.addEventListener("copy", s);
let d2 = document.createElement("textarea");
d2.value = e, d2.style.position = "fixed", d2.style.left = "-9999px", d2.ariaHidden = "true", document.body.appendChild(d2), d2.select();
try {
if (typeof document.execCommand != "function") return false;
let f = document.execCommand("copy");
return f && t?.onSuccess?.(), f;
} finally {
document.removeEventListener("copy", s), d2.remove();
}
};
var vr2 = async (e, t = {}) => (await Promise.allSettled(e.map((l2) => Bi(l2, t)))).map((l2) => l2.status === "fulfilled" ? l2.value : "");
var Ai = (e) => e.length <= 1 ? e[0] ?? "" : e.map((t, n2) => `[${n2 + 1}]
${t}`).join(`
`);
var Pc = async (e, t, n2, o2) => {
let l2 = false, a = "";
await t.onBeforeCopy(n2);
try {
let i, c;
if (e.getContent) i = await e.getContent(n2);
else {
let s = await vr2(n2, { maxLines: e.maxContextLines }), f = (await Promise.all(s.map((p2, y2) => p2.trim() ? t.transformSnippet(p2, n2[y2]) : Promise.resolve("")))).map((p2, y2) => ({ snippet: p2, element: n2[y2] })).filter(({ snippet: p2 }) => p2.trim());
i = Ai(f.map(({ snippet: p2 }) => p2)), c = f.map(({ snippet: p2, element: y2 }) => ({ tagName: y2.localName, content: p2, commentText: o2 }));
}
if (i.trim()) {
let s = await t.transformCopyContent(i, n2);
a = o2 ? `${o2}
${s}` : s, l2 = Gt2(a, { componentName: e.componentName, entries: c });
}
} catch (i) {
let c = i instanceof Error ? i : new Error(String(i));
t.onCopyError(c);
}
return l2 && t.onCopySuccess(n2, a), t.onAfterCopy(n2, l2), l2;
};
var yg = (e, t) => {
let n2 = Math.max(e.left, t.left), o2 = Math.max(e.top, t.top), l2 = Math.min(e.right, t.right), a = Math.min(e.bottom, t.bottom), i = Math.max(0, l2 - n2), c = Math.max(0, a - o2);
return i * c;
};
var wg = (e, t) => e.left < t.right && e.right > t.left && e.top < t.bottom && e.bottom > t.top;
var zo2 = (e, t, n2) => Math.min(n2, Math.max(t, e));
var xg = (e) => e.sort((t, n2) => {
if (t === n2) return 0;
let o2 = t.compareDocumentPosition(n2);
return o2 & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : o2 & Node.DOCUMENT_POSITION_PRECEDING ? 1 : 0;
});
var vg = (e) => {
if (e.width <= 0 || e.height <= 0) return [];
let t = window.innerWidth, n2 = window.innerHeight, o2 = e.x, l2 = e.y, a = e.x + e.width, i = e.y + e.height, c = o2 + e.width / 2, s = l2 + e.height / 2, d2 = zo2(Math.ceil(e.width / Xo), Yo, Zo), f = zo2(Math.ceil(e.height / Xo), Yo, Zo), p2 = d2 * f, y2 = p2 > Ko ? Math.sqrt(Ko / p2) : 1, T2 = zo2(Math.floor(d2 * y2), Yo, Zo), H2 = zo2(Math.floor(f * y2), Yo, Zo), $2 = /* @__PURE__ */ new Set(), b2 = [], w3 = (h2, g2) => {
let v2 = zo2(Math.round(h2), 0, t - 1), I2 = zo2(Math.round(g2), 0, n2 - 1), K = `${v2}:${I2}`;
$2.has(K) || ($2.add(K), b2.push({ x: v2, y: I2 }));
};
w3(o2 + qo, l2 + qo), w3(a - qo, l2 + qo), w3(o2 + qo, i - qo), w3(a - qo, i - qo), w3(c, l2 + qo), w3(c, i - qo), w3(o2 + qo, s), w3(a - qo, s), w3(c, s);
for (let h2 = 0; h2 < T2; h2 += 1) {
let g2 = o2 + (h2 + 0.5) / T2 * e.width;
for (let v2 = 0; v2 < H2; v2 += 1) {
let I2 = l2 + (v2 + 0.5) / H2 * e.height;
w3(g2, I2);
}
}
return b2;
};
var Cg = (e, t, n2) => {
let o2 = { left: e.x, top: e.y, right: e.x + e.width, bottom: e.y + e.height }, l2 = /* @__PURE__ */ new Set(), a = vg(e);
Je();
try {
for (let c of a) {
let s = document.elementsFromPoint(c.x, c.y);
for (let d2 of s) l2.add(d2);
}
} finally {
et();
}
let i = [];
for (let c of l2) {
if (!n2 && mn(c) || !t(c)) continue;
let s = c.getBoundingClientRect();
if (s.width <= 0 || s.height <= 0) continue;
let d2 = { left: s.left, top: s.top, right: s.left + s.width, bottom: s.top + s.height };
if (n2) {
let f = yg(o2, d2), p2 = s.width * s.height;
p2 > 0 && f / p2 >= Wo && i.push(c);
} else wg(d2, o2) && i.push(c);
}
return xg(i);
};
var Eg = (e) => e.filter((t) => !e.some((n2) => n2 !== t && n2.contains(t)));
var Cr2 = (e, t, n2 = true) => {
let o2 = Cg(e, t, n2);
return Eg(o2);
};
var Ti = (e) => {
let t = window.innerWidth, n2 = window.innerHeight, o2 = Math.max(0, e.x), l2 = Math.min(t, e.x + e.width), a = Math.max(0, e.y), i = Math.min(n2, e.y + e.height);
return { x: (o2 + l2) / 2, y: (a + i) / 2 };
};
var Mc = () => {
Fl(), En(), Ea();
};
var ki = (e) => ({ x: e.pageX - window.scrollX, y: e.pageY - window.scrollY, width: e.width, height: e.height, borderRadius: "0px", transform: "none" });
var Bs = (e) => ({ pageX: e.x + window.scrollX, pageY: e.y + window.scrollY, width: e.width, height: e.height });
var Pi = (e) => ({ ...e, borderRadius: "0px", transform: "none" });
var Sg = /* @__PURE__ */ new Set(["c", "C", "с", "С", "ȼ", "Ȼ", "ↄ", "Ↄ", "ᴄ", "ᶜ", "ⱼ", "ⅽ", "Ⅽ", "ç", "Ç", "ć", "Ć", "č", "Č", "ĉ", "Ĉ", "ċ", "Ċ"]);
var Mi = (e, t) => t === "KeyC" ? true : !e || e.length !== 1 ? false : Sg.has(e);
var Ic = (e, t) => {
let n2 = e.toLowerCase();
return t === "Space" ? n2 === "space" || n2 === " " : t.startsWith("Key") ? t.slice(3).toLowerCase() === n2 : t.startsWith("Digit") ? t.slice(5) === n2 : false;
};
var Ag = { meta: "metaKey", cmd: "metaKey", command: "metaKey", win: "metaKey", windows: "metaKey", ctrl: "ctrlKey", control: "ctrlKey", shift: "shiftKey", alt: "altKey", option: "altKey", opt: "altKey" };
var _c = (e) => {
let t = e.split("+").map((o2) => o2.trim().toLowerCase()), n2 = { metaKey: false, ctrlKey: false, shiftKey: false, altKey: false, key: null };
for (let o2 of t) {
let l2 = Ag[o2];
l2 ? n2[l2] = true : n2.key = o2;
}
return n2;
};
var Ii = (e) => {
if (typeof e == "function") return e;
let t = _c(e), n2 = t.key;
return (o2) => {
if (n2 === null) {
let c = t.metaKey ? o2.metaKey || o2.key === "Meta" : true, s = t.ctrlKey ? o2.ctrlKey || o2.key === "Control" : true, d2 = t.shiftKey ? o2.shiftKey || o2.key === "Shift" : true, f = t.altKey ? o2.altKey || o2.key === "Alt" : true, p2 = c && s && d2 && f, y2 = [t.metaKey, t.ctrlKey, t.shiftKey, t.altKey].filter(Boolean).length, T2 = [o2.metaKey || o2.key === "Meta", o2.ctrlKey || o2.key === "Control", o2.shiftKey || o2.key === "Shift", o2.altKey || o2.key === "Alt"].filter(Boolean).length;
return p2 && T2 >= y2;
}
let l2 = o2.key?.toLowerCase() === n2 || Ic(n2, o2.code), i = t.metaKey || t.ctrlKey || t.shiftKey || t.altKey ? (t.metaKey ? o2.metaKey : true) && (t.ctrlKey ? o2.ctrlKey : true) && (t.shiftKey ? o2.shiftKey : true) && (t.altKey ? o2.altKey : true) : !o2.metaKey && !o2.ctrlKey && !o2.shiftKey && !o2.altKey;
return l2 && i;
};
};
var Oc = (e) => !e || typeof e == "function" ? { metaKey: Cn2(), ctrlKey: !Cn2(), shiftKey: false, altKey: false, key: null } : _c(e);
var _i = (e, t) => {
if (t.activationKey) return Ii(t.activationKey)(e);
let o2 = (Cn2() ? e.metaKey : e.ctrlKey) && !e.shiftKey && !e.altKey;
return !!(e.key && o2 && Mi(e.key, e.code));
};
var Hs = (e) => {
if (e.length === 0) return { x: 0, y: 0, width: 0, height: 0 };
if (e.length === 1) return e[0];
let t = 1 / 0, n2 = 1 / 0, o2 = -1 / 0, l2 = -1 / 0;
for (let a of e) t = Math.min(t, a.x), n2 = Math.min(n2, a.y), o2 = Math.max(o2, a.x + a.width), l2 = Math.max(l2, a.y + a.height);
return { x: t, y: n2, width: o2 - t, height: l2 - n2 };
};
var ro = { enabled: true, hue: 0, selectionBox: { enabled: true }, dragBox: { enabled: true }, grabbedBoxes: { enabled: true }, elementLabel: { enabled: true }, crosshair: { enabled: true }, toolbar: { enabled: true } };
var Oi = (e, t) => ({ enabled: t.enabled ?? e.enabled, hue: t.hue ?? e.hue, selectionBox: { enabled: t.selectionBox?.enabled ?? e.selectionBox.enabled }, dragBox: { enabled: t.dragBox?.enabled ?? e.dragBox.enabled }, grabbedBoxes: { enabled: t.grabbedBoxes?.enabled ?? e.grabbedBoxes.enabled }, elementLabel: { enabled: t.elementLabel?.enabled ?? e.elementLabel.enabled }, crosshair: { enabled: t.crosshair?.enabled ?? e.crosshair.enabled }, toolbar: { enabled: t.toolbar?.enabled ?? e.toolbar.enabled } });
var Dc = { activationMode: "toggle", keyHoldDuration: 100, allowActivationInsideInput: true, maxContextLines: 3, activationKey: void 0, getContent: void 0, freezeReactUpdates: true };
var Lc = (e = {}) => {
let t = /* @__PURE__ */ new Map(), n2 = {}, [o2, l2] = ai({ theme: ro, options: { ...Dc, ...e }, actions: [], toolbarActions: [] }), a = (h2) => h2.target === "toolbar", i = () => {
let h2 = ro, g2 = { ...Dc, ...e }, v2 = [], I2 = [];
for (let { config: K } of t.values()) if (K.theme && (h2 = Oi(h2, K.theme)), K.options && (g2 = { ...g2, ...K.options }), K.actions) for (let Q2 of K.actions) if (a(Q2)) {
let X2 = Q2.onAction;
I2.push({ ...Q2, onAction: () => {
y2("cancelPendingToolbarActions"), X2();
} });
} else v2.push(Q2);
g2 = { ...g2, ...n2 }, l2("theme", h2), l2("options", g2), l2("actions", v2), l2("toolbarActions", I2);
}, c = (h2, g2) => {
n2[h2] = g2, l2("options", h2, g2);
}, s = (h2) => {
h2.activationMode !== void 0 && c("activationMode", h2.activationMode), h2.keyHoldDuration !== void 0 && c("keyHoldDuration", h2.keyHoldDuration), h2.allowActivationInsideInput !== void 0 && c("allowActivationInsideInput", h2.allowActivationInsideInput), h2.maxContextLines !== void 0 && c("maxContextLines", h2.maxContextLines), h2.activationKey !== void 0 && c("activationKey", h2.activationKey), h2.getContent !== void 0 && c("getContent", h2.getContent), h2.freezeReactUpdates !== void 0 && c("freezeReactUpdates", h2.freezeReactUpdates);
}, d2 = (h2, g2) => {
t.has(h2.name) && f(h2.name);
let v2 = h2.setup?.(g2, w3) ?? {};
return h2.theme && (v2.theme = v2.theme ? Oi(Oi(ro, h2.theme), v2.theme) : h2.theme), h2.actions && (v2.actions = [...h2.actions, ...v2.actions ?? []]), h2.hooks && (v2.hooks = v2.hooks ? { ...h2.hooks, ...v2.hooks } : h2.hooks), h2.options && (v2.options = v2.options ? { ...h2.options, ...v2.options } : h2.options), t.set(h2.name, { plugin: h2, config: v2 }), i(), v2;
}, f = (h2) => {
let g2 = t.get(h2);
g2 && (g2.config.cleanup && g2.config.cleanup(), t.delete(h2), i());
}, p2 = () => Array.from(t.keys()), y2 = (h2, ...g2) => {
for (let { config: v2 } of t.values()) {
let I2 = v2.hooks?.[h2];
I2 && I2(...g2);
}
}, T2 = (h2, ...g2) => {
let v2 = false;
for (let { config: I2 } of t.values()) {
let K = I2.hooks?.[h2];
K && K(...g2) === true && (v2 = true);
}
return v2;
}, H2 = async (h2, ...g2) => {
for (let { config: v2 } of t.values()) {
let I2 = v2.hooks?.[h2];
I2 && await I2(...g2);
}
}, $2 = async (h2, g2, ...v2) => {
let I2 = g2;
for (let { config: K } of t.values()) {
let Q2 = K.hooks?.[h2];
Q2 && (I2 = await Q2(I2, ...v2));
}
return I2;
}, b2 = (h2, g2, ...v2) => {
let I2 = g2;
for (let { config: K } of t.values()) {
let Q2 = K.hooks?.[h2];
Q2 && (I2 = Q2(I2, ...v2));
}
return I2;
}, w3 = { onActivate: () => y2("onActivate"), onDeactivate: () => y2("onDeactivate"), onElementHover: (h2) => y2("onElementHover", h2), onElementSelect: (h2) => {
let g2 = false, v2;
for (let { config: I2 } of t.values()) {
let K = I2.hooks?.onElementSelect;
if (K) {
let Q2 = K(h2);
Q2 === true ? g2 = true : Q2 instanceof Promise && (g2 = true, v2 = Q2);
}
}
return { wasIntercepted: g2, pendingResult: v2 };
}, onDragStart: (h2, g2) => y2("onDragStart", h2, g2), onDragEnd: (h2, g2) => y2("onDragEnd", h2, g2), onBeforeCopy: async (h2) => H2("onBeforeCopy", h2), transformCopyContent: async (h2, g2) => $2("transformCopyContent", h2, g2), onAfterCopy: (h2, g2) => y2("onAfterCopy", h2, g2), onCopySuccess: (h2, g2) => y2("onCopySuccess", h2, g2), onCopyError: (h2) => y2("onCopyError", h2), onStateChange: (h2) => y2("onStateChange", h2), onPromptModeChange: (h2, g2) => y2("onPromptModeChange", h2, g2), onSelectionBox: (h2, g2, v2) => y2("onSelectionBox", h2, g2, v2), onDragBox: (h2, g2) => y2("onDragBox", h2, g2), onGrabbedBox: (h2, g2) => y2("onGrabbedBox", h2, g2), onElementLabel: (h2, g2, v2) => y2("onElementLabel", h2, g2, v2), onCrosshair: (h2, g2) => y2("onCrosshair", h2, g2), onContextMenu: (h2, g2) => y2("onContextMenu", h2, g2), cancelPendingToolbarActions: () => y2("cancelPendingToolbarActions"), onOpenFile: (h2, g2) => T2("onOpenFile", h2, g2), transformHtmlContent: async (h2, g2) => $2("transformHtmlContent", h2, g2), transformAgentContext: async (h2, g2) => $2("transformAgentContext", h2, g2), transformActionContext: (h2) => b2("transformActionContext", h2), transformOpenFileUrl: (h2, g2, v2) => b2("transformOpenFileUrl", h2, g2, v2), transformSnippet: async (h2, g2) => $2("transformSnippet", h2, g2) };
return { register: d2, unregister: f, getPluginNames: p2, setOptions: s, store: o2, hooks: w3 };
};
var zs = "react-grab:agent-sessions";
var Tg = () => `session-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
var Nc = (e, t, n2, o2, l2) => {
let a = Date.now();
return { id: Tg(), context: e, lastStatus: "", isStreaming: true, createdAt: a, lastUpdatedAt: a, position: t, selectionBounds: n2, tagName: o2, componentName: l2 };
};
var ln2 = /* @__PURE__ */ new Map();
var Rc = () => {
for (; ln2.size > Jo; ) {
let e = ln2.keys().next().value;
e !== void 0 && ln2.delete(e);
}
};
var Di = (e, t) => {
if (!t) {
ln2.clear(), e.forEach((n2, o2) => ln2.set(o2, n2)), Rc();
return;
}
try {
let n2 = Object.fromEntries(e);
t.setItem(zs, JSON.stringify(n2));
} catch {
ln2.clear(), e.forEach((n2, o2) => ln2.set(o2, n2)), Rc();
}
};
var Li = (e, t) => {
let n2 = Ri(t);
n2.set(e.id, e), Di(n2, t);
};
var Ri = (e) => {
if (!e) return new Map(ln2);
try {
let t = e.getItem(zs);
if (!t) return /* @__PURE__ */ new Map();
let n2 = JSON.parse(t);
return new Map(Object.entries(n2));
} catch {
return /* @__PURE__ */ new Map();
}
};
var Ni = (e) => {
if (!e) {
ln2.clear();
return;
}
try {
e.removeItem(zs);
} catch {
ln2.clear();
}
};
var Ks = (e, t) => {
let n2 = Ri(t);
n2.delete(e), Di(n2, t);
};
var zn2 = (e, t, n2) => {
let o2 = { ...e, ...t, lastUpdatedAt: Date.now() };
return Li(o2, n2), o2;
};
var Vs = (e, t) => {
let [n2, o2] = B2(/* @__PURE__ */ new Map()), [l2, a] = B2(false), [i, c] = B2(false), s = /* @__PURE__ */ new Map(), d2 = /* @__PURE__ */ new Map(), f = /* @__PURE__ */ new Map(), p2 = [], y2 = [], T2 = e, H2 = (x2) => f.get(x2)?.agent ?? T2, $2 = (x2) => f.get(x2)?.elements ?? [], b2 = (x2) => {
let A2 = x2 ?? T2, j2 = A2?.provider?.canUndo?.() ?? false, z2 = A2?.provider?.canRedo?.() ?? false;
a(j2), c(z2);
}, w3 = (x2) => {
T2 = x2, b2();
}, h2 = () => T2, g2 = () => Array.from(n2().values()).some((x2) => x2.isStreaming), v2 = async (x2, A2, j2, z2) => {
let ne2 = z2 ?? T2, G2 = ne2?.storage, Ee2 = false, ve2 = () => s.get(x2.id) === j2;
try {
for await (let ie2 of A2) {
if (!ve2()) break;
let he2 = n2().get(x2.id);
if (!he2) break;
let ke2 = zn2(he2, { lastStatus: ie2 }, G2);
o2((ge2) => new Map(ge2).set(x2.id, ke2)), ne2?.onStatus?.(ie2, ke2);
}
if (!ve2()) return;
let F2 = n2().get(x2.id);
if (F2) {
let ie2 = ne2?.provider?.getCompletionMessage?.(), Me2 = zn2(F2, { isStreaming: false, ...ie2 ? { lastStatus: ie2 } : {} }, G2);
o2((Ce2) => new Map(Ce2).set(x2.id, Me2));
let he2 = $2(x2.id), ke2 = await ne2?.onComplete?.(Me2, he2), ge2 = y2.findIndex((Ce2) => Ce2.session.id === x2.id);
if (ge2 !== -1 && y2.splice(ge2, 1), y2.push({ session: Me2, elements: he2, agent: ne2 }), b2(ne2), p2.length = 0, ke2?.error) {
let Ce2 = zn2(Me2, { error: ke2.error }, G2);
o2((He2) => new Map(He2).set(x2.id, Ce2));
}
}
} catch (L2) {
if (!ve2()) return;
let ie2 = n2().get(x2.id);
if (L2 instanceof Error && L2.name === "AbortError") {
if (Ee2 = true, ie2) {
let Me2 = $2(x2.id);
ne2?.onAbort?.(ie2, Me2);
}
} else {
let Me2 = L2 instanceof Error ? L2.message : "Unknown error";
if (ie2) {
let he2 = zn2(ie2, { error: Me2, isStreaming: false }, G2);
o2((ke2) => new Map(ke2).set(x2.id, he2)), L2 instanceof Error && ne2?.onError?.(L2, he2);
}
}
} finally {
if (!ve2()) return;
if (s.delete(x2.id), Ee2) {
let L2 = d2.get(x2.id);
L2 && (clearTimeout(L2), d2.delete(x2.id)), f.delete(x2.id), Ks(x2.id, G2), o2((F2) => {
let ie2 = new Map(F2);
return ie2.delete(x2.id), ie2;
});
}
}
}, I2 = (x2) => {
let { selectionBounds: A2, tagName: j2 } = x2, z2 = A2[0];
if (!z2) return;
let ne2 = z2.x + z2.width / 2, G2 = z2.y + z2.height / 2, Ee2 = document.elementFromPoint(ne2, G2);
if (!(!Ee2 || j2 && !j2.includes(" ") && v(Ee2) !== j2)) return Ee2;
}, K = () => {
let x2 = T2?.storage;
if (!x2) return;
let A2 = Ri(x2);
if (A2.size === 0) return;
let j2 = Date.now(), z2 = Array.from(A2.values()).filter((G2) => {
if (G2.isStreaming) return true;
let Ee2 = G2.lastUpdatedAt ?? G2.createdAt;
return j2 - Ee2 < 1e4 && !!G2.error;
});
if (z2.length === 0) {
Ni(x2);
return;
}
if (!T2?.provider?.supportsResume || !T2.provider.resume) {
Ni(x2);
return;
}
d2.forEach((G2) => clearTimeout(G2)), d2.clear(), s.forEach((G2) => G2.abort()), s.clear(), f.clear();
let ne2 = new Map(z2.map((G2) => [G2.id, G2]));
o2(ne2), Di(ne2, x2);
for (let G2 of z2) {
let Ee2 = I2(G2);
Ee2 && T2 && f.set(G2.id, { elements: [Ee2], agent: T2 });
let ve2 = { ...G2, isStreaming: true, error: void 0, lastStatus: G2.lastStatus || "Resuming...", position: G2.position ?? { x: window.innerWidth / 2, y: window.innerHeight / 2 } };
o2((ie2) => new Map(ie2).set(G2.id, ve2)), T2?.onResume?.(ve2);
let L2 = new AbortController();
s.set(G2.id, L2);
let F2 = T2.provider.resume(G2.id, L2.signal, x2);
v2(G2, F2, L2);
}
}, Q2 = async (x2) => {
let { elements: A2, prompt: j2, position: z2, selectionBounds: ne2, sessionId: G2, agent: Ee2 } = x2, ve2 = Ee2 ?? (G2 ? H2(G2) : T2), L2 = ve2?.storage;
if (!ve2?.provider || A2.length === 0) return;
let F2 = A2[0], ie2 = G2 ? n2().get(G2) : void 0, Me2 = !!G2, ke2 = { content: ie2 ? ie2.context.content : (await vr2(A2, { maxLines: 1 / 0 })).filter((Se2) => Se2.trim()), prompt: j2, options: ve2?.getOptions?.(), sessionId: Me2 ? G2 : void 0 }, ge2;
if (ie2) ge2 = zn2(ie2, { context: ke2, isStreaming: true, lastStatus: "Thinking…" }, L2);
else {
let Se2 = A2.length > 1 ? `${A2.length} elements` : v(F2) || void 0, tt2 = A2.length > 1 ? void 0 : await Ui(F2) || void 0;
ge2 = Nc(ke2, z2, ne2, Se2, tt2), ge2.lastStatus = "Thinking…";
}
f.set(ge2.id, { elements: A2, agent: ve2 }), o2((Se2) => new Map(Se2).set(ge2.id, ge2)), Li(ge2, L2), ve2.onStart?.(ge2, A2);
let Ce2 = new AbortController();
s.set(ge2.id, Ce2);
let He2 = { ...ke2, sessionId: G2 ?? ge2.id }, Oe2;
try {
Oe2 = t?.transformAgentContext ? await t.transformAgentContext(He2, A2) : He2;
} catch (Se2) {
let tt2 = Se2 instanceof Error ? Se2.message : "Context transformation failed", ot = zn2(ge2, { error: tt2, isStreaming: false }, L2);
o2((ft2) => new Map(ft2).set(ge2.id, ot)), s.delete(ge2.id), Se2 instanceof Error && ve2.onError?.(Se2, ot);
return;
}
let be2 = ve2.provider.send(Oe2, Ce2.signal);
v2(ge2, be2, Ce2, ve2);
}, X2 = (x2) => {
if (x2) {
let A2 = s.get(x2);
A2 && A2.abort();
} else s.forEach((A2) => A2.abort()), s.clear(), d2.forEach((A2) => clearTimeout(A2)), d2.clear(), f.clear(), y2.length = 0, p2.length = 0, o2(/* @__PURE__ */ new Map()), Ni(T2?.storage), b2();
}, te2 = (x2, A2, j2) => {
let ne2 = n2().get(x2), G2 = A2 ?? H2(x2), Ee2 = j2 ?? $2(x2);
if (ne2?.isFading) return;
ne2 && Ee2.length > 0 && G2?.onDismiss?.(ne2, Ee2), o2((F2) => {
let ie2 = new Map(F2), Me2 = ie2.get(x2);
return Me2 && ie2.set(x2, { ...Me2, isFading: true }), ie2;
});
let ve2 = d2.get(x2);
ve2 && clearTimeout(ve2);
let L2 = setTimeout(() => {
d2.delete(x2);
let F2 = s.get(x2);
F2 && (F2.abort(), s.delete(x2)), f.delete(x2), Ks(x2, G2?.storage), o2((ie2) => {
let Me2 = new Map(ie2);
return Me2.delete(x2), Me2;
});
}, 150);
d2.set(x2, L2);
};
return { sessions: n2, isProcessing: g2, canUndo: l2, canRedo: i, session: { start: Q2, abort: X2, dismiss: te2, retry: (x2) => {
let j2 = n2().get(x2), z2 = H2(x2);
if (!j2 || !z2?.provider) return;
let ne2 = z2.storage, G2 = $2(x2), Ee2 = zn2(j2, { error: void 0, isStreaming: true, lastStatus: "Retrying…" }, ne2);
o2((ie2) => new Map(ie2).set(x2, Ee2)), Li(Ee2, ne2), G2.length > 0 && z2.onStart?.(Ee2, G2);
let ve2 = new AbortController();
s.set(x2, ve2);
let L2 = { ...Ee2.context, sessionId: x2 }, F2 = z2.provider.send(L2, ve2.signal);
v2(Ee2, F2, ve2, z2);
}, undo: (x2) => {
let j2 = n2().get(x2), z2 = H2(x2), ne2 = $2(x2);
if (j2) {
p2.push({ session: j2, elements: ne2, agent: z2 });
let G2 = y2.findIndex((Ee2) => Ee2.session.id === x2);
G2 !== -1 && y2.splice(G2, 1), z2?.onUndo?.(j2, ne2), z2?.provider?.undo?.();
}
te2(x2, z2, ne2), b2(z2);
}, getElement: (x2) => $2(x2)[0], getElements: (x2) => $2(x2), tryResume: K, acknowledgeError: (x2) => {
let z2 = n2().get(x2)?.context.prompt;
return te2(x2), z2;
} }, history: { undo: () => {
let x2 = y2.pop();
if (!x2) return;
let { session: A2, elements: j2, agent: z2 } = x2, ne2 = z2 ?? T2;
p2.push(x2), ne2?.onUndo?.(A2, j2), ne2?.provider?.undo?.(), te2(A2.id, ne2, j2), b2(ne2);
}, redo: () => {
let x2 = p2.pop();
if (!x2) return;
let A2 = x2.agent ?? T2, { session: j2, elements: z2 } = x2;
A2?.provider?.redo?.();
let ne2 = z2.filter((G2) => qe2(G2));
if (ne2.length === 0) {
let G2 = I2(j2);
G2 && (ne2 = [G2]);
}
if (ne2.length > 0 && A2) {
y2.push(x2);
let G2 = ne2.map((ve2) => ze2(ve2)), Ee2 = { ...j2, selectionBounds: G2 };
f.set(j2.id, { elements: ne2, agent: A2 }), o2((ve2) => new Map(ve2).set(j2.id, Ee2));
}
b2(A2);
} }, _internal: { updateBoundsOnViewportChange: () => {
let x2 = n2();
if (x2.size === 0) return;
let A2 = new Map(x2), j2 = false;
for (let [z2, ne2] of x2) {
let G2 = $2(z2), Ee2 = G2[0];
if (qe2(Ee2)) {
let ve2 = G2.filter((L2) => qe2(L2)).map((L2) => ze2(L2));
if (ve2.length > 0) {
let L2 = ne2.selectionBounds[0], F2 = ve2[0], ie2 = li({ currentPosition: ne2.position, previousBounds: L2, nextBounds: F2 });
A2.set(z2, { ...ne2, selectionBounds: ve2, position: ie2 }), j2 = true;
}
}
}
j2 && o2(A2);
}, setOptions: w3, getOptions: h2 } };
};
var $c = (e, t) => {
let n2 = [], o2 = (d2, f) => {
let p2 = t(d2), y2 = Ti(p2), T2 = ya(y2.x, y2.y).filter(e), H2 = T2.indexOf(d2);
return H2 === -1 ? null : T2[H2 + f] ?? null;
}, l2 = (d2) => {
let f = o2(d2, 1);
return f && (n2.push(d2), n2.length > Qo && (n2 = n2.slice(-Qo))), f;
}, a = (d2) => {
if (n2.length > 0) {
let f = n2.pop();
if (qe2(f)) return f;
}
return o2(d2, -1);
}, i = (d2, f) => {
let p2 = (H2) => {
let $2 = Array.from(H2.children), b2 = f ? $2 : $2.reverse();
for (let w3 of b2) if (f) {
if (e(w3)) return w3;
let h2 = p2(w3);
if (h2) return h2;
} else {
let h2 = p2(w3);
if (h2) return h2;
if (e(w3)) return w3;
}
return null;
}, y2 = (H2) => f ? H2.nextElementSibling : H2.previousElementSibling, T2 = null;
if (f && (T2 = p2(d2)), !T2) {
let H2 = d2;
for (; H2; ) {
let $2 = y2(H2);
for (; $2; ) {
let w3 = p2($2);
if (w3) {
T2 = w3;
break;
}
if (e($2)) {
T2 = $2;
break;
}
$2 = y2($2);
}
if (T2) break;
let b2 = H2.parentElement;
if (!f && b2 && e(b2)) {
T2 = b2;
break;
}
H2 = b2;
}
}
return T2;
};
return { findNext: (d2, f) => {
switch (d2) {
case "ArrowUp":
return l2(f);
case "ArrowDown":
return a(f);
case "ArrowRight":
return i(f, true);
case "ArrowLeft":
return i(f, false);
default:
return null;
}
}, clearHistory: () => {
n2 = [];
} };
};
var Bc = (e) => {
let { metaKey: t, ctrlKey: n2, shiftKey: o2, altKey: l2 } = Oc(e.activationKey);
return { metaKey: t, ctrlKey: n2, shiftKey: o2, altKey: l2 };
};
var Hc = () => {
let e = /* @__PURE__ */ new WeakSet(), t = Object.getOwnPropertyDescriptor(KeyboardEvent.prototype, "key"), n2 = false;
if (t?.get && !t.get.__reactGrabPatched) {
n2 = true;
let l2 = t.get, a = function() {
return e.has(this) ? "" : l2.call(this);
};
a.__reactGrabPatched = true, Object.defineProperty(KeyboardEvent.prototype, "key", { get: a, configurable: true });
}
return { claimedEvents: e, originalKeyDescriptor: t, didPatch: n2, restore: () => {
n2 && t && Object.defineProperty(KeyboardEvent.prototype, "key", t);
} };
};
var Us = (e, t) => ({ top: t < 25, bottom: t > window.innerHeight - 25, left: e < 25, right: e > window.innerWidth - 25 });
var Fc = (e, t) => {
let n2 = null, o2 = () => {
if (!t()) {
a();
return;
}
let c = e(), s = Us(c.x, c.y);
s.top && window.scrollBy(0, -10), s.bottom && window.scrollBy(0, 10), s.left && window.scrollBy(-10, 0), s.right && window.scrollBy(10, 0), s.top || s.bottom || s.left || s.right ? n2 = D(o2) : n2 = null;
}, l2 = () => {
o2();
}, a = () => {
n2 !== null && (q(n2), n2 = null);
};
return { start: l2, stop: a, isActive: () => n2 !== null };
};
var zc = () => {
let e = globalThis;
return !!(e.chrome?.runtime?.id || e.browser?.runtime?.id);
};
var Kc = () => {
try {
let e = "0.1.27", t = `data:image/svg+xml;base64,${btoa(Ss)}`;
console.log(`%cReact Grab${e ? ` v${e}` : ""}%c
https://react-grab.com`, `background: #330039; color: #ffffff; border: 1px solid #d75fcb; padding: 4px 4px 4px 24px; border-radius: 4px; background-image: url("${t}"); background-size: 16px 16px; background-repeat: no-repeat; background-position: 4px center; display: inline-block; margin-bottom: 4px;`, ""), navigator.onLine && e && !zc() && fetch(`https://www.react-grab.com/api/version?source=browser&t=${Date.now()}`, { referrerPolicy: "origin", keepalive: true, priority: "low", cache: "no-store" }).then((n2) => n2.text()).then((n2) => {
n2 && n2 !== e && console.warn(`[React Grab] v${e} is outdated (latest: v${n2})`);
}).catch(() => null);
} catch {
}
};
var Mg = (e) => typeof e != "object" || e === null || !("postTask" in e) ? false : typeof e.postTask == "function";
var Vc = (e) => {
if (typeof window < "u") {
let t = window.scheduler;
if (Mg(t)) {
t.postTask(e, { priority: "background" });
return;
}
if ("requestIdleCallback" in window) {
requestIdleCallback(e);
return;
}
}
setTimeout(e, 0);
};
var Ig = (e) => typeof e == "object" && e !== null;
var _g = (e) => {
if (!Ig(e)) return null;
let t = {};
return typeof e.enabled == "boolean" && (t.enabled = e.enabled), (e.activationMode === "toggle" || e.activationMode === "hold") && (t.activationMode = e.activationMode), typeof e.keyHoldDuration == "number" && Number.isFinite(e.keyHoldDuration) && (t.keyHoldDuration = e.keyHoldDuration), typeof e.allowActivationInsideInput == "boolean" && (t.allowActivationInsideInput = e.allowActivationInsideInput), typeof e.maxContextLines == "number" && Number.isFinite(e.maxContextLines) && (t.maxContextLines = e.maxContextLines), typeof e.activationKey == "string" && (t.activationKey = e.activationKey), typeof e.freezeReactUpdates == "boolean" && (t.freezeReactUpdates = e.freezeReactUpdates), Object.keys(t).length === 0 ? null : t;
};
var Uc = () => {
if (typeof window > "u") return null;
try {
let t = (document.currentScript instanceof HTMLScriptElement ? document.currentScript : null)?.getAttribute("data-options");
return t ? _g(JSON.parse(t)) : null;
} catch {
return null;
}
};
var io2 = (e) => e === "Enter" || e === "NumpadEnter";
var Gc = { name: "copy", setup: (e) => {
let t = false;
return { hooks: { onElementSelect: (n2) => {
if (t) return t = false, e.copyElement(n2), true;
}, onDeactivate: () => {
t = false;
}, cancelPendingToolbarActions: () => {
t = false;
} }, actions: [{ id: "copy", label: "Copy", shortcut: "C", onAction: (n2) => {
n2.copy?.();
} }, { id: "copy-toolbar", label: "Copy element", shortcut: "C", target: "toolbar", onAction: () => {
t = true, e.activate();
} }] };
} };
var Wc = { name: "comment", setup: (e) => ({ actions: [{ id: "comment", label: "Comment", shortcut: "Enter", onAction: (t) => {
t.enterPromptMode?.();
} }, { id: "comment-toolbar", label: "Comment", shortcut: "Enter", target: "toolbar", onAction: () => {
e.comment();
} }] }) };
var jc = { name: "open", actions: [{ id: "open", label: "Open", shortcut: "O", enabled: (e) => !!e.filePath, onAction: (e) => {
if (!e.filePath) return;
e.hooks.onOpenFile(e.filePath, e.lineNumber) || Zi(e.filePath, e.lineNumber, e.hooks.transformOpenFileUrl), e.hideContextMenu(), e.cleanup();
} }] };
var Ko2 = (e, t) => t ? `${e}
${t}` : e;
var Xc = { name: "copy-html", setup: (e, t) => {
let n2 = false;
return { hooks: { onElementSelect: (o2) => {
if (n2) return n2 = false, Promise.all([t.transformHtmlContent(o2.outerHTML, [o2]), e.getStackContext(o2)]).then(([l2, a]) => {
l2 && Gt2(Ko2(l2, a));
}).catch(() => {
}), true;
}, onDeactivate: () => {
n2 = false;
}, cancelPendingToolbarActions: () => {
n2 = false;
} }, actions: [{ id: "copy-html", label: "Copy HTML", onAction: async (o2) => {
await o2.performWithFeedback(async () => {
let l2 = o2.elements.map((c) => c.outerHTML).join(`
`), a = await o2.hooks.transformHtmlContent(l2, o2.elements);
if (!a) return false;
let i = await e.getStackContext(o2.element);
return Gt2(Ko2(a, i), { componentName: o2.componentName, tagName: o2.tagName });
});
} }, { id: "copy-html-toolbar", label: "Copy HTML", target: "toolbar", onAction: () => {
n2 = true, e.activate();
} }] };
} };
var Yc = { name: "copy-styles", setup: (e) => {
let t = false;
return { hooks: { onElementSelect: (n2) => {
if (!t) return;
t = false;
let o2 = Pa(n2);
return e.getStackContext(n2).then((l2) => {
Gt2(Ko2(o2, l2));
}).catch(() => {
}), true;
}, onDeactivate: () => {
t = false;
}, cancelPendingToolbarActions: () => {
t = false;
} }, actions: [{ id: "copy-styles", label: "Copy styles", onAction: async (n2) => {
await n2.performWithFeedback(async () => {
let o2 = n2.elements.map(Pa).join(`
`), l2 = await e.getStackContext(n2.element);
return Gt2(Ko2(o2, l2), { componentName: n2.componentName, tagName: n2.tagName });
});
} }, { id: "copy-styles-toolbar", label: "Copy styles", target: "toolbar", onAction: () => {
t = true, e.activate();
} }], cleanup: Ma };
} };
var qc = "react-grab-history-items";
var Og = () => {
try {
let e = sessionStorage.getItem(qc);
return e ? JSON.parse(e).map((n2) => ({ ...n2, elementsCount: Math.max(1, n2.elementsCount ?? 1), previewBounds: n2.previewBounds ?? [], elementSelectors: n2.elementSelectors ?? [] })) : [];
} catch {
return [];
}
};
var Dg = (e) => {
let t = e;
for (; t.length > 0; ) {
let n2 = JSON.stringify(t);
if (new Blob([n2]).size <= ss) return t;
t = t.slice(0, -1);
}
return t;
};
var Gs = (e) => {
try {
let t = Dg(e);
sessionStorage.setItem(qc, JSON.stringify(t));
} catch {
}
};
var Wt2 = Og();
var Lg = () => `history-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
var Ws = () => Wt2;
var Zc = (e) => (Wt2 = [{ ...e, id: Lg() }, ...Wt2].slice(0, os), Gs(Wt2), Wt2);
var js = (e) => (Wt2 = Wt2.filter((t) => t.id !== e), Gs(Wt2), Wt2);
var Jc = () => (Wt2 = [], Gs(Wt2), Wt2);
var jg = [Gc, Wc, Xc, Yc, jc];
var Xs = false;
var Kn2 = /* @__PURE__ */ new Set();
var YC = (e) => {
if (typeof window > "u") return $s();
let t = Uc(), n2 = { enabled: true, activationMode: "toggle", keyHoldDuration: 100, allowActivationInsideInput: true, maxContextLines: 3, ...t, ...e };
if (n2.enabled === false || Xs) return $s();
Xs = true, Kc();
let { enabled: o$1, ...l2 } = n2;
return yn2((a) => {
let i = Lc(l2), c = () => {
for (let r of i.store.actions) if (r.agent?.provider) return r.agent;
}, { store: s, actions: d2 } = zl({ theme: ro, hasAgentProvider: !!c()?.provider, keyHoldDuration: i.store.options.keyHoldDuration ?? 100 }), f = se2(() => s.current.state === "holding"), p$1 = se2(() => s.current.state === "active");
pe2(Be2(p$1, (r, u) => {
r && !u ? (Ta(), aa(), document.body.style.touchAction = "none") : !r && u && (ha(), la(), document.body.style.touchAction = "");
}));
let y2 = se2(() => s.current.state === "active" && s.current.phase === "frozen"), T$1 = se2(() => s.current.state === "active" && s.current.phase === "dragging"), H2 = se2(() => s.current.state === "active" && s.current.phase === "justDragged"), $2 = se2(() => s.current.state === "copying"), b2 = se2(() => s.current.state === "justCopied"), w3 = se2(() => s.current.state === "active" && s.current.isPromptMode), h2 = se2(() => s.pendingCommentMode || w3()), g2 = se2(() => s.current.state === "active" && s.current.isPromptMode && s.current.isPendingDismiss), v2 = no(), [I2, K] = B2(v2?.enabled ?? true), [Q2, X2] = B2(0), [te2, ye2] = B2(v2), [ue2, W2] = B2(false), [V2, S2] = B2(Ws()), [O2, U2] = B2(null), [q$1, x2] = B2(null), [A2, j2] = B2(null), z2, ne2 = null, G2 = /* @__PURE__ */ new Map(), [Ee2, ve2] = B2(false), [L2, F2] = B2(0), [ie2, Me2] = B2(false), he2 = [], ke2 = (r) => G2.get(r) ?? [], ge2 = (r) => {
let u = r.elementSelectors ?? [];
if (u.length === 0) return [];
let m = [];
for (let C2 of u) if (C2) try {
let k2 = document.querySelector(C2);
qe2(k2) && m.push(k2);
} catch {
}
return m;
}, Ce2 = (r) => {
let u = ke2(r.id), m = u.filter((R3) => qe2(R3));
if (u.length > 0 && m.length === u.length) return m;
let k2 = ge2(r);
return k2.length > 0 ? (G2.set(r.id, k2), k2) : m;
}, He2 = (r) => Ce2(r)[0], Oe2 = se2(() => {
O2();
let r = /* @__PURE__ */ new Set();
for (let u of V2()) Ce2(u).length === 0 && r.add(u.id);
return r;
}, void 0, { equals: (r, u) => {
if (r.size !== u.size) return false;
for (let m of u) if (!r.has(m)) return false;
return true;
} }), be2 = se2(() => s.pendingAbortSessionId), Se2 = se2(() => s.hasAgentProvider), tt2 = () => {
jt2 !== null && (clearTimeout(jt2), jt2 = null);
}, ot = () => {
un2 = false, nn2 = false, Ht2 = null;
};
pe2(() => {
if (s.current.state !== "holding") {
tt2();
return;
}
Ht2 = Date.now(), jt2 = window.setTimeout(() => {
if (jt2 = null, un2) {
nn2 = true;
return;
}
d2.activate();
}, s.keyHoldDuration), Te2(tt2);
}), pe2(() => {
if (s.current.state !== "active" || s.current.phase !== "justDragged") return;
let r = setTimeout(() => {
d2.finishJustDragged();
}, 1500);
Te2(() => clearTimeout(r));
}), pe2(() => {
if (s.current.state !== "justCopied") return;
let r = setTimeout(() => {
d2.finishJustCopied();
}, 1500);
Te2(() => clearTimeout(r));
}), pe2(Be2(f, (r, u = false) => {
!u || r || !p$1() || (i.store.options.activationMode !== "hold" && d2.setWasActivatedByToggle(true), i.hooks.onActivate());
}));
let ft2 = (r, u, m) => {
so2(r, u, m), d2.clearInputText();
}, _t2 = () => {
let r = s.frozenElement || Z2();
r && d2.enterPromptMode({ x: s.pointer.x, y: s.pointer.y }, r);
}, so2 = (r, u, m) => (d2.setCopyStart({ x: u, y: m }, r), ze2(r)), Vn2 = 0, Sn2 = 0, ht2 = 0, en2 = 0, mt2 = null, [tn2, cn2] = B2(null), dn2 = (r, u) => {
mt2 !== null && clearTimeout(mt2), cn2(null), mt2 = window.setTimeout(() => {
cn2({ x: r, y: u }), mt2 = null;
}, 32);
}, st2 = null, jt2 = null, Ht2 = null, un2 = false, nn2 = false, Sr2 = 0, Ot2 = false, Dt = null, De2 = null, ao2 = 0, lo2 = 0, gt2 = null, vt2 = null, on2 = false, [Un2, An2] = B2(null), [Ar2, Gn2] = B2(void 0), [rn2, Tr2] = B2([]), [co2, kr2] = B2(null), [Tn2, Pr2] = B2([]), [Fi, uo2] = B2(0), kn2 = $c(qe, ze2), Ft2 = Fc(() => s.pointer, () => T$1()), Tt2 = se2(() => p$1() && !$2()), fo2 = se2(() => i.store.theme.enabled && i.store.theme.crosshair.enabled && Tt2() && !T$1() && !s.isTouchMode && !y2() && !w3() && !ue2() && s.contextMenuPosition === null), fn2 = /* @__PURE__ */ new Map(), bt2 = (r, u) => {
let m = `grabbed-${Date.now()}-${Math.random()}`, C2 = Date.now(), k2 = { id: m, bounds: r, createdAt: C2, element: u };
d2.addGrabbedBox(k2), i.hooks.onGrabbedBox(r, u);
let R3 = window.setTimeout(() => {
fn2.delete(m), d2.removeGrabbedBox(m);
}, 1500);
fn2.set(m, R3);
}, Mr2 = async (r) => {
let u = await Promise.all(r.map(async (m) => {
let C2 = await Ut(m), k2 = null, R3, ae2, le2;
if (C2 && C2.length > 0) for (let xe2 of C2) {
let Ve2 = xe2.functionName && B(xe2.functionName), Je2 = xe2.fileName && oe(xe2.fileName);
if (Ve2 && !k2 && (k2 = xe2.functionName), Je2 && !R3 && (R3 = I(xe2.fileName), ae2 = xe2.lineNumber || void 0, le2 = xe2.columnNumber || void 0), k2 && R3) break;
}
k2 || (k2 = zi(m));
let _e2 = m instanceof HTMLElement ? m.innerText?.slice(0, pe) : void 0;
return { tagName: v(m), id: m.id || void 0, className: m.getAttribute("class") || void 0, textContent: _e2, componentName: k2 ?? void 0, filePath: R3, lineNumber: ae2, columnNumber: le2 };
}));
window.dispatchEvent(new CustomEvent("react-grab:element-selected", { detail: { elements: u } }));
}, Pn2 = (r, u, m, C2, k2) => {
d2.clearLabelInstances();
let R3 = `label-${Date.now()}-${Math.random().toString(36).slice(2)}`, ae2 = r.x + r.width / 2, le2 = r.width / 2, _e2 = k2?.mouseX, xe2 = _e2 !== void 0 ? _e2 - ae2 : void 0, Ve2 = { id: R3, bounds: r, boundsMultiple: k2?.boundsMultiple, tagName: u, componentName: m, status: C2, createdAt: Date.now(), element: k2?.element, elements: k2?.elements, mouseX: _e2, mouseXOffsetFromCenter: xe2, mouseXOffsetRatio: xe2 !== void 0 && le2 > 0 ? xe2 / le2 : void 0, hideArrow: k2?.hideArrow };
return d2.addLabelInstance(Ve2), R3;
}, Lt2 = (r) => {
zt2.delete(r), d2.removeLabelInstance(r);
}, zt2 = /* @__PURE__ */ new Map(), mn2 = (r) => {
let u = zt2.get(r);
u !== void 0 && (window.clearTimeout(u), zt2.delete(r));
}, Kt2 = (r) => {
mn2(r);
let u = window.setTimeout(() => {
zt2.delete(r), d2.updateLabelInstance(r, "fading"), setTimeout(() => {
Lt2(r);
}, 150);
}, 1500);
zt2.set(r, u);
}, Wn2 = (r, u) => {
if (u) mn2(r);
else {
let m = s.labelInstances.find((C2) => C2.id === r);
m && m.status === "copied" && Kt2(r);
}
}, zi2 = async ({ positionX: r, operation: u, bounds: m, tagName: C2, componentName: k2, element: R3, shouldDeactivateAfter: ae2, elements: le2, existingInstanceId: _e2 }) => {
Ot2 = false, s.current.state !== "copying" && d2.startCopy();
let xe2 = _e2 ?? null;
!xe2 && m && C2 && (xe2 = Pn2(m, C2, k2, "copying", { element: R3, mouseX: r, elements: le2 }));
let Ve2 = false, Je2;
try {
await u(), Ve2 = true;
} catch (it2) {
Je2 = it2 instanceof Error && it2.message ? it2.message : "Action failed";
}
xe2 && (Ve2 ? d2.updateLabelInstance(xe2, "copied") : d2.updateLabelInstance(xe2, "error", Je2 || "Unknown error"), Kt2(xe2)), s.current.state === "copying" && (Ve2 && d2.completeCopy(R3), ae2 ? nt2() : Ve2 ? (d2.activate(), Ot2 = true, Dt !== null && window.clearTimeout(Dt), Dt = window.setTimeout(() => {
Ot2 = false, Dt = null;
}, 1500)) : d2.unfreeze());
}, Ir2 = (r, u, m) => {
let C2 = r[0], k2 = m ?? (C2 ? zi(C2) : null), R3 = C2 ? v(C2) : null, ae2 = k2 ?? R3 ?? void 0;
return Pc({ maxContextLines: i.store.options.maxContextLines, getContent: i.store.options.getContent, componentName: ae2 }, { onBeforeCopy: i.hooks.onBeforeCopy, transformSnippet: i.hooks.transformSnippet, transformCopyContent: i.hooks.transformCopyContent, onAfterCopy: i.hooks.onAfterCopy, onCopySuccess: (le2, _e2) => {
i.hooks.onCopySuccess(le2, _e2);
let xe2 = le2.length > 0, Ve2 = !!u;
if (xe2) {
let Et2 = V2();
for (let [Yt2, hn2] of G2.entries()) {
if (!(hn2.length === le2.length && hn2.every((ns2, iu) => ns2 === le2[iu]))) continue;
let _n2 = Et2.find((ns2) => ns2.id === Yt2);
if (!_n2) continue;
if (Ve2 ? _n2.isComment && _n2.commentText === u : !_n2.isComment) {
js(Yt2), G2.delete(Yt2);
break;
}
}
}
let Je2 = le2.map((Et2, Yt2) => xa(Et2, Yt2 === 0)), it2 = Zc({ content: _e2, elementName: ae2 ?? "element", tagName: R3 ?? "div", componentName: k2 ?? void 0, elementsCount: le2.length, previewBounds: le2.map((Et2) => ze2(Et2)), elementSelectors: Je2, isComment: Ve2, commentText: u ?? void 0, timestamp: Date.now() });
S2(it2), ve2(true), F2((Et2) => Et2 + 1);
let Nt2 = it2[0];
Nt2 && xe2 && G2.set(Nt2.id, [...le2]);
let Xo2 = new Set(it2.map((Et2) => Et2.id));
for (let Et2 of G2.keys()) Xo2.has(Et2) || G2.delete(Et2);
}, onCopyError: i.hooks.onCopyError }, r, u);
}, _r2 = async (r, u, m) => {
if (r.length === 0) return;
let C2 = [], k2 = [];
for (let R3 of r) {
let { wasIntercepted: ae2, pendingResult: le2 } = i.hooks.onElementSelect(R3);
ae2 || C2.push(R3), le2 && k2.push(le2), i.store.theme.grabbedBoxes.enabled && bt2(ze2(R3), R3);
}
if (await Ns(), C2.length > 0) await Ir2(C2, u, m);
else if (k2.length > 0 && !(await Promise.all(k2)).every(Boolean)) throw new Error("Failed to copy");
Mr2(r);
}, P3 = ({ element: r, positionX: u, elements: m, extraPrompt: C2, shouldDeactivateAfter: k2, onComplete: R3, dragRect: ae2 }) => {
let le2 = m ?? [r], _e2 = ae2 ?? s.frozenDragRect, xe2;
_e2 && le2.length > 1 ? xe2 = ki(_e2) : xe2 = Pi(ze2(r));
let Ve2 = le2.length > 1 ? xe2.x + xe2.width / 2 : u, Je2 = v(r);
Ot2 = false, d2.startCopy();
let it2 = Je2 ? Pn2(xe2, Je2, void 0, "copying", { element: r, mouseX: Ve2, elements: m }) : null;
Ui(r).then((Nt2) => {
zi2({ positionX: Ve2, operation: () => _r2(le2, C2, Nt2 ?? void 0), bounds: xe2, tagName: Je2, componentName: Nt2 ?? void 0, element: r, shouldDeactivateAfter: k2, elements: m, existingInstanceId: it2 }).then(() => {
R3?.();
});
});
}, Z2 = se2(() => {
if (s.viewportVersion, !Tt2() || T$1()) return null;
let r = s.detectedElement;
return qe2(r) ? r : null;
}), M2 = se2(() => s.frozenElement || (y2() ? null : Z2()));
pe2(() => {
let r = s.detectedElement;
if (!r) return;
let u = setInterval(() => {
qe2(r) || d2.setDetectedElement(null);
}, 100);
Te2(() => clearInterval(u));
}), pe2(Be2(M2, (r) => {
if (gt2 !== null && (clearTimeout(gt2), gt2 = null), !r) {
An2(null);
return;
}
gt2 = window.setTimeout(() => {
gt2 = null, An2(r);
}, 100);
})), Te2(() => {
gt2 !== null && (clearTimeout(gt2), gt2 = null);
}), pe2(() => {
let r = s.frozenElements, u = ia(r);
Te2(u);
}), pe2(Be2(p$1, (r) => {
if (!r || !i.store.options.freezeReactUpdates) return;
let u = Qi();
Te2(u);
}));
let D2 = () => {
if (s.isTouchMode && T$1()) {
let u = s.detectedElement;
return !u || mn(u) ? void 0 : u;
}
let r = M2();
if (!(!r || mn(r))) return r;
}, ee2 = se2(() => D2()), oe2 = () => ee2() ? s.isTouchMode && T$1() ? Tt2() : Tt2() && !T$1() : false, ce2 = se2(() => {
s.viewportVersion;
let r = s.frozenElements;
if (r.length === 0) return [];
let u = s.frozenDragRect;
return u && r.length > 1 ? [ki(u)] : r.filter((m) => m !== null).map((m) => ze2(m));
}), Ne2 = se2(() => {
s.viewportVersion;
let r = s.frozenElements;
if (r.length > 0) {
let m = ce2();
if (r.length === 1) {
let k2 = m[0];
if (k2) return k2;
}
let C2 = s.frozenDragRect;
return C2 ? m[0] ?? ki(C2) : Pi(Hs(m));
}
let u = ee2();
if (u) return ze2(u);
}), Le2 = se2(() => s.frozenElements.length), Ke2 = (r, u) => {
let m = r + window.scrollX, C2 = u + window.scrollY;
return { x: Math.abs(m - s.dragStart.x), y: Math.abs(C2 - s.dragStart.y) };
}, je2 = se2(() => {
if (!T$1()) return false;
let r = Ke2(s.pointer.x, s.pointer.y);
return r.x > 2 || r.y > 2;
}), dt2 = (r, u) => {
let m = r + window.scrollX, C2 = u + window.scrollY, k2 = Math.min(s.dragStart.x, m), R3 = Math.min(s.dragStart.y, C2), ae2 = Math.abs(m - s.dragStart.x), le2 = Math.abs(C2 - s.dragStart.y);
return { x: k2 - window.scrollX, y: R3 - window.scrollY, width: ae2, height: le2 };
}, Re2 = se2(() => {
if (s.viewportVersion, !je2()) return;
let r = dt2(s.pointer.x, s.pointer.y);
return { borderRadius: "0px", height: r.height, transform: "none", width: r.width, x: r.x, y: r.y };
}), Ct2 = se2(() => {
if (s.viewportVersion, !je2()) return [];
let r = tn2();
if (!r) return [];
let u = dt2(r.x, r.y), m = Cr2(u, qe);
return (m.length > 0 ? m : Cr2(u, qe, false)).map((k2) => ze2(k2));
}), kt2 = se2(() => {
let r = Ct2();
return r.length > 0 ? r : ce2();
}), Rt2 = se2(() => {
if ($2() || w3()) {
s.viewportVersion;
let r = s.frozenElement || Z2();
if (r) {
let u = ze2(r);
return { x: xn2(u).x + s.copyOffsetFromCenterX, y: s.copyStart.y };
}
return { x: s.copyStart.x, y: s.copyStart.y };
}
return { x: s.pointer.x, y: s.pointer.y };
});
pe2(Be2(() => [Z2(), s.lastGrabbedElement], ([r, u]) => {
u && r && u !== r && d2.setLastGrabbed(null), r && i.hooks.onElementHover(r);
})), pe2(Be2(() => Z2(), (r) => {
let u = ++ao2, m = () => {
ao2 === u && d2.setSelectionSource(null, null);
};
if (!r) {
m();
return;
}
Ut(r).then((C2) => {
if (ao2 === u && C2) {
for (let k2 of C2) if (k2.fileName && oe(k2.fileName)) {
d2.setSelectionSource(I(k2.fileName), k2.lineNumber ?? null);
return;
}
m();
}
}).catch(() => {
ao2 === u && d2.setSelectionSource(null, null);
});
})), pe2(Be2(() => s.viewportVersion, () => Ze2._internal.updateBoundsOnViewportChange()));
let Or2 = se2(() => s.grabbedBoxes.map((r) => ({ id: r.id, bounds: r.bounds, createdAt: r.createdAt }))), Ki = se2(() => s.labelInstances.map((r) => ({ id: r.id, status: r.status, tagName: r.tagName, componentName: r.componentName, createdAt: r.createdAt }))), td = se2(() => {
let r = p$1(), u = T$1(), m = $2(), C2 = w3(), k2 = fo2(), R3 = Z2(), ae2 = Re2(), le2 = i.store.theme.enabled, _e2 = i.store.theme.selectionBox.enabled, xe2 = i.store.theme.dragBox.enabled, Ve2 = je2(), Je2 = M2(), it2 = b2(), Nt2 = !!(le2 && _e2 && r && !m && !it2 && !u && Je2 != null);
return { isActive: r, isDragging: u, isCopying: m, isPromptMode: C2, isCrosshairVisible: k2 ?? false, isSelectionBoxVisible: Nt2, isDragBoxVisible: !!(le2 && xe2 && r && !m && Ve2), targetElement: R3, dragBounds: ae2 ? { x: ae2.x, y: ae2.y, width: ae2.width, height: ae2.height } : null, grabbedBoxes: Or2(), labelInstances: Ki(), selectionFilePath: s.selectionFilePath, toolbarState: te2() };
});
pe2(Be2(td, (r) => {
i.hooks.onStateChange(r);
})), pe2(Be2(() => [w3(), s.pointer.x, s.pointer.y, Z2()], ([r, u, m, C2]) => {
i.hooks.onPromptModeChange(r, { x: u, y: m, targetElement: C2 });
})), pe2(Be2(() => [qi(), Ne2(), Z2()], ([r, u, m]) => {
i.hooks.onSelectionBox(!!r, u ?? null, m);
})), pe2(Be2(() => [Zi2(), Re2()], ([r, u]) => {
i.hooks.onDragBox(!!r, u ?? null);
})), pe2(Be2(() => [fo2(), s.pointer.x, s.pointer.y], ([r, u, m]) => {
i.hooks.onCrosshair(!!r, { x: u, y: m });
})), pe2(Be2(() => [zd(), Fd(), Rt2(), Z2(), s.selectionFilePath, s.selectionLineNumber], ([r, u, m, C2, k2, R3]) => {
i.hooks.onElementLabel(!!r, u, { x: m.x, y: m.y, content: "", element: C2 ?? void 0, tagName: C2 && v(C2) || void 0, filePath: k2 ?? void 0, lineNumber: R3 ?? void 0 });
}));
let Mn2 = null, Dr2 = (r) => {
r ? (Mn2 || (Mn2 = document.createElement("style"), Mn2.setAttribute("data-react-grab-cursor", ""), document.head.appendChild(Mn2)), Mn2.textContent = `* { cursor: ${r} !important; }`) : Mn2 && (Mn2.remove(), Mn2 = null);
};
pe2(Be2(() => [p$1(), $2(), w3()], ([r, u, m]) => {
Dr2(u ? "progress" : r && !m ? "crosshair" : null);
}));
let jn2 = () => {
let r = f();
d2.activate(), r || i.hooks.onActivate();
}, nd = () => {
Dt !== null && (window.clearTimeout(Dt), Dt = null), Ot2 = false;
}, nt2 = () => {
let r = T$1(), u = s.previouslyFocusedElement;
d2.deactivate(), Vo2(), vt2 = null, on2 = false, r && (document.body.style.userSelect = ""), st2 && window.clearTimeout(st2), Ft2.stop(), u instanceof HTMLElement && qe2(u) && u.focus(), i.hooks.onDeactivate();
}, Ys = () => {
f() && d2.release(), p$1() && nt2(), nd();
}, Lr2 = () => {
d2.setWasActivatedByToggle(true), jn2();
}, qs = (r, u, m) => {
let C2 = u[0];
if (qe2(C2)) {
let k2 = C2.getBoundingClientRect(), R3 = k2.top + k2.height / 2;
d2.setPointer({ x: r.position.x, y: R3 }), d2.setFrozenElements(u), d2.setInputText(r.context.prompt), d2.setWasActivatedByToggle(true), m && d2.setSelectedAgent(m), p$1() || jn2();
}
}, Zs = (r) => ({ ...r, onAbort: (u, m) => {
r.onAbort?.(u, m), qs(u, m, r);
}, onUndo: (u, m) => {
r.onUndo?.(u, m), qs(u, m, r);
} }), Vi = () => {
let r = c();
if (r) return Zs(r);
}, Ze2 = Vs(Vi(), { transformAgentContext: i.hooks.transformAgentContext }), Js = () => {
d2.clearLastCopied();
let r = [...s.frozenElements], u = s.frozenElement || Z2(), m = w3() ? s.inputText.trim() : "";
if (!u) {
nt2();
return;
}
let C2 = r.length > 0 ? r : u ? [u] : [], k2 = C2.map((xe2) => ze2(xe2)), R3 = k2[0], ae2 = R3.x + R3.width / 2, le2 = R3.y + R3.height / 2, _e2 = ae2 + s.copyOffsetFromCenterX;
if ((s.selectedAgent || Se2()) && m) {
let xe2 = s.replySessionId, Ve2 = s.selectedAgent;
nt2(), d2.clearReplySessionId(), d2.setSelectedAgent(null), Ze2.session.start({ elements: C2, prompt: m, position: { x: _e2, y: le2 }, selectionBounds: k2, sessionId: xe2 ?? void 0, agent: Ve2 ? Zs(Ve2) : void 0 });
return;
}
d2.setPointer({ x: ae2, y: le2 }), d2.exitPromptMode(), d2.clearInputText(), d2.clearReplySessionId(), P3({ element: u, positionX: _e2, elements: C2, extraPrompt: m || void 0, onComplete: nt2 });
}, Rr2 = () => {
if (d2.clearLastCopied(), !w3()) return;
if (s.inputText.trim() && !g2()) {
d2.setPendingDismiss(true);
return;
}
d2.clearInputText(), d2.clearReplySessionId(), nt2();
}, od = () => {
d2.clearInputText(), d2.clearReplySessionId(), nt2();
}, rd = () => {
d2.setPendingDismiss(false);
}, id = (r, u) => {
d2.setPendingAbortSessionId(null), u && Ze2.session.abort(r);
}, sd = () => {
let r = s.frozenElement || Z2();
r && ft2(r, s.pointer.x, s.pointer.y), _t2();
}, ad = (r, u) => {
let m = Ze2.sessions().get(r), C2 = Ze2.session.getElements(r), k2 = m?.selectionBounds ?? [], R3 = k2[0];
if (m && C2.length > 0 && R3) {
let ae2 = m.position.x, le2 = m.context.sessionId ?? r;
Ze2.session.dismiss(r), Ze2.session.start({ elements: C2, prompt: u, position: { x: ae2, y: R3.y + R3.height / 2 }, selectionBounds: k2, sessionId: le2 });
}
}, ld = (r) => {
let u = Ze2.session.acknowledgeError(r);
u && d2.setInputText(u);
}, cd = () => {
p$1() ? nt2() : I2() && (on2 = true, Lr2());
}, Qs = (r, u, m) => {
d2.setPendingCommentMode(false), d2.clearInputText(), d2.enterPromptMode({ x: u, y: m }, r);
}, Ui2 = (r, u) => {
d2.showContextMenu(u, r), Vo2(), ga(), i.hooks.onContextMenu(r, u);
}, dd = () => {
if (!I2()) return;
if (p$1() && h2()) {
nt2();
return;
}
d2.setPendingCommentMode(true), p$1() || Lr2();
}, ud = () => {
let r = !I2();
K(r);
let u = no(), m = { edge: u?.edge ?? "bottom", ratio: u?.ratio ?? Go, collapsed: u?.collapsed ?? false, enabled: r };
yr2(m), ye2(m), Kn2.forEach((C2) => C2(m)), r || (Ys(), ga());
}, fd = (r, u) => {
if (!I2() || w3() || y2() || s.contextMenuPosition !== null) return;
d2.setPointer({ x: r, y: u }), ht2 = r, en2 = u;
let m = performance.now(), C2 = Sn2 > 0 && m - Sn2 < 200;
if (m - Vn2 >= 32 && !C2 && (Vn2 = m, Sn2 = m, Vc(() => {
let k2 = Aa(ht2, en2);
k2 !== s.detectedElement && d2.setDetectedElement(k2), Sn2 = 0;
})), T$1()) {
dn2(r, u);
let k2 = Us(r, u), R3 = k2.top || k2.bottom || k2.left || k2.right;
R3 && !Ft2.isActive() ? Ft2.start() : !R3 && Ft2.isActive() && Ft2.stop();
}
}, md = (r, u) => !Tt2() || $2() ? false : (d2.startDrag({ x: r, y: u }), d2.setPointer({ x: r, y: u }), document.body.style.userSelect = "none", dn2(r, u), i.hooks.onDragStart(r + window.scrollX, u + window.scrollY), true), gd = (r, u) => {
let m = Cr2(r, qe), C2 = m.length > 0 ? m : Cr2(r, qe, false);
if (C2.length === 0) return;
Xr(C2), i.hooks.onDragEnd(C2, r);
let k2 = C2[0], R3 = xn2(ze2(k2));
d2.setPointer(R3), d2.setFrozenElements(C2);
let ae2 = Bs(r);
if (d2.setFrozenDragRect(ae2), d2.freeze(), d2.setLastGrabbed(k2), s.pendingCommentMode) {
Qs(k2, R3.x, R3.y);
return;
}
if (on2) {
on2 = false, Ui2(k2, R3);
return;
}
let le2 = s.wasActivatedByToggle && !u;
P3({ element: k2, positionX: R3.x, elements: C2, shouldDeactivateAfter: le2, dragRect: ae2 });
}, pd = (r, u, m) => {
let C2 = qe2(s.frozenElement) ? s.frozenElement : null, k2 = qe2(vt2) ? vt2 : null, R3 = C2 ?? k2 ?? Aa(r, u) ?? (qe2(s.detectedElement) ? s.detectedElement : null);
if (!R3) return;
let ae2 = !C2 && k2 === R3, le2, _e2;
if (C2) le2 = s.pointer.x, _e2 = s.pointer.y;
else if (ae2) {
let Ve2 = xn2(ze2(R3));
le2 = Ve2.x, _e2 = Ve2.y;
} else le2 = r, _e2 = u;
if (vt2 = null, s.pendingCommentMode) {
Qs(R3, le2, _e2);
return;
}
if (on2) {
on2 = false;
let { wasIntercepted: Ve2 } = i.hooks.onElementSelect(R3);
if (Ve2) return;
Xr([R3]), d2.setFrozenElement(R3);
let Je2 = { x: le2, y: _e2 };
d2.setPointer(Je2), d2.freeze(), Ui2(R3, Je2);
return;
}
let xe2 = s.wasActivatedByToggle && !m;
d2.setLastGrabbed(R3), P3({ element: R3, positionX: le2, shouldDeactivateAfter: xe2 });
}, ea = () => {
T$1() && (d2.cancelDrag(), Ft2.stop(), document.body.style.userSelect = "");
}, hd = (r, u, m) => {
if (!T$1()) return;
mt2 !== null && (clearTimeout(mt2), mt2 = null), cn2(null);
let C2 = Ke2(r, u), k2 = C2.x > 2 || C2.y > 2, R3 = k2 ? dt2(r, u) : null;
k2 ? d2.endDrag() : d2.cancelDrag(), Ft2.stop(), document.body.style.userSelect = "", R3 ? gd(R3, m) : pd(r, u, m);
}, rt2 = Tc(), Nr2 = Hc(), mo2 = (r) => {
let u;
try {
u = Nr2.originalKeyDescriptor?.get ? Nr2.originalKeyDescriptor.get.call(r) : r.key;
} catch {
return false;
}
let m = u === "Enter" || io2(r.code), C2 = p$1() || f();
return m && C2 && !w3() && !s.wasActivatedByToggle && A2() === null ? (Nr2.claimedEvents.add(r), r.preventDefault(), r.stopImmediatePropagation(), true) : false;
};
rt2.addDocumentListener("keydown", mo2, { capture: true }), rt2.addDocumentListener("keyup", mo2, { capture: true }), rt2.addDocumentListener("keypress", mo2, { capture: true });
let bd = (r) => {
if (!(r.code === "KeyZ" && (r.metaKey || r.ctrlKey)) || Array.from(Ze2.sessions().values()).some((k2) => !k2.isStreaming && !k2.error)) return false;
let C2 = r.shiftKey;
return C2 && Ze2.canRedo() ? (r.preventDefault(), r.stopPropagation(), Ze2.history.redo(), true) : !C2 && Ze2.canUndo() ? (r.preventDefault(), r.stopPropagation(), Ze2.history.undo(), true) : false;
}, Vo2 = () => {
Pr2([]), uo2(0), kn2.clearHistory();
}, Gi2 = (r) => {
d2.setFrozenElement(r), d2.freeze(), vt2 = r;
let u = ze2(r), m = xn2(u);
d2.setPointer(m), s.contextMenuPosition !== null && d2.showContextMenu(m, r);
}, ta$1 = (r) => {
let u = ze2(r), m = Ti(u), C2 = ya(m.x, m.y).filter(qe).reverse();
Pr2(C2), uo2(Math.max(0, C2.indexOf(r)));
}, yd = (r) => {
let u = Tn2()[r];
u && (uo2(r), kn2.clearHistory(), Gi2(u));
}, na$1 = (r) => {
if (!p$1() || w3() || !Ao.has(r.key)) return false;
let u = M2(), m = !u;
if (u || (u = Aa(window.innerWidth / 2, window.innerHeight / 2)), !u) return false;
if (!(r.key === "ArrowUp" || r.key === "ArrowDown")) {
Vo2();
let le2 = kn2.findNext(r.key, u);
return !le2 && !m ? false : (r.preventDefault(), r.stopPropagation(), Gi2(le2 ?? u), true);
}
Tn2().length === 0 && ta$1(u);
let R3 = kn2.findNext(r.key, u) ?? u;
r.preventDefault(), r.stopPropagation(), Gi2(R3);
let ae2 = Tn2().indexOf(R3);
return ae2 !== -1 ? uo2(ae2) : ta$1(R3), true;
}, wd = (r) => {
if (!io2(r.code) || xt2(r)) return false;
let u = s.lastCopiedElement;
if (!f() && !w3() && !p$1() && u && qe2(u) && !s.labelInstances.some((k2) => k2.status === "copied" || k2.status === "fading")) {
r.preventDefault(), r.stopImmediatePropagation();
let k2 = xn2(ze2(u));
return d2.setPointer(k2), ft2(u, k2.x, k2.y), d2.setFrozenElement(u), d2.clearLastCopied(), _t2(), p$1() || jn2(), true;
}
if (f() && !w3()) {
r.preventDefault(), r.stopImmediatePropagation();
let k2 = s.frozenElement || Z2();
return k2 && ft2(k2, s.pointer.x, s.pointer.y), d2.setPointer({ x: s.pointer.x, y: s.pointer.y }), k2 && d2.setFrozenElement(k2), _t2(), st2 !== null && (window.clearTimeout(st2), st2 = null), p$1() || jn2(), true;
}
return false;
}, xd = (r) => {
if (r.key?.toLowerCase() !== "o" || w3() || !p$1() || !(r.metaKey || r.ctrlKey)) return false;
let u = s.selectionFilePath, m = s.selectionLineNumber;
return u ? (r.preventDefault(), r.stopPropagation(), i.hooks.onOpenFile(u, m ?? void 0) || Zi(u, m ?? void 0, i.hooks.transformOpenFileUrl), true) : false;
}, oa$1 = () => {
De2 !== null && (window.clearTimeout(De2), De2 = null);
}, go2 = () => {
oa$1(), Tr2([]), kr2(null);
}, ra = se2(() => !!ee2() && Tt2() && !w3() && !T$1() && s.contextMenuPosition === null), vd = se2(() => ({ items: rn2(), activeIndex: co2(), isVisible: co2() !== null && rn2().length > 0 })), Cd = se2(() => Tn2().map((r) => ({ tagName: v(r) || "element", componentName: zi(r) ?? void 0 }))), Ed = se2(() => ({ items: Cd(), activeIndex: Fi(), isVisible: Tn2().length > 0 }));
pe2(Be2(ee2, () => {
go2();
})), pe2(Be2(ra, (r) => {
r || go2();
}));
let Sd = (r) => i.store.actions.find((u) => u.id === r), Ad = () => {
let r = ee2();
if (!r) return;
let u = Ne2();
return ua$1({ element: r, filePath: s.selectionFilePath ?? void 0, lineNumber: s.selectionLineNumber ?? void 0, tagName: v(r) || void 0, componentName: Ar2(), position: s.pointer, performWithFeedbackOptions: { fallbackBounds: u, fallbackSelectionBounds: u ? [u] : [] }, shouldDeferHideContextMenu: false, onBeforePrompt: go2 });
}, Td = se2(() => {
if (!ee2()) return [];
let r = [];
for (let u of i.store.actions) typeof u.enabled == "boolean" && !u.enabled || r.push({ id: u.id, label: u.label, shortcut: u.shortcut });
return r;
}), kd = () => {
oa$1(), De2 = window.setTimeout(() => {
De2 = null;
let r = co2(), u = rn2();
if (r === null || u.length === 0) return;
let m = u[r];
if (!m) return;
let C2 = Sd(m.id);
if (!C2) {
go2();
return;
}
let k2 = Ad();
if (!k2 || !wr2(C2, k2)) {
go2();
return;
}
go2();
C2.onAction(k2);
}, 600);
}, Pd = () => {
if (!ra()) return false;
let r = Td();
if (r.length === 0) return false;
Tr2(r);
let u = co2(), C2 = u !== null && u < r.length ? (u + 1) % r.length : 0;
return kr2(C2), kd(), true;
}, Md = (r) => r.code !== "KeyC" || r.altKey || r.repeat || xt2(r) || !Pd() ? false : (r.preventDefault(), r.stopPropagation(), (r.metaKey || r.ctrlKey) && r.stopImmediatePropagation(), true), Id = (r) => {
if (!(!i.store.options.allowActivationInsideInput && xt2(r)) && !(!_i(r, i.store.options) && ((r.metaKey || r.ctrlKey) && !yo.includes(r.key) && !io2(r.code) && (p$1() && !s.wasActivatedByToggle ? nt2() : f() && (tt2(), ot(), d2.release())), !io2(r.code) || !f()))) {
if ((p$1() || f()) && !w3() && (r.preventDefault(), io2(r.code) && r.stopImmediatePropagation()), p$1()) {
if (s.wasActivatedByToggle && i.store.options.activationMode !== "hold" || r.repeat) return;
st2 !== null && window.clearTimeout(st2), st2 = window.setTimeout(() => {
nt2();
}, 200);
return;
}
if (f() && r.repeat) {
if (un2) {
let u = nn2;
ot(), u && d2.activate();
}
return;
}
if (!($2() || b2()) && !f()) {
let m = i.store.options.keyHoldDuration ?? 100;
xt2(r) ? Kl(r) ? m += 600 : m += 400 : Vl() && (m += 600), ot(), d2.startHold(m);
}
}
};
rt2.addWindowListener("keydown", (r) => {
if (mo2(r), !I2()) {
_i(r, i.store.options) && !r.repeat && X2((R3) => R3 + 1);
return;
}
if (bd(r)) return;
let u = io2(r.code) && f() && !w3(), m = At2(r, "data-react-grab-input");
if (w3() && _i(r, i.store.options) && !r.repeat && !m) {
r.preventDefault(), r.stopPropagation(), Rr2();
return;
}
if (r.key === "Escape" && A2() !== null) return;
if (r.key === "Escape" && O2() !== null) {
Xt2();
return;
}
if (q$1() !== null) {
if (r.key === "Escape") {
Yn2();
return;
}
let R3 = i.store.toolbarActions, ae2 = (r.metaKey || r.ctrlKey) && !r.repeat, le2 = R3.find((_e2) => _e2.shortcut ? r.key === "Enter" ? _e2.shortcut === "Enter" : ae2 && r.key.toLowerCase() === _e2.shortcut.toLowerCase() : false);
le2 && xr2(le2) && (r.preventDefault(), r.stopPropagation(), le2.onAction(), Yn2());
return;
}
let C2 = At2(r, "data-react-grab-ignore-events") && !u;
if (w3() || C2) return r.key === "Escape" && (be2() ? (r.preventDefault(), r.stopPropagation(), d2.setPendingAbortSessionId(null)) : w3() ? Rr2() : s.wasActivatedByToggle && nt2()), C2 && Ao.has(r.key) && na$1(r), void 0;
if (r.key === "Escape") {
if (be2()) {
r.preventDefault(), r.stopPropagation(), d2.setPendingAbortSessionId(null);
return;
}
if (Ze2.isProcessing()) return;
if (f() || s.wasActivatedByToggle) {
nt2();
return;
}
}
let k2 = Date.now() - Sr2 < 200;
!k2 && Md(r) || na$1(r) || wd(r) || xd(r) || k2 || Id(r);
}, { capture: true }), rt2.addWindowListener("keyup", (r) => {
if (mo2(r)) return;
let u = Bc(i.store.options), m = u.metaKey || u.ctrlKey ? Cn2() ? !r.metaKey : !r.ctrlKey : u.shiftKey && !r.shiftKey || u.altKey && !r.altKey, C2 = i.store.options.activationKey ? typeof i.store.options.activationKey == "function" ? i.store.options.activationKey(r) : Ii(i.store.options.activationKey)(r) : Mi(r.key, r.code);
if (b2() || Ot2) {
(C2 || m) && (Ot2 = false, nt2());
return;
}
if (!f() && !p$1() || w3()) return;
let k2 = !!i.store.options.activationKey, R3 = i.store.options.activationMode === "hold";
if (p$1()) {
let ae2 = s.contextMenuPosition !== null;
if (m) {
if (s.wasActivatedByToggle && i.store.options.activationMode !== "hold" || ae2) return;
nt2();
} else if (R3 && C2) {
if (st2 !== null && (window.clearTimeout(st2), st2 = null), ae2) return;
nt2();
} else !k2 && C2 && st2 !== null && (window.clearTimeout(st2), st2 = null);
return;
}
if (C2 || m) {
if (s.wasActivatedByToggle && i.store.options.activationMode !== "hold") return;
if (f() || nn2 && m) {
tt2();
let _e2 = (Ht2 ? Date.now() - Ht2 : 0) >= 200, xe2 = nn2 && _e2 && (i.store.options.allowActivationInsideInput || !xt2(r));
ot(), xe2 ? d2.activate() : d2.release();
} else nt2();
}
}, { capture: true }), rt2.addDocumentListener("copy", () => {
f() && (un2 = true);
}), rt2.addWindowListener("keypress", mo2, { capture: true }), rt2.addWindowListener("pointermove", (r) => {
if (!r.isPrimary) return;
let u = r.pointerType === "touch";
if (d2.setTouchMode(u), At2(r, "data-react-grab-ignore-events") || s.contextMenuPosition !== null || u && !f() && !p$1()) return;
(u ? f() : p$1()) && !w3() && y2() && (d2.unfreeze(), Vo2()), fd(r.clientX, r.clientY);
}, { passive: true }), rt2.addWindowListener("pointerdown", (r) => {
if (r.button !== 0 || !r.isPrimary || (d2.setTouchMode(r.pointerType === "touch"), At2(r, "data-react-grab-ignore-events")) || s.contextMenuPosition !== null || q$1() !== null) return;
if (w3()) {
let m = Ne2();
m && r.clientX >= m.x && r.clientX <= m.x + m.width && r.clientY >= m.y && r.clientY <= m.y + m.height ? Js() : Rr2();
return;
}
md(r.clientX, r.clientY) && (document.documentElement.setPointerCapture(r.pointerId), r.preventDefault(), r.stopImmediatePropagation());
}, { capture: true }), rt2.addWindowListener("pointerup", (r) => {
if (r.button !== 0 || !r.isPrimary || At2(r, "data-react-grab-ignore-events") || s.contextMenuPosition !== null) return;
let u = Tt2() || $2() || T$1(), m = r.metaKey || r.ctrlKey;
hd(r.clientX, r.clientY, m), u && (r.preventDefault(), r.stopImmediatePropagation());
}, { capture: true }), rt2.addWindowListener("contextmenu", (r) => {
if (!Tt2() || $2() || w3()) return;
let u = At2(r, "data-react-grab-ignore-events");
if (u && Tn2().length > 0) Vo2();
else if (u) return;
if (s.contextMenuPosition !== null) {
r.preventDefault();
return;
}
r.preventDefault(), r.stopPropagation();
let m = Aa(r.clientX, r.clientY);
if (!m) return;
let C2 = s.frozenElements;
C2.length > 1 && C2.includes(m) ? Xr(C2) : (Xr([m]), d2.setFrozenElement(m));
let R3 = { x: r.clientX, y: r.clientY };
d2.setPointer(R3), d2.freeze(), Ui2(m, R3);
}, { capture: true }), rt2.addWindowListener("pointercancel", (r) => {
r.isPrimary && ea();
}), rt2.addWindowListener("click", (r) => {
At2(r, "data-react-grab-ignore-events") || s.contextMenuPosition === null && (Tt2() || $2() || H2()) && (r.preventDefault(), r.stopImmediatePropagation(), s.wasActivatedByToggle && !$2() && !w3() && (f() ? d2.setWasActivatedByToggle(false) : nt2()));
}, { capture: true }), rt2.addDocumentListener("visibilitychange", () => {
if (document.hidden) {
d2.clearGrabbedBoxes();
let r = s.activationTimestamp;
p$1() && !w3() && r !== null && Date.now() - r > 500 && nt2();
}
}), rt2.addWindowListener("blur", () => {
ea(), f() && (tt2(), d2.release(), ot());
}), rt2.addWindowListener("focus", () => {
Sr2 = Date.now();
});
let _d = () => {
if (!(s.isTouchMode && !f() && !p$1()) && I2() && !w3() && !y2() && !T$1() && s.contextMenuPosition === null && s.frozenElements.length === 0) {
let r = Aa(s.pointer.x, s.pointer.y);
d2.setDetectedElement(r);
}
}, $r2 = () => {
Mc(), _d(), d2.incrementViewportVersion(), d2.updateSessionBounds(), d2.updateContextMenuPosition();
};
rt2.addWindowListener("scroll", $r2, { capture: true });
let Wi = window.innerWidth, ji = window.innerHeight;
rt2.addWindowListener("resize", () => {
let r = window.innerWidth, u = window.innerHeight;
if (Wi > 0 && ji > 0) {
let m = r / Wi, C2 = u / ji, k2 = Math.abs(m - C2) < ns, R3 = Math.abs(m - 1) > ns;
k2 && R3 && d2.setPointer({ x: s.pointer.x * m, y: s.pointer.y * C2 });
}
Wi = r, ji = u, $r2();
});
let Xi = window.visualViewport;
if (Xi) {
let { signal: r } = rt2;
Xi.addEventListener("resize", $r2, { signal: r }), Xi.addEventListener("scroll", $r2, { signal: r });
}
let Xn2 = null, In = null, Od = () => {
let r = i.store.theme.enabled && (p$1() || $2() || s.labelInstances.length > 0 || s.grabbedBoxes.length > 0 || Ze2.sessions().size > 0);
r && Xn2 === null ? Xn2 = window.setInterval(() => {
In === null && (In = D(() => {
In = null, d2.incrementViewportVersion(), d2.updateSessionBounds();
}));
}, 100) : !r && Xn2 !== null && (window.clearInterval(Xn2), Xn2 = null, In !== null && (q(In), In = null));
};
pe2(() => {
i.store.theme.enabled, p$1(), $2(), s.labelInstances.length, s.grabbedBoxes.length, Ze2.sessions().size, Od();
}), Te2(() => {
Xn2 !== null && window.clearInterval(Xn2), In !== null && q(In);
}), rt2.addDocumentListener("copy", (r) => {
w3() || At2(r, "data-react-grab-ignore-events") || (Tt2() || $2()) && r.preventDefault();
}, { capture: true }), Te2(() => {
rt2.abort(), mt2 !== null && window.clearTimeout(mt2), st2 && window.clearTimeout(st2), Dt && window.clearTimeout(Dt), De2 && window.clearTimeout(De2), ne2 !== null && q(ne2), fn2.forEach((r) => window.clearTimeout(r)), fn2.clear(), Ft2.stop(), document.body.style.userSelect = "", document.body.style.touchAction = "", Dr2(null), Nr2.restore();
});
let Yi = Gl(As), Uo2 = se2(() => i.store.theme.enabled), Dd = se2(() => i.store.theme.selectionBox.enabled), ia$1 = se2(() => i.store.theme.elementLabel.enabled), Ld = se2(() => i.store.theme.dragBox.enabled), sa$1 = se2(() => b2() || ue2() && !y2()), Rd = se2(() => Ct2().length > 0), qi = se2(() => !Uo2() || !Dd() || sa$1() ? false : Rd() ? true : oe2()), Nd = se2(() => {
let r = ee2();
if (r) return v(r) || void 0;
});
pe2(Be2(() => Un2(), (r) => {
let u = ++lo2;
if (!r) {
Gn2(void 0);
return;
}
Ui(r).then((m) => {
lo2 === u && Gn2(m ?? void 0);
}).catch(() => {
lo2 === u && Gn2(void 0);
});
}));
let $d = se2(() => s.contextMenuPosition !== null || !ia$1() || sa$1() ? false : oe2()), Br2 = /* @__PURE__ */ new Map(), Bd = se2(() => {
if (!Uo2()) return [];
if (!i.store.theme.grabbedBoxes.enabled) return [];
s.viewportVersion;
let r = new Set(s.labelInstances.map((u) => u.id));
for (let u of Br2.keys()) r.has(u) || Br2.delete(u);
return s.labelInstances.map((u) => {
let m = u.elements && u.elements.length > 1, C2 = u.element, R3 = !m && C2 && document.body.contains(C2) ? ze2(C2) : u.bounds, ae2 = Br2.get(u.id), le2 = ae2 && ae2.bounds.x === R3.x && ae2.bounds.y === R3.y && ae2.bounds.width === R3.width && ae2.bounds.height === R3.height;
if (ae2 && ae2.status === u.status && ae2.errorMessage === u.errorMessage && le2) return ae2;
let _e2 = R3.x + R3.width / 2, xe2 = R3.width / 2, Ve2 = u.mouseXOffsetRatio !== void 0 && xe2 > 0 ? _e2 + u.mouseXOffsetRatio * xe2 : u.mouseXOffsetFromCenter !== void 0 ? _e2 + u.mouseXOffsetFromCenter : u.mouseX, Je2 = { ...u, bounds: R3, mouseX: Ve2 };
return Br2.set(u.id, Je2), Je2;
});
}), Hd = se2(() => Uo2() ? i.store.theme.grabbedBoxes.enabled ? (s.viewportVersion, s.grabbedBoxes.map((r) => !r.element || !document.body.contains(r.element) ? r : { ...r, bounds: ze2(r.element) })) : [] : []), Zi2 = se2(() => Uo2() && Ld() && Tt2() && je2()), Fd = se2(() => $2() ? "processing" : "hover"), zd = se2(() => {
if (!Uo2()) return false;
let r = ia$1(), u = w3(), m = $2(), C2 = Tt2(), k2 = T$1(), R3 = !!M2(), ae2 = ue2(), le2 = y2();
return !r || u || ae2 && !le2 ? false : m ? true : C2 && !k2 && R3;
}), aa2 = se2(() => {
s.viewportVersion;
let r = s.contextMenuElement;
return r ? ze2(r) : null;
}), Kd = se2(() => (s.viewportVersion, s.contextMenuPosition)), la2 = se2(() => {
let r = s.contextMenuElement;
if (!r) return;
let u = s.frozenElements.length;
return u > 1 ? `${u} elements` : v(r) || void 0;
}), [ca] = Es2(() => ({ element: s.contextMenuElement, frozenCount: s.frozenElements.length }), async ({ element: r, frozenCount: u }) => !r || u > 1 ? void 0 : await Ui(r) ?? void 0), [da] = Es2(() => s.contextMenuElement, async (r) => {
if (!r) return null;
let u = await Ut(r);
return Gi(u);
}), Vd = (r, u, m, C2, k2) => async (R3) => {
let ae2 = k2?.fallbackBounds ?? null, le2 = k2?.fallbackSelectionBounds ?? [], _e2 = k2?.position ?? s.contextMenuPosition ?? s.pointer, xe2 = ce2(), Ve2 = aa2() ?? ae2, Je2 = u.length > 1, it2 = Je2 ? Pi(Hs(xe2)) : Ve2, Nt2 = s.wasActivatedByToggle, Xo2 = Je2 ? xe2 : Ve2 ? [Ve2] : le2;
if (d2.hideContextMenu(), it2) {
let Et2 = Je2 ? it2.x + it2.width / 2 : _e2.x, Yt2 = Pn2(it2, m || "element", C2, "copying", { element: r, mouseX: Et2, elements: Je2 ? u : void 0, boundsMultiple: Xo2 }), hn2 = false, qn2;
try {
hn2 = await R3(), hn2 || (qn2 = "Failed to copy");
} catch (_n2) {
qn2 = _n2 instanceof Error && _n2.message ? _n2.message : "Action failed";
}
d2.updateLabelInstance(Yt2, hn2 ? "copied" : "error", hn2 ? void 0 : qn2 || "Unknown error"), Kt2(Yt2);
} else try {
await R3();
} catch {
}
Nt2 ? nt2() : d2.unfreeze();
}, Ji = () => {
setTimeout(() => {
d2.hideContextMenu();
}, 0);
}, ua$1 = (r) => {
let { element: u, filePath: m, lineNumber: C2, tagName: k2, componentName: R3, position: ae2, performWithFeedbackOptions: le2, shouldDeferHideContextMenu: _e2, onBeforeCopy: xe2, onBeforePrompt: Ve2, customEnterPromptMode: Je2 } = r, it2 = s.frozenElements.length > 0 ? s.frozenElements : [u], Nt2 = _e2 ? Ji : d2.hideContextMenu, Yt2 = { element: u, elements: it2, filePath: m, lineNumber: C2, componentName: R3, tagName: k2, enterPromptMode: Je2 ?? ((qn2) => {
qn2 && d2.setSelectedAgent(qn2), d2.clearLabelInstances(), Ve2?.(), ft2(u, ae2.x, ae2.y), d2.setPointer({ x: ae2.x, y: ae2.y }), d2.setFrozenElement(u), _t2(), p$1() || jn2(), Nt2();
}), copy: () => {
xe2?.(), P3({ element: u, positionX: ae2.x, elements: it2.length > 1 ? it2 : void 0, shouldDeactivateAfter: s.wasActivatedByToggle }), Nt2();
}, hooks: { transformHtmlContent: i.hooks.transformHtmlContent, onOpenFile: i.hooks.onOpenFile, transformOpenFileUrl: i.hooks.transformOpenFileUrl }, performWithFeedback: Vd(u, it2, k2, R3, le2), hideContextMenu: Nt2, cleanup: () => {
s.wasActivatedByToggle ? nt2() : d2.unfreeze();
} }, hn2 = i.hooks.transformActionContext(Yt2);
return { ...Yt2, ...hn2 };
}, Ud = se2(() => {
let r = s.contextMenuElement;
if (!r) return;
let u = da(), m = s.contextMenuPosition ?? s.pointer;
return ua$1({ element: r, filePath: u?.filePath, lineNumber: u?.lineNumber, tagName: la2(), componentName: ca(), position: m, shouldDeferHideContextMenu: true, onBeforeCopy: () => {
vt2 = null;
}, customEnterPromptMode: (C2) => {
C2 && d2.setSelectedAgent(C2), d2.clearLabelInstances(), d2.clearInputText(), d2.enterPromptMode(m, r), Ji();
} });
}), Gd = () => {
setTimeout(() => {
d2.hideContextMenu(), nt2();
}, 0);
}, gn2 = () => {
for (let { boxId: r, labelId: u } of he2) d2.removeGrabbedBox(r), u && d2.removeLabelInstance(u);
he2 = [];
}, Wd = (r, u, m, C2) => {
if (u.length === 0) return;
let k2 = r.isComment && r.commentText;
for (let [R3, ae2] of u.entries()) {
let le2 = m[R3], _e2 = `${C2}-${r.id}-${R3}`;
d2.addGrabbedBox({ id: _e2, bounds: ae2, createdAt: 0, element: le2 });
let xe2 = null;
R3 === 0 && (xe2 = `${C2}-label-${r.id}`, d2.addLabelInstance({ id: xe2, bounds: ae2, tagName: r.tagName, componentName: r.componentName, elementsCount: r.elementsCount, status: "idle", isPromptMode: !!k2, inputValue: k2 ? r.commentText : void 0, createdAt: 0, element: le2, mouseX: ae2.x + ae2.width / 2 })), he2.push({ boxId: _e2, labelId: xe2 });
}
}, fa = (r, u) => {
let m = Ce2(r), C2 = m.map((k2) => ze2(k2));
Wd(r, C2, m, u);
}, Go2 = () => {
ne2 !== null && (q(ne2), ne2 = null);
}, Qi2 = (r) => {
Go2();
let u = () => {
r(), ne2 = D(u);
};
u();
}, jd = (r) => {
let u = r.left + r.width / 2, m = r.top + r.height / 2, C2 = m, k2 = window.innerHeight - m, R3 = u, ae2 = window.innerWidth - u, le2 = Math.min(C2, k2, R3, ae2);
return le2 === C2 ? "top" : le2 === R3 ? "left" : le2 === ae2 ? "right" : "bottom";
}, es2 = () => {
if (!z2) return null;
let r = z2.getBoundingClientRect(), u = jd(r);
return u === "left" || u === "right" ? { x: u === "left" ? r.right : r.left, y: r.top + r.height / 2, edge: u, toolbarWidth: r.width } : { x: r.left + r.width / 2, y: u === "top" ? r.bottom : r.top, edge: u, toolbarWidth: r.width };
}, Xt2 = () => {
Hr2(), po2(), Go2(), gn2(), U2(null), Me2(false);
}, ma$1 = () => {
d2.hideContextMenu(), Yn2(), jo2(), S2(Ws()), ve2(false), Qi2(() => {
let r = es2();
r && U2(r);
});
}, Wo2 = null, pn2 = null, Hr2 = () => {
Wo2 !== null && (clearTimeout(Wo2), Wo2 = null);
}, po2 = () => {
pn2 !== null && (clearTimeout(pn2), pn2 = null);
}, Yn2 = () => {
Go2(), x2(null);
}, Xd = () => {
Xt2(), Yn2(), Qi2(() => {
let r = es2();
r && j2(r);
});
}, jo2 = () => {
Go2(), j2(null);
}, ga = () => {
Xt2(), Yn2(), jo2();
}, Yd = () => {
q$1() !== null ? Yn2() : (d2.hideContextMenu(), Xt2(), jo2(), Qi2(() => {
let r = es2();
r && x2(r);
}));
}, qd = () => {
Hr2(), po2(), O2() !== null ? ie2() ? (gn2(), Me2(false)) : Xt2() : (gn2(), ma$1());
}, pa$1 = (r) => {
Gt2(r.content, { tagName: r.tagName, componentName: r.componentName ?? r.elementName, commentText: r.commentText });
let u = He2(r);
u && (d2.clearLabelInstances(), D(() => {
if (!qe2(u)) return;
let m = ze2(u), C2 = Pn2(m, r.tagName, r.componentName, "copied", { element: u, mouseX: m.x + m.width / 2 });
Kt2(C2);
}));
}, Zd = (r) => {
gn2(), w3() && (d2.exitPromptMode(), d2.clearInputText());
let u = He2(r);
if (r.isComment && r.commentText && u) {
let m = ze2(u), C2 = m.x + m.width / 2, k2 = m.y + m.height / 2;
d2.enterPromptMode({ x: C2, y: k2 }, u), d2.setInputText(r.commentText);
} else pa$1(r);
}, Jd = (r) => {
gn2(), G2.delete(r.id);
let u = js(r.id);
S2(u), u.length === 0 && (ve2(false), Xt2());
}, ha2 = () => {
gn2();
let r = V2();
if (r.length === 0) return;
let u = Ai(r.map((C2) => C2.content)), m = r[0];
Gt2(u, { componentName: m.componentName ?? m.tagName, entries: r.map((C2) => ({ tagName: C2.tagName, componentName: C2.componentName ?? C2.elementName, content: C2.content, commentText: C2.commentText })) }), Xd(), d2.clearLabelInstances(), D(() => {
Qr2(() => {
for (let C2 of r) {
let k2 = Ce2(C2);
for (let R3 of k2) {
let ae2 = ze2(R3), le2 = `label-${Date.now()}-${Math.random().toString(36).slice(2)}`;
d2.addLabelInstance({ id: le2, bounds: ae2, tagName: C2.tagName, componentName: C2.componentName, status: "copied", createdAt: Date.now(), element: R3, mouseX: ae2.x + ae2.width / 2 }), Kt2(le2);
}
}
});
});
}, Qd = (r) => {
if (gn2(), !r) return;
let u = V2().find((m) => m.id === r);
u && fa(u, "history-hover");
}, eu = (r) => {
Hr2(), gn2(), r ? (po2(), O2() === null && A2() === null && (ya$1(), Wo2 = setTimeout(() => {
Wo2 = null, Me2(true), ma$1();
}, as))) : ie2() && (pn2 = setTimeout(() => {
pn2 = null, Xt2();
}, as));
}, tu = (r) => {
r ? po2() : ie2() && (pn2 = setTimeout(() => {
pn2 = null, Xt2();
}, as));
}, ba = (r) => {
gn2(), r ? (po2(), ya$1()) : ie2() && (pn2 = setTimeout(() => {
pn2 = null, Xt2();
}, as));
}, ya$1 = () => {
for (let r of V2()) fa(r, "history-all-hover");
}, wa$1 = () => {
G2.clear();
let r = Jc();
S2(r), ve2(false), Xt2();
}, nu = (r) => {
let u = Ze2.sessions().get(r);
if (!u) return;
let m = Ze2.session.getElement(r);
m && qe2(m) && setTimeout(() => {
p$1() || (d2.setWasActivatedByToggle(true), jn2()), d2.setPointer(u.position), d2.setFrozenElement(m), d2.freeze(), d2.showContextMenu(u.position, m);
}, 0);
}, ou = (r) => {
let u = s.labelInstances.find((R3) => R3.id === r);
if (!u?.element || !qe2(u.element)) return;
let m = ze2(u.element), C2 = { x: u.mouseX ?? m.x + m.width / 2, y: m.y + m.height / 2 }, k2 = u.elements && u.elements.length > 0 ? u.elements.filter((R3) => qe2(R3)) : [u.element];
setTimeout(() => {
p$1() || (d2.setWasActivatedByToggle(true), jn2()), d2.setPointer(C2), d2.setFrozenElements(k2), k2.length > 1 && u.bounds && d2.setFrozenDragRect(Bs(u.bounds)), d2.freeze(), d2.showContextMenu(C2, u.element);
}, 0);
};
pe2(() => {
let r = i.store.theme.hue;
r !== 0 ? Yi.style.filter = `hue-rotate(${r}deg)` : Yi.style.filter = "";
}), i.store.theme.enabled && Il(() => E2(Ac, { get selectionVisible() {
return qi();
}, get selectionBounds() {
return Ne2();
}, get selectionBoundsMultiple() {
return kt2();
}, get selectionShouldSnap() {
return s.frozenElements.length > 0 || Ct2().length > 0;
}, get selectionElementsCount() {
return Le2();
}, get selectionFilePath() {
return s.selectionFilePath ?? void 0;
}, get selectionLineNumber() {
return s.selectionLineNumber ?? void 0;
}, get selectionTagName() {
return Nd();
}, get selectionComponentName() {
return Ar2();
}, get selectionLabelVisible() {
return $d();
}, selectionLabelStatus: "idle", get selectionActionCycleState() {
return vd();
}, get selectionArrowNavigationState() {
return Ed();
}, onArrowNavigationSelect: yd, get labelInstances() {
return Bd();
}, get dragVisible() {
return Zi2();
}, get dragBounds() {
return Re2();
}, get grabbedBoxes() {
return Hd();
}, labelZIndex: 2147483647, get mouseX() {
return Fe2(() => s.frozenElements.length > 1)() ? void 0 : Rt2().x;
}, get mouseY() {
return Rt2().y;
}, get crosshairVisible() {
return fo2();
}, get isFrozen() {
return y2() || p$1() || ue2();
}, get inputValue() {
return s.inputText;
}, get isPromptMode() {
return w3();
}, get hasAgent() {
return Se2();
}, get isAgentConnected() {
return s.isAgentConnected;
}, get agentSessions() {
return Ze2.sessions();
}, get supportsUndo() {
return s.supportsUndo;
}, get supportsFollowUp() {
return s.supportsFollowUp;
}, get dismissButtonText() {
return s.dismissButtonText;
}, get onDismissSession() {
return Ze2.session.dismiss;
}, get onUndoSession() {
return Ze2.session.undo;
}, onFollowUpSubmitSession: ad, onAcknowledgeSessionError: ld, get onRetrySession() {
return Ze2.session.retry;
}, onShowContextMenuSession: nu, onShowContextMenuInstance: ou, onLabelInstanceHoverChange: Wn2, get onInputChange() {
return d2.setInputText;
}, onInputSubmit: () => void Js(), onInputCancel: Rr2, onToggleExpand: sd, get isPendingDismiss() {
return g2();
}, onConfirmDismiss: od, onCancelDismiss: rd, get pendingAbortSessionId() {
return be2();
}, onRequestAbortSession: (r) => d2.setPendingAbortSessionId(r), onAbortSession: id, get theme() {
return i.store.theme;
}, get toolbarVisible() {
return i.store.theme.toolbar.enabled;
}, get isActive() {
return p$1();
}, onToggleActive: cd, get enabled() {
return I2();
}, onToggleEnabled: ud, get shakeCount() {
return Q2();
}, onToolbarStateChange: (r) => {
ye2(r), Kn2.forEach((u) => u(r));
}, onSubscribeToToolbarStateChanges: (r) => (Kn2.add(r), () => {
Kn2.delete(r);
}), onToolbarSelectHoverChange: W2, onToolbarRef: (r) => {
z2 = r;
}, get contextMenuPosition() {
return Kd();
}, get contextMenuBounds() {
return aa2();
}, get contextMenuTagName() {
return la2();
}, get contextMenuComponentName() {
return ca();
}, get contextMenuHasFilePath() {
return !!da()?.filePath;
}, get actions() {
return i.store.actions;
}, get toolbarActions() {
return i.store.toolbarActions;
}, get actionContext() {
return Ud();
}, onContextMenuDismiss: Gd, onContextMenuHide: Ji, get historyItems() {
return V2();
}, get historyDisconnectedItemIds() {
return Oe2();
}, get historyItemCount() {
return V2().length;
}, get clockFlashTrigger() {
return L2();
}, get hasUnreadHistoryItems() {
return Ee2();
}, get historyDropdownPosition() {
return O2();
}, get isHistoryPinned() {
return Fe2(() => O2() !== null)() && !ie2();
}, onToggleHistory: qd, onCopyAll: ha2, onCopyAllHover: ba, onHistoryButtonHover: eu, onHistoryItemSelect: Zd, onHistoryItemRemove: Jd, onHistoryItemCopy: pa$1, onHistoryItemHover: Qd, onHistoryCopyAll: ha2, onHistoryCopyAllHover: ba, onHistoryClear: wa$1, onHistoryDismiss: Xt2, onHistoryDropdownHover: tu, get toolbarMenuPosition() {
return q$1();
}, onToggleMenu: Yd, onToolbarMenuDismiss: Yn2, get clearPromptPosition() {
return A2();
}, onClearHistoryConfirm: () => {
jo2(), wa$1();
}, onClearHistoryCancel: jo2 }), Yi), Se2() && Ze2.session.tryResume();
let ru = async (r) => {
let u = Array.isArray(r) ? r : [r];
return u.length === 0 ? false : await Ir2(u);
}, xa$1 = () => {
let r = Vi();
r && Ze2._internal.setOptions(r);
let u = !!r?.provider;
if (d2.setHasAgentProvider(u), u && r?.provider) {
let m = r.provider;
d2.setAgentCapabilities({ supportsUndo: !!m.undo, supportsFollowUp: !!m.supportsFollowUp, dismissButtonText: m.dismissButtonText, isAgentConnected: false }), m.checkConnection && m.checkConnection().then((C2) => {
Vi()?.provider === m && d2.setAgentCapabilities({ supportsUndo: !!m.undo, supportsFollowUp: !!m.supportsFollowUp, dismissButtonText: m.dismissButtonText, isAgentConnected: C2 });
}).catch(() => {
}), Ze2.session.tryResume();
} else d2.setAgentCapabilities({ supportsUndo: false, supportsFollowUp: false, dismissButtonText: void 0, isAgentConnected: false });
}, ts2 = { activate: () => {
d2.setPendingCommentMode(false), !p$1() && I2() && Lr2();
}, deactivate: () => {
(p$1() || $2()) && nt2();
}, toggle: () => {
p$1() ? nt2() : I2() && Lr2();
}, comment: dd, isActive: () => p$1(), isEnabled: () => I2(), setEnabled: (r) => {
r !== I2() && (K(r), r || Ys());
}, getToolbarState: () => no(), setToolbarState: (r) => {
let u = no(), m = { edge: r.edge ?? u?.edge ?? "bottom", ratio: r.ratio ?? u?.ratio ?? Go, collapsed: r.collapsed ?? u?.collapsed ?? false, enabled: r.enabled ?? u?.enabled ?? true };
yr2(m), ye2(m), r.enabled !== void 0 && r.enabled !== I2() && K(r.enabled), Kn2.forEach((C2) => C2(m));
}, onToolbarStateChange: (r) => (Kn2.add(r), () => {
Kn2.delete(r);
}), dispose: () => {
Xs = false, Hr2(), po2(), Go2(), Kn2.clear(), a();
}, copyElement: ru, getSource: async (r) => {
let u = await Ut(r), m = Gi(u);
return m ? { filePath: m.filePath, lineNumber: m.lineNumber ?? null, componentName: m.componentName } : null;
}, getStackContext: Rr, getState: () => ({ isActive: p$1(), isDragging: T$1(), isCopying: $2(), isPromptMode: w3(), isCrosshairVisible: fo2() ?? false, isSelectionBoxVisible: qi() ?? false, isDragBoxVisible: Zi2() ?? false, targetElement: Z2(), dragBounds: Re2() ?? null, grabbedBoxes: s.grabbedBoxes.map((r) => ({ id: r.id, bounds: r.bounds, createdAt: r.createdAt })), labelInstances: s.labelInstances.map((r) => ({ id: r.id, status: r.status, tagName: r.tagName, componentName: r.componentName, createdAt: r.createdAt })), selectionFilePath: s.selectionFilePath, toolbarState: te2() }), setOptions: (r) => {
i.setOptions(r);
}, registerPlugin: (r) => {
i.register(r, ts2), xa$1();
}, unregisterPlugin: (r) => {
i.unregister(r), xa$1();
}, getPlugins: () => i.getPluginNames(), getDisplayName: zi };
for (let r of jg) i.register(r, ts2);
return setTimeout(() => {
ie(true);
}, bs), ts2;
});
};
// ../../../node_modules/.pnpm/react-grab@0.1.27_@types+react@18.3.27_react@19.2.4/node_modules/react-grab/dist/index.js
var n = null;
var l = () => typeof window > "u" ? n : window.__REACT_GRAB__ ?? n ?? null;
var R2 = (e) => {
n = e, typeof window < "u" && (e ? window.__REACT_GRAB__ = e : delete window.__REACT_GRAB__);
};
var o = [];
var p = (e) => {
for (; o.length > 0; ) {
let t = o.shift();
t && e.registerPlugin(t);
}
};
var P2 = (e) => {
let t = l();
if (t) {
t.registerPlugin(e);
return;
}
o.push(e);
};
var w2 = (e) => {
let t = l();
if (t) {
t.unregisterPlugin(e);
return;
}
let r = o.findIndex((a) => a.name === e);
r !== -1 && o.splice(r, 1);
};
typeof window < "u" && !window.__REACT_GRAB_DISABLED__ && (window.__REACT_GRAB__ ? n = window.__REACT_GRAB__ : (n = YC(), window.__REACT_GRAB__ = n), p(n), window.dispatchEvent(new CustomEvent("react-grab:init", { detail: n })));
export {
ro as DEFAULT_THEME,
Wc as commentPlugin,
Bi as formatElementInfo,
vr2 as generateSnippet,
l as getGlobalApi,
Ut as getStack,
YC as init,
R as isInstrumentationActive,
jc as openPlugin,
P2 as registerPlugin,
R2 as setGlobalApi,
w2 as unregisterPlugin
};
//# sourceMappingURL=react-grab.js.map