@impakers/debug 1.4.8 → 1.4.11

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.mjs CHANGED
@@ -106,7 +106,7 @@ _ImpakersDebug._eventTarget = typeof EventTarget !== "undefined" ? new EventTarg
106
106
  var ImpakersDebug = _ImpakersDebug;
107
107
 
108
108
  // src/components/debug-widget/index.tsx
109
- import { useState as useState5, useCallback as useCallback6, useEffect as useEffect5, useRef as useRef5 } from "react";
109
+ import { useState as useState5, useCallback as useCallback6, useEffect as useEffect5, useRef as useRef5, useMemo } from "react";
110
110
  import { createPortal as createPortal3 } from "react-dom";
111
111
 
112
112
  // src/components/annotation-popup-css/index.tsx
@@ -1535,70 +1535,14 @@ function findNearestComponentSource(element, maxAncestors = 10) {
1535
1535
  }
1536
1536
 
1537
1537
  // src/utils/capture-element.ts
1538
- var UNSUPPORTED_RE = /\b(?:oklab|oklch|color-mix|(?<![\w-])lab|(?<![\w-])lch)\s*\(/i;
1539
- var COLOR_PROPS = [
1540
- "color",
1541
- "background-color",
1542
- "background-image",
1543
- "background",
1544
- "border-color",
1545
- "border-top-color",
1546
- "border-right-color",
1547
- "border-bottom-color",
1548
- "border-left-color",
1549
- "outline-color",
1550
- "text-decoration-color",
1551
- "box-shadow",
1552
- "text-shadow",
1553
- "caret-color",
1554
- "column-rule-color",
1555
- "fill",
1556
- "stroke",
1557
- "stop-color",
1558
- "flood-color",
1559
- "lighting-color"
1560
- ];
1561
- function sanitizeUnsupportedColors(clonedDoc) {
1562
- const allEls = clonedDoc.querySelectorAll("*");
1563
- for (let i = 0; i < allEls.length; i++) {
1564
- const el = allEls[i];
1565
- if (!el.style) continue;
1566
- let cs = null;
1567
- for (const prop of COLOR_PROPS) {
1568
- const inlineVal = el.style.getPropertyValue(prop);
1569
- if (inlineVal && UNSUPPORTED_RE.test(inlineVal)) {
1570
- el.style.setProperty(prop, getFallback(prop));
1571
- continue;
1572
- }
1573
- if (!cs) {
1574
- try {
1575
- cs = clonedDoc.defaultView.getComputedStyle(el);
1576
- } catch {
1577
- break;
1578
- }
1579
- }
1580
- const val = cs.getPropertyValue(prop);
1581
- if (val && UNSUPPORTED_RE.test(val)) {
1582
- el.style.setProperty(prop, getFallback(prop));
1583
- }
1584
- }
1585
- }
1586
- }
1587
- function getFallback(prop) {
1588
- if (prop === "background-image" || prop === "background") return "none";
1589
- if (prop === "box-shadow" || prop === "text-shadow") return "none";
1590
- if (prop === "color") return "inherit";
1591
- return "transparent";
1592
- }
1593
1538
  async function captureElement(el, options = {}) {
1594
1539
  const { quality = 0.7, maxScale = 2 } = options;
1595
- const html2canvas = (await import("html2canvas")).default;
1540
+ const html2canvas = (await import("html2canvas-pro")).default;
1596
1541
  const canvas = await html2canvas(el, {
1597
1542
  useCORS: true,
1598
1543
  allowTaint: true,
1599
1544
  scale: Math.min(window.devicePixelRatio, maxScale),
1600
- logging: false,
1601
- onclone: (clonedDoc) => sanitizeUnsupportedColors(clonedDoc)
1545
+ logging: false
1602
1546
  });
1603
1547
  return canvas.toDataURL("image/jpeg", quality);
1604
1548
  }
@@ -1609,15 +1553,14 @@ async function captureFullPage(options = {}) {
1609
1553
  const hiddenEls = document.querySelectorAll(allSelectors.join(", "));
1610
1554
  try {
1611
1555
  hiddenEls.forEach((el) => el.style.visibility = "hidden");
1612
- const html2canvas = (await import("html2canvas")).default;
1556
+ const html2canvas = (await import("html2canvas-pro")).default;
1613
1557
  const canvas = await html2canvas(document.body, {
1614
1558
  useCORS: true,
1615
1559
  allowTaint: true,
1616
1560
  scale: 1,
1617
1561
  logging: false,
1618
1562
  width: window.innerWidth,
1619
- height: window.innerHeight,
1620
- onclone: (clonedDoc) => sanitizeUnsupportedColors(clonedDoc)
1563
+ height: window.innerHeight
1621
1564
  });
1622
1565
  return canvas.toDataURL("image/jpeg", quality);
1623
1566
  } catch {
@@ -2478,7 +2421,7 @@ function PendingMarker({ x, y, accentColor }) {
2478
2421
  import { useState as useState2, useRef as useRef2, useEffect as useEffect2, useCallback as useCallback2 } from "react";
2479
2422
 
2480
2423
  // src/components/comment-thread/styles.module.scss
2481
- var css3 = '@keyframes styles-module__threadIn___pBTFZ {\n from {\n opacity: 0;\n transform: scale(0.96) translateY(4px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n}\n@keyframes styles-module__threadOut___-ccKh {\n from {\n opacity: 1;\n transform: scale(1);\n }\n to {\n opacity: 0;\n transform: scale(0.96);\n }\n}\n.styles-module__thread___ua2EO {\n position: fixed;\n width: 340px;\n max-height: 480px;\n background: #fff;\n border-radius: 12px;\n box-shadow: 0 8px 30px rgba(0, 0, 0, 0.12), 0 2px 8px rgba(0, 0, 0, 0.06);\n z-index: 100002;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;\n font-size: 13px;\n color: #1a1a1a;\n animation: styles-module__threadIn___pBTFZ 0.15s ease-out;\n -webkit-font-smoothing: antialiased;\n}\n.styles-module__thread___ua2EO.styles-module__exiting___RIPeX {\n animation: styles-module__threadOut___-ccKh 0.12s ease-in forwards;\n pointer-events: none;\n}\n\n.styles-module__header___GiEBq {\n padding: 14px 16px 10px;\n display: flex;\n align-items: flex-start;\n gap: 10px;\n}\n\n.styles-module__avatar___JElAd {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n background: #16a34a;\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n font-weight: 600;\n flex-shrink: 0;\n}\n\n.styles-module__headerInfo___E8809 {\n flex: 1;\n min-width: 0;\n}\n\n.styles-module__headerTop___eDiCd {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-bottom: 4px;\n}\n\n.styles-module__authorName___T1BfB {\n font-size: 13px;\n font-weight: 600;\n color: #1a1a1a;\n}\n\n.styles-module__timestamp___WusBf {\n font-size: 12px;\n color: #9ca3af;\n}\n\n.styles-module__headerActions___8FsMY {\n display: flex;\n align-items: center;\n gap: 2px;\n flex-shrink: 0;\n}\n\n.styles-module__headerAction___Tinmq {\n width: 28px;\n height: 28px;\n border: none;\n background: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n color: #9ca3af;\n transition: background 0.12s, color 0.12s;\n padding: 0;\n}\n.styles-module__headerAction___Tinmq:hover {\n background: #f3f4f6;\n color: #374151;\n}\n.styles-module__headerAction___Tinmq svg {\n width: 16px;\n height: 16px;\n}\n\n.styles-module__title___qkfqY {\n font-size: 13px;\n color: #1a1a1a;\n line-height: 1.5;\n word-break: break-word;\n}\n\n.styles-module__commentsList___kYqAR {\n flex: 1;\n overflow-y: auto;\n padding: 0;\n}\n.styles-module__commentsList___kYqAR::-webkit-scrollbar {\n width: 4px;\n}\n.styles-module__commentsList___kYqAR::-webkit-scrollbar-thumb {\n background: #d1d5db;\n border-radius: 2px;\n}\n\n.styles-module__comment___pW3IO {\n padding: 10px 16px;\n display: flex;\n align-items: flex-start;\n gap: 10px;\n}\n.styles-module__comment___pW3IO:hover {\n background: #f9fafb;\n}\n.styles-module__comment___pW3IO:hover .styles-module__commentActions___wO0fs {\n opacity: 1;\n}\n\n.styles-module__commentHighlight___EiTmx {\n background: #eff6ff;\n border-left: 2px solid #3b82f6;\n padding-left: 14px;\n}\n\n.styles-module__commentContent___RObGr {\n flex: 1;\n min-width: 0;\n}\n\n.styles-module__commentTop___BbTF3 {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-bottom: 2px;\n}\n\n.styles-module__commentAuthor___tBjpl {\n font-size: 13px;\n font-weight: 600;\n color: #1a1a1a;\n}\n\n.styles-module__commentTime___0OLrz {\n font-size: 12px;\n color: #9ca3af;\n}\n\n.styles-module__commentActions___wO0fs {\n display: flex;\n gap: 2px;\n opacity: 0;\n transition: opacity 0.12s;\n}\n\n.styles-module__commentText___ldy2V {\n font-size: 13px;\n color: #374151;\n line-height: 1.5;\n word-break: break-word;\n white-space: pre-wrap;\n}\n\n.styles-module__screenshot___jUqau {\n margin-top: 8px;\n border-radius: 8px;\n border: 1px solid #e5e7eb;\n overflow: hidden;\n position: relative;\n max-width: 200px;\n}\n.styles-module__screenshot___jUqau img {\n width: 100%;\n height: auto;\n display: block;\n}\n.styles-module__screenshot___jUqau .styles-module__screenshotBadge___roEqY {\n position: absolute;\n top: 6px;\n right: 6px;\n background: rgba(0, 0, 0, 0.6);\n color: #fff;\n font-size: 10px;\n padding: 2px 6px;\n border-radius: 4px;\n font-weight: 500;\n}\n\n.styles-module__fileCard___-iOro {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 8px;\n padding: 8px 10px;\n border-radius: 8px;\n border: 1px solid #e5e7eb;\n background: #f9fafb;\n text-decoration: none;\n color: inherit;\n cursor: pointer;\n transition: background 0.12s;\n max-width: 200px;\n}\n.styles-module__fileCard___-iOro:hover {\n background: #f3f4f6;\n}\n\n.styles-module__fileIcon___dNJMT {\n width: 32px;\n height: 32px;\n border-radius: 6px;\n background: #e5e7eb;\n color: #374151;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 10px;\n font-weight: 700;\n flex-shrink: 0;\n letter-spacing: 0.5px;\n}\n\n.styles-module__fileInfo___dVrLV {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 1px;\n}\n\n.styles-module__fileCardName___SHOj- {\n font-size: 12px;\n font-weight: 500;\n color: #1a1a1a;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.styles-module__fileCardSize___W53JL {\n font-size: 11px;\n color: #9ca3af;\n}\n\n.styles-module__pendingFile___-OSRs {\n position: relative;\n margin: 0 16px 8px;\n padding: 8px 10px;\n padding-right: 30px;\n border-radius: 8px;\n border: 1px solid #e5e7eb;\n background: #f9fafb;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.styles-module__divider___kDjxN {\n height: 1px;\n background: #f3f4f6;\n margin: 0;\n}\n\n.styles-module__pendingImage___gHaF3 {\n position: relative;\n margin: 0 16px 8px;\n border-radius: 8px;\n border: 1px solid #e5e7eb;\n overflow: hidden;\n max-height: 120px;\n}\n.styles-module__pendingImage___gHaF3 img {\n width: 100%;\n height: auto;\n display: block;\n object-fit: cover;\n max-height: 120px;\n}\n\n.styles-module__pendingRemove___FRL4h {\n position: absolute;\n top: 4px;\n right: 4px;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: rgba(0, 0, 0, 0.6);\n color: #fff;\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n line-height: 1;\n padding: 0;\n}\n.styles-module__pendingRemove___FRL4h:hover {\n background: rgba(0, 0, 0, 0.8);\n}\n\n.styles-module__replyArea___VQn9b {\n padding: 10px 16px 8px;\n border-top: 1px solid #f3f4f6;\n}\n\n.styles-module__replyInput___uZNBW {\n width: 100%;\n border: none;\n outline: none;\n font-size: 13px;\n font-family: inherit;\n color: #1a1a1a;\n resize: none;\n padding: 0;\n min-height: 36px;\n max-height: 120px;\n line-height: 1.55;\n transition: height 0.1s ease;\n}\n.styles-module__replyInput___uZNBW::placeholder {\n color: #9ca3af;\n}\n\n.styles-module__replyToolbar___fTFJU {\n display: flex;\n align-items: center;\n padding: 4px 16px 10px;\n gap: 4px;\n}\n\n.styles-module__replyTool___Ho-Rx {\n width: 28px;\n height: 28px;\n border: none;\n background: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n color: #9ca3af;\n transition: background 0.12s, color 0.12s;\n padding: 0;\n}\n.styles-module__replyTool___Ho-Rx:hover {\n background: #f3f4f6;\n color: #374151;\n}\n.styles-module__replyTool___Ho-Rx svg {\n width: 16px;\n height: 16px;\n}\n\n.styles-module__replySend___e0VSb {\n margin-left: auto;\n width: 28px;\n height: 28px;\n border: none;\n background: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n color: #9ca3af;\n transition: background 0.12s, color 0.12s;\n padding: 0;\n}\n.styles-module__replySend___e0VSb:hover {\n color: #3b82f6;\n}\n.styles-module__replySend___e0VSb.styles-module__active___R--Jj {\n color: #3b82f6;\n}\n.styles-module__replySend___e0VSb svg {\n width: 16px;\n height: 16px;\n}\n\n.styles-module__empty___XXGiw {\n padding: 24px 16px;\n text-align: center;\n color: #9ca3af;\n font-size: 13px;\n}\n\n.styles-module__statusBadge___el8ml {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n font-weight: 500;\n padding: 2px 8px;\n border-radius: 10px;\n margin-left: auto;\n}\n.styles-module__statusBadge___el8ml.styles-module__todo___rUWBr {\n background: #fef3c7;\n color: #92400e;\n}\n.styles-module__statusBadge___el8ml.styles-module__inProgress___HEWgU {\n background: #dbeafe;\n color: #1e40af;\n}\n.styles-module__statusBadge___el8ml.styles-module__done___zC12n {\n background: #dcfce7;\n color: #166534;\n}\n\n.styles-module__lightbox___KoWEF {\n position: fixed;\n inset: 0;\n z-index: 2147483647;\n background: rgba(0, 0, 0, 0.8);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: zoom-out;\n}\n.styles-module__lightbox___KoWEF img {\n max-width: 90vw;\n max-height: 90vh;\n border-radius: 8px;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);\n cursor: default;\n}\n\n.styles-module__lightboxClose___tGZlm {\n position: absolute;\n top: 16px;\n right: 16px;\n width: 36px;\n height: 36px;\n border-radius: 50%;\n background: rgba(255, 255, 255, 0.15);\n color: #fff;\n border: none;\n cursor: pointer;\n font-size: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.styles-module__lightboxClose___tGZlm:hover {\n background: rgba(255, 255, 255, 0.25);\n}';
2424
+ var css3 = '@keyframes styles-module__threadIn___pBTFZ {\n from {\n opacity: 0;\n transform: scale(0.96) translateY(4px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n}\n@keyframes styles-module__threadOut___-ccKh {\n from {\n opacity: 1;\n transform: scale(1);\n }\n to {\n opacity: 0;\n transform: scale(0.96);\n }\n}\n.styles-module__thread___ua2EO {\n position: fixed;\n width: 340px;\n max-height: min(480px, 100vh - 40px);\n background: #fff;\n border-radius: 12px;\n box-shadow: 0 8px 30px rgba(0, 0, 0, 0.12), 0 2px 8px rgba(0, 0, 0, 0.06);\n z-index: 100002;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;\n font-size: 13px;\n color: #1a1a1a;\n animation: styles-module__threadIn___pBTFZ 0.15s ease-out;\n -webkit-font-smoothing: antialiased;\n}\n.styles-module__thread___ua2EO.styles-module__exiting___RIPeX {\n animation: styles-module__threadOut___-ccKh 0.12s ease-in forwards;\n pointer-events: none;\n}\n\n.styles-module__header___GiEBq {\n padding: 14px 16px 10px;\n display: flex;\n align-items: flex-start;\n gap: 10px;\n flex-shrink: 0;\n}\n\n.styles-module__avatar___JElAd {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n background: #16a34a;\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n font-weight: 600;\n flex-shrink: 0;\n}\n\n.styles-module__headerInfo___E8809 {\n flex: 1;\n min-width: 0;\n}\n\n.styles-module__headerTop___eDiCd {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-bottom: 4px;\n}\n\n.styles-module__authorName___T1BfB {\n font-size: 13px;\n font-weight: 600;\n color: #1a1a1a;\n}\n\n.styles-module__timestamp___WusBf {\n font-size: 12px;\n color: #9ca3af;\n}\n\n.styles-module__headerActions___8FsMY {\n display: flex;\n align-items: center;\n gap: 2px;\n flex-shrink: 0;\n}\n\n.styles-module__headerAction___Tinmq {\n width: 28px;\n height: 28px;\n border: none;\n background: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n color: #9ca3af;\n transition: background 0.12s, color 0.12s;\n padding: 0;\n}\n.styles-module__headerAction___Tinmq:hover {\n background: #f3f4f6;\n color: #374151;\n}\n.styles-module__headerAction___Tinmq svg {\n width: 16px;\n height: 16px;\n}\n\n.styles-module__title___qkfqY {\n font-size: 13px;\n color: #1a1a1a;\n line-height: 1.5;\n word-break: break-word;\n}\n\n.styles-module__commentsList___kYqAR {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n padding: 0;\n}\n.styles-module__commentsList___kYqAR::-webkit-scrollbar {\n width: 4px;\n}\n.styles-module__commentsList___kYqAR::-webkit-scrollbar-thumb {\n background: #d1d5db;\n border-radius: 2px;\n}\n\n.styles-module__comment___pW3IO {\n padding: 10px 16px;\n display: flex;\n align-items: flex-start;\n gap: 10px;\n}\n.styles-module__comment___pW3IO:hover {\n background: #f9fafb;\n}\n.styles-module__comment___pW3IO:hover .styles-module__commentActions___wO0fs {\n opacity: 1;\n}\n\n.styles-module__commentHighlight___EiTmx {\n background: #eff6ff;\n border-left: 2px solid #3b82f6;\n padding-left: 14px;\n}\n\n.styles-module__commentContent___RObGr {\n flex: 1;\n min-width: 0;\n}\n\n.styles-module__commentTop___BbTF3 {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-bottom: 2px;\n}\n\n.styles-module__commentAuthor___tBjpl {\n font-size: 13px;\n font-weight: 600;\n color: #1a1a1a;\n}\n\n.styles-module__commentTime___0OLrz {\n font-size: 12px;\n color: #9ca3af;\n}\n\n.styles-module__commentActions___wO0fs {\n display: flex;\n gap: 2px;\n opacity: 0;\n transition: opacity 0.12s;\n}\n\n.styles-module__commentText___ldy2V {\n font-size: 13px;\n color: #374151;\n line-height: 1.5;\n word-break: break-word;\n white-space: pre-wrap;\n}\n\n.styles-module__screenshot___jUqau {\n margin-top: 8px;\n border-radius: 8px;\n border: 1px solid #e5e7eb;\n overflow: hidden;\n position: relative;\n max-width: 200px;\n}\n.styles-module__screenshot___jUqau img {\n width: 100%;\n height: auto;\n display: block;\n}\n.styles-module__screenshot___jUqau .styles-module__screenshotBadge___roEqY {\n position: absolute;\n top: 6px;\n right: 6px;\n background: rgba(0, 0, 0, 0.6);\n color: #fff;\n font-size: 10px;\n padding: 2px 6px;\n border-radius: 4px;\n font-weight: 500;\n}\n\n.styles-module__fileCard___-iOro {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 8px;\n padding: 8px 10px;\n border-radius: 8px;\n border: 1px solid #e5e7eb;\n background: #f9fafb;\n text-decoration: none;\n color: inherit;\n cursor: pointer;\n transition: background 0.12s;\n max-width: 200px;\n}\n.styles-module__fileCard___-iOro:hover {\n background: #f3f4f6;\n}\n\n.styles-module__fileIcon___dNJMT {\n width: 32px;\n height: 32px;\n border-radius: 6px;\n background: #e5e7eb;\n color: #374151;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 10px;\n font-weight: 700;\n flex-shrink: 0;\n letter-spacing: 0.5px;\n}\n\n.styles-module__fileInfo___dVrLV {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 1px;\n}\n\n.styles-module__fileCardName___SHOj- {\n font-size: 12px;\n font-weight: 500;\n color: #1a1a1a;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.styles-module__fileCardSize___W53JL {\n font-size: 11px;\n color: #9ca3af;\n}\n\n.styles-module__pendingFile___-OSRs {\n position: relative;\n margin: 0 16px 8px;\n padding: 8px 10px;\n padding-right: 30px;\n border-radius: 8px;\n border: 1px solid #e5e7eb;\n background: #f9fafb;\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.styles-module__divider___kDjxN {\n height: 1px;\n background: #f3f4f6;\n margin: 0;\n flex-shrink: 0;\n}\n\n.styles-module__pendingImage___gHaF3 {\n position: relative;\n margin: 0 16px 8px;\n border-radius: 8px;\n border: 1px solid #e5e7eb;\n overflow: hidden;\n max-height: 120px;\n flex-shrink: 0;\n}\n.styles-module__pendingImage___gHaF3 img {\n width: 100%;\n height: auto;\n display: block;\n object-fit: cover;\n max-height: 120px;\n}\n\n.styles-module__pendingRemove___FRL4h {\n position: absolute;\n top: 4px;\n right: 4px;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: rgba(0, 0, 0, 0.6);\n color: #fff;\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n line-height: 1;\n padding: 0;\n}\n.styles-module__pendingRemove___FRL4h:hover {\n background: rgba(0, 0, 0, 0.8);\n}\n\n.styles-module__replyArea___VQn9b {\n padding: 10px 16px 8px;\n border-top: 1px solid #f3f4f6;\n flex-shrink: 0;\n}\n\n.styles-module__replyInput___uZNBW {\n width: 100%;\n border: none;\n outline: none;\n font-size: 13px;\n font-family: inherit;\n color: #1a1a1a;\n resize: none;\n padding: 0;\n min-height: 36px;\n max-height: 120px;\n line-height: 1.55;\n transition: height 0.1s ease;\n}\n.styles-module__replyInput___uZNBW::placeholder {\n color: #9ca3af;\n}\n\n.styles-module__replyToolbar___fTFJU {\n display: flex;\n align-items: center;\n padding: 4px 16px 10px;\n gap: 4px;\n flex-shrink: 0;\n}\n\n.styles-module__replyTool___Ho-Rx {\n width: 28px;\n height: 28px;\n border: none;\n background: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n color: #9ca3af;\n transition: background 0.12s, color 0.12s;\n padding: 0;\n}\n.styles-module__replyTool___Ho-Rx:hover {\n background: #f3f4f6;\n color: #374151;\n}\n.styles-module__replyTool___Ho-Rx svg {\n width: 16px;\n height: 16px;\n}\n\n.styles-module__replySend___e0VSb {\n margin-left: auto;\n width: 28px;\n height: 28px;\n border: none;\n background: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n color: #9ca3af;\n transition: background 0.12s, color 0.12s;\n padding: 0;\n}\n.styles-module__replySend___e0VSb:hover {\n color: #3b82f6;\n}\n.styles-module__replySend___e0VSb.styles-module__active___R--Jj {\n color: #3b82f6;\n}\n.styles-module__replySend___e0VSb svg {\n width: 16px;\n height: 16px;\n}\n\n.styles-module__empty___XXGiw {\n padding: 24px 16px;\n text-align: center;\n color: #9ca3af;\n font-size: 13px;\n}\n\n.styles-module__statusBadge___el8ml {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n font-weight: 500;\n padding: 2px 8px;\n border-radius: 10px;\n margin-left: auto;\n}\n.styles-module__statusBadge___el8ml.styles-module__todo___rUWBr {\n background: #fef3c7;\n color: #92400e;\n}\n.styles-module__statusBadge___el8ml.styles-module__inProgress___HEWgU {\n background: #dbeafe;\n color: #1e40af;\n}\n.styles-module__statusBadge___el8ml.styles-module__done___zC12n {\n background: #dcfce7;\n color: #166534;\n}\n\n.styles-module__lightbox___KoWEF {\n position: fixed;\n inset: 0;\n z-index: 2147483647;\n background: rgba(0, 0, 0, 0.8);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: zoom-out;\n}\n.styles-module__lightbox___KoWEF img {\n max-width: 90vw;\n max-height: 90vh;\n border-radius: 8px;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);\n cursor: default;\n}\n\n.styles-module__lightboxClose___tGZlm {\n position: absolute;\n top: 16px;\n right: 16px;\n width: 36px;\n height: 36px;\n border-radius: 50%;\n background: rgba(255, 255, 255, 0.15);\n color: #fff;\n border: none;\n cursor: pointer;\n font-size: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.styles-module__lightboxClose___tGZlm:hover {\n background: rgba(255, 255, 255, 0.25);\n}';
2482
2425
  var classNames3 = { "thread": "styles-module__thread___ua2EO", "threadIn": "styles-module__threadIn___pBTFZ", "exiting": "styles-module__exiting___RIPeX", "threadOut": "styles-module__threadOut___-ccKh", "header": "styles-module__header___GiEBq", "avatar": "styles-module__avatar___JElAd", "headerInfo": "styles-module__headerInfo___E8809", "headerTop": "styles-module__headerTop___eDiCd", "authorName": "styles-module__authorName___T1BfB", "timestamp": "styles-module__timestamp___WusBf", "headerActions": "styles-module__headerActions___8FsMY", "headerAction": "styles-module__headerAction___Tinmq", "title": "styles-module__title___qkfqY", "commentsList": "styles-module__commentsList___kYqAR", "comment": "styles-module__comment___pW3IO", "commentActions": "styles-module__commentActions___wO0fs", "commentHighlight": "styles-module__commentHighlight___EiTmx", "commentContent": "styles-module__commentContent___RObGr", "commentTop": "styles-module__commentTop___BbTF3", "commentAuthor": "styles-module__commentAuthor___tBjpl", "commentTime": "styles-module__commentTime___0OLrz", "commentText": "styles-module__commentText___ldy2V", "screenshot": "styles-module__screenshot___jUqau", "screenshotBadge": "styles-module__screenshotBadge___roEqY", "fileCard": "styles-module__fileCard___-iOro", "fileIcon": "styles-module__fileIcon___dNJMT", "fileInfo": "styles-module__fileInfo___dVrLV", "fileCardName": "styles-module__fileCardName___SHOj-", "fileCardSize": "styles-module__fileCardSize___W53JL", "pendingFile": "styles-module__pendingFile___-OSRs", "divider": "styles-module__divider___kDjxN", "pendingImage": "styles-module__pendingImage___gHaF3", "pendingRemove": "styles-module__pendingRemove___FRL4h", "replyArea": "styles-module__replyArea___VQn9b", "replyInput": "styles-module__replyInput___uZNBW", "replyToolbar": "styles-module__replyToolbar___fTFJU", "replyTool": "styles-module__replyTool___Ho-Rx", "replySend": "styles-module__replySend___e0VSb", "active": "styles-module__active___R--Jj", "empty": "styles-module__empty___XXGiw", "statusBadge": "styles-module__statusBadge___el8ml", "todo": "styles-module__todo___rUWBr", "inProgress": "styles-module__inProgress___HEWgU", "done": "styles-module__done___zC12n", "lightbox": "styles-module__lightbox___KoWEF", "lightboxClose": "styles-module__lightboxClose___tGZlm" };
2483
2426
  if (typeof document !== "undefined") {
2484
2427
  let style = document.getElementById("impakers-debug-styles-comment-thread-styles");
@@ -2677,10 +2620,10 @@ function CommentThread({
2677
2620
  onClick: (e) => e.stopPropagation(),
2678
2621
  children: [
2679
2622
  /* @__PURE__ */ jsxs4("div", { className: styles_module_default3.header, children: [
2680
- /* @__PURE__ */ jsx4("div", { className: styles_module_default3.avatar, children: getInitials(currentUserName) }),
2623
+ /* @__PURE__ */ jsx4("div", { className: styles_module_default3.avatar, children: getInitials(task.authorName || currentUserName) }),
2681
2624
  /* @__PURE__ */ jsxs4("div", { className: styles_module_default3.headerInfo, children: [
2682
2625
  /* @__PURE__ */ jsxs4("div", { className: styles_module_default3.headerTop, children: [
2683
- /* @__PURE__ */ jsx4("span", { className: styles_module_default3.authorName, children: currentUserName }),
2626
+ /* @__PURE__ */ jsx4("span", { className: styles_module_default3.authorName, children: task.authorName || currentUserName }),
2684
2627
  /* @__PURE__ */ jsx4("span", { className: styles_module_default3.timestamp, children: timeAgo(task.createdAt) })
2685
2628
  ] }),
2686
2629
  /* @__PURE__ */ jsx4("div", { className: styles_module_default3.title, children: feedbackTitle })
@@ -3397,8 +3340,9 @@ import { createPortal as createPortal2 } from "react-dom";
3397
3340
  var SETTINGS_KEY = "impakers-debug-settings";
3398
3341
  var DEFAULTS = {
3399
3342
  markerColor: "#6366f1",
3400
- // indigo — 눈에 잘 보이는 기본 색상
3401
- markersVisible: true
3343
+ markersVisible: true,
3344
+ hideDoneMarkers: false,
3345
+ showOnlyMine: false
3402
3346
  };
3403
3347
  function loadSettings() {
3404
3348
  try {
@@ -3444,6 +3388,12 @@ function SettingsPanel({ settings, onChange, onClose }) {
3444
3388
  const handleToggleMarkers = useCallback5(() => {
3445
3389
  onChange({ ...settings, markersVisible: !settings.markersVisible });
3446
3390
  }, [settings, onChange]);
3391
+ const handleToggleHideDone = useCallback5(() => {
3392
+ onChange({ ...settings, hideDoneMarkers: !settings.hideDoneMarkers });
3393
+ }, [settings, onChange]);
3394
+ const handleToggleShowOnlyMine = useCallback5(() => {
3395
+ onChange({ ...settings, showOnlyMine: !settings.showOnlyMine });
3396
+ }, [settings, onChange]);
3447
3397
  const handleColorChange = useCallback5((color) => {
3448
3398
  onChange({ ...settings, markerColor: color });
3449
3399
  }, [settings, onChange]);
@@ -3469,6 +3419,30 @@ function SettingsPanel({ settings, onChange, onClose }) {
3469
3419
  }
3470
3420
  )
3471
3421
  ] }),
3422
+ /* @__PURE__ */ jsxs7("div", { className: styles_module_default6.field, children: [
3423
+ /* @__PURE__ */ jsx7("div", { className: styles_module_default6.fieldLabel, children: "\uC644\uB8CC \uD540 \uC228\uAE30\uAE30" }),
3424
+ /* @__PURE__ */ jsx7(
3425
+ "button",
3426
+ {
3427
+ className: `${styles_module_default6.toggle} ${settings.hideDoneMarkers ? styles_module_default6.on : ""}`,
3428
+ onClick: handleToggleHideDone,
3429
+ type: "button",
3430
+ children: /* @__PURE__ */ jsx7("span", { className: styles_module_default6.toggleThumb })
3431
+ }
3432
+ )
3433
+ ] }),
3434
+ /* @__PURE__ */ jsxs7("div", { className: styles_module_default6.field, children: [
3435
+ /* @__PURE__ */ jsx7("div", { className: styles_module_default6.fieldLabel, children: "\uB0B4\uAC00 \uCD94\uAC00\uD55C \uAC83\uB9CC" }),
3436
+ /* @__PURE__ */ jsx7(
3437
+ "button",
3438
+ {
3439
+ className: `${styles_module_default6.toggle} ${settings.showOnlyMine ? styles_module_default6.on : ""}`,
3440
+ onClick: handleToggleShowOnlyMine,
3441
+ type: "button",
3442
+ children: /* @__PURE__ */ jsx7("span", { className: styles_module_default6.toggleThumb })
3443
+ }
3444
+ )
3445
+ ] }),
3472
3446
  /* @__PURE__ */ jsxs7("div", { className: styles_module_default6.field, children: [
3473
3447
  /* @__PURE__ */ jsx7("div", { className: styles_module_default6.fieldLabel, children: "\uB9C8\uCEE4 \uC0C9\uC0C1" }),
3474
3448
  /* @__PURE__ */ jsx7("div", { className: styles_module_default6.colors, children: MARKER_COLORS.map((c) => /* @__PURE__ */ jsx7(
@@ -3904,15 +3878,17 @@ function DebugWidget({ endpoint, getUser, onHide }) {
3904
3878
  if (routeMatch?.context) {
3905
3879
  metadata.routeDebug = routeMatch.context;
3906
3880
  }
3907
- const descriptionParts = [comment];
3881
+ const debugParts = [];
3882
+ debugParts.push(`## \uD53C\uB4DC\uBC31 ${comment}`);
3908
3883
  if (debugTargets.length > 0) {
3909
- descriptionParts.push(
3910
- "\n\n---\n**\uB514\uBC84\uAE45 \uD0C0\uAC9F \uD30C\uC77C**:",
3911
- ...debugTargets.map((target) => {
3912
- const suffix = target.line ? `:${target.line}${typeof target.column === "number" ? `:${target.column}` : ""}` : "";
3913
- return `- [${target.kind}] \`${target.file}${suffix}\` (${target.reason})`;
3914
- })
3915
- );
3884
+ debugParts.push("");
3885
+ debugParts.push("---");
3886
+ debugParts.push("");
3887
+ debugParts.push("**\uB514\uBC84\uAE45 \uD0C0\uAC9F \uD30C\uC77C**:");
3888
+ debugTargets.forEach((target) => {
3889
+ const suffix = target.line ? `:${target.line}${typeof target.column === "number" ? `:${target.column}` : ""}` : "";
3890
+ debugParts.push(`- [${target.kind}] \`${target.file}${suffix}\` (${target.reason})`);
3891
+ });
3916
3892
  }
3917
3893
  const elementInfo = [];
3918
3894
  if (pendingAnnotation.element) {
@@ -3942,29 +3918,67 @@ function DebugWidget({ endpoint, getUser, onHide }) {
3942
3918
  elementInfo.push(`**\uC811\uADFC\uC131**: ${pendingAnnotation.accessibility}`);
3943
3919
  }
3944
3920
  if (elementInfo.length > 0) {
3945
- descriptionParts.push(`
3946
-
3947
- ---
3948
- ${elementInfo.join("\n")}`);
3921
+ debugParts.push("");
3922
+ debugParts.push("---");
3923
+ debugParts.push("");
3924
+ elementInfo.forEach((line) => debugParts.push(line));
3949
3925
  }
3950
3926
  if (metadata.consoleErrors?.length) {
3951
- descriptionParts.push(`
3952
- **\uCD5C\uADFC \uCF58\uC194 \uC5D0\uB7EC**:`);
3953
- metadata.consoleErrors.slice(-10).forEach((e) => descriptionParts.push(`- \`${e.slice(0, 200)}\``));
3927
+ debugParts.push("");
3928
+ debugParts.push("---");
3929
+ debugParts.push("");
3930
+ debugParts.push("**\uCD5C\uADFC \uCF58\uC194 \uC5D0\uB7EC**:");
3931
+ metadata.consoleErrors.slice(-10).forEach((e) => debugParts.push(`- \`${e.slice(0, 200)}\``));
3954
3932
  }
3955
3933
  if (metadata.consoleLogs?.length) {
3956
3934
  const recentLogs = metadata.consoleLogs.filter((l) => l.level === "error" || l.level === "warn").slice(-10);
3957
3935
  if (recentLogs.length > 0) {
3958
- descriptionParts.push(`
3959
- **\uCD5C\uADFC \uCF58\uC194 \uB85C\uADF8**:`);
3960
- recentLogs.forEach((l) => descriptionParts.push(`- [${l.level}] \`${l.message.slice(0, 200)}\``));
3936
+ debugParts.push("");
3937
+ debugParts.push("**\uCD5C\uADFC \uCF58\uC194 \uB85C\uADF8**:");
3938
+ recentLogs.forEach((l) => debugParts.push(`- [${l.level}] \`${l.message.slice(0, 200)}\``));
3939
+ }
3940
+ }
3941
+ debugParts.push("");
3942
+ debugParts.push("---");
3943
+ debugParts.push("");
3944
+ debugParts.push("## \uD658\uACBD \uC815\uBCF4");
3945
+ debugParts.push("");
3946
+ debugParts.push(`- **URL**: ${metadata.url}`);
3947
+ debugParts.push(`- **\uC2DC\uC810**: ${new Date(metadata.timestamp).toLocaleString("ko-KR")}`);
3948
+ debugParts.push(`- **\uBE0C\uB77C\uC6B0\uC800**: ${metadata.browser}`);
3949
+ debugParts.push(`- **\uD654\uBA74**: ${metadata.viewport} (@${metadata.pixelRatio}x)`);
3950
+ debugParts.push(`- **\uC5B8\uC5B4**: ${metadata.language}`);
3951
+ if (metadata.user?.name) {
3952
+ debugParts.push(`- **\uC0AC\uC6A9\uC790**: ${metadata.user.name}`);
3953
+ }
3954
+ if (metadata.performance && Object.keys(metadata.performance).length > 0) {
3955
+ debugParts.push("");
3956
+ debugParts.push("---");
3957
+ debugParts.push("");
3958
+ debugParts.push("## \uC131\uB2A5");
3959
+ debugParts.push("");
3960
+ debugParts.push("| \uD56D\uBAA9 | \uAC12 |");
3961
+ debugParts.push("|------|-----|");
3962
+ const perfLabels = {
3963
+ pageLoadTime: "\uD398\uC774\uC9C0 \uB85C\uB529",
3964
+ domContentLoaded: "DOM \uB85C\uB4DC",
3965
+ ttfb: "TTFB",
3966
+ firstContentfulPaint: "FCP",
3967
+ usedJSHeapMB: "\uBA54\uBAA8\uB9AC \uC0AC\uC6A9",
3968
+ totalJSHeapMB: "\uBA54\uBAA8\uB9AC \uC804\uCCB4"
3969
+ };
3970
+ for (const [key, value] of Object.entries(metadata.performance)) {
3971
+ const label = perfLabels[key] || key;
3972
+ const unit = key.includes("Heap") ? "MB" : "ms";
3973
+ debugParts.push(`| ${label} | ${value}${unit} |`);
3961
3974
  }
3962
3975
  }
3963
3976
  const result = await submitFeedback(endpoint, {
3964
3977
  title: comment.slice(0, 100),
3965
- description: descriptionParts.join("\n"),
3978
+ description: "",
3966
3979
  priority: "medium",
3967
3980
  metadata,
3981
+ debugInfo: debugParts.join("\n"),
3968
3982
  screenshot,
3969
3983
  feedbackUrl: window.location.pathname,
3970
3984
  feedbackMarker: {
@@ -4138,6 +4152,15 @@ ${elementInfo.join("\n")}`);
4138
4152
  }
4139
4153
  ];
4140
4154
  const currentPath = routePath;
4155
+ const currentUserName = getUser?.()?.name ? String(getUser().name) : null;
4156
+ const visibleAnnotations = useMemo(() => {
4157
+ return annotations.filter((a) => {
4158
+ const task = serverTasks.find((t) => t.id === a.id);
4159
+ if (settings.hideDoneMarkers && (a.status === "done" || a.status === "resolved")) return false;
4160
+ if (settings.showOnlyMine && task?.authorName && currentUserName && task.authorName !== currentUserName) return false;
4161
+ return true;
4162
+ });
4163
+ }, [annotations, serverTasks, settings.hideDoneMarkers, settings.showOnlyMine, currentUserName]);
4141
4164
  const allInboxItems = serverTasks.map((task) => ({
4142
4165
  id: task.id,
4143
4166
  title: task.title || "\uD53C\uB4DC\uBC31",
@@ -4256,7 +4279,7 @@ ${elementInfo.join("\n")}`);
4256
4279
  );
4257
4280
  })()
4258
4281
  ] }),
4259
- /* @__PURE__ */ jsx8("div", { className: styles_module_default7.markersLayer, "data-impakers-debug": "", style: { display: settings.markersVisible ? void 0 : "none" }, children: annotations.filter((a) => !a.isFixed).map((annotation, i) => /* @__PURE__ */ jsx8(
4282
+ /* @__PURE__ */ jsx8("div", { className: styles_module_default7.markersLayer, "data-impakers-debug": "", style: { display: settings.markersVisible ? void 0 : "none" }, children: visibleAnnotations.filter((a) => !a.isFixed).map((annotation, i) => /* @__PURE__ */ jsx8(
4260
4283
  AnnotationMarker,
4261
4284
  {
4262
4285
  annotation,
@@ -4275,7 +4298,7 @@ ${elementInfo.join("\n")}`);
4275
4298
  annotation.id
4276
4299
  )) }),
4277
4300
  /* @__PURE__ */ jsxs8("div", { className: styles_module_default7.fixedMarkersLayer, "data-impakers-debug": "", style: { display: settings.markersVisible ? void 0 : "none" }, children: [
4278
- annotations.filter((a) => a.isFixed).map((annotation, i) => /* @__PURE__ */ jsx8(
4301
+ visibleAnnotations.filter((a) => a.isFixed).map((annotation, i) => /* @__PURE__ */ jsx8(
4279
4302
  AnnotationMarker,
4280
4303
  {
4281
4304
  annotation,
@@ -4334,6 +4357,7 @@ ${elementInfo.join("\n")}`);
4334
4357
  id: annotation.id,
4335
4358
  title: taskData?.title || annotation.comment || "\uD53C\uB4DC\uBC31",
4336
4359
  status: taskData?.status || "todo",
4360
+ authorName: taskData?.authorName || void 0,
4337
4361
  createdAt: taskData?.createdAt || new Date(annotation.timestamp).toISOString(),
4338
4362
  comments: threadComments[annotation.id] || []
4339
4363
  };