@impakers/debug 1.4.3 → 1.4.5
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/react.js +171 -114
- package/dist/react.js.map +1 -1
- package/dist/react.mjs +171 -114
- package/dist/react.mjs.map +1 -1
- package/package.json +1 -1
package/dist/react.js
CHANGED
|
@@ -1484,15 +1484,20 @@ function probeComponentSource(fiber) {
|
|
|
1484
1484
|
return result;
|
|
1485
1485
|
}
|
|
1486
1486
|
function probeSourceWalk(fiber, maxDepth = 15) {
|
|
1487
|
+
const results = [];
|
|
1488
|
+
const seenFileNames = /* @__PURE__ */ new Set();
|
|
1487
1489
|
let current = fiber;
|
|
1488
1490
|
let depth = 0;
|
|
1489
1491
|
while (current && depth < maxDepth) {
|
|
1490
1492
|
const source = probeComponentSource(current);
|
|
1491
|
-
if (source
|
|
1493
|
+
if (source && !seenFileNames.has(source.fileName)) {
|
|
1494
|
+
seenFileNames.add(source.fileName);
|
|
1495
|
+
results.push(source);
|
|
1496
|
+
}
|
|
1492
1497
|
current = current.return;
|
|
1493
1498
|
depth++;
|
|
1494
1499
|
}
|
|
1495
|
-
return
|
|
1500
|
+
return results;
|
|
1496
1501
|
}
|
|
1497
1502
|
function getSourceLocation(element) {
|
|
1498
1503
|
const fiber = getFiberFromElement2(element);
|
|
@@ -1521,9 +1526,15 @@ function getSourceLocation(element) {
|
|
|
1521
1526
|
isProduction: false
|
|
1522
1527
|
};
|
|
1523
1528
|
}
|
|
1524
|
-
const
|
|
1525
|
-
if (
|
|
1526
|
-
return {
|
|
1529
|
+
const probedList = probeSourceWalk(fiber);
|
|
1530
|
+
if (probedList.length > 0) {
|
|
1531
|
+
return {
|
|
1532
|
+
found: true,
|
|
1533
|
+
source: probedList[0],
|
|
1534
|
+
sourceCandidates: probedList,
|
|
1535
|
+
isReactApp: true,
|
|
1536
|
+
isProduction: false
|
|
1537
|
+
};
|
|
1527
1538
|
}
|
|
1528
1539
|
return {
|
|
1529
1540
|
found: false,
|
|
@@ -1557,6 +1568,89 @@ function findNearestComponentSource(element, maxAncestors = 10) {
|
|
|
1557
1568
|
return getSourceLocation(element);
|
|
1558
1569
|
}
|
|
1559
1570
|
|
|
1571
|
+
// src/utils/capture-element.ts
|
|
1572
|
+
async function captureElement(el, options = {}) {
|
|
1573
|
+
const { quality = 0.7, maxScale = 2 } = options;
|
|
1574
|
+
const rect = el.getBoundingClientRect();
|
|
1575
|
+
const scale = Math.min(window.devicePixelRatio, maxScale);
|
|
1576
|
+
const canvas = document.createElement("canvas");
|
|
1577
|
+
canvas.width = rect.width * scale;
|
|
1578
|
+
canvas.height = rect.height * scale;
|
|
1579
|
+
const ctx = canvas.getContext("2d");
|
|
1580
|
+
ctx.scale(scale, scale);
|
|
1581
|
+
const clone = el.cloneNode(true);
|
|
1582
|
+
inlineComputedStyles(el, clone);
|
|
1583
|
+
clone.style.margin = "0";
|
|
1584
|
+
clone.style.position = "static";
|
|
1585
|
+
const serializer = new XMLSerializer();
|
|
1586
|
+
const html = serializer.serializeToString(clone);
|
|
1587
|
+
const svg = `<svg xmlns="http://www.w3.org/2000/svg" width="${rect.width}" height="${rect.height}">
|
|
1588
|
+
<foreignObject width="100%" height="100%">
|
|
1589
|
+
<div xmlns="http://www.w3.org/1999/xhtml" style="width:${rect.width}px;height:${rect.height}px;overflow:hidden">${html}</div>
|
|
1590
|
+
</foreignObject>
|
|
1591
|
+
</svg>`;
|
|
1592
|
+
const blob = new Blob([svg], { type: "image/svg+xml;charset=utf-8" });
|
|
1593
|
+
const url = URL.createObjectURL(blob);
|
|
1594
|
+
try {
|
|
1595
|
+
const img = await loadImage(url);
|
|
1596
|
+
ctx.drawImage(img, 0, 0, rect.width, rect.height);
|
|
1597
|
+
return canvas.toDataURL("image/jpeg", quality);
|
|
1598
|
+
} finally {
|
|
1599
|
+
URL.revokeObjectURL(url);
|
|
1600
|
+
}
|
|
1601
|
+
}
|
|
1602
|
+
async function captureFullPage(options = {}) {
|
|
1603
|
+
const { quality = 0.5, hideSelectors = [] } = options;
|
|
1604
|
+
const defaultSelectors = ["[data-impakers-debug]", "[data-annotation-popup]", "[data-annotation-marker]"];
|
|
1605
|
+
const allSelectors = [...defaultSelectors, ...hideSelectors];
|
|
1606
|
+
const hiddenEls = document.querySelectorAll(allSelectors.join(", "));
|
|
1607
|
+
try {
|
|
1608
|
+
hiddenEls.forEach((el) => el.style.visibility = "hidden");
|
|
1609
|
+
const html2canvas = (await import("html2canvas")).default;
|
|
1610
|
+
const canvas = await html2canvas(document.body, {
|
|
1611
|
+
useCORS: true,
|
|
1612
|
+
allowTaint: true,
|
|
1613
|
+
scale: 1,
|
|
1614
|
+
logging: false,
|
|
1615
|
+
width: window.innerWidth,
|
|
1616
|
+
height: window.innerHeight,
|
|
1617
|
+
onclone: (clonedDoc) => {
|
|
1618
|
+
const unsupported = /oklab|oklch|color-mix/i;
|
|
1619
|
+
clonedDoc.querySelectorAll("style").forEach((styleEl) => {
|
|
1620
|
+
if (unsupported.test(styleEl.textContent || "")) {
|
|
1621
|
+
styleEl.textContent = (styleEl.textContent || "").replace(
|
|
1622
|
+
/[^{};\n]+:\s*[^;{}]*(?:oklab|oklch|color-mix|lch|lab)\([^)]*(?:\([^)]*\))*[^)]*\)[^;{}]*/gi,
|
|
1623
|
+
""
|
|
1624
|
+
);
|
|
1625
|
+
}
|
|
1626
|
+
});
|
|
1627
|
+
}
|
|
1628
|
+
});
|
|
1629
|
+
return canvas.toDataURL("image/jpeg", quality);
|
|
1630
|
+
} catch {
|
|
1631
|
+
return void 0;
|
|
1632
|
+
} finally {
|
|
1633
|
+
hiddenEls.forEach((el) => el.style.visibility = "");
|
|
1634
|
+
}
|
|
1635
|
+
}
|
|
1636
|
+
function loadImage(src) {
|
|
1637
|
+
return new Promise((resolve, reject) => {
|
|
1638
|
+
const img = new Image();
|
|
1639
|
+
img.onload = () => resolve(img);
|
|
1640
|
+
img.onerror = () => reject(new Error("\uC774\uBBF8\uC9C0 \uB85C\uB4DC \uC2E4\uD328"));
|
|
1641
|
+
img.src = src;
|
|
1642
|
+
});
|
|
1643
|
+
}
|
|
1644
|
+
function inlineComputedStyles(src, dst) {
|
|
1645
|
+
const cs = window.getComputedStyle(src);
|
|
1646
|
+
dst.style.cssText = cs.cssText;
|
|
1647
|
+
const srcChildren = src.children;
|
|
1648
|
+
const dstChildren = dst.children;
|
|
1649
|
+
for (let i = 0; i < srcChildren.length && i < dstChildren.length; i++) {
|
|
1650
|
+
inlineComputedStyles(srcChildren[i], dstChildren[i]);
|
|
1651
|
+
}
|
|
1652
|
+
}
|
|
1653
|
+
|
|
1560
1654
|
// src/core/collector.ts
|
|
1561
1655
|
var MAX_ERRORS = 20;
|
|
1562
1656
|
var MAX_LOGS = 50;
|
|
@@ -2087,23 +2181,6 @@ async function uploadFile(endpoint, file, context, taskId) {
|
|
|
2087
2181
|
}
|
|
2088
2182
|
return res.json();
|
|
2089
2183
|
}
|
|
2090
|
-
async function updateTaskStatus(endpoint, taskId, status) {
|
|
2091
|
-
const snapshots = snapshotCaches("feedbacks:");
|
|
2092
|
-
mutateMatchingCaches(
|
|
2093
|
-
"feedbacks:",
|
|
2094
|
-
(items) => items.map((item) => item.id === taskId ? { ...item, status } : item)
|
|
2095
|
-
);
|
|
2096
|
-
try {
|
|
2097
|
-
await apiFetch(`${endpoint}/${taskId}/status`, {
|
|
2098
|
-
method: "PATCH",
|
|
2099
|
-
body: JSON.stringify({ status })
|
|
2100
|
-
});
|
|
2101
|
-
revalidateCachedFeedbackLists(endpoint);
|
|
2102
|
-
} catch (error) {
|
|
2103
|
-
restoreSnapshots(snapshots);
|
|
2104
|
-
throw error;
|
|
2105
|
-
}
|
|
2106
|
-
}
|
|
2107
2184
|
|
|
2108
2185
|
// src/core/sourcemap-resolver.ts
|
|
2109
2186
|
var import_trace_mapping = require("@jridgewell/trace-mapping");
|
|
@@ -2214,6 +2291,7 @@ var styles_module_default2 = classNames2;
|
|
|
2214
2291
|
|
|
2215
2292
|
// src/components/annotation-marker/index.tsx
|
|
2216
2293
|
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
2294
|
+
var IN_PROGRESS_MARKER_COLOR = "#3b82f6";
|
|
2217
2295
|
var DONE_MARKER_COLOR = "#9ca3af";
|
|
2218
2296
|
function AnnotationMarker({
|
|
2219
2297
|
annotation,
|
|
@@ -2227,7 +2305,8 @@ function AnnotationMarker({
|
|
|
2227
2305
|
}) {
|
|
2228
2306
|
const animClass = !isAnimated ? styles_module_default2.enter : "";
|
|
2229
2307
|
const isDone = annotation.status === "done" || annotation.status === "resolved";
|
|
2230
|
-
const
|
|
2308
|
+
const isInProgress = annotation.status === "in_progress";
|
|
2309
|
+
const markerColor = isDone ? DONE_MARKER_COLOR : isInProgress ? IN_PROGRESS_MARKER_COLOR : accentColor;
|
|
2231
2310
|
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
2232
2311
|
"div",
|
|
2233
2312
|
{
|
|
@@ -2330,8 +2409,7 @@ function CommentThread({
|
|
|
2330
2409
|
top,
|
|
2331
2410
|
bottom,
|
|
2332
2411
|
onClose,
|
|
2333
|
-
onReply
|
|
2334
|
-
onResolve
|
|
2412
|
+
onReply
|
|
2335
2413
|
}) {
|
|
2336
2414
|
const [replyText, setReplyText] = (0, import_react3.useState)("");
|
|
2337
2415
|
const [exiting, setExiting] = (0, import_react3.useState)(false);
|
|
@@ -2425,14 +2503,7 @@ function CommentThread({
|
|
|
2425
2503
|
cleanup();
|
|
2426
2504
|
if (!targetEl) return;
|
|
2427
2505
|
try {
|
|
2428
|
-
const
|
|
2429
|
-
const canvas = await html2canvas(targetEl, {
|
|
2430
|
-
useCORS: true,
|
|
2431
|
-
allowTaint: true,
|
|
2432
|
-
scale: Math.min(window.devicePixelRatio, 2),
|
|
2433
|
-
logging: false
|
|
2434
|
-
});
|
|
2435
|
-
const base64 = canvas.toDataURL("image/jpeg", 0.7);
|
|
2506
|
+
const base64 = await captureElement(targetEl);
|
|
2436
2507
|
setPendingImage(base64);
|
|
2437
2508
|
} catch (err) {
|
|
2438
2509
|
console.error("[@impakers/debug] DOM \uC2A4\uD06C\uB9B0\uC0F7 \uC2E4\uD328:", err);
|
|
@@ -2493,10 +2564,7 @@ function CommentThread({
|
|
|
2493
2564
|
] }),
|
|
2494
2565
|
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: styles_module_default3.title, children: feedbackTitle })
|
|
2495
2566
|
] }),
|
|
2496
|
-
/* @__PURE__ */ (0, import_jsx_runtime4.
|
|
2497
|
-
onResolve && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { className: styles_module_default3.headerAction, onClick: () => onResolve(task.id), title: "\uC644\uB8CC \uCC98\uB9AC", type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("polyline", { points: "20 6 9 17 4 12" }) }) }),
|
|
2498
|
-
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { className: styles_module_default3.headerAction, onClick: handleClose, title: "\uB2EB\uAE30", type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("path", { d: "M18 6L6 18M6 6l12 12" }) }) })
|
|
2499
|
-
] })
|
|
2567
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: styles_module_default3.headerActions, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { className: styles_module_default3.headerAction, onClick: handleClose, title: "\uB2EB\uAE30", type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("path", { d: "M18 6L6 18M6 6l12 12" }) }) }) })
|
|
2500
2568
|
] }),
|
|
2501
2569
|
task.comments.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
|
|
2502
2570
|
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: styles_module_default3.divider }),
|
|
@@ -2920,11 +2988,10 @@ function InboxPanel({
|
|
|
2920
2988
|
endpoint,
|
|
2921
2989
|
currentUserName,
|
|
2922
2990
|
currentUserId,
|
|
2923
|
-
onClose
|
|
2924
|
-
onStatusChange
|
|
2991
|
+
onClose
|
|
2925
2992
|
}) {
|
|
2926
2993
|
const [tab, setTab] = (0, import_react5.useState)("page");
|
|
2927
|
-
const [statusFilter, setStatusFilter] = (0, import_react5.useState)("
|
|
2994
|
+
const [statusFilter, setStatusFilter] = (0, import_react5.useState)("todo");
|
|
2928
2995
|
const [exiting, setExiting] = (0, import_react5.useState)(false);
|
|
2929
2996
|
const [selectedItem, setSelectedItem] = (0, import_react5.useState)(null);
|
|
2930
2997
|
const [comments, setComments] = (0, import_react5.useState)([]);
|
|
@@ -2999,17 +3066,11 @@ function InboxPanel({
|
|
|
2999
3066
|
}
|
|
3000
3067
|
if (e.key === "Escape") handleClose();
|
|
3001
3068
|
}, [handleSendReply, handleClose]);
|
|
3002
|
-
const handleToggleStatus = (0, import_react5.useCallback)((item, e) => {
|
|
3003
|
-
e.stopPropagation();
|
|
3004
|
-
const newStatus = item.status === "done" ? "todo" : "done";
|
|
3005
|
-
onStatusChange?.(item.id, newStatus);
|
|
3006
|
-
}, [onStatusChange]);
|
|
3007
3069
|
const rawItems = tab === "page" ? pageItems : allItems;
|
|
3008
|
-
const items = rawItems.filter(
|
|
3009
|
-
|
|
3010
|
-
);
|
|
3011
|
-
const
|
|
3012
|
-
const resolvedCount = rawItems.filter((item) => item.status === "done").length;
|
|
3070
|
+
const items = rawItems.filter((item) => item.status === statusFilter);
|
|
3071
|
+
const todoCount = rawItems.filter((item) => item.status === "todo").length;
|
|
3072
|
+
const inProgressCount = rawItems.filter((item) => item.status === "in_progress").length;
|
|
3073
|
+
const doneCount = rawItems.filter((item) => item.status === "done").length;
|
|
3013
3074
|
if (typeof document === "undefined") return null;
|
|
3014
3075
|
return (0, import_react_dom.createPortal)(
|
|
3015
3076
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { "data-impakers-debug": "", children: [
|
|
@@ -3132,24 +3193,36 @@ function InboxPanel({
|
|
|
3132
3193
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
|
|
3133
3194
|
"button",
|
|
3134
3195
|
{
|
|
3135
|
-
className: `${styles_module_default5.filterChip} ${statusFilter === "
|
|
3136
|
-
onClick: () => setStatusFilter("
|
|
3196
|
+
className: `${styles_module_default5.filterChip} ${statusFilter === "todo" ? styles_module_default5.active : ""}`,
|
|
3197
|
+
onClick: () => setStatusFilter("todo"),
|
|
3198
|
+
type: "button",
|
|
3199
|
+
children: [
|
|
3200
|
+
"\uC9C4\uD589\uC804",
|
|
3201
|
+
todoCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: styles_module_default5.filterCount, children: todoCount })
|
|
3202
|
+
]
|
|
3203
|
+
}
|
|
3204
|
+
),
|
|
3205
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
|
|
3206
|
+
"button",
|
|
3207
|
+
{
|
|
3208
|
+
className: `${styles_module_default5.filterChip} ${statusFilter === "in_progress" ? styles_module_default5.active : ""}`,
|
|
3209
|
+
onClick: () => setStatusFilter("in_progress"),
|
|
3137
3210
|
type: "button",
|
|
3138
3211
|
children: [
|
|
3139
|
-
"
|
|
3140
|
-
|
|
3212
|
+
"\uC9C4\uD589\uC911",
|
|
3213
|
+
inProgressCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: styles_module_default5.filterCount, children: inProgressCount })
|
|
3141
3214
|
]
|
|
3142
3215
|
}
|
|
3143
3216
|
),
|
|
3144
3217
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
|
|
3145
3218
|
"button",
|
|
3146
3219
|
{
|
|
3147
|
-
className: `${styles_module_default5.filterChip} ${statusFilter === "
|
|
3148
|
-
onClick: () => setStatusFilter("
|
|
3220
|
+
className: `${styles_module_default5.filterChip} ${statusFilter === "done" ? styles_module_default5.active : ""}`,
|
|
3221
|
+
onClick: () => setStatusFilter("done"),
|
|
3149
3222
|
type: "button",
|
|
3150
3223
|
children: [
|
|
3151
|
-
"
|
|
3152
|
-
|
|
3224
|
+
"\uC644\uB8CC",
|
|
3225
|
+
doneCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: styles_module_default5.filterCount, children: doneCount })
|
|
3153
3226
|
]
|
|
3154
3227
|
}
|
|
3155
3228
|
)
|
|
@@ -3163,17 +3236,7 @@ function InboxPanel({
|
|
|
3163
3236
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: styles_module_default5.cardInfo, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: styles_module_default5.cardMeta, children: [
|
|
3164
3237
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: styles_module_default5.cardAuthor, children: item.authorName }),
|
|
3165
3238
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: styles_module_default5.cardTime, children: timeAgo2(item.createdAt) })
|
|
3166
|
-
] }) })
|
|
3167
|
-
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
3168
|
-
"button",
|
|
3169
|
-
{
|
|
3170
|
-
className: `${styles_module_default5.checkBtn} ${item.status === "done" ? styles_module_default5.checked : ""}`,
|
|
3171
|
-
onClick: (e) => handleToggleStatus(item, e),
|
|
3172
|
-
type: "button",
|
|
3173
|
-
title: item.status === "done" ? "\uBBF8\uC644\uB8CC\uB85C \uBCC0\uACBD" : "\uC644\uB8CC \uCC98\uB9AC",
|
|
3174
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("polyline", { points: "20 6 9 17 4 12" }) })
|
|
3175
|
-
}
|
|
3176
|
-
)
|
|
3239
|
+
] }) })
|
|
3177
3240
|
] }),
|
|
3178
3241
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: styles_module_default5.cardTitle, children: item.title.replace(/^\[피드백\]\s*/, "") }),
|
|
3179
3242
|
item.screenshot && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: styles_module_default5.cardScreenshot, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("img", { src: item.screenshot, alt: "screenshot" }) }),
|
|
@@ -3359,6 +3422,17 @@ function detectSourceFile(element) {
|
|
|
3359
3422
|
}
|
|
3360
3423
|
return void 0;
|
|
3361
3424
|
}
|
|
3425
|
+
function detectSourceFileCandidates(element) {
|
|
3426
|
+
const result = getSourceLocation(element);
|
|
3427
|
+
const loc = result.found ? result : findNearestComponentSource(element);
|
|
3428
|
+
if (loc.found && loc.sourceCandidates && loc.sourceCandidates.length > 0) {
|
|
3429
|
+
return loc.sourceCandidates.map((s) => formatSourceLocation(s, "path"));
|
|
3430
|
+
}
|
|
3431
|
+
if (loc.found && loc.source) {
|
|
3432
|
+
return [formatSourceLocation(loc.source, "path")];
|
|
3433
|
+
}
|
|
3434
|
+
return [];
|
|
3435
|
+
}
|
|
3362
3436
|
var STORAGE_PREFIX = "impakers-debug-markers-";
|
|
3363
3437
|
function getRouteKey() {
|
|
3364
3438
|
return STORAGE_PREFIX + window.location.pathname;
|
|
@@ -3631,20 +3705,27 @@ function DebugWidget({ endpoint, getUser, onHide }) {
|
|
|
3631
3705
|
targetElement: elementUnder
|
|
3632
3706
|
});
|
|
3633
3707
|
setHoverInfo(null);
|
|
3634
|
-
const
|
|
3635
|
-
|
|
3636
|
-
|
|
3637
|
-
|
|
3638
|
-
|
|
3639
|
-
|
|
3640
|
-
|
|
3641
|
-
|
|
3642
|
-
|
|
3643
|
-
|
|
3644
|
-
|
|
3708
|
+
const candidates = detectSourceFileCandidates(elementUnder);
|
|
3709
|
+
const chunkCandidates = candidates.filter((c) => c.includes("/chunks/"));
|
|
3710
|
+
if (chunkCandidates.length > 0) {
|
|
3711
|
+
(async () => {
|
|
3712
|
+
for (const candidate of chunkCandidates) {
|
|
3713
|
+
try {
|
|
3714
|
+
const resolved = await resolveSourceString(candidate);
|
|
3715
|
+
if (resolved) {
|
|
3716
|
+
setPendingAnnotation(
|
|
3717
|
+
(prev) => prev ? {
|
|
3718
|
+
...prev,
|
|
3719
|
+
resolvedSource: `${resolved.source}:${resolved.line}`,
|
|
3720
|
+
resolvedName: resolved.name ?? void 0
|
|
3721
|
+
} : prev
|
|
3722
|
+
);
|
|
3723
|
+
break;
|
|
3724
|
+
}
|
|
3725
|
+
} catch {
|
|
3726
|
+
}
|
|
3645
3727
|
}
|
|
3646
|
-
})
|
|
3647
|
-
});
|
|
3728
|
+
})();
|
|
3648
3729
|
}
|
|
3649
3730
|
};
|
|
3650
3731
|
document.addEventListener("click", handleClick, true);
|
|
@@ -3660,28 +3741,10 @@ function DebugWidget({ endpoint, getUser, onHide }) {
|
|
|
3660
3741
|
setSubmitting(true);
|
|
3661
3742
|
try {
|
|
3662
3743
|
const metadata = collectMetadata(getUser);
|
|
3663
|
-
|
|
3664
|
-
|
|
3665
|
-
|
|
3666
|
-
|
|
3667
|
-
const html2canvas = (await import("html2canvas")).default;
|
|
3668
|
-
const canvas = await html2canvas(document.body, {
|
|
3669
|
-
useCORS: true,
|
|
3670
|
-
allowTaint: true,
|
|
3671
|
-
scale: 1,
|
|
3672
|
-
// 1x로 줄여서 용량 절약
|
|
3673
|
-
logging: false,
|
|
3674
|
-
width: window.innerWidth,
|
|
3675
|
-
height: window.innerHeight
|
|
3676
|
-
});
|
|
3677
|
-
screenshot = canvas.toDataURL("image/jpeg", 0.5);
|
|
3678
|
-
} catch {
|
|
3679
|
-
} finally {
|
|
3680
|
-
debugEls.forEach((el) => el.style.visibility = "");
|
|
3681
|
-
}
|
|
3682
|
-
let resolvedSource = pendingAnnotation.sourceFile || "";
|
|
3683
|
-
let resolvedName = null;
|
|
3684
|
-
if (pendingAnnotation.sourceFile?.includes("/chunks/")) {
|
|
3744
|
+
const screenshot = await captureFullPage();
|
|
3745
|
+
let resolvedSource = pendingAnnotation.resolvedSource || pendingAnnotation.sourceFile || "";
|
|
3746
|
+
let resolvedName = pendingAnnotation.resolvedName || null;
|
|
3747
|
+
if (!pendingAnnotation.resolvedSource && pendingAnnotation.sourceFile?.includes("/chunks/")) {
|
|
3685
3748
|
try {
|
|
3686
3749
|
const resolved = await resolveSourceString(pendingAnnotation.sourceFile);
|
|
3687
3750
|
if (resolved) {
|
|
@@ -3751,7 +3814,8 @@ ${elementInfo.join("\n")}`);
|
|
|
3751
3814
|
isFixed: pendingAnnotation.isFixed || false,
|
|
3752
3815
|
element: pendingAnnotation.element,
|
|
3753
3816
|
boundingBox: pendingAnnotation.boundingBox
|
|
3754
|
-
}
|
|
3817
|
+
},
|
|
3818
|
+
authorName: getUser?.()?.name ? String(getUser().name) : void 0
|
|
3755
3819
|
});
|
|
3756
3820
|
setShowToast(true);
|
|
3757
3821
|
originalSetTimeout(() => setShowToast(false), 3e3);
|
|
@@ -3920,7 +3984,7 @@ ${elementInfo.join("\n")}`);
|
|
|
3920
3984
|
title: task.title || "\uD53C\uB4DC\uBC31",
|
|
3921
3985
|
status: task.status,
|
|
3922
3986
|
priority: task.priority,
|
|
3923
|
-
authorName:
|
|
3987
|
+
authorName: task.authorName || "\uC775\uBA85",
|
|
3924
3988
|
feedbackUrl: task.feedbackUrl || currentPath,
|
|
3925
3989
|
createdAt: task.createdAt,
|
|
3926
3990
|
commentCount: task.commentCount || 0
|
|
@@ -3972,14 +4036,7 @@ ${elementInfo.join("\n")}`);
|
|
|
3972
4036
|
endpoint,
|
|
3973
4037
|
currentUserName: getUser?.()?.name ? String(getUser().name) : "\uC775\uBA85",
|
|
3974
4038
|
currentUserId: getUser?.()?.id ? String(getUser().id) : void 0,
|
|
3975
|
-
onClose: () => setShowInbox(false)
|
|
3976
|
-
onStatusChange: async (taskId, status) => {
|
|
3977
|
-
try {
|
|
3978
|
-
await updateTaskStatus(endpoint, taskId, status);
|
|
3979
|
-
} catch (err) {
|
|
3980
|
-
console.error("[@impakers/debug] \uC0C1\uD0DC \uBCC0\uACBD \uC2E4\uD328:", err);
|
|
3981
|
-
}
|
|
3982
|
-
}
|
|
4039
|
+
onClose: () => setShowInbox(false)
|
|
3983
4040
|
}
|
|
3984
4041
|
),
|
|
3985
4042
|
showSettings && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|