makethisbetter 1.28.2 → 1.28.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/makethisbetter.cjs +8 -8
- package/dist/makethisbetter.cjs.map +1 -1
- package/dist/makethisbetter.esm.js +77 -75
- package/dist/makethisbetter.esm.js.map +1 -1
- package/dist/makethisbetter.js +1 -1
- package/dist/makethisbetter.js.map +1 -1
- package/dist/makethisbetter.standalone.js +3 -1
- package/dist/makethisbetter.standalone.js.map +1 -1
- package/dist/screenshot/capture.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/screenshot/capture.ts +6 -0
|
@@ -230,8 +230,8 @@ class He {
|
|
|
230
230
|
constructor(t, e, r, n, s = "right", o = !0) {
|
|
231
231
|
this.currentMode = "markup", this.handlePointerMove = (a) => {
|
|
232
232
|
if (a.pointerType !== "mouse") return;
|
|
233
|
-
const
|
|
234
|
-
this.hintBarEl.classList.toggle("mtb-hint-bar--under-pointer",
|
|
233
|
+
const c = this.hintBarEl.getBoundingClientRect(), l = a.clientX >= c.left && a.clientX <= c.right && a.clientY >= c.top && a.clientY <= c.bottom;
|
|
234
|
+
this.hintBarEl.classList.toggle("mtb-hint-bar--under-pointer", l);
|
|
235
235
|
}, this.touchHintDismissListening = !1, this.dismissTouchHint = () => {
|
|
236
236
|
this.hintBarEl.classList.add("mtb-hint-bar--dismissed"), this.stopTouchHintDismissListening();
|
|
237
237
|
}, this.messages = e, this.touch = S(), this.hintBarEl = t.el("div", "mtb-hint-bar"), this.hintBarEl.innerHTML = `<span class="mtb-toolbar-hint">${d(this.idleHint())}</span>`, this.touch && !o && this.hintBarEl.classList.add("mtb-hint-bar--dismissed"), this.el = t.el("div", "mtb-toolbar"), s === "left" && this.el.classList.add("left"), this.el.innerHTML = this.buildHTML(e), t.append(this.hintBarEl, this.el), this.host = t.host, this.host.setAttribute("data-mtb-toolbar", ""), this.hintTextEl = this.hintBarEl.querySelector(".mtb-toolbar-hint"), this.markupBtn = this.el.querySelector(".mtb-toolbar-mode-markup"), this.recordBtn = this.el.querySelector(".mtb-toolbar-mode-record"), this.markupBtn.addEventListener("click", () => {
|
|
@@ -646,12 +646,12 @@ class Ge {
|
|
|
646
646
|
if (!t) return null;
|
|
647
647
|
const e = this.drawLayer.viewportDrift(), r = V(t.x - e.x, t.y - e.y);
|
|
648
648
|
if (!r) return t;
|
|
649
|
-
const n = r.getBoundingClientRect(), s = Pt(r), o = s.x - (t.captureOffsetX ?? 0), a = s.y - (t.captureOffsetY ?? 0),
|
|
649
|
+
const n = r.getBoundingClientRect(), s = Pt(r), o = s.x - (t.captureOffsetX ?? 0), a = s.y - (t.captureOffsetY ?? 0), c = Dt(r);
|
|
650
650
|
return {
|
|
651
651
|
...t,
|
|
652
|
-
targetSelector:
|
|
653
|
-
targetText:
|
|
654
|
-
targetName:
|
|
652
|
+
targetSelector: c.selector,
|
|
653
|
+
targetText: c.text,
|
|
654
|
+
targetName: c.name,
|
|
655
655
|
targetRect: {
|
|
656
656
|
top: n.top + a,
|
|
657
657
|
left: n.left + o,
|
|
@@ -793,10 +793,10 @@ const ni = [
|
|
|
793
793
|
function ie(i) {
|
|
794
794
|
const t = document.activeElement instanceof HTMLElement ? document.activeElement : null, e = (r) => {
|
|
795
795
|
if (r.key !== "Tab") return;
|
|
796
|
-
const n = Array.from(i.querySelectorAll(ni)).filter((
|
|
796
|
+
const n = Array.from(i.querySelectorAll(ni)).filter((l) => !l.hidden);
|
|
797
797
|
if (n.length === 0) return;
|
|
798
|
-
const s = n[0], o = n[n.length - 1],
|
|
799
|
-
r.shiftKey ? (
|
|
798
|
+
const s = n[0], o = n[n.length - 1], c = i.getRootNode().activeElement ?? document.activeElement;
|
|
799
|
+
r.shiftKey ? (c === s || !i.contains(c)) && (r.preventDefault(), o.focus({ preventScroll: !0 })) : (c === o || !i.contains(c)) && (r.preventDefault(), s.focus({ preventScroll: !0 }));
|
|
800
800
|
};
|
|
801
801
|
return i.addEventListener("keydown", e), {
|
|
802
802
|
release() {
|
|
@@ -995,10 +995,10 @@ class ct {
|
|
|
995
995
|
o.className = "mtb-chat-email-input", o.type = "email", o.placeholder = e.email_cta, s.appendChild(o);
|
|
996
996
|
const a = document.createElement("button");
|
|
997
997
|
a.className = "mtb-chat-email-submit", a.type = "button", a.textContent = e.notify, a.disabled = !0;
|
|
998
|
-
const
|
|
999
|
-
const
|
|
1000
|
-
if (!
|
|
1001
|
-
if (a.disabled = !0, o.disabled = !0, await t.onSubmit(
|
|
998
|
+
const c = async () => {
|
|
999
|
+
const l = o.value.trim();
|
|
1000
|
+
if (!l) return;
|
|
1001
|
+
if (a.disabled = !0, o.disabled = !0, await t.onSubmit(l)) {
|
|
1002
1002
|
const b = document.createElement("div");
|
|
1003
1003
|
b.className = "mtb-chat-email-note", b.textContent = e.email_saved, r.replaceChildren(b), this.autoCloseTimer = setTimeout(() => this.destroy(), Mt);
|
|
1004
1004
|
return;
|
|
@@ -1009,9 +1009,9 @@ class ct {
|
|
|
1009
1009
|
};
|
|
1010
1010
|
return o.addEventListener("input", () => {
|
|
1011
1011
|
a.disabled = !o.value.trim();
|
|
1012
|
-
}), o.addEventListener("keydown", (
|
|
1013
|
-
|
|
1014
|
-
}), a.addEventListener("click", () => void
|
|
1012
|
+
}), o.addEventListener("keydown", (l) => {
|
|
1013
|
+
l.key === "Enter" && o.value.trim() && c();
|
|
1014
|
+
}), a.addEventListener("click", () => void c()), n.appendChild(s), n.appendChild(a), r.appendChild(n), r;
|
|
1015
1015
|
}
|
|
1016
1016
|
appendUserBubble(t) {
|
|
1017
1017
|
const e = document.createElement("div");
|
|
@@ -1084,10 +1084,10 @@ class ct {
|
|
|
1084
1084
|
this.inputEl.disabled = t, this.sendBtn.disabled = t, this.composerEl.classList.toggle("mtb-chat-composer-disabled", t);
|
|
1085
1085
|
}
|
|
1086
1086
|
positionCard(t, e, r, n) {
|
|
1087
|
-
const s = ii(n), { vw: o, vh: a, minLeft:
|
|
1087
|
+
const s = ii(n), { vw: o, vh: a, minLeft: c, maxRight: l } = s, h = J, u = 8, b = ri(si, s), g = (this.el.offsetHeight || 280) + 80;
|
|
1088
1088
|
let f, m;
|
|
1089
1089
|
const at = r && r.width < o * 0.6 && r.height < a * 0.6;
|
|
1090
|
-
r && at ? (f = r.left, m = r.bottom + u, m + g > a - h && (m = r.top - g - u), m < h && (m = Math.min(r.bottom + u, a - g - h))) : (f = t + 12, m = e + 12), f + b >
|
|
1090
|
+
r && at ? (f = r.left, m = r.bottom + u, m + g > a - h && (m = r.top - g - u), m < h && (m = Math.min(r.bottom + u, a - g - h))) : (f = t + 12, m = e + 12), f + b > l && (f = l - b), f < c && (f = c), m < h && (m = h), m + g > a - h && (m = a - g - h), m < h && (m = h), this.el.style.left = `${f}px`, this.el.style.top = `${m}px`, this.el.style.maxHeight = `${a - m - h}px`;
|
|
1091
1091
|
}
|
|
1092
1092
|
submit(t) {
|
|
1093
1093
|
this.sendMessage(t);
|
|
@@ -1107,10 +1107,10 @@ class mi {
|
|
|
1107
1107
|
this.el = t.el("div", "mtb-chat mtb-chat-receipt"), this.el.setAttribute("role", "dialog"), this.el.setAttribute("aria-modal", "true"), this.el.setAttribute("aria-label", o);
|
|
1108
1108
|
const a = document.createElement("div");
|
|
1109
1109
|
a.className = "mtb-chat-success mtb-chat-success-simple";
|
|
1110
|
-
const l = document.createElement("div");
|
|
1111
|
-
l.className = "mtb-chat-success-icon", l.innerHTML = ui, a.appendChild(l);
|
|
1112
1110
|
const c = document.createElement("div");
|
|
1113
|
-
|
|
1111
|
+
c.className = "mtb-chat-success-icon", c.innerHTML = ui, a.appendChild(c);
|
|
1112
|
+
const l = document.createElement("div");
|
|
1113
|
+
if (l.className = "mtb-chat-success-title", l.textContent = o, a.appendChild(l), n?.onViewFeedback) {
|
|
1114
1114
|
const h = document.createElement("a");
|
|
1115
1115
|
h.className = "mtb-chat-success-link", h.href = "#", h.textContent = s.track_feedback, h.addEventListener("click", (u) => {
|
|
1116
1116
|
u.preventDefault(), n.onViewFeedback();
|
|
@@ -1264,7 +1264,9 @@ const Ai = 200, Li = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAA
|
|
|
1264
1264
|
async function Pi(i, t) {
|
|
1265
1265
|
try {
|
|
1266
1266
|
if (t?.aborted) return null;
|
|
1267
|
-
const [{ toJpeg: e }, r] = await Promise.all([he(), St()])
|
|
1267
|
+
const [{ toJpeg: e }, r] = await Promise.all([he(), St()]);
|
|
1268
|
+
if (await new Promise((l) => setTimeout(l, 0)), t?.aborted) return null;
|
|
1269
|
+
const n = document.body.getBoundingClientRect(), s = Oe(), o = { x: window.scrollX, y: window.scrollY }, a = Ni(document.body), c = await e(document.body, {
|
|
1268
1270
|
quality: 0.85,
|
|
1269
1271
|
imagePlaceholder: Li,
|
|
1270
1272
|
resourceUrlResolver: i,
|
|
@@ -1283,14 +1285,14 @@ async function Pi(i, t) {
|
|
|
1283
1285
|
transform: `translate(${n.left}px, ${n.top}px)`,
|
|
1284
1286
|
transformOrigin: "top left"
|
|
1285
1287
|
},
|
|
1286
|
-
filter: (
|
|
1287
|
-
if (
|
|
1288
|
-
if (!(
|
|
1289
|
-
const h =
|
|
1288
|
+
filter: (l) => {
|
|
1289
|
+
if (l instanceof HTMLElement && l.id === w) return !1;
|
|
1290
|
+
if (!(l instanceof Element)) return !0;
|
|
1291
|
+
const h = l.getBoundingClientRect();
|
|
1290
1292
|
return h.width === 0 && h.height === 0 ? !0 : h.top + window.scrollY - o.y <= s.height + Ai;
|
|
1291
1293
|
}
|
|
1292
1294
|
});
|
|
1293
|
-
return t?.aborted ? null : { dataUrl:
|
|
1295
|
+
return t?.aborted ? null : { dataUrl: c, metrics: s, redactions: a, pageScroll: o };
|
|
1294
1296
|
} catch {
|
|
1295
1297
|
return null;
|
|
1296
1298
|
}
|
|
@@ -1341,17 +1343,17 @@ async function Hi(i, t, e, r, n) {
|
|
|
1341
1343
|
const a = await Ci(i);
|
|
1342
1344
|
if (!a) return null;
|
|
1343
1345
|
s.width = a.naturalWidth || window.innerWidth, s.height = a.naturalHeight || window.innerHeight, o.drawImage(a, 0, 0);
|
|
1344
|
-
const
|
|
1346
|
+
const c = Be(e, s.width, s.height);
|
|
1345
1347
|
o.fillStyle = "#e5e7eb";
|
|
1346
|
-
for (const
|
|
1347
|
-
const h = ze(
|
|
1348
|
+
for (const l of r) {
|
|
1349
|
+
const h = ze(c, l);
|
|
1348
1350
|
o.fillRect(h.left, h.top, h.width, h.height);
|
|
1349
1351
|
}
|
|
1350
|
-
for (const
|
|
1351
|
-
|
|
1352
|
+
for (const l of t)
|
|
1353
|
+
l.type === "draw" && l.drawPath ? Bi(o, l.drawPath, c, n?.primary) : l.type === "pin" && Oi(
|
|
1352
1354
|
o,
|
|
1353
|
-
G(
|
|
1354
|
-
Z(
|
|
1355
|
+
G(c, l.x),
|
|
1356
|
+
Z(c, l.y),
|
|
1355
1357
|
n
|
|
1356
1358
|
);
|
|
1357
1359
|
return Ui(s);
|
|
@@ -1362,18 +1364,18 @@ function Ni(i) {
|
|
|
1362
1364
|
ut(t, s.getBoundingClientRect(), Rt(s));
|
|
1363
1365
|
for (const s of i.querySelectorAll("input, textarea, select")) {
|
|
1364
1366
|
if (It(s)) continue;
|
|
1365
|
-
const o = s instanceof HTMLInputElement || s instanceof HTMLTextAreaElement || s instanceof HTMLSelectElement ? s.value : "", a = s.closest(`.${O}`) !== null,
|
|
1366
|
-
!a && !
|
|
1367
|
+
const o = s instanceof HTMLInputElement || s instanceof HTMLTextAreaElement || s instanceof HTMLSelectElement ? s.value : "", a = s.closest(`.${O}`) !== null, c = se(s) || tt(o, s) !== o;
|
|
1368
|
+
!a && !c || ut(t, s.getBoundingClientRect(), Rt(s), Nt);
|
|
1367
1369
|
}
|
|
1368
1370
|
const e = document.createTreeWalker(i, NodeFilter.SHOW_TEXT), r = oe();
|
|
1369
1371
|
let n = e.nextNode();
|
|
1370
1372
|
for (; n; ) {
|
|
1371
|
-
const s = n.parentElement, o = n.textContent ?? "", a = s?.closest(`.${O}`) !== null,
|
|
1372
|
-
if (s && !It(s) && (a ||
|
|
1373
|
-
const
|
|
1373
|
+
const s = n.parentElement, o = n.textContent ?? "", a = s?.closest(`.${O}`) !== null, c = C(o) !== o || ae(n, r);
|
|
1374
|
+
if (s && !It(s) && (a || c)) {
|
|
1375
|
+
const l = $(s), h = document.createRange();
|
|
1374
1376
|
h.selectNodeContents(n);
|
|
1375
1377
|
for (const u of Array.from(h.getClientRects()))
|
|
1376
|
-
ut(t, u,
|
|
1378
|
+
ut(t, u, l, Nt);
|
|
1377
1379
|
}
|
|
1378
1380
|
n = e.nextNode();
|
|
1379
1381
|
}
|
|
@@ -1914,7 +1916,7 @@ class yr {
|
|
|
1914
1916
|
try {
|
|
1915
1917
|
const o = new URL(r, window.location.href);
|
|
1916
1918
|
if (!["http:", "https:"].includes(o.protocol) || o.origin === window.location.origin) return;
|
|
1917
|
-
const a = await this.submissionHeaders(e, "application/json"),
|
|
1919
|
+
const a = await this.submissionHeaders(e, "application/json"), l = await (await this.fetchWithRetry(
|
|
1918
1920
|
`${this.apiUrl}/widget/feedback_submission_sessions/${t}/image_proxy_url`,
|
|
1919
1921
|
{
|
|
1920
1922
|
method: "POST",
|
|
@@ -1923,7 +1925,7 @@ class yr {
|
|
|
1923
1925
|
signal: s
|
|
1924
1926
|
}
|
|
1925
1927
|
)).json();
|
|
1926
|
-
return typeof
|
|
1928
|
+
return typeof l.url == "string" ? l.url : void 0;
|
|
1927
1929
|
} catch {
|
|
1928
1930
|
return;
|
|
1929
1931
|
}
|
|
@@ -1939,12 +1941,12 @@ class yr {
|
|
|
1939
1941
|
async createSubmissionSession(t, e) {
|
|
1940
1942
|
const r = Er(), n = new FormData();
|
|
1941
1943
|
if (n.append("feedback[description]", t.description), n.append("feedback[page_url]", t.page_url), n.append("feedback[user_agent]", t.user_agent), n.append("feedback[browser]", t.browser), n.append("feedback[os]", t.os), n.append("feedback[screen_width]", String(t.screen_width)), n.append("feedback[screen_height]", String(t.screen_height)), n.append("feedback[console_errors]", JSON.stringify(t.console_errors)), n.append("feedback[annotations]", JSON.stringify(t.annotations)), t.target_element && n.append("feedback[target_element]", JSON.stringify(t.target_element)), t.user_id && n.append("feedback[user_id]", t.user_id), t.reporter_external_id && n.append("feedback[reporter_external_id]", t.reporter_external_id), t.reporter_email && n.append("feedback[reporter_email]", t.reporter_email), t.user_email && n.append("feedback[user_email]", t.user_email), t.user_name && n.append("feedback[user_name]", t.user_name), t.breadcrumbs && t.breadcrumbs.length > 0 && n.append("feedback[breadcrumbs]", JSON.stringify(t.breadcrumbs)), t.recording_events && t.recording_events.length > 0) {
|
|
1942
|
-
const
|
|
1943
|
-
n.append("feedback[recording]",
|
|
1944
|
+
const c = JSON.stringify(t.recording_events), l = new Blob([c], { type: "application/json" });
|
|
1945
|
+
n.append("feedback[recording]", l, "interaction-replay.json"), n.append("feedback[recording_duration]", String(t.recording_duration ?? 0));
|
|
1944
1946
|
}
|
|
1945
1947
|
if (e) {
|
|
1946
|
-
const
|
|
1947
|
-
n.append("feedback[screenshot]", e, `screenshot.${
|
|
1948
|
+
const c = e.type === "image/jpeg" ? "jpg" : "png";
|
|
1949
|
+
n.append("feedback[screenshot]", e, `screenshot.${c}`);
|
|
1948
1950
|
}
|
|
1949
1951
|
const s = await this.authHeaders();
|
|
1950
1952
|
return s["X-Submission-Token"] = r, s["X-MTB-Capture-Policy"] = wr, s["X-Idempotency-Key"] = kr(), { ...(await (await this.fetchWithRetry(`${this.apiUrl}/widget/feedback_submission_sessions`, {
|
|
@@ -2063,11 +2065,11 @@ async function xr(i, t) {
|
|
|
2063
2065
|
const e = i.getReader(), r = new TextDecoder();
|
|
2064
2066
|
let n = "", s = null;
|
|
2065
2067
|
const o = (a) => {
|
|
2066
|
-
const
|
|
2067
|
-
`).find((b) => b.startsWith("event:")),
|
|
2068
|
+
const c = a.split(`
|
|
2069
|
+
`).find((b) => b.startsWith("event:")), l = a.split(`
|
|
2068
2070
|
`).find((b) => b.startsWith("data:"));
|
|
2069
|
-
if (!
|
|
2070
|
-
const h =
|
|
2071
|
+
if (!l) return;
|
|
2072
|
+
const h = c?.slice(6).trim(), u = JSON.parse(l.slice(5).trim());
|
|
2071
2073
|
h === "delta" && typeof u.text == "string" ? t(u.text) : h === "done" && (s = {
|
|
2072
2074
|
messages: Array.isArray(u.messages) ? u.messages : [],
|
|
2073
2075
|
suggestions: Array.isArray(u.suggestions) ? u.suggestions.filter((b) => typeof b == "string") : [],
|
|
@@ -2076,15 +2078,15 @@ async function xr(i, t) {
|
|
|
2076
2078
|
});
|
|
2077
2079
|
};
|
|
2078
2080
|
for (; ; ) {
|
|
2079
|
-
const { done: a, value:
|
|
2081
|
+
const { done: a, value: c } = await e.read();
|
|
2080
2082
|
if (a) break;
|
|
2081
|
-
n += r.decode(
|
|
2082
|
-
let
|
|
2083
|
-
for (; (
|
|
2083
|
+
n += r.decode(c, { stream: !0 });
|
|
2084
|
+
let l;
|
|
2085
|
+
for (; (l = n.indexOf(`
|
|
2084
2086
|
|
|
2085
2087
|
`)) !== -1; ) {
|
|
2086
|
-
const h = n.slice(0,
|
|
2087
|
-
n = n.slice(
|
|
2088
|
+
const h = n.slice(0, l);
|
|
2089
|
+
n = n.slice(l + 2);
|
|
2088
2090
|
try {
|
|
2089
2091
|
o(h);
|
|
2090
2092
|
} catch {
|
|
@@ -2827,8 +2829,8 @@ function yt(i, t, e) {
|
|
|
2827
2829
|
if (o instanceof Element) {
|
|
2828
2830
|
if (typeof i.text == "string" && (i.text = tt(i.text, o)), r)
|
|
2829
2831
|
for (const a of jt) {
|
|
2830
|
-
const
|
|
2831
|
-
typeof
|
|
2832
|
+
const c = r[a];
|
|
2833
|
+
typeof c == "string" && (r[a] = tt(c, o));
|
|
2832
2834
|
}
|
|
2833
2835
|
} else o?.nodeType === Node.TEXT_NODE && ae(o, e) && (typeof i.textContent == "string" && (i.textContent = p), typeof i.value == "string" && (i.value = p));
|
|
2834
2836
|
Object.values(i).forEach((a) => yt(a, t, e));
|
|
@@ -2973,7 +2975,7 @@ function Yr() {
|
|
|
2973
2975
|
return /Windows NT 10/.test(i) ? "Windows 10/11" : /Windows NT/.test(i) ? "Windows" : /Mac OS X 10_15|macOS 1[56789]/.test(i) || /Mac OS X/.test(i) ? "macOS" : /Android/.test(i) ? `Android ${i.match(/Android (\d+)/)?.[1] ?? ""}` : /iPhone|iPad|iPod/.test(i) ? "iOS" : /Linux/.test(i) ? "Linux" : "Unknown";
|
|
2974
2976
|
}
|
|
2975
2977
|
function Vr(i) {
|
|
2976
|
-
const { description: t, pageContext: e, consoleErrors: r, annotation: n, user: s, recording: o, anonId: a, anonEmail:
|
|
2978
|
+
const { description: t, pageContext: e, consoleErrors: r, annotation: n, user: s, recording: o, anonId: a, anonEmail: c, breadcrumbs: l } = i;
|
|
2977
2979
|
return {
|
|
2978
2980
|
...Q({
|
|
2979
2981
|
description: t,
|
|
@@ -2988,7 +2990,7 @@ function Vr(i) {
|
|
|
2988
2990
|
} : void 0,
|
|
2989
2991
|
recording_events: o?.events,
|
|
2990
2992
|
recording_duration: o?.duration,
|
|
2991
|
-
breadcrumbs:
|
|
2993
|
+
breadcrumbs: l
|
|
2992
2994
|
}),
|
|
2993
2995
|
user_id: s?.id,
|
|
2994
2996
|
user_email: s?.email,
|
|
@@ -2997,7 +2999,7 @@ function Vr(i) {
|
|
|
2997
2999
|
// for who the reporter is, so attaching the stored anon id/email would tie
|
|
2998
3000
|
// that account to a stranger's earlier anonymous submissions.
|
|
2999
3001
|
reporter_external_id: s ? void 0 : a,
|
|
3000
|
-
reporter_email: s ? void 0 :
|
|
3002
|
+
reporter_email: s ? void 0 : c
|
|
3001
3003
|
};
|
|
3002
3004
|
}
|
|
3003
3005
|
const Xr = 300, Kr = 5e3;
|
|
@@ -3065,10 +3067,10 @@ class Gr {
|
|
|
3065
3067
|
} catch {
|
|
3066
3068
|
return null;
|
|
3067
3069
|
}
|
|
3068
|
-
let
|
|
3070
|
+
let c = null;
|
|
3069
3071
|
if (this.screenshotEnabled) {
|
|
3070
3072
|
const h = new AbortController();
|
|
3071
|
-
|
|
3073
|
+
c = h, this.screenshotAbortController?.abort(), this.screenshotAbortController = h;
|
|
3072
3074
|
const b = (async () => {
|
|
3073
3075
|
try {
|
|
3074
3076
|
const g = await Pi(async (at, ke) => {
|
|
@@ -3095,16 +3097,16 @@ class Gr {
|
|
|
3095
3097
|
});
|
|
3096
3098
|
this.pendingScreenshotTask = b;
|
|
3097
3099
|
}
|
|
3098
|
-
let
|
|
3100
|
+
let l;
|
|
3099
3101
|
try {
|
|
3100
|
-
if (
|
|
3101
|
-
return
|
|
3102
|
+
if (l = await a, n !== this.submissionAttempt)
|
|
3103
|
+
return c?.abort(), await this.deps.apiClient.abandonSubmissionSession(l.id, l.token).catch(() => {
|
|
3102
3104
|
}), null;
|
|
3103
|
-
this.activeSubmission =
|
|
3105
|
+
this.activeSubmission = l;
|
|
3104
3106
|
} catch {
|
|
3105
|
-
return
|
|
3107
|
+
return c?.abort(), null;
|
|
3106
3108
|
}
|
|
3107
|
-
return
|
|
3109
|
+
return l;
|
|
3108
3110
|
}
|
|
3109
3111
|
async finalize() {
|
|
3110
3112
|
const t = this.submissionAttempt;
|
|
@@ -3571,13 +3573,13 @@ class tn {
|
|
|
3571
3573
|
targetRect: n,
|
|
3572
3574
|
messages: this.messages,
|
|
3573
3575
|
position: this.config.position ?? "right",
|
|
3574
|
-
onSubmit: async (
|
|
3576
|
+
onSubmit: async (c) => {
|
|
3575
3577
|
this.currentAnnotation = o ?? this.currentAnnotation;
|
|
3576
|
-
const
|
|
3577
|
-
return
|
|
3578
|
+
const l = await this.lifecycle.start(c, this.currentAnnotation, a);
|
|
3579
|
+
return l?.board_url && L(l.board_url), l;
|
|
3578
3580
|
},
|
|
3579
|
-
onClarify: async (
|
|
3580
|
-
onAnswer: (
|
|
3581
|
+
onClarify: async (c, l, h, u) => this.apiClient.streamClarification(c, l, h, u),
|
|
3582
|
+
onAnswer: (c, l, h) => this.apiClient.answerClarification(c, l, h),
|
|
3581
3583
|
// The chat card turns into a receipt at this point: the pin, the scrim
|
|
3582
3584
|
// and the scroll lock have nothing left to hold. A finalization failure
|
|
3583
3585
|
// remains in this card as a retryable receipt state.
|
|
@@ -3588,7 +3590,7 @@ class tn {
|
|
|
3588
3590
|
resolveBoardLink: () => this.buildViewFeedbackHandler() ?? this.buildMyFeedbackHandler(),
|
|
3589
3591
|
resolveEmailCapture: () => this.buildEmailCapture(),
|
|
3590
3592
|
...s ? { recordingSeconds: s.duration } : {
|
|
3591
|
-
onScreenshotToggle: (
|
|
3593
|
+
onScreenshotToggle: (c) => this.lifecycle.setScreenshotEnabled(c),
|
|
3592
3594
|
screenshotEnabled: this.lifecycle.isScreenshotEnabled()
|
|
3593
3595
|
}
|
|
3594
3596
|
}), this.engageScrollLock(), this.lifecycle.warmScreenshotDeps();
|