@01.works/visual-review 0.8.2 → 0.8.4

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.
@@ -0,0 +1,1037 @@
1
+ import{a as e,c as t,d as n,f as r,i,l as a,m as o,n as s,o as c,p as l,r as u,s as d,u as f}from"./source-context-leuy5fdX.js";function p(e){return typeof CSS<`u`&&CSS.escape?CSS.escape(e):e.replace(/([^\w-])/g,`\\$1`)}function m(e){let t=_(e),n=h(e,t);if(t===document)return n;let r=[];for(;t!==document;){if(l(t)){let e=t.host,n=_(e);r.unshift({kind:`shadow`,selector:h(e,n)}),t=n;continue}let e=te(t);if(!e)return n;let i=_(e);r.unshift({kind:`frame`,selector:h(e,i)}),t=i}let i=c(r,n);return i.length<=4096?i:n}function h(e,t){let n=[],r=e,i=e.ownerDocument;for(;r&&r!==i.documentElement;){if(r===i.body){n.unshift(`body`);break}let e=ee(r,t);if(e){n.unshift(e);break}let a=r.tagName.toLowerCase(),o=r.parentElement,s=o??g(r);if(s){let e=Array.from(s.children).filter(e=>e.tagName===r?.tagName);e.length>1&&(a+=`:nth-of-type(${e.indexOf(r)+1})`)}n.unshift(a),r=o}return n.join(` > `)}function g(e){let t=e.parentNode;return t&&`children`in t?t:null}function ee(e,t){return[e.id?`#${p(e.id)}`:null,v(e,`data-review-id`),v(e,`data-testid`),v(e,`data-id`)].find(e=>{if(!e)return!1;try{return t.querySelectorAll(e).length===1}catch{return!1}})??null}function _(e){let t=e.getRootNode();return n(t)||l(t)?t:e.ownerDocument}function te(e){try{return e.defaultView?.frameElement??null}catch{return null}}function v(e,t){let n=e.getAttribute(t);return n?`[${t}="${p(n)}"]`:null}function y(e){if(!b(e))return!1;let n=ne(e);for(;n;){if(!b(n))return!1;n=ne(n)}let r=t(e);return r.width>0&&r.height>0&&e.getClientRects().length>0}function b(e){let t=e.ownerDocument.defaultView,n=t?.HTMLElement;if(n&&e instanceof n&&e.hidden)return!1;let r=t?.getComputedStyle(e);return!r||r.display===`none`||r.visibility===`hidden`||r.visibility===`collapse`?!1:r.opacity!==`0`&&r.contentVisibility!==`hidden`}function ne(e){if(e.assignedSlot)return e.assignedSlot;if(e.parentElement)return e.parentElement;let t=e.getRootNode();if(l(t))return t.host;if(t.nodeType===9&&t!==document)try{return t.defaultView?.frameElement??null}catch{return null}return null}function re(e){if(!e.selector)return[];if(f(e.selector))return o(e.selector).filter(e=>!r(e));try{let t=Array.from(document.querySelectorAll(e.selector)).filter(e=>!r(e));if(t.length>0)return t}catch{return[]}return o(e.selector).filter(e=>!r(e))}function x(e,n,r){let i=t(e),a=Math.max(i.width,1),o=Math.max(i.height,1);return{selector:m(e),offsetX:C((n-(i.left+window.scrollX))/a),offsetY:C((r-(i.top+window.scrollY))/o),viewportX:C((n-window.scrollX)/Math.max(window.innerWidth,1)),viewportY:C((r-window.scrollY)/Math.max(window.innerHeight,1))}}function ie(e,t){return{selector:``,offsetX:C(e),offsetY:C(t),viewportX:C(e),viewportY:C(t)}}function S(e){let n=re(e),r=n.find(y)??n[0]??null;if(r){let n=t(r);return{x:n.left+window.scrollX+n.width*e.offsetX,y:n.top+window.scrollY+n.height*e.offsetY,anchored:!0,visible:y(r),element:r}}return{x:window.scrollX+window.innerWidth*e.viewportX,y:window.scrollY+window.innerHeight*e.viewportY,anchored:!1,visible:!0,element:null}}function C(e){return Math.min(1,Math.max(0,Number.isFinite(e)?e:0))}function w(t){e(t)}function T(e,t){let n=s();if(!n)return D(e,t);try{let i=n.getElementAtPoint(e,t,{filter:e=>n.isElementGrabbable(e)&&!r(e)});return i?O(i,e,t):null}catch{return D(e,t)}}function E(e){if(e.ownerDocument!==document)return t(e);let n=s();if(!n)return e.getBoundingClientRect();try{let t=n.getElementBounds(e);return new DOMRect(t.x,t.y,t.width,t.height)}catch{return e.getBoundingClientRect()}}function ae(t){e(t);let n=s();if(!n)return()=>void 0;let r=!1;try{if(!n.isFreezeActive()){let e=u(t);try{n.freeze(),r=!0}finally{e()}}}catch{return()=>void 0}let i=!1;return()=>{if(!(i||!r)){i=!0;try{n.unfreeze()}catch{}}}}function D(e,t){let n=(typeof document.elementsFromPoint==`function`?document.elementsFromPoint(e,t):typeof document.elementFromPoint==`function`?[document.elementFromPoint(e,t)].filter(e=>!!e):[]).find(e=>!r(e))??null;return n?O(n,e,t):null}function O(e,t,n){let i=e,a=t,o=n,s=new Set;for(;!s.has(i);){s.add(i);let e=oe(i,a,o);if(e&&e!==i&&!r(e)){i=e;continue}let t=k(i,a,o);if(!t)break;i=t.element,a=t.clientX,o=t.clientY}return i}function oe(e,t,n){try{return e.shadowRoot?.elementFromPoint(t,n)??null}catch{return null}}function k(e,t,n){if(e.tagName.toLowerCase()!==`iframe`)return null;try{let i=e,o=i.contentDocument;if(!o)return null;let s=e.getBoundingClientRect(),c=a(i),l=(t-s.left)/c.x-i.clientLeft,u=(n-s.top)/c.y-i.clientTop,d=o.elementFromPoint(l,u);return d&&!r(d)?{element:d,clientX:l,clientY:u}:null}catch{return null}}const A=Symbol(`source-resolution-stopped`);function se(e,t){let n=E(e),r=x(e,t.clientX+window.scrollX,t.clientY+window.scrollY),i=Se(n);return ye(r,`element`,i,[be(e,i)])}function ce(e){let t=T(e.clientX,e.clientY);return t?se(t,e):ye(ie(e.clientX/Math.max(window.innerWidth,1),e.clientY/Math.max(window.innerHeight,1)),`viewport`,{pageX:e.clientX+window.scrollX,pageY:e.clientY+window.scrollY,width:0,height:0,viewportX:e.clientX,viewportY:e.clientY,viewportWidth:window.innerWidth,viewportHeight:window.innerHeight},[])}function le(e,n){let r=Math.min(e.clientX,n.clientX),i=Math.min(e.clientY,n.clientY),a=Math.abs(n.clientX-e.clientX),o=Math.abs(n.clientY-e.clientY),s=new DOMRect(r,i,a,o),c=pe(ue(s),fe(s)).slice(0,8),l={clientX:r+a/2,clientY:i+o/2},u=c[0];return ye(u?x(u,l.clientX+window.scrollX,l.clientY+window.scrollY):ie(l.clientX/Math.max(window.innerWidth,1),l.clientY/Math.max(window.innerHeight,1)),`region`,Se(s),c.map(e=>be(e,Se(t(e)))))}function ue(e){let n=o(`*`).filter(n=>n===n.ownerDocument.body||n===n.ownerDocument.documentElement||r(n)||!y(n)?!1:Ce(e,t(n))),i=new Set(n),a=new Set;return n.forEach(e=>{let t=de(e);for(;t;)i.has(t)&&a.add(t),t=de(t)}),n.filter(e=>!a.has(e))}function de(e){if(e.assignedSlot)return e.assignedSlot;if(e.parentElement)return e.parentElement;let t=e.getRootNode();if(l(t))return t.host;if(n(t)&&t!==document)try{return t.defaultView?.frameElement??null}catch{return null}return null}function fe(e){return{clientX:e.left+e.width/2,clientY:e.top+e.height/2}}function pe(e,n){let r=e.findIndex(e=>{let r=t(e);return n.clientX>=r.left&&n.clientX<=r.right&&n.clientY>=r.top&&n.clientY<=r.bottom});return r<=0?e:[e[r],...e.slice(0,r),...e.slice(r+1)]}async function me(e,t,n={}){if(n.signal?.aborted)return ge(e,t);let r=he(n),i=e.elements.map(async e=>{let n=we(e.selector);if(!n)return{context:e,provenance:void 0};let i=await t.resolve(n,{signal:r.signal});return{context:{...e,source:i.source,componentStack:i.componentStack},provenance:i.provenance}});try{let n=await Promise.allSettled(i.map(e=>Promise.race([e,r.stopped]))),a=n.map((t,n)=>t.status===`fulfilled`&&t.value!==A?t.value.context:e.elements[n]),o=ve(n.flatMap(e=>e.status===`fulfilled`&&e.value!==A&&e.value.provenance?[{located:e.value.context.source!==null,provenance:e.value.provenance}]:[]))??e.sourceProvenance??_e(t);return{...e,elements:a,...o?{sourceProvenance:o}:{}}}finally{r.dispose()}}function he(e){let t=new AbortController,n=e.signal,r=()=>t.abort(n?.reason);n?.aborted?r():n?.addEventListener(`abort`,r,{once:!0});let i=e.deadlineMs??400,a=setTimeout(()=>t.abort(`source-resolution-deadline`),Number.isFinite(i)?Math.max(0,i):400),o=new Promise(e=>{if(t.signal.aborted){e(A);return}t.signal.addEventListener(`abort`,()=>e(A),{once:!0})});return{signal:t.signal,stopped:o,dispose(){clearTimeout(a),n?.removeEventListener(`abort`,r)}}}function ge(e,t){let n=e.sourceProvenance??_e(t);return{...e,...n?{sourceProvenance:n}:{}}}function _e(e){try{return e.unavailableProvenance?.()}catch{return}}function ve(e){return(e.find(e=>e.located)??e[0])?.provenance}function ye(e,t,n,r){return{kind:t,anchor:e,region:n,elements:r,pageUrl:`${window.location.origin}${window.location.pathname}`,pageTitle:document.title,capturedAt:Date.now()}}function be(e,t){return{selector:m(e),tagName:e.tagName.toLowerCase(),textPreview:xe(e),rect:t,source:null,componentStack:[]}}function xe(e){let t=(e instanceof HTMLElement?e.innerText:null)||e.textContent;return([e.getAttribute(`aria-label`),t,e.getAttribute(`alt`),e.getAttribute(`title`)].map(e=>(e??``).replace(/\s+/g,` `).trim()).find(Boolean)??``).slice(0,240)}function Se(e){return{pageX:e.left+window.scrollX,pageY:e.top+window.scrollY,width:e.width,height:e.height,viewportX:e.left,viewportY:e.top,viewportWidth:window.innerWidth,viewportHeight:window.innerHeight}}function Ce(e,t){return e.left<t.right&&e.right>t.left&&e.top<t.bottom&&e.bottom>t.top}function we(e){return e?re({selector:e,offsetX:0,offsetY:0,viewportX:0,viewportY:0})[0]??null:null}function Te(e){let t,n=!1,r={pageId:e.pageId,peers:[],messages:[]},i,a,o=!1,s=``,c=``,l,u=e.cursors||e.chat,d={x:Math.max(24,window.innerWidth-180),y:Math.max(24,window.innerHeight-96)},f=j(`rg-collaboration-cursors`);f.setAttribute(`aria-hidden`,`true`);let p=j(`rg-cursor-chat-announcements`);p.setAttribute(`role`,`log`),p.setAttribute(`aria-live`,`polite`),p.setAttribute(`aria-relevant`,`additions`);let m=new Map,h=j(`rg-collaboration-participants`);h.setAttribute(`role`,`status`);let g=j(`rg-cursor-chat-composer`);g.hidden=!0,g.setAttribute(`role`,`dialog`),g.setAttribute(`aria-label`,`커서 채팅`),g.style.setProperty(`--rg-local-color`,ke(e.session.reviewerId));let ee=j(`rg-cursor-chat-header`),_=document.createElement(`strong`);_.textContent=e.session.displayName;let te=document.createElement(`span`);te.textContent=`Enter 전송 · 바깥 클릭 닫기`,ee.append(_,te);let v=j(`rg-cursor-chat-preview`);v.hidden=!0;let y=document.createElement(`input`);y.className=`rg-cursor-chat-input`,y.type=`text`,y.maxLength=280,y.placeholder=`메시지 입력…`,y.setAttribute(`aria-label`,`커서 채팅 메시지`),g.append(ee,v,y);let b=document.createElement(`button`);b.className=`rg-cursor-chat-mobile-trigger`,b.type=`button`,b.setAttribute(`aria-label`,`커서 채팅 시작`),b.title=`커서 채팅`,b.textContent=`채팅`;let ne=()=>{De(h,r.peers,e.session.displayName),u&&Oe(f,r.peers),e.chat&&Ee(p,m,r.peers)},re=()=>(s.trim()||c).slice(0,280),x=()=>{v.textContent=c,v.hidden=!c,g.dataset.hasMessage=String(!!c);let e=Math.min(260,Math.max(180,window.innerWidth-24)),t=d.x>window.innerWidth/2,n=d.y>window.innerHeight/2,r=M(t?d.x-e-14:d.x+14,12,Math.max(12,window.innerWidth-e-12)),i=c?118:84,a=M(n?d.y-i-14:d.y+18,12,Math.max(12,window.innerHeight-i-12));g.dataset.horizontal=t?`left`:`right`,g.dataset.vertical=n?`above`:`below`,g.style.left=`${r}px`,g.style.top=`${a}px`},ie=()=>{l!==void 0&&window.clearTimeout(l),l=window.setTimeout(()=>{l=void 0,!s.trim()&&(c=``,x(),C(w()))},5e3)},S=e=>{o=e,g.hidden=!e,e?(x(),C(w()),queueMicrotask(()=>y.focus())):(l!==void 0&&(window.clearTimeout(l),l=void 0),s=``,c=``,y.value=``,C(w()),y.blur())};y.addEventListener(`input`,()=>{s=y.value,s.trim()&&(c=``),x(),C(w())}),y.addEventListener(`keydown`,e=>{if(e.key===`Escape`){e.preventDefault(),S(!1);return}if(e.key!==`Enter`||e.isComposing)return;e.preventDefault();let t=s.trim();t&&(c=t,s=``,y.value=``,x(),C(w()),ie(),y.focus())});let C=t=>{!u||n||e.repository.publishPresence(e.pageId,e.roomId,{...t,cursorChat:re()})},w=()=>({reviewerId:e.session.reviewerId,displayName:e.session.displayName,color:ke(e.session.reviewerId),active:!0,pathname:e.pathname,cursorX:d.x,cursorY:d.y,viewportWidth:window.innerWidth,viewportHeight:window.innerHeight}),T=()=>({reviewerId:e.session.reviewerId,displayName:e.session.displayName,color:ke(e.session.reviewerId),active:!1,pathname:e.pathname}),E=t=>{t.pointerType===`touch`||t.composedPath().includes(e.root.host)||(d.x=t.clientX,d.y=t.clientY,o&&x(),a=t,i===void 0&&(i=window.requestAnimationFrame(()=>{i=void 0;let e=a;a=void 0,e&&C({...w(),cursorX:e.clientX,cursorY:e.clientY})})))},ae=()=>{document.visibilityState!==`visible`&&(o&&S(!1),C(T()))},D=()=>C(T()),O=e=>{!o||e.composedPath().includes(g)||S(!1)},oe=()=>{o&&queueMicrotask(()=>{!o||g.contains(e.root.activeElement)||S(!1)})},k=t=>{t.key!==`/`||t.defaultPrevented||t.repeat||t.isComposing||t.metaKey||t.ctrlKey||t.altKey||o||Ae(t)||e.canOpenChat?.()===!1||(t.preventDefault(),S(!0))},A=e=>{e instanceof KeyboardEvent&&k(e)};return{start(){if(n)return;let i=e.root.querySelector(`.rg-toolbar-actions`);u&&i?.append(h),e.chat&&(i?.append(b),e.root.append(g,p),b.addEventListener(`click`,()=>S(!0)),e.root.addEventListener(`keydown`,A,!0),document.addEventListener(`keydown`,k),document.addEventListener(`pointerdown`,O,!0),g.addEventListener(`focusout`,oe)),u&&(e.root.prepend(f),document.addEventListener(`pointermove`,E,{passive:!0}),document.addEventListener(`pointerleave`,D),document.addEventListener(`visibilitychange`,ae)),t=e.repository.subscribe(e.pageId,{roomId:e.roomId,cursors:u,chat:!1},e=>{r=e,ne()},e.onFailure),C(T()),ne()},stop(){n||(n=!0,i!==void 0&&window.cancelAnimationFrame(i),l!==void 0&&window.clearTimeout(l),document.removeEventListener(`pointermove`,E),document.removeEventListener(`pointerleave`,D),document.removeEventListener(`visibilitychange`,ae),e.root.removeEventListener(`keydown`,A,!0),document.removeEventListener(`keydown`,k),document.removeEventListener(`pointerdown`,O,!0),g.removeEventListener(`focusout`,oe),t?.(),f.remove(),h.remove(),b.remove(),g.remove(),p.remove())}}}function Ee(e,t,n){let r=new Set(n.map(({peerId:e})=>e));for(let e of t.keys())r.has(e)||t.delete(e);for(let r of n){let n=r.cursorChat?.trim()??``,i=t.get(r.peerId)??``;if(!n||n===i){t.set(r.peerId,n);continue}t.set(r.peerId,n);let a=j(`rg-cursor-chat-announcement`);for(a.textContent=`${r.displayName}, ${r.pathname||`/`}: ${n}`,e.append(a);e.childElementCount>20;)e.firstElementChild?.remove()}}function De(e,t,n){let r=[n,...t.map(({displayName:e})=>e)];e.hidden=r.length<2,e.textContent=r.length<2?``:`${r.length}명`,e.title=r.join(`, `)}function Oe(e,t){e.replaceChildren();for(let n of t){if(!n.active||n.cursorX===void 0||n.cursorY===void 0||!n.viewportWidth||!n.viewportHeight)continue;let t=j(`rg-collaboration-cursor`);t.style.setProperty(`--rg-peer-color`,n.color);let r=n.cursorX/n.viewportWidth*window.innerWidth,i=n.cursorY/n.viewportHeight*window.innerHeight;t.style.left=`${M(r,0,window.innerWidth)}px`,t.style.top=`${M(i,0,window.innerHeight)}px`,t.dataset.horizontal=r>window.innerWidth/2?`left`:`right`,t.dataset.vertical=i>window.innerHeight/2?`above`:`below`;let a=j(`rg-collaboration-cursor-pointer`),o=j(`rg-collaboration-cursor-label`);if(o.textContent=n.displayName,t.append(a,o),n.cursorChat){let e=j(`rg-collaboration-cursor-chat`),r=j(`rg-collaboration-cursor-chat-page`);r.textContent=n.pathname||`/`;let i=j(`rg-collaboration-cursor-chat-body`);i.textContent=n.cursorChat,e.append(r,i),t.append(e)}e.append(t)}}function ke(e){let t=[`#7c3aed`,`#2563eb`,`#0891b2`,`#059669`,`#ca8a04`,`#ea580c`,`#dc2626`],n=0;for(let t of e)n=(n<<5)-n+t.charCodeAt(0)|0;return t[Math.abs(n)%t.length]}function Ae(e){let t=e.composedPath()[0];return t instanceof Element&&t.closest(`input, textarea, select, [contenteditable]:not([contenteditable="false"]), [role="textbox"]`)!==null}function j(e){let t=document.createElement(`div`);return t.className=e,t}function M(e,t,n){return Math.min(n,Math.max(t,e))}function je(e={}){let t=document.createElement(`div`);t.className=`rg-toolbar`,t.setAttribute(`role`,`toolbar`),t.setAttribute(`aria-label`,`Visual Review`);let n=I(`rg-toolbar-actions-shell`),r=I(`rg-toolbar-actions`);e.developerGrab&&r.append(Me());let i=I(`rg-action-wrap`),a=L(`rg-action rg-feedback-tool`,`피드백 위치 선택`);a.setAttribute(`aria-pressed`,`false`),a.append(Fe());let o=document.createElement(`span`);o.className=`rg-tooltip`,o.setAttribute(`aria-hidden`,`true`),o.textContent=`피드백`,i.append(a,o),r.append(i),n.append(r);let s=L(`rg-collapse`,`Visual Review 접기`);if(s.setAttribute(`aria-expanded`,`true`),s.append(Le()),t.append(n,s),e.developerGrab){let e=I(`rg-developer-status`);e.dataset.visible=`false`,e.dataset.tone=`neutral`,e.setAttribute(`aria-hidden`,`true`),t.append(e)}return t}function Me(){let e=I(`rg-action-wrap`),t=L(`rg-action rg-developer-grab-tool`,`React Grab 코드 선택`);t.setAttribute(`aria-keyshortcuts`,`Meta+C Control+C`),t.setAttribute(`aria-pressed`,`false`),t.append(Ie());let n=document.createElement(`span`);return n.className=`rg-tooltip`,n.setAttribute(`aria-hidden`,`true`),n.textContent=`코드 선택 · ⌘/Ctrl+C 길게`,e.append(t,n),e}function Ne(e,t,n=t){let r=document.createElement(`div`);r.className=`rg-selection-label`,r.setAttribute(`role`,`dialog`),r.setAttribute(`aria-label`,`새 피드백 작성`),r.style.opacity=`0`,r.style.left=`-1000px`,r.style.top=`-1000px`;let i=P(`0 0 16 8`,[F(`M0 8 L7.293 0.707 A1 1 0 0 1 8.707 0.707 L16 8 Z`)]);i.classList.add(`rg-label-arrow`);let a=I(`rg-surface`),o=I(`rg-tag-row`),s=document.createElement(`span`);s.className=`rg-tag`,s.textContent=e,o.append(s);let c=I(`rg-bottom-section`),l=document.createElement(`textarea`);l.setAttribute(`aria-keyshortcuts`,`Meta+Enter Control+Enter Escape`),l.maxLength=4e3,l.rows=1,l.placeholder=t,l.setAttribute(`aria-label`,n);let u=L(`rg-submit`,`피드백 저장`);return u.title=`저장 (⌘/Ctrl+Enter)`,u.append(Re()),c.append(l,u),a.append(o,c),r.append(i,a),r}function Pe(){return P(`0 0 12 12`,[F(`M2.47 1.76a.5.5 0 0 0-.71.71L5.29 6 1.76 9.53a.5.5 0 0 0 .71.71L6 6.71l3.53 3.53a.5.5 0 0 0 .71-.71L6.71 6l3.53-3.53a.5.5 0 0 0-.71-.71L6 5.29 2.47 1.76Z`)])}function N(e,t){queueMicrotask(()=>{let n=e.getBoundingClientRect();if(n.width<=0||n.height<=0)return;let r=window.visualViewport,i=r?.offsetLeft??0,a=r?.offsetTop??0,o=r?.width??window.innerWidth,s=r?.height??window.innerHeight,c=t.anchorX??t.x+t.width/2,l=ze(c,i+8+n.width/2,i+o-8-n.width/2),u=a+s-(t.y+t.height)>=n.height+12+8,d=u?t.y+t.height+12:Math.max(a+8,t.y-12-n.height);e.dataset.side=u?`below`:`above`,e.style.left=`${l}px`,e.style.top=`${d}px`,e.style.opacity=`1`;let f=ze(c-(l-n.width/2),16,n.width-16);e.style.setProperty(`--rg-arrow-left`,`${f}px`)})}function Fe(){return P(`0 0 12 12`,[F(`M1 6C1 3.239 3.239 1 6 1C8.761 1 11 3.239 11 6C11 8.761 8.761 11 6 11C5.103 11 4.261 10.764 3.532 10.35C2.959 10.759 2.257 11 1.5 11C1.376 11 1.253 10.993 1.132 10.981C0.923 10.959 0.75 10.809 0.699 10.605C0.648 10.402 0.729 10.188 0.903 10.07C1.347 9.768 1.688 9.328 1.865 8.812C1.319 8.011 1 7.042 1 6Z`,{"fill-rule":`evenodd`,"clip-rule":`evenodd`})])}function Ie(){return P(`0 0 12 12`,[F(`M4.25 2 1.5 6l2.75 4M7.75 2l2.75 4-2.75 4`,{fill:`none`,stroke:`currentColor`,"stroke-width":`1.25`,"stroke-linecap":`round`,"stroke-linejoin":`round`})])}function Le(){return P(`0 0 24 24`,[F(`M9.29289 16.7071C8.90237 16.3166 8.90237 15.6834 9.29289 15.2929L12.5858 12L9.29289 8.70711C8.90237 8.31658 8.90237 7.68342 9.29289 7.29289C9.68342 6.90237 10.3166 6.90237 10.7071 7.29289L14.7071 11.2929C14.8946 11.4804 15 11.7348 15 12C15 12.2652 14.8946 12.5196 14.7071 12.7071L10.7071 16.7071C10.3166 17.0976 9.68342 17.0976 9.29289 16.7071Z`,{"fill-rule":`evenodd`,"clip-rule":`evenodd`})])}function Re(){return P(`0 0 24 24`,[F(`M19.2929 12.7071C19.6834 13.0976 20.3166 13.0976 20.7071 12.7071C21.0976 12.3166 21.0976 11.6834 20.7071 11.2929L12.7071 3.29289C12.5196 3.10536 12.2652 3 12 3C11.7348 3 11.4804 3.10536 11.2929 3.29289L3.29289 11.2929C2.90237 11.6834 2.90237 12.3166 3.29289 12.7071C3.68342 13.0976 4.31658 13.0976 4.70711 12.7071L11 6.41421L11 20C11 20.5523 11.4477 21 12 21C12.5523 21 13 20.5523 13 20L13 6.41422L19.2929 12.7071Z`,{"fill-rule":`evenodd`,"clip-rule":`evenodd`})])}function P(e,t){let n=document.createElementNS(`http://www.w3.org/2000/svg`,`svg`);return n.setAttribute(`viewBox`,e),n.setAttribute(`aria-hidden`,`true`),n.setAttribute(`focusable`,`false`),n.append(...t),n}function F(e,t={}){let n=document.createElementNS(`http://www.w3.org/2000/svg`,`path`);n.setAttribute(`d`,e);for(let[e,r]of Object.entries(t))n.setAttribute(e,r);return n}function I(e){let t=document.createElement(`div`);return t.className=e,t}function L(e,t){let n=document.createElement(`button`);return n.type=`button`,n.className=e,n.setAttribute(`aria-label`,t),n}function ze(e,t,n){return Math.min(n,Math.max(t,e))}async function Be(e){let t=window.__REACT_GRAB__;if(He(t))return Ve(t);let n=await i(e);return{async copyElement(e){let t=Array.isArray(e)?e:[e],r=(await Promise.allSettled(t.map(e=>n.getElementContext(e)))).flatMap(e=>e.status===`fulfilled`&&e.value.snippet.trim().length>0?[e.value.snippet.trim()]:[]);return r.length!==0&&n.copyContent(r.join(`
2
+
3
+ `))},dispose(){}}}function Ve(e){return{copyElement:t=>e.copyElement(t),dispose(){}}}function He(e){return typeof e==`object`&&!!e&&`copyElement`in e&&typeof e.copyElement==`function`}function Ue(e,t=`all`){let n=[...e.comments].sort(We),r=new Map(n.map((e,t)=>[e.id,t+1])),i=new Map;for(let t of e.replies){if(!r.has(t.commentId))continue;let e=i.get(t.commentId);e?(e.replyCount+=1,e.lastReplyAt=Math.max(e.lastReplyAt,t.updatedAt)):i.set(t.commentId,{replyCount:1,lastReplyAt:t.updatedAt})}let a=n.map(e=>{let t=i.get(e.id);return{comment:e,pinNumber:r.get(e.id),replyCount:t?.replyCount??0,lastActivityAt:Math.max(e.updatedAt,t?.lastReplyAt??e.updatedAt)}}),o={all:a.length,open:a.filter(({comment:e})=>e.status===`open`).length,resolved:a.filter(({comment:e})=>e.status===`resolved`).length};return{rows:a.filter(({comment:e})=>t===`all`||e.status===t).sort(Ge),counts:o,pinNumberByCommentId:r}}function We(e,t){return e.createdAt-t.createdAt||e.id.localeCompare(t.id)}function Ge(e,t){return t.lastActivityAt-e.lastActivityAt||t.comment.createdAt-e.comment.createdAt||e.comment.id.localeCompare(t.comment.id)}const Ke=`visual-review-feedback-navigator`,qe=[`all`,`open`,`resolved`],Je={all:`전체`,open:`진행 중`,resolved:`완료`};function Ye(e,t={}){let n=t.controlsId??Ke,r=B(`rg-action-wrap`),i=document.createElement(`button`);i.type=`button`,i.className=`rg-action rg-feedback-list-tool`,i.dataset.feedbackNavigatorAction=`toggle`,i.setAttribute(`aria-controls`,n),i.setAttribute(`aria-expanded`,String(t.expanded??!1)),t.presentation===`sheet`&&i.setAttribute(`aria-haspopup`,`dialog`),i.setAttribute(`aria-label`,`피드백 목록, 총 ${V(e)}개`),i.append($e());let a=document.createElement(`span`);return a.className=`rg-tooltip`,a.setAttribute(`aria-hidden`,`true`),a.textContent=`목록`,r.append(i,a),r}function Xe(e,t={}){let n=t.id??Ke,r=`${n}-title`,i=t.presentation??`tray`,a=document.createElement(`section`);a.id=n,a.className=`rg-feedback-navigator`,a.dataset.presentation=i,a.dataset.loadState=e.loadState??`ready`,a.dataset.filter=e.filter,a.setAttribute(`aria-labelledby`,r),a.setAttribute(`aria-busy`,String(e.loadState===`loading`)),i===`sheet`?(a.setAttribute(`role`,`dialog`),a.setAttribute(`aria-modal`,`true`)):a.setAttribute(`role`,`region`);let o=B(`rg-feedback-navigator-header`),s=B(`rg-feedback-navigator-heading`),c=document.createElement(`h2`);c.id=r,c.className=`rg-feedback-navigator-title`,c.textContent=t.title??`피드백`;let l=document.createElement(`span`);l.className=`rg-feedback-navigator-total`,l.setAttribute(`aria-hidden`,`true`),l.textContent=String(V(e.counts.all)),s.append(c,l);let u=document.createElement(`button`);u.type=`button`,u.className=`rg-feedback-navigator-close`,u.dataset.feedbackNavigatorAction=`close`,u.setAttribute(`aria-label`,`피드백 목록 닫기`),u.append(et()),o.append(s,u);let d=B(`rg-feedback-navigator-content`);if(rt(d,e),e.loadState!==`loading`&&e.loadState!==`error`)if(e.rows.length===0)d.append(it(e.counts.all===0));else{let t=document.createElement(`ul`);t.className=`rg-feedback-list`,t.setAttribute(`aria-label`,`피드백 목록`);for(let n of e.rows)t.append(Qe(n,e.activeCommentId));d.append(t)}if(a.append(o),e.counts.all>0&&e.loadState!==`loading`&&e.loadState!==`error`){let t=B(`rg-feedback-filters`);t.setAttribute(`role`,`group`),t.setAttribute(`aria-label`,`피드백 상태 필터`);for(let n of qe)t.append(Ze(n,e.counts[n],e.filter===n));a.append(t)}return a.append(d),a}function Ze(e,t,n){let r=document.createElement(`button`);r.type=`button`,r.className=`rg-feedback-filter`,r.dataset.feedbackFilter=e,r.dataset.feedbackNavigatorAction=`filter`,r.setAttribute(`aria-pressed`,String(n)),r.setAttribute(`aria-label`,`${Je[e]} 피드백 ${V(t)}개`);let i=document.createElement(`span`);i.className=`rg-feedback-filter-label`,i.textContent=Je[e];let a=document.createElement(`span`);return a.className=`rg-feedback-filter-count`,a.setAttribute(`aria-hidden`,`true`),a.textContent=String(V(t)),r.append(i,a),r}function Qe(e,t){let n=document.createElement(`li`);n.className=`rg-feedback-item`,n.dataset.commentId=e.id;let r=document.createElement(`button`);r.type=`button`,r.className=`rg-feedback-row`,r.dataset.commentId=e.id,r.dataset.feedbackNavigatorAction=`open-comment`,r.dataset.status=e.status,r.dataset.locationAvailable=String(e.locationAvailable!==!1),e.id===t&&r.setAttribute(`aria-current`,`true`),r.setAttribute(`aria-label`,at(e));let i=document.createElement(`span`);i.className=`rg-feedback-row-pin`,i.setAttribute(`aria-hidden`,`true`),i.textContent=String(Math.max(1,Math.trunc(e.pinNumber)));let a=B(`rg-feedback-row-copy`),o=document.createElement(`span`);if(o.className=`rg-feedback-row-body`,o.textContent=e.body,e.pageLabel?.trim()||e.targetLabel?.trim()){let t=document.createElement(`span`);t.className=`rg-feedback-row-context`,e.pageUrl?.trim()&&(t.dataset.pageUrl=e.pageUrl.trim(),t.title=e.pageUrl.trim()),e.currentPage&&(t.dataset.currentPage=`true`);let n=e.pageLabel?.trim();if(n&&t.append(document.createTextNode(n)),n&&e.targetLabel?.trim()&&t.append(document.createTextNode(` · `)),e.targetLabel?.trim()){let n=document.createElement(`span`);n.className=`rg-feedback-row-target`,n.textContent=e.targetLabel.trim(),t.append(n)}a.append(t)}let s=B(`rg-feedback-row-detail`),c=document.createElement(`span`);c.className=`rg-feedback-row-meta`,c.textContent=`${e.authorName} · ${e.timeLabel}`;let l=B(`rg-feedback-row-trailing`);if(e.locationAvailable===!1){let e=document.createElement(`span`);e.className=`rg-feedback-row-location-missing`,e.setAttribute(`aria-hidden`,`true`),e.title=`현재 화면에서 위치를 찾을 수 없음`,e.append(tt()),l.append(e)}if(e.replyCount>0){let t=document.createElement(`span`);t.className=`rg-feedback-row-replies`,t.setAttribute(`aria-hidden`,`true`),t.textContent=`답글 ${V(e.replyCount)}`,l.append(t)}if(e.status===`resolved`){let e=document.createElement(`span`);e.className=`rg-feedback-row-status`,e.setAttribute(`aria-hidden`,`true`),e.title=`완료`,e.append(nt());let t=document.createElement(`span`);t.className=`rg-visually-hidden`,t.textContent=`완료`,e.append(t),l.append(e)}return s.append(c,l),a.append(o,s),r.append(i,a),n.append(r),n}function $e(){return R(`0 0 14 14`,[z(`M4.75 3.25h6.5M4.75 7h6.5M4.75 10.75h6.5`),z(`M2.25 3.25h.01M2.25 7h.01M2.25 10.75h.01`,{"stroke-linecap":`round`,"stroke-width":`1.5`})])}function et(){return R(`0 0 12 12`,[z(`M2.47 1.76a.5.5 0 0 0-.71.71L5.29 6 1.76 9.53a.5.5 0 0 0 .71.71L6 6.71l3.53 3.53a.5.5 0 0 0 .71-.71L6.71 6l3.53-3.53a.5.5 0 0 0-.71-.71L6 5.29 2.47 1.76Z`,{fill:`currentColor`,stroke:`none`})])}function tt(){return R(`0 0 14 14`,[z(`M7 12.25s4-3.27 4-6.5a4 4 0 1 0-8 0c0 3.23 4 6.5 4 6.5Z`),z(`m4.75 3.5 4.5 4.5`)])}function nt(){return R(`0 0 12 12`,[z(`m2.25 6.25 2.25 2.25 5.25-5.25`)])}function rt(e,t){let n=t.loadState??`ready`;if(n===`ready`)return;let r=B(`rg-feedback-navigator-state`);if(r.dataset.state=n,n===`error`){r.setAttribute(`role`,`alert`);let e=document.createElement(`span`);if(e.textContent=t.errorMessage?.trim()||`불러오지 못함`,r.append(e),t.errorRecovery!==`reauthenticate`){let e=document.createElement(`button`);e.type=`button`,e.className=`rg-feedback-navigator-retry`,e.dataset.feedbackNavigatorAction=`retry`,e.textContent=`재시도`,r.append(e)}}else r.setAttribute(`role`,`status`),r.setAttribute(`aria-live`,`polite`),r.textContent=n===`loading`?`불러오는 중`:`연결 확인 중`;e.append(r)}function it(e){let t=B(`rg-feedback-navigator-empty`);return t.setAttribute(`role`,`status`),t.textContent=e?`피드백 없음`:`해당 피드백 없음`,t}function at(e){let t=[`${Math.max(1,Math.trunc(e.pinNumber))}번 피드백`,...e.pageLabel?.trim()?[`페이지 ${e.pageLabel.trim()}`]:[],...e.targetLabel?.trim()?[`대상 ${e.targetLabel.trim()}`]:[],e.body,e.authorName,`최근 활동 ${e.timeLabel}`];return e.replyCount>0&&t.push(`답글 ${V(e.replyCount)}개`),t.push(e.status===`resolved`?`완료`:`진행 중`),e.locationAvailable===!1&&t.push(`현재 화면에서 위치를 찾을 수 없음`),t.join(`, `)}function R(e,t){let n=document.createElementNS(`http://www.w3.org/2000/svg`,`svg`);n.setAttribute(`viewBox`,e),n.setAttribute(`aria-hidden`,`true`),n.setAttribute(`focusable`,`false`);for(let e of t)n.append(e);return n}function z(e,t={}){let n=document.createElementNS(`http://www.w3.org/2000/svg`,`path`);n.setAttribute(`d`,e),n.setAttribute(`fill`,`none`),n.setAttribute(`stroke`,`currentColor`),n.setAttribute(`stroke-width`,`1.25`),n.setAttribute(`stroke-linecap`,`round`),n.setAttribute(`stroke-linejoin`,`round`);for(let[e,r]of Object.entries(t))n.setAttribute(e,r);return n}function B(e){let t=document.createElement(`div`);return t.className=e,t}function V(e){return Math.max(0,Math.trunc(Number.isFinite(e)?e:0))}const ot=1e6;async function st(e){if(!document.body||typeof HTMLCanvasElement>`u`)return null;let t=lt(e);document.body.append(t);try{let{toCanvas:t}=await import(`./es-BeyOi4lh.js`),n=ct(e,window.innerWidth,window.innerHeight),r=await t(document.body,{width:n.outputWidth,height:n.outputHeight,pixelRatio:1,cacheBust:!0,skipAutoScale:!0,backgroundColor:dt(),filter:e=>!ut(e),style:{margin:`0`,transform:`translate(${-(window.scrollX+n.left)*n.scale}px, ${-(window.scrollY+n.top)*n.scale}px) scale(${n.scale})`,transformOrigin:`top left`}}),i=await pt(r);return!i||i.size>ot?null:{bytes:new Uint8Array(await i.arrayBuffer()),contentType:i.type===`image/png`?`image/png`:`image/webp`,width:r.width,height:r.height}}catch{return null}finally{t.remove()}}function ct(e,t,n){let r=mt(t),i=mt(n),a=e.region,o=H(a.viewportX,a.pageX-window.scrollX),s=H(a.viewportY,a.pageY-window.scrollY),c=Math.max(18,H(a.width,0)),l=Math.max(18,H(a.height,0)),u=U(o+c/2,0,r),d=U(s+l/2,0,i),f=Math.min(r,Math.max(Math.min(640,r),c+192)),p=Math.min(i,Math.max(Math.min(420,i),l+160)),m=U(u-f/2,0,r-f),h=U(d-p/2,0,i-p),g=Math.min(1,960/f,640/p);return{left:m,top:h,width:f,height:p,scale:g,outputWidth:Math.max(1,Math.round(f*g)),outputHeight:Math.max(1,Math.round(p*g))}}function lt(e){let t=e.region,n=document.createElement(`div`);return n.dataset.reviewCaptureMarker=`true`,Object.assign(n.style,{position:`absolute`,zIndex:`2147483646`,pointerEvents:`none`,boxSizing:`border-box`,left:`${Math.max(0,t.pageX)}px`,top:`${Math.max(0,t.pageY)}px`,width:`${Math.max(18,t.width)}px`,height:`${Math.max(18,t.height)}px`,border:`3px solid #ff4d67`,borderRadius:`6px`,background:`rgba(255, 77, 103, .12)`,boxShadow:`0 0 0 3px rgba(255,255,255,.92), 0 4px 18px rgba(0,0,0,.24)`}),n}function ut(e){return e instanceof HTMLElement?e.tagName===`AGENCY-REVIEW-WIDGET`||e.dataset.reviewCaptureExclude===`true`||e.id===`__next-build-watcher`||!!e.closest?.(`nextjs-portal`):!1}function dt(){let e=getComputedStyle(document.body).backgroundColor;if(e&&e!==`rgba(0, 0, 0, 0)`)return e;let t=getComputedStyle(document.documentElement).backgroundColor;return t&&t!==`rgba(0, 0, 0, 0)`?t:`#ffffff`}function ft(e,t,n){return new Promise(r=>e.toBlob(r,t,n))}async function pt(e){for(let t of[.78,.64,.5]){let n=await ft(e,`image/webp`,t);if(n&&n.size<=ot)return n}let t=await ft(e,`image/png`);return t&&t.size<=ot?t:null}function mt(e){return Number.isFinite(e)&&e>0?e:1}function H(e,t){return Number.isFinite(e)?e:Number.isFinite(t)?t:0}function U(e,t,n){return Math.min(n,Math.max(t,e))}const ht=`agency-review-widget`,gt=`visual-review:reauthenticate-required`,_t=1e4,W=`visual-review-feedback-navigator`,vt=`${W}-surface`,yt=new Set([`combobox`,`menuitem`,`menuitemcheckbox`,`menuitemradio`,`option`,`radio`,`searchbox`,`slider`,`spinbutton`,`textbox`]);var bt=class extends HTMLElement{#e=this.attachShadow({mode:`open`});#t=null;#n=null;#r=null;#i=null;#a=null;#o=null;#s=!1;#c=null;#l=null;#u=null;#d=null;#f=``;#p=``;#m=null;#h=null;#g=null;#_=null;#v=null;#y=null;#b=!1;#x=`all`;#S=`loading`;#C=``;#w=`retry`;#T=!1;#E=0;#D=0;#O=!navigator.onLine;#k=null;#A=null;#j=null;#M=null;#N=null;#P=null;#F=null;#I=!1;#L=!1;#R=null;#z=null;#B=!1;#V=null;#H=null;#U=!1;#W=null;#G=new Set;#K=new Map;#q=new Map;#J=new Map;#Y=new Map;#X=new Map;#Z=new Map;configure(e){if(this.#t)throw Error(`Review widget is already configured`);if(!St(window.location,e.allowedStagingHosts))throw Error(`Review widget refused to activate on non-staging host: ${window.location.host}`);if(!e.session.invitationId||e.session.projectId.length===0)throw Error(`An accepted review invitation session is required`);this.#t=e,this.isConnected&&this.#Q()}setPage(e,t){let n=this.#t;if(!n)throw Error(`Review widget is not configured`);let r=n.collaboration&&e.collaboration?{...n.collaboration,roomId:e.collaboration.roomId,scopeId:e.collaboration.scopeId}:n.collaboration;(t?.reload===!0||n.pageId!==e.pageId||r?.roomId!==n.collaboration?.roomId||r?.scopeId!==n.collaboration?.scopeId)&&(this.#t={...n,pageId:e.pageId,collaboration:r},this.#k&&(this.#se(),this.#i?.stop(),this.#i=null,this.#ue(),this.#fe(),this.#$()))}connectedCallback(){this.dataset.agencyReviewRoot=``,this.dataset.reactGrabIgnore=``,this.dataset.rgTheme=an(),this.#t&&this.#Q()}disconnectedCallback(){this.#ce()}async#Q(){!this.#t||this.#k||(this.#k=new AbortController,this.#O=!navigator.onLine,this.#le(),this.#ue(),this.#fe(),this.#dt(),document.addEventListener(`keydown`,this.#et,{capture:!0,signal:this.#k.signal}),document.addEventListener(`keyup`,this.#tt,{capture:!0,signal:this.#k.signal}),document.addEventListener(`pointerdown`,this.#it,{capture:!0,signal:this.#k.signal}),document.addEventListener(`click`,this.#at,{capture:!0,signal:this.#k.signal}),document.addEventListener(`focusin`,this.#Qe,{capture:!0,signal:this.#k.signal}),document.addEventListener(`scroll`,this.#ct,{capture:!0,passive:!0,signal:this.#k.signal}),window.addEventListener(`scroll`,this.#ct,{passive:!0,signal:this.#k.signal}),window.addEventListener(`resize`,this.#ct,{passive:!0,signal:this.#k.signal}),window.visualViewport?.addEventListener(`scroll`,this.#ct,{passive:!0,signal:this.#k.signal}),window.visualViewport?.addEventListener(`resize`,this.#ct,{passive:!0,signal:this.#k.signal}),window.addEventListener(`online`,this.#oe,{signal:this.#k.signal}),window.addEventListener(`offline`,this.#oe,{signal:this.#k.signal}),await this.#$())}async#$(){if(!this.#t||!this.#k)return;let e=null,t=null,n=this.#S===`error`,r=++this.#E,i=this.#k.signal,{pageId:a,repository:o,session:s}=this.#t,c=o,l=!!(c.getProjectSnapshot&&c.subscribeProject);this.#S=`loading`,this.#C=``,this.#me(),this.#be();try{let n,o=null;if(l?[n,o]=await Promise.all([c.getSnapshot(a),c.getProjectSnapshot(s.projectId)]):n=await c.getSnapshot(a),i.aborted||r!==this.#E)return;let u=this.#n,d=this.#r;this.#n=null,this.#r=null,Q(u,d);let f=!1,p=!1,m=n,h=o,g=e=>{i.aborted||r!==this.#E||!this.#k||(f=!0,this.#ie(e))};if(e=c.subscribe(a,e=>{if(!(i.aborted||r!==this.#E||!this.#k)){if(!p){m=e;return}this.#ne(e)}},g),t=o&&c.subscribeProject?c.subscribeProject(s.projectId,e=>{if(!(i.aborted||r!==this.#E||!this.#k)){if(!p){h=e;return}this.#re(e)}},g):null,f){Q(e,t);return}if(i.aborted||r!==this.#E||!this.#k){Q(e,t);return}this.#n=e,this.#r=t,e=null,t=null,p=!0,this.#ne(m),h&&this.#re(h)}catch(a){if(Q(e,t),i.aborted||r!==this.#E)return;let o=Xt(a)?a:{type:`error`,code:`unknown`,recovery:`retry`,clearSnapshot:!0};this.#ie(o,o.type===`access-lost`),n&&this.#b&&queueMicrotask(()=>this.#e.querySelector(`.rg-feedback-navigator-retry`)?.focus({preventScroll:!0}))}}#ee=new Map;#te=new Map;#ne=e=>{for(let[t,n]of[...this.#ee])e.comments.some(({id:e})=>e===t)&&(this.#ee.delete(t),n(!0));for(let[t,{commentId:n,settle:r}]of[...this.#te])e.replies.some(e=>e.id===t&&e.commentId===n)&&(this.#te.delete(t),r());this.#S=`ready`,this.#w=`retry`,this.#T=!1,this.#a=e,this.#ae(e);let t=!1;if(this.#_&&!e.comments.some(({id:e})=>e===this.#_)){let e=this.#_;t=!0,this.#J.delete(e),this.#Y.delete(e),this.#X.delete(e),this.#Z.delete(e),this.#_=null,this.#v=null,this.#ze(`열려 있던 피드백이 삭제되었습니다.`)}this.#fe();let n=this.#y;n&&e.comments.some(({id:e})=>e===n)&&(this.#y=null,queueMicrotask(()=>void this.#Ie(n,{origin:`navigator`,navigate:!1})));let r=t&&!this.#b?this.#ye():!1;t&&queueMicrotask(()=>{r||(this.#b?this.#De():this.#Oe()?.focus())})};#re=e=>{e.projectId===this.#t?.session.projectId&&(this.#o=e,this.#Tt(),this.#be(),this.#Se())};#ie(e,t=!0){let n=e.type===`access-lost`;this.#E+=1,this.#D+=1;let r=this.#n,i=this.#r;if(this.#n=null,this.#r=null,e.clearSnapshot&&(this.#a=null,this.#o=null),!n&&this.#d){let e=this.#e.querySelector(`.rg-selection-label:not(.rg-thread-label) textarea`);this.#g={target:this.#d,body:e?.value??this.#f},this.#d=null,this.#f=``}if(!n&&this.#h?.comment){let{target:e,body:t,comment:n}=this.#h;this.#m??={target:e,body:t,comment:n},this.#p||=`저장하지 못했습니다. 다시 시도하세요.`}if(n||this.#Y.forEach(({body:e,reply:t},n)=>{this.#J.set(n,e),this.#Z.has(n)||this.#Z.set(n,{body:e,reply:t}),this.#X.has(n)||this.#X.set(n,`답글을 저장하지 못했습니다. 다시 시도하세요.`)}),this.#h=null,this.#Y.clear(),n&&(this.#d=null,this.#f=``,this.#p=``,this.#m=null,this.#g=null,this.#_=null,this.#v=null,this.#J.clear(),this.#X.clear(),this.#Z.clear()),this.#s?this.#pe(!1):this.#St(),this.#S=`error`,this.#w=e.recovery,this.#T=e.type===`access-lost`,this.#C=e.type===`access-lost`?`다시 인증하세요.`:`다시 시도하세요.`,t&&(this.#b=!0),Q(r,i),this.#me(),this.#fe(),this.#ze(this.#C),e.type===`access-lost`){try{this.#t?.onReauthenticationRequired?.(e)}catch{}this.dispatchEvent(new CustomEvent(gt,{bubbles:!0,composed:!0,detail:{code:e.code}}))}}#ae(e){let t=new Set(e.comments.map(({id:e})=>e)),n=this.#h,r=this.#m,i=!!(n?.comment&&t.has(n.comment.id)),a=!!(r&&t.has(r.comment.id)),o=[...i&&n?[n.target]:[],...a&&r?[r.target]:[]];if(o.length>0){let e=this.#d!==null&&o.includes(this.#d);this.#d&&o.includes(this.#d)&&(this.#d=null,this.#f=``),this.#g&&o.includes(this.#g.target)&&(this.#g=null),i&&(this.#h=null),a&&(this.#m=null),this.#p=``,this.#ze(`피드백을 저장했습니다.`),e&&queueMicrotask(()=>this.#e.querySelector(`.rg-feedback-tool`)?.focus({preventScroll:!0}))}new Set([...this.#J.keys(),...this.#Y.keys(),...this.#X.keys(),...this.#Z.keys()]).forEach(n=>{if(!t.has(n)){this.#J.delete(n),this.#Y.delete(n),this.#X.delete(n),this.#Z.delete(n);return}let r=this.#Y.get(n),i=this.#Z.get(n),a=!!(r&&e.replies.some(e=>e.id===r.reply.id&&e.commentId===n)),o=!!(i&&e.replies.some(e=>e.id===i.reply.id&&e.commentId===n));!a&&!o||(a&&this.#Y.delete(n),o&&this.#Z.delete(n),this.#X.delete(n),this.#J.delete(n),this.#ze(`답글을 저장했습니다.`))})}#oe=()=>{this.#O=!navigator.onLine,this.#be()};#se(){this.#E+=1,this.#D+=1;let e=this.#n,t=this.#r;this.#n=null,this.#r=null;for(let[e,t]of[...this.#ee])this.#ee.delete(e),t(!1);for(let[e,{settle:t}]of[...this.#te])this.#te.delete(e),t();this.#s?this.#pe(!1):this.#St(),this.#a=null,this.#o=null,this.#S=`loading`,this.#C=``,this.#w=`retry`,this.#T=!1,this.#d=null,this.#f=``,this.#p=``,this.#m=null,this.#h=null,this.#g=null,this.#_=null,this.#v=null,this.#J.clear(),this.#Y.clear(),this.#X.clear(),this.#Z.clear(),Q(e,t)}#ce(){this.#E+=1,this.#D+=1,this.#nt(),this.#Ve(),this.#st(),this.#Xe(),this.#gt(),this.#s&&this.#pe(!1),this.#j?.(),this.#j=null,this.#A?.(),this.#A=null;let e=this.#n,t=this.#r;this.#n=null,this.#r=null,this.#i?.stop(),this.#i=null,this.#k?.abort(),this.#k=null,this.#a=null,this.#o=null,this.#S=`loading`,this.#C=``,this.#w=`retry`,this.#T=!1,this.#d=null,this.#f=``,this.#p=``,this.#m=null,this.#h=null,this.#g=null,this.#_=null,this.#v=null,this.#b=!1,this.#x=`all`,this.#L=!1,this.#J.clear(),this.#Y.clear(),this.#X.clear(),this.#Z.clear(),this.#e.replaceChildren(),Q(e,t)}#le(){this.#e.replaceChildren();let e=e=>e.stopPropagation();[`change`,`click`,`contextmenu`,`dblclick`,`input`,`keydown`,`keyup`,`pointercancel`,`pointerdown`,`pointermove`,`pointerup`,`submit`].forEach(t=>{this.#e.addEventListener(t,e,{signal:this.#k?.signal})});let t=document.createElement(`style`);this.#t?.styleNonce&&(t.nonce=this.#t.styleNonce),t.textContent=`
4
+ :host {
5
+ all: initial;
6
+ --review-accent: #e5484d;
7
+ position: fixed;
8
+ inset: 0;
9
+ z-index: 2147483000;
10
+ pointer-events: none;
11
+ direction: ltr;
12
+ color: #171918;
13
+ font: 500 14px/1.45 Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
14
+ }
15
+
16
+ * { box-sizing: border-box; }
17
+ button, textarea { font: inherit; }
18
+
19
+ .highlight, .region {
20
+ position: fixed;
21
+ display: none;
22
+ border: 2px solid var(--review-accent);
23
+ border-radius: 6px;
24
+ background: rgba(229, 72, 77, 0.07);
25
+ box-shadow: 0 0 0 1px rgba(255,255,255,.8), 0 0 0 4px rgba(229,72,77,.12);
26
+ }
27
+ .region { border-radius: 4px; }
28
+ .highlight[data-context-target="true"],
29
+ .region[data-context-target="true"] {
30
+ background: rgba(229, 72, 77, 0.05);
31
+ }
32
+ .region[data-point="true"] {
33
+ border-radius: 50%;
34
+ background: rgba(229, 72, 77, 0.14);
35
+ }
36
+
37
+ .pin {
38
+ position: fixed;
39
+ display: grid;
40
+ place-items: center;
41
+ width: 26px;
42
+ height: 26px;
43
+ padding: 0;
44
+ z-index: 1;
45
+ transform: translate(-8px, -21px);
46
+ pointer-events: auto;
47
+ border: 2px solid #fff;
48
+ border-radius: 50%;
49
+ color: #fff;
50
+ background: #18181b;
51
+ box-shadow:
52
+ 0 0 0 1px rgba(0, 0, 0, .18),
53
+ 0 2px 6px rgba(0, 0, 0, .28),
54
+ 0 6px 16px rgba(0, 0, 0, .14);
55
+ cursor: pointer;
56
+ appearance: none;
57
+ isolation: isolate;
58
+ font: 700 11px/1 Geist, ui-sans-serif, system-ui, sans-serif;
59
+ font-variant-numeric: tabular-nums;
60
+ font-synthesis: none;
61
+ text-shadow: 0 1px 1px rgba(0, 0, 0, .24);
62
+ -webkit-tap-highlight-color: transparent;
63
+ transition:
64
+ opacity 100ms ease-out,
65
+ background 150ms ease-out,
66
+ box-shadow 150ms ease-out,
67
+ transform 300ms var(--rg-ease-spring);
68
+ }
69
+ .pins[data-selection-suppressed="true"] .pin {
70
+ opacity: 0;
71
+ pointer-events: none;
72
+ transform: translate(-8px, -21px) scale(.82);
73
+ transition-duration: 80ms;
74
+ }
75
+ .pin::after {
76
+ position: absolute;
77
+ inset: -2px;
78
+ content: '';
79
+ }
80
+ @media (hover: hover) and (pointer: fine) {
81
+ .pin:hover {
82
+ z-index: 3;
83
+ background: #09090b;
84
+ box-shadow:
85
+ 0 0 0 1px rgba(0, 0, 0, .22),
86
+ 0 3px 8px rgba(0, 0, 0, .32),
87
+ 0 8px 20px rgba(0, 0, 0, .16);
88
+ transform: translate(-8px, -21px) scale(1.1);
89
+ }
90
+ }
91
+ .pin[data-active="true"] {
92
+ z-index: 4;
93
+ background: #18181b;
94
+ box-shadow:
95
+ 0 0 0 2px var(--review-accent),
96
+ 0 0 0 4px #fff,
97
+ 0 5px 16px rgba(0, 0, 0, .3);
98
+ transform: translate(-8px, -21px) scale(1.1);
99
+ }
100
+ .pin:active,
101
+ .pin[data-active="true"]:active {
102
+ transform: translate(-8px, -21px) scale(.96);
103
+ transition-duration: 60ms;
104
+ }
105
+ .pin:focus-visible {
106
+ z-index: 5;
107
+ outline: 3px solid var(--review-accent);
108
+ outline-offset: 3px;
109
+ }
110
+ .pin[data-resolved="true"] {
111
+ color: #fff;
112
+ background: #737373;
113
+ }
114
+ .pin[data-resolved="true"][data-active="true"] { background: #404040; }
115
+
116
+
117
+ :host {
118
+ --rg-panel-bg: #ffffff;
119
+ --rg-panel-secondary: #f5f5f5;
120
+ --rg-text-primary: #171717;
121
+ --rg-text-secondary: #737373;
122
+ --rg-surface-hover: rgba(0, 0, 0, 0.05);
123
+ --rg-border-subtle: rgba(0, 0, 0, 0.08);
124
+ --rg-submit-bg: #171717;
125
+ --rg-submit-fg: #ffffff;
126
+ --rg-status-error: #b42318;
127
+ --rg-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
128
+ --rg-drop-shadow: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.1));
129
+ --rg-ease-drawer: cubic-bezier(0.32, 0.72, 0, 1);
130
+ --rg-ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
131
+ }
132
+
133
+ :host([data-rg-theme="dark"]) {
134
+ --rg-panel-bg: #161616;
135
+ --rg-panel-secondary: #262626;
136
+ --rg-text-primary: #ffffff;
137
+ --rg-text-secondary: #a7a7a7;
138
+ --rg-surface-hover: rgba(255, 255, 255, 0.1);
139
+ --rg-border-subtle: rgba(255, 255, 255, 0.1);
140
+ --rg-submit-bg: #ffffff;
141
+ --rg-submit-fg: #161616;
142
+ --rg-status-error: #ff8a80;
143
+ --rg-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
144
+ --rg-drop-shadow: drop-shadow(0 2px 8px rgba(0, 0, 0, 0.08));
145
+ }
146
+
147
+ .rg-toolbar {
148
+ position: fixed;
149
+ left: 50%;
150
+ bottom: max(16px, env(safe-area-inset-bottom));
151
+ transform: translateX(-50%);
152
+ display: flex;
153
+ align-items: center;
154
+ justify-content: center;
155
+ min-width: 0;
156
+ min-height: 36px;
157
+ padding: 4px 6px;
158
+ pointer-events: auto;
159
+ border: 0;
160
+ border-radius: 18px;
161
+ color: var(--rg-text-secondary);
162
+ background: var(--rg-panel-bg);
163
+ box-shadow: var(--rg-shadow);
164
+ font: 500 13px/16px Geist, ui-sans-serif, system-ui, sans-serif;
165
+ font-synthesis: none;
166
+ z-index: 2147483647;
167
+ transition:
168
+ padding 220ms var(--rg-ease-drawer),
169
+ border-radius 220ms var(--rg-ease-drawer),
170
+ opacity 400ms var(--rg-ease-drawer),
171
+ transform 400ms var(--rg-ease-drawer);
172
+ }
173
+ .rg-toolbar-actions-shell {
174
+ display: grid;
175
+ grid-template-columns: 1fr;
176
+ min-width: 0;
177
+ overflow: visible;
178
+ transition: grid-template-columns 220ms var(--rg-ease-drawer);
179
+ }
180
+ .rg-toolbar-actions {
181
+ display: flex;
182
+ align-items: center;
183
+ min-width: 0;
184
+ opacity: 1;
185
+ transition: opacity 180ms var(--rg-ease-drawer) 80ms;
186
+ }
187
+ .rg-action-wrap {
188
+ position: relative;
189
+ display: flex;
190
+ align-items: center;
191
+ justify-content: center;
192
+ width: 28px;
193
+ height: 28px;
194
+ margin-right: 2px;
195
+ }
196
+ .rg-action, .rg-collapse, .rg-submit {
197
+ all: unset;
198
+ display: flex;
199
+ align-items: center;
200
+ justify-content: center;
201
+ flex: none;
202
+ cursor: pointer;
203
+ color: var(--rg-text-secondary);
204
+ -webkit-tap-highlight-color: transparent;
205
+ transition: color 150ms var(--rg-ease-drawer), transform 400ms var(--rg-ease-spring);
206
+ }
207
+ .rg-submit::after {
208
+ position: absolute;
209
+ width: max(24px, 100%);
210
+ height: max(24px, 100%);
211
+ content: '';
212
+ }
213
+ .rg-action, .rg-collapse, .rg-submit { position: relative; }
214
+ .rg-action:focus-visible,
215
+ .rg-collapse:focus-visible,
216
+ .rg-submit:focus-visible,
217
+ .rg-thread-close:focus-visible {
218
+ outline: 2px solid var(--review-accent);
219
+ outline-offset: 3px;
220
+ }
221
+ .rg-action { width: 28px; height: 28px; }
222
+ .rg-action svg { width: 14px; height: 14px; fill: currentColor; }
223
+ .rg-action:hover,
224
+ .rg-action[aria-pressed="true"],
225
+ .rg-feedback-list-tool[aria-expanded="true"],
226
+ .rg-collapse:hover {
227
+ color: var(--rg-text-primary);
228
+ }
229
+ @media (hover: hover) and (pointer: fine) {
230
+ .rg-action:hover, .rg-collapse:hover, .rg-submit:hover { transform: scale(1.05); }
231
+ }
232
+ .rg-action:active, .rg-collapse:active, .rg-submit:active {
233
+ transform: scale(.96);
234
+ transition-duration: 60ms;
235
+ transition-timing-function: cubic-bezier(0, 0, .2, 1);
236
+ }
237
+ .rg-collapse { width: 28px; height: 28px; }
238
+ .rg-collapse svg {
239
+ width: 18px;
240
+ height: 18px;
241
+ margin: -2px;
242
+ fill: currentColor;
243
+ transform: rotate(90deg);
244
+ transition: transform 150ms var(--rg-ease-drawer), color 150ms var(--rg-ease-drawer);
245
+ }
246
+ .rg-tooltip {
247
+ position: absolute;
248
+ left: 50%;
249
+ bottom: calc(100% + 10px);
250
+ transform: translate(-50%, 2px) scale(.97);
251
+ padding: 2px 8px;
252
+ pointer-events: none;
253
+ border-radius: 999px;
254
+ color: var(--rg-text-primary);
255
+ background: var(--rg-panel-bg);
256
+ box-shadow: var(--rg-shadow);
257
+ opacity: 0;
258
+ font: 500 10px/16px Geist, ui-sans-serif, system-ui, sans-serif;
259
+ white-space: nowrap;
260
+ transition: opacity 100ms ease-out, transform 100ms ease-out;
261
+ transition-delay: 0ms;
262
+ }
263
+ .rg-action-wrap:hover .rg-tooltip, .rg-action-wrap:focus-within .rg-tooltip {
264
+ transform: translate(-50%, 0) scale(1);
265
+ opacity: 1;
266
+ transition-delay: 400ms;
267
+ }
268
+ .rg-toolbar[data-selecting="true"]:not(:hover) {
269
+ transform: translateX(-50%) scale(.97);
270
+ opacity: .55;
271
+ }
272
+ .rg-toolbar[data-selecting="true"] .rg-tooltip,
273
+ .rg-toolbar[data-collapsed="true"] .rg-tooltip { display: none; }
274
+ .rg-toolbar[data-collapsed="true"] {
275
+ bottom: 0;
276
+ padding: 2px 8px 0;
277
+ border-radius: 10px 10px 0 0;
278
+ }
279
+ .rg-toolbar[data-collapsed="true"] .rg-toolbar-actions-shell {
280
+ grid-template-columns: 0fr;
281
+ pointer-events: none;
282
+ }
283
+ .rg-toolbar[data-collapsed="true"] .rg-toolbar-actions {
284
+ overflow: hidden;
285
+ opacity: 0;
286
+ transition: opacity 100ms var(--rg-ease-drawer);
287
+ }
288
+ .rg-toolbar[data-collapsed="true"] .rg-collapse svg { transform: rotate(-90deg); }
289
+ .rg-developer-status {
290
+ position: absolute;
291
+ left: 50%;
292
+ bottom: calc(100% + 8px);
293
+ transform: translate(-50%, 4px) scale(.98);
294
+ padding: 4px 8px;
295
+ pointer-events: none;
296
+ border-radius: 999px;
297
+ color: var(--rg-text-primary);
298
+ background: var(--rg-panel-bg);
299
+ box-shadow: var(--rg-shadow);
300
+ opacity: 0;
301
+ white-space: nowrap;
302
+ font: 500 11px/16px Geist, ui-sans-serif, system-ui, sans-serif;
303
+ transition: opacity 120ms ease-out, transform 120ms ease-out;
304
+ }
305
+ .rg-developer-status[data-tone="error"] { color: var(--rg-status-error); }
306
+ .rg-developer-status[data-visible="true"] {
307
+ transform: translate(-50%, 0) scale(1);
308
+ opacity: 1;
309
+ }
310
+
311
+ .rg-selection-label {
312
+ position: fixed;
313
+ transform: translateX(-50%);
314
+ z-index: 2147483002;
315
+ min-width: 150px;
316
+ max-width: 280px;
317
+ pointer-events: auto;
318
+ color: var(--rg-text-primary);
319
+ filter: var(--rg-drop-shadow);
320
+ font: 500 13px/16px Geist, ui-sans-serif, system-ui, sans-serif;
321
+ font-synthesis: none;
322
+ transition: opacity 125ms ease-out, filter 125ms ease-out;
323
+ }
324
+ .rg-selection-label:focus { outline: none; }
325
+ .rg-surface {
326
+ overflow: hidden;
327
+ min-width: 150px;
328
+ max-width: 280px;
329
+ border-radius: 14px;
330
+ corner-shape: superellipse(1.25);
331
+ background: var(--rg-panel-bg);
332
+ }
333
+ .rg-tag-row {
334
+ display: flex;
335
+ align-items: center;
336
+ max-width: 280px;
337
+ padding: 6px 8px 4px;
338
+ overflow: hidden;
339
+ }
340
+ .rg-tag {
341
+ overflow: hidden;
342
+ color: var(--rg-text-primary);
343
+ text-overflow: ellipsis;
344
+ white-space: nowrap;
345
+ }
346
+ .rg-bottom-section {
347
+ display: flex;
348
+ align-items: end;
349
+ width: auto;
350
+ min-height: 28px;
351
+ padding: 6px 8px;
352
+ border-top: .5px solid var(--rg-border-subtle);
353
+ }
354
+ .rg-bottom-section textarea {
355
+ flex: 1;
356
+ field-sizing: content;
357
+ min-width: 110px;
358
+ min-height: 16px;
359
+ max-height: 95px;
360
+ margin: 0;
361
+ padding: 0;
362
+ resize: none;
363
+ outline: none;
364
+ border: 0;
365
+ border-radius: 0;
366
+ color: var(--rg-text-primary);
367
+ background: transparent;
368
+ box-shadow: none;
369
+ overflow-y: auto;
370
+ scrollbar-width: none;
371
+ font: 500 13px/16px Geist, ui-sans-serif, system-ui, sans-serif;
372
+ overflow-wrap: break-word;
373
+ word-break: keep-all;
374
+ }
375
+ .rg-bottom-section textarea::placeholder { color: var(--rg-text-secondary); }
376
+ .rg-thread-label .rg-surface {
377
+ display: flex;
378
+ flex-direction: column;
379
+ width: min(280px, calc(100vw - 16px));
380
+ max-height: min(360px, calc(100vh - 16px));
381
+ max-height: min(360px, calc(100dvh - 16px));
382
+ }
383
+ .rg-thread-label .rg-tag-row { flex: none; gap: 8px; }
384
+ .rg-thread-close {
385
+ all: unset;
386
+ position: relative;
387
+ display: flex;
388
+ align-items: center;
389
+ justify-content: center;
390
+ flex: none;
391
+ width: 14px;
392
+ height: 14px;
393
+ margin-left: auto;
394
+ color: var(--rg-text-secondary);
395
+ cursor: pointer;
396
+ -webkit-tap-highlight-color: transparent;
397
+ transition: color 150ms var(--rg-ease-drawer), transform 400ms var(--rg-ease-spring);
398
+ }
399
+ .rg-thread-close::after {
400
+ position: absolute;
401
+ width: 24px;
402
+ height: 24px;
403
+ content: '';
404
+ }
405
+ .rg-thread-close svg { width: 10px; height: 10px; fill: currentColor; }
406
+ .rg-thread-close:hover { color: var(--rg-text-primary); }
407
+ .rg-thread-close:active {
408
+ transform: scale(.96);
409
+ transition-duration: 60ms;
410
+ }
411
+ .rg-thread-messages {
412
+ min-height: 0;
413
+ overflow: auto;
414
+ scrollbar-width: none;
415
+ border-top: .5px solid var(--rg-border-subtle);
416
+ }
417
+ .rg-thread-messages::-webkit-scrollbar { display: none; }
418
+ .rg-message { padding: 6px 8px; }
419
+ .rg-message + .rg-message { border-top: .5px solid var(--rg-border-subtle); }
420
+ .rg-message-meta {
421
+ overflow: hidden;
422
+ color: var(--rg-text-secondary);
423
+ font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
424
+ text-overflow: ellipsis;
425
+ white-space: nowrap;
426
+ }
427
+ .rg-message-body {
428
+ margin: 2px 0 0;
429
+ color: var(--rg-text-primary);
430
+ font: 500 13px/16px Geist, ui-sans-serif, system-ui, sans-serif;
431
+ overflow-wrap: anywhere;
432
+ white-space: pre-wrap;
433
+ }
434
+ .rg-thread-label .rg-bottom-section { flex: none; }
435
+ .rg-submit {
436
+ width: 16px;
437
+ height: 16px;
438
+ margin-left: 4px;
439
+ border-radius: 50%;
440
+ color: var(--rg-submit-fg);
441
+ background: var(--rg-submit-bg);
442
+ }
443
+ .rg-submit svg { width: 10px; height: 10px; fill: currentColor; }
444
+ .rg-submit:disabled { cursor: wait; opacity: .5; }
445
+ .rg-label-arrow {
446
+ position: absolute;
447
+ left: var(--rg-arrow-left, 50%);
448
+ display: block;
449
+ width: 16px;
450
+ height: 8px;
451
+ translate: -50% 0;
452
+ fill: var(--rg-panel-bg);
453
+ }
454
+ .rg-selection-label[data-side="below"] .rg-label-arrow {
455
+ top: -7px;
456
+ }
457
+ .rg-selection-label[data-side="above"] .rg-label-arrow {
458
+ bottom: -7px;
459
+ transform: rotate(180deg);
460
+ }
461
+
462
+ @media (hover: none), (pointer: coarse) {
463
+ .rg-toolbar {
464
+ min-height: 56px;
465
+ padding: 6px;
466
+ border-radius: 28px;
467
+ }
468
+ .rg-toolbar .rg-action-wrap {
469
+ width: 44px;
470
+ height: 44px;
471
+ margin-right: 0;
472
+ }
473
+ .rg-toolbar .rg-action,
474
+ .rg-toolbar .rg-collapse {
475
+ width: 44px;
476
+ height: 44px;
477
+ }
478
+ .rg-thread-close::after,
479
+ .rg-submit::after {
480
+ width: 100%;
481
+ height: 100%;
482
+ }
483
+ .rg-thread-label .rg-tag-row,
484
+ .rg-thread-label .rg-bottom-section {
485
+ min-height: 44px;
486
+ padding-top: 0;
487
+ padding-bottom: 0;
488
+ }
489
+ .rg-thread-close,
490
+ .rg-submit {
491
+ width: 44px;
492
+ height: 44px;
493
+ }
494
+ }
495
+
496
+ @media (prefers-reduced-motion: reduce) {
497
+ .rg-toolbar, .rg-toolbar *, .rg-selection-label, .rg-selection-label * {
498
+ animation: none !important;
499
+ transition: none !important;
500
+ }
501
+ }
502
+
503
+ @supports (-webkit-touch-callout: none) {
504
+ .rg-bottom-section textarea { font-size: 16px; }
505
+ }
506
+
507
+
508
+ .rg-visually-hidden {
509
+ position: fixed;
510
+ width: 1px;
511
+ height: 1px;
512
+ padding: 0;
513
+ overflow: hidden;
514
+ clip: rect(0 0 0 0);
515
+ clip-path: inset(50%);
516
+ white-space: nowrap;
517
+ border: 0;
518
+ }
519
+
520
+ .rg-feedback-navigator-scrim {
521
+ display: none;
522
+ position: fixed;
523
+ inset: 0;
524
+ z-index: 2147483001;
525
+ pointer-events: auto;
526
+ background: rgba(0, 0, 0, .08);
527
+ touch-action: none;
528
+ }
529
+
530
+ .rg-feedback-navigator {
531
+ position: fixed;
532
+ right: auto;
533
+ bottom: calc(max(16px, env(safe-area-inset-bottom)) + 34px);
534
+ left: max(8px, calc(50% - 170px));
535
+ z-index: 2147483646;
536
+ display: flex;
537
+ flex-direction: column;
538
+ width: min(340px, calc(100vw - 16px));
539
+ max-height: min(420px, calc(100dvh - 66px));
540
+ overflow: hidden;
541
+ pointer-events: auto;
542
+ border: 0;
543
+ border-radius: 14px;
544
+ corner-shape: superellipse(1.25);
545
+ color: var(--rg-text-primary);
546
+ background: var(--rg-panel-bg);
547
+ box-shadow: var(--rg-shadow);
548
+ font: 500 13px/16px Geist, ui-sans-serif, system-ui, sans-serif;
549
+ font-synthesis: none;
550
+ transform-origin: var(--rg-navigator-origin-x, 50%) calc(100% + 8px);
551
+ }
552
+ .rg-feedback-navigator[data-motion="enter"] {
553
+ animation: rg-feedback-navigator-enter 220ms var(--rg-ease-spring) both;
554
+ }
555
+ .rg-thread-label[data-layout="navigator-detail"] {
556
+ z-index: 2147483645;
557
+ filter: none;
558
+ }
559
+ .rg-thread-label[data-layout="navigator-detail"] .rg-surface {
560
+ box-shadow: var(--rg-shadow);
561
+ }
562
+ .rg-thread-label[data-layout="navigator-detail"] .rg-label-arrow {
563
+ display: none;
564
+ }
565
+ .rg-feedback-navigator-header {
566
+ display: flex;
567
+ align-items: center;
568
+ flex: none;
569
+ min-height: 34px;
570
+ padding: 5px 5px 3px 8px;
571
+ }
572
+ .rg-feedback-navigator-heading {
573
+ display: flex;
574
+ align-items: center;
575
+ min-width: 0;
576
+ gap: 4px;
577
+ }
578
+ .rg-feedback-navigator-title {
579
+ overflow: hidden;
580
+ margin: 0;
581
+ color: var(--rg-text-primary);
582
+ font: 500 13px/16px Geist, ui-sans-serif, system-ui, sans-serif;
583
+ text-overflow: ellipsis;
584
+ white-space: nowrap;
585
+ }
586
+ .rg-feedback-navigator-total {
587
+ color: var(--rg-text-secondary);
588
+ font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
589
+ font-variant-numeric: tabular-nums;
590
+ }
591
+
592
+ .rg-feedback-navigator-close,
593
+ .rg-feedback-filter,
594
+ .rg-feedback-row,
595
+ .rg-feedback-navigator-retry {
596
+ all: unset;
597
+ box-sizing: border-box;
598
+ cursor: pointer;
599
+ -webkit-tap-highlight-color: transparent;
600
+ }
601
+
602
+ .rg-inline-error {
603
+ padding: 5px 8px;
604
+ border-top: .5px solid var(--rg-border-subtle);
605
+ color: var(--review-accent);
606
+ font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
607
+ }
608
+ .rg-feedback-navigator-close {
609
+ position: relative;
610
+ display: flex;
611
+ align-items: center;
612
+ justify-content: center;
613
+ flex: none;
614
+ width: 24px;
615
+ height: 24px;
616
+ margin-left: auto;
617
+ border-radius: 6px;
618
+ color: var(--rg-text-secondary);
619
+ transition:
620
+ color 150ms var(--rg-ease-drawer),
621
+ background 150ms var(--rg-ease-drawer),
622
+ transform 400ms var(--rg-ease-spring);
623
+ }
624
+ .rg-feedback-navigator-close svg {
625
+ width: 14px;
626
+ height: 14px;
627
+ fill: currentColor;
628
+ }
629
+
630
+ .rg-feedback-filters {
631
+ display: flex;
632
+ align-items: center;
633
+ flex: none;
634
+ gap: 2px;
635
+ margin: 0 4px 4px;
636
+ }
637
+ .rg-feedback-filter {
638
+ display: flex;
639
+ align-items: center;
640
+ min-width: 0;
641
+ min-height: 24px;
642
+ padding: 4px 6px;
643
+ gap: 4px;
644
+ border-radius: 6px;
645
+ color: var(--rg-text-secondary);
646
+ text-align: center;
647
+ transition:
648
+ color 150ms var(--rg-ease-drawer),
649
+ background 150ms var(--rg-ease-drawer),
650
+ transform 400ms var(--rg-ease-spring);
651
+ }
652
+ .rg-feedback-filter[aria-pressed="true"] {
653
+ color: var(--rg-text-primary);
654
+ background: var(--rg-surface-hover);
655
+ }
656
+ .rg-feedback-filter-label {
657
+ overflow: hidden;
658
+ text-overflow: ellipsis;
659
+ white-space: nowrap;
660
+ }
661
+ .rg-feedback-filter-count {
662
+ color: var(--rg-text-secondary);
663
+ font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
664
+ font-variant-numeric: tabular-nums;
665
+ }
666
+
667
+ .rg-feedback-navigator-content {
668
+ min-height: 0;
669
+ overflow: auto;
670
+ overscroll-behavior: contain;
671
+ scrollbar-color: var(--rg-border-subtle) transparent;
672
+ scrollbar-width: thin;
673
+ border-top: .5px solid var(--rg-border-subtle);
674
+ }
675
+ .rg-feedback-list {
676
+ margin: 0;
677
+ padding: 4px;
678
+ list-style: none;
679
+ }
680
+ .rg-feedback-row {
681
+ display: grid;
682
+ grid-template-columns: 18px minmax(0, 1fr);
683
+ align-items: start;
684
+ width: 100%;
685
+ min-height: 50px;
686
+ padding: 7px 8px;
687
+ gap: 6px;
688
+ border-radius: 8px;
689
+ color: var(--rg-text-primary);
690
+ text-align: left;
691
+ transition:
692
+ background 150ms var(--rg-ease-drawer),
693
+ opacity 150ms var(--rg-ease-drawer);
694
+ }
695
+ .rg-feedback-row[aria-current="true"] {
696
+ background: var(--rg-surface-hover);
697
+ }
698
+ .rg-feedback-row[data-status="resolved"] .rg-feedback-row-copy {
699
+ opacity: .68;
700
+ }
701
+ .rg-feedback-row-pin {
702
+ display: grid;
703
+ place-items: center;
704
+ width: 18px;
705
+ height: 18px;
706
+ color: var(--rg-text-secondary);
707
+ font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
708
+ font-variant-numeric: tabular-nums;
709
+ }
710
+ .rg-feedback-row-copy {
711
+ display: flex;
712
+ flex-direction: column;
713
+ min-width: 0;
714
+ gap: 2px;
715
+ }
716
+ .rg-feedback-row-body {
717
+ display: -webkit-box;
718
+ overflow: hidden;
719
+ color: var(--rg-text-primary);
720
+ overflow-wrap: anywhere;
721
+ white-space: pre-wrap;
722
+ -webkit-box-orient: vertical;
723
+ -webkit-line-clamp: 2;
724
+ }
725
+ .rg-feedback-row-context {
726
+ overflow: hidden;
727
+ color: var(--rg-text-secondary);
728
+ font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
729
+ text-overflow: ellipsis;
730
+ white-space: nowrap;
731
+ }
732
+ .rg-feedback-row-context[data-current-page="true"] {
733
+ color: var(--rg-text-primary);
734
+ }
735
+ .rg-feedback-row-detail {
736
+ display: flex;
737
+ align-items: center;
738
+ min-width: 0;
739
+ color: var(--rg-text-secondary);
740
+ }
741
+ .rg-feedback-row-meta {
742
+ overflow: hidden;
743
+ color: var(--rg-text-secondary);
744
+ font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
745
+ text-overflow: ellipsis;
746
+ white-space: nowrap;
747
+ }
748
+ .rg-feedback-row-trailing {
749
+ display: flex;
750
+ align-items: center;
751
+ min-width: 0;
752
+ margin-left: 6px;
753
+ gap: 6px;
754
+ color: var(--rg-text-secondary);
755
+ font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
756
+ white-space: nowrap;
757
+ }
758
+ .rg-feedback-row-location-missing {
759
+ display: flex;
760
+ align-items: center;
761
+ justify-content: center;
762
+ width: 12px;
763
+ height: 12px;
764
+ color: var(--review-accent);
765
+ }
766
+ .rg-feedback-row-location-missing svg {
767
+ width: 12px;
768
+ height: 12px;
769
+ }
770
+ .rg-feedback-row-replies,
771
+ .rg-feedback-row-status {
772
+ display: inline-flex;
773
+ align-items: center;
774
+ min-height: 14px;
775
+ }
776
+ .rg-feedback-row-status {
777
+ width: 12px;
778
+ height: 12px;
779
+ }
780
+ .rg-feedback-row-status svg {
781
+ width: 12px;
782
+ height: 12px;
783
+ }
784
+
785
+ .rg-feedback-navigator-state,
786
+ .rg-feedback-navigator-empty {
787
+ display: flex;
788
+ align-items: center;
789
+ justify-content: center;
790
+ min-height: 58px;
791
+ padding: 12px;
792
+ color: var(--rg-text-secondary);
793
+ text-align: center;
794
+ }
795
+ .rg-feedback-navigator-state[data-state="reconnecting"] {
796
+ min-height: 0;
797
+ padding: 5px 8px;
798
+ border-bottom: .5px solid var(--rg-border-subtle);
799
+ color: var(--rg-text-secondary);
800
+ background: var(--rg-surface-hover);
801
+ font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
802
+ }
803
+ .rg-feedback-navigator-state[data-state="loading"]::before {
804
+ width: 12px;
805
+ height: 12px;
806
+ margin-right: 8px;
807
+ border: 1.5px solid var(--rg-border-subtle);
808
+ border-top-color: var(--rg-text-secondary);
809
+ border-radius: 50%;
810
+ content: '';
811
+ animation: rg-feedback-spinner 700ms linear infinite;
812
+ }
813
+ .rg-feedback-navigator-state[data-state="error"] {
814
+ flex-wrap: wrap;
815
+ gap: 8px;
816
+ }
817
+ .rg-feedback-navigator-retry {
818
+ display: inline-flex;
819
+ align-items: center;
820
+ justify-content: center;
821
+ min-height: 17px;
822
+ padding: 1px 4px;
823
+ border: .5px solid var(--rg-border-subtle);
824
+ border-radius: 4px;
825
+ color: var(--rg-text-primary);
826
+ background: var(--rg-panel-bg);
827
+ transition:
828
+ background 150ms var(--rg-ease-drawer),
829
+ transform 400ms var(--rg-ease-spring);
830
+ }
831
+
832
+ .rg-feedback-list-tool:focus-visible,
833
+ .rg-feedback-navigator-close:focus-visible,
834
+ .rg-feedback-filter:focus-visible,
835
+ .rg-feedback-row:focus-visible,
836
+ .rg-feedback-navigator-retry:focus-visible {
837
+ outline: 2px solid var(--review-accent);
838
+ outline-offset: 2px;
839
+ }
840
+ .rg-feedback-row:focus-visible {
841
+ outline-offset: -2px;
842
+ }
843
+
844
+ @media (hover: hover) and (pointer: fine) {
845
+ .rg-feedback-navigator-close:hover,
846
+ .rg-feedback-filter:hover,
847
+ .rg-feedback-navigator-retry:hover {
848
+ color: var(--rg-text-primary);
849
+ background: var(--rg-surface-hover);
850
+ }
851
+ .rg-feedback-row:hover { background: var(--rg-surface-hover); }
852
+ .rg-feedback-navigator-close:active,
853
+ .rg-feedback-filter:active,
854
+ .rg-feedback-navigator-retry:active {
855
+ transform: scale(.96);
856
+ transition-duration: 60ms;
857
+ }
858
+ }
859
+
860
+ @media (max-width: 640px) {
861
+ .rg-feedback-navigator-scrim {
862
+ display: block;
863
+ }
864
+ .rg-feedback-navigator-scrim[data-motion="enter"] {
865
+ animation: rg-feedback-scrim-enter 160ms ease-out both;
866
+ }
867
+ .rg-feedback-navigator {
868
+ right: auto;
869
+ bottom: calc(max(16px, env(safe-area-inset-bottom)) + 64px);
870
+ left: 50%;
871
+ width: min(360px, calc(100vw - 16px));
872
+ max-height: min(70dvh, 480px);
873
+ border-radius: 14px;
874
+ transform: translateX(-50%);
875
+ }
876
+ .rg-feedback-navigator[data-motion="enter"] {
877
+ animation: rg-feedback-sheet-enter 220ms var(--rg-ease-drawer) both;
878
+ }
879
+ .rg-feedback-navigator-header { min-height: 44px; padding-top: 5px; }
880
+ .rg-feedback-navigator-content { -webkit-overflow-scrolling: touch; }
881
+ .rg-feedback-filter { min-height: 44px; }
882
+ .rg-feedback-row { min-height: 56px; padding-top: 8px; padding-bottom: 8px; }
883
+ .rg-feedback-navigator-close,
884
+ .rg-feedback-navigator-retry { min-width: 44px; min-height: 44px; }
885
+ }
886
+
887
+ @media (hover: none), (pointer: coarse) {
888
+ .rg-feedback-list-tool svg {
889
+ width: 14px;
890
+ height: 14px;
891
+ }
892
+ .pin::after {
893
+ top: 50%;
894
+ left: 50%;
895
+ width: 44px;
896
+ height: 44px;
897
+ transform: translate(-50%, -50%);
898
+ }
899
+ .rg-feedback-filter { min-height: 44px; }
900
+ .rg-feedback-row { min-height: 56px; }
901
+ .rg-feedback-navigator-close,
902
+ .rg-feedback-navigator-retry { min-width: 44px; min-height: 44px; }
903
+ }
904
+
905
+ @media (prefers-reduced-motion: reduce) {
906
+ .pin,
907
+ .rg-feedback-navigator-scrim,
908
+ .rg-feedback-navigator,
909
+ .rg-feedback-navigator *,
910
+ .rg-feedback-list-tool {
911
+ animation: none !important;
912
+ transition: none !important;
913
+ }
914
+ }
915
+
916
+ @media (forced-colors: active) {
917
+ .pin,
918
+ .pin[data-resolved="true"],
919
+ .pin[data-resolved="true"][data-active="true"] {
920
+ border-color: Canvas;
921
+ color: Canvas;
922
+ background: CanvasText;
923
+ box-shadow: 0 0 0 1px CanvasText;
924
+ }
925
+ .pin[data-active="true"],
926
+ .pin:focus-visible {
927
+ outline: 3px solid Highlight;
928
+ outline-offset: 3px;
929
+ }
930
+ }
931
+
932
+ @keyframes rg-feedback-navigator-enter {
933
+ from { opacity: 0; transform: translateY(2px) scale(.92); }
934
+ to { opacity: 1; transform: translateY(0) scale(1); }
935
+ }
936
+ @keyframes rg-feedback-sheet-enter {
937
+ from { opacity: 0; transform: translate(-50%, 12px) scale(.98); }
938
+ to { opacity: 1; transform: translate(-50%, 0) scale(1); }
939
+ }
940
+ @keyframes rg-feedback-scrim-enter {
941
+ from { opacity: 0; }
942
+ to { opacity: 1; }
943
+ }
944
+ @keyframes rg-feedback-spinner {
945
+ to { transform: rotate(360deg); }
946
+ }
947
+
948
+
949
+ .rg-collaboration-cursors { position: fixed; inset: 0; z-index: 2147483645; pointer-events: none; }
950
+ .rg-collaboration-cursor { position: fixed; transform: translate(-2px, -2px); color: var(--rg-peer-color); }
951
+ .rg-collaboration-cursor-pointer {
952
+ width: 14px; height: 18px; background: currentColor;
953
+ clip-path: polygon(0 0, 100% 68%, 58% 72%, 40% 100%);
954
+ filter: drop-shadow(0 1px 1px rgba(0,0,0,.28));
955
+ }
956
+ .rg-collaboration-cursor-label {
957
+ margin: -1px 0 0 11px; padding: 2px 6px; border-radius: 0 6px 6px 6px;
958
+ color: #fff; background: var(--rg-peer-color); white-space: nowrap;
959
+ font: 600 11px/16px Geist, ui-sans-serif, system-ui, sans-serif;
960
+ text-shadow: 0 1px 1px rgba(0,0,0,.18);
961
+ }
962
+ .rg-collaboration-cursor-chat {
963
+ position: absolute; left: 11px; top: 22px; width: max-content;
964
+ max-width: min(260px, calc(100vw - 24px)); padding: 7px 9px;
965
+ border-radius: 3px 10px 10px 10px;
966
+ color: #fff; background: var(--rg-peer-color); white-space: pre-wrap; overflow-wrap: anywhere;
967
+ font: 600 13px/18px Geist, ui-sans-serif, system-ui, sans-serif;
968
+ box-shadow: 0 3px 14px rgba(0,0,0,.2);
969
+ }
970
+ .rg-collaboration-cursor[data-horizontal="left"] .rg-collaboration-cursor-chat {
971
+ right: 12px; left: auto; border-radius: 10px 3px 10px 10px;
972
+ }
973
+ .rg-collaboration-cursor[data-vertical="above"] .rg-collaboration-cursor-chat {
974
+ top: auto; bottom: 20px; border-bottom-left-radius: 3px; border-top-left-radius: 10px;
975
+ }
976
+ .rg-collaboration-cursor-chat-page {
977
+ margin-bottom: 2px; opacity: .72; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
978
+ font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
979
+ }
980
+ .rg-collaboration-cursor-chat-body { white-space: pre-wrap; overflow-wrap: anywhere; }
981
+ .rg-collaboration-participants {
982
+ all: unset; box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center;
983
+ flex: none; width: 28px; height: 28px; color: var(--rg-text-secondary);
984
+ font: 600 10px/1 Geist, ui-sans-serif, system-ui, sans-serif;
985
+ }
986
+ .rg-collaboration-participants[hidden] { display: none; }
987
+ .rg-cursor-chat-mobile-trigger {
988
+ all: unset; box-sizing: border-box; display: none; align-items: center; justify-content: center;
989
+ flex: none; min-width: 44px; height: 44px; padding: 0 8px; cursor: pointer;
990
+ color: var(--rg-text-secondary); font: 600 11px/1 Geist, ui-sans-serif, system-ui, sans-serif;
991
+ }
992
+ .rg-cursor-chat-mobile-trigger:focus-visible {
993
+ outline: 2px solid var(--review-accent); outline-offset: 2px;
994
+ }
995
+ .rg-cursor-chat-composer {
996
+ position: fixed; z-index: 2147483646; display: grid; gap: 5px;
997
+ width: min(260px, calc(100vw - 24px)); padding: 7px; border: 0;
998
+ border-left: 3px solid var(--rg-local-color); border-radius: 5px 13px 13px 13px;
999
+ color: var(--rg-text-primary); background: var(--rg-panel-bg);
1000
+ box-shadow: 0 8px 28px rgba(0,0,0,.22), 0 0 0 1px var(--rg-border-subtle);
1001
+ font: 13px/18px Geist, ui-sans-serif, system-ui, sans-serif;
1002
+ }
1003
+ .rg-cursor-chat-composer::before {
1004
+ position: absolute; top: 8px; left: -6px; width: 9px; height: 9px;
1005
+ border-radius: 2px; background: var(--rg-local-color); content: ''; transform: rotate(45deg);
1006
+ }
1007
+ .rg-cursor-chat-composer[data-horizontal="left"] {
1008
+ border-right: 3px solid var(--rg-local-color); border-left: 0;
1009
+ border-radius: 13px 5px 13px 13px;
1010
+ }
1011
+ .rg-cursor-chat-composer[data-horizontal="left"]::before { right: -6px; left: auto; }
1012
+ .rg-cursor-chat-composer[hidden] { display: none; }
1013
+ .rg-cursor-chat-header { display: flex; align-items: center; min-width: 0; padding: 1px 6px 3px; gap: 7px; }
1014
+ .rg-cursor-chat-header strong { overflow: hidden; color: var(--rg-local-color); font: 650 11px/15px Geist, ui-sans-serif, system-ui, sans-serif; text-overflow: ellipsis; white-space: nowrap; }
1015
+ .rg-cursor-chat-header span { margin-left: auto; color: var(--rg-text-secondary); font: 500 9px/13px Geist, ui-sans-serif, system-ui, sans-serif; white-space: nowrap; }
1016
+ .rg-cursor-chat-preview { padding: 4px 7px; border-radius: 8px; color: var(--rg-text-primary); background: color-mix(in srgb, var(--rg-local-color) 10%, transparent); overflow-wrap: anywhere; }
1017
+ .rg-cursor-chat-preview[hidden] { display: none; }
1018
+ .rg-cursor-chat-input {
1019
+ all: unset; box-sizing: border-box; width: 100%; min-height: 32px; padding: 6px 8px;
1020
+ border-radius: 8px; color: var(--rg-text-primary); background: var(--rg-panel-secondary);
1021
+ font: inherit;
1022
+ }
1023
+ .rg-cursor-chat-input::placeholder { color: var(--rg-text-secondary); }
1024
+ .rg-cursor-chat-input:focus, .rg-cursor-chat-input:focus-visible { outline: none; }
1025
+ .rg-cursor-chat-announcements {
1026
+ position: fixed; width: 1px; height: 1px; overflow: hidden;
1027
+ clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap;
1028
+ }
1029
+ @media (pointer: coarse) {
1030
+ .rg-cursor-chat-mobile-trigger { display: inline-flex; }
1031
+ .rg-cursor-chat-composer {
1032
+ right: 12px; bottom: 64px; left: 12px !important; top: auto !important; width: auto;
1033
+ border-right: 0; border-left: 3px solid var(--rg-local-color); border-radius: 5px 13px 13px 13px;
1034
+ }
1035
+ .rg-cursor-chat-composer::before { right: auto; left: -6px; }
1036
+ }
1037
+ `;let n=G(`highlight`);n.dataset.slot=`highlight`;let r=G(`region`);r.dataset.slot=`region`;let i=G(`pins`);i.dataset.slot=`pins`;let a=G(`panels`);a.dataset.slot=`panels`;let o=G(`navigator-slot`);o.dataset.slot=`navigator`,o.id=W,o.addEventListener(`click`,this.#Pe),o.addEventListener(`keydown`,this.#Fe);let s=G(`rg-visually-hidden`);s.dataset.slot=`announcer`,s.setAttribute(`aria-live`,`polite`),s.setAttribute(`aria-atomic`,`true`);let c=je({developerGrab:this.#t?.developerTools?.reactGrab===!0});c.querySelector(`.rg-toolbar-actions`)?.append(Ye(0,{controlsId:W,presentation:this.#Ce()})),c.querySelector(`.rg-feedback-tool`)?.addEventListener(`click`,()=>{if(!this.#he()){this.#b||this.#_e(!0),this.#ze(this.#ge());return}if(this.#b&&this.#_e(!1,{restoreFocus:!1,restoreComposer:!0}))return;if(this.#h){this.#ze(`피드백을 저장하는 중입니다.`);return}if(this.#s&&this.#c===`react-grab`&&this.#g){this.#pe(!1);return}let e=this.#s&&this.#c===`feedback`;this.#pe(!e,`feedback`)}),c.querySelector(`.rg-developer-grab-tool`)?.addEventListener(`click`,()=>{if(this.#L){this.#ze(`코드 컨텍스트를 복사하는 중입니다.`);return}if(this.#h){this.#ze(`피드백을 저장하는 중입니다.`);return}this.#b&&this.#_e(!1,{restoreFocus:!1});let e=this.#s&&this.#c===`react-grab`;e||this.#ve(),this.#pe(!e,`react-grab`)}),c.querySelector(`.rg-feedback-list-tool`)?.addEventListener(`click`,()=>{this.#_e(!this.#b)}),c.querySelector(`.rg-collapse`)?.addEventListener(`click`,()=>{let e=c.dataset.collapsed===`true`;!e&&this.#s&&this.#pe(!1),!e&&this.#b&&this.#_e(!1,{restoreFocus:!1});let t=!e;c.dataset.collapsed=String(t);let n=c.querySelector(`.rg-toolbar-actions-shell`);n&&(n.inert=t,n.setAttribute(`aria-hidden`,String(t))),c.querySelector(`.rg-collapse`)?.setAttribute(`aria-expanded`,String(e)),c.querySelector(`.rg-collapse`)?.setAttribute(`aria-label`,e?`Visual Review 접기`:`Visual Review 펼치기`)}),this.#e.append(t,n,r,i,a,o,s,c)}#ue(){let e=this.#t?.collaboration,t=e?.repository;if(!this.#t||!t||!e.cursors&&!e.chat)return;let n=e.roomId??e.scopeId;this.#i=Te({root:this.#e,pageId:this.#t.pageId,pathname:Qt(window.location.pathname),roomId:n,session:this.#t.session,repository:t,cursors:e.cursors,chat:e.chat,canOpenChat:()=>this.#de(),onFailure:e=>{e.type===`access-lost`?(this.#i?.stop(),this.#i=null,this.#ie(e)):this.#ze(`실시간 협업 연결이 불안정합니다. 다시 연결하는 중입니다.`)}}),this.#i.start()}#de(){return this.#h||this.#L?!1:(this.#s&&this.#pe(!1),this.#b&&this.#_e(!1,{restoreFocus:!1,restoreComposer:!1}),this.#d&&(this.#ve(),this.#Dt()),this.#_&&this.#vt(!1,!1),!this.#s&&!this.#b&&!this.#d&&!this.#_)}#fe(){this.#Tt(),this.#Dt(),this.#be(),this.#Se(),this.#me(),this.#ht(),this.#_t()}#pe(e,t=`feedback`){let n=this.#c;if(e&&(this.#D+=1),e&&t===`feedback`&&!this.#he()){this.#b||this.#_e(!0),this.#ze(this.#ge());return}if(e&&t===`feedback`&&this.#h){this.#ze(`피드백을 저장하는 중입니다.`);return}if(e&&t===`feedback`&&this.#g){this.#_?this.#vt(!1):this.#ye(),this.#ze(`작성 중인 피드백을 복원했습니다.`);return}if(e&&this.#s){this.#c=t,this.#l=null,this.#u=null,this.#St(),this.#me();return}this.#s=e,this.#c=e?t:null,this.#me(),e?(this.#_=null,this.#v=null,this.#d=null,this.#f=``,this.#p=``,this.#m=null,this.#St(),document.addEventListener(`pointermove`,this.#He,!0),document.addEventListener(`pointerdown`,this.#Ue,!0),document.addEventListener(`pointerup`,this.#We,!0),document.addEventListener(`pointercancel`,this.#Ge,!0),document.addEventListener(`keydown`,this.#Ke,!0),this.#M={value:document.body.style.getPropertyValue(`cursor`),priority:document.body.style.getPropertyPriority(`cursor`)},document.body.style.setProperty(`cursor`,`crosshair`),this.#A=ae(this.#t?.styleNonce),queueMicrotask(()=>this.#$e())):(document.removeEventListener(`pointermove`,this.#He,!0),document.removeEventListener(`pointerdown`,this.#Ue,!0),document.removeEventListener(`pointerup`,this.#We,!0),document.removeEventListener(`pointercancel`,this.#Ge,!0),document.removeEventListener(`keydown`,this.#Ke,!0),this.#M&&=(rn(document.body,`cursor`,this.#M),null),this.#A?.(),this.#A=null,this.#l=null,this.#u=null,this.#St()),this.#Dt(),!e&&n===`react-grab`&&this.#ye()}#me(){let e=this.#e.querySelector(`.rg-toolbar`),t=this.#e.querySelector(`[data-slot="pins"]`),n=this.#e.querySelector(`.rg-feedback-tool`),r=this.#e.querySelector(`.rg-developer-grab-tool`),i=this.#s&&this.#c===`feedback`,a=this.#s&&this.#c===`react-grab`;e&&(e.dataset.selecting=String(this.#s)),t&&(t.dataset.selectionSuppressed=String(this.#s),t.toggleAttribute(`inert`,this.#s),t.setAttribute(`aria-hidden`,String(this.#s))),n&&(n.setAttribute(`aria-pressed`,String(i)),n.setAttribute(`aria-label`,i?`선택 취소`:`피드백 위치 선택`),n.setAttribute(`aria-disabled`,String(!this.#he()))),r&&(r.setAttribute(`aria-pressed`,String(a)),r.setAttribute(`aria-label`,a?`코드 선택 취소`:`React Grab 코드 선택`),r.setAttribute(`aria-disabled`,String(this.#L)))}#he(){return!this.#T&&this.#S===`ready`&&this.#a!==null}#ge(){return this.#T?`다시 인증하세요.`:this.#S===`loading`?`불러오는 중입니다.`:`다시 시도하세요.`}#_e(e,t={}){let n=t.restoreFocus??!0,r=t.restoreComposer??!0;if(e===this.#b)return!1;if(e)return this.#D+=1,this.#s&&this.#pe(!1),this.#ve(),this.#b=!0,this.#Dt(),this.#be(),this.#Se(),queueMicrotask(()=>this.#De()),!1;(t.cancelNavigation??!0)&&(this.#D+=1),this.#b=!1,this.#j?.(),this.#j=null,this.#be(),this.#Se(),queueMicrotask(()=>this.#yt());let i=r&&this.#ye();return n&&!i&&queueMicrotask(()=>this.#Oe()?.focus()),i}#ve(){if(!this.#d)return!1;let e=this.#e.querySelector(`.rg-selection-label:not(.rg-thread-label) textarea`);return this.#g={target:this.#d,body:e?.value??this.#f},this.#d=null,this.#f=``,!0}#ye(){if(!this.#g||this.#b||this.#_)return!1;let e=this.#g;return this.#g=null,this.#d=e.target,this.#f=e.body,this.#Dt(),queueMicrotask(()=>{let e=this.#e.querySelector(`.rg-selection-label:not(.rg-thread-label) textarea`);e?.focus(),e?.setSelectionRange(e.value.length,e.value.length)}),!0}#be(){let e=this.#e.querySelector(`[data-slot="navigator"]`);if(!e)return;let t=e.querySelector(`.rg-feedback-navigator`),n=t?.querySelector(`.rg-feedback-navigator-content`),r=t?.dataset.presentation,i=t?`refresh`:`enter`,a=n?.scrollTop??0,o=this.#e.activeElement instanceof HTMLElement?this.#e.activeElement:null,s=o?.closest(`.rg-feedback-row[data-comment-id]`)?.dataset.commentId,c=o?.closest(`[data-feedback-filter]`)?.dataset.feedbackFilter,l=!!o?.closest(`.rg-feedback-navigator-close`),u=!!o?.closest(`.rg-feedback-navigator-retry`);if(e.replaceChildren(),!this.#b)return;let d=this.#Ce(),f=G(`rg-feedback-navigator-scrim`);f.dataset.motion=i,f.dataset.feedbackNavigatorAction=`close`,f.setAttribute(`aria-hidden`,`true`);let p=Xe(this.#xe(),{id:vt,presentation:d});p.dataset.motion=i,p.dataset.detailOpen=String(!!(this.#_&&d===`tray`)),e.append(f,p),this.#Ee(d),queueMicrotask(()=>this.#we()),queueMicrotask(()=>{if(!this.#b)return;let t=e.querySelector(`.rg-feedback-navigator-content`);if(t&&(t.scrollTop=a),s){let e=this.#ke(s);e?e.focus({preventScroll:!0}):this.#De()}else if(c&&Zt(c))e.querySelector(`[data-feedback-filter="${c}"]`)?.focus({preventScroll:!0});else if(l)e.querySelector(`.rg-feedback-navigator-close`)?.focus({preventScroll:!0});else if(u){let t=e.querySelector(`.rg-feedback-navigator-retry`);t?t.focus({preventScroll:!0}):this.#De()}else d===`sheet`&&r!==`sheet`&&this.#De()})}#xe(){let e=Ue(this.#Ae(),this.#x),t=this.#t?.now?.()??Date.now(),n=this.#O&&this.#S===`ready`?`reconnecting`:this.#S;return{filter:this.#x,counts:e.counts,rows:e.rows.map(({comment:e,pinNumber:n,replyCount:r,lastActivityAt:i})=>({id:e.id,pinNumber:n,pageLabel:this.#Ne(e),pageUrl:en(e)?.href,currentPage:this.#je(e),targetLabel:this.#Me(e),authorName:e.authorName,body:e.body,timeLabel:tn(i,t),replyCount:r,status:e.status,locationAvailable:!this.#je(e)||q(e).available})),activeCommentId:this.#_,loadState:n,errorMessage:this.#C,errorRecovery:this.#w}}#Se(){let e=this.#Oe();if(!e)return;let t=this.#Ae().comments.length;e.setAttribute(`aria-label`,`피드백 목록, 총 ${t}개`),e.setAttribute(`aria-expanded`,String(this.#b)),e.setAttribute(`aria-controls`,W),this.#Ce()===`sheet`?e.setAttribute(`aria-haspopup`,`dialog`):e.removeAttribute(`aria-haspopup`),e.removeAttribute(`aria-pressed`)}#Ce(){return window.matchMedia?.(`(max-width: 640px)`).matches||window.innerWidth<=640?`sheet`:`tray`}#we(){let e=this.#e.querySelector(`.rg-feedback-navigator`),t=this.#Oe(),n=this.#e.querySelector(`.rg-toolbar`);if(!e||!t||!n||e.dataset.presentation!==`tray`)return;let r=t.getBoundingClientRect(),i=n.getBoundingClientRect(),a=e.offsetWidth,o=(this.#_?this.#e.querySelector(`.rg-thread-label`):null)?.offsetWidth??0;if(r.width<=0||a<=0)return;let s=r.left+r.width/2,c=a+(o>0?8:0)+o,l=Z(s-c/2,8,Math.max(8,window.innerWidth-c-8));e.style.left=`${l}px`,e.style.bottom=`${Math.max(8,window.innerHeight-i.top+8)}px`,e.style.setProperty(`--rg-navigator-origin-x`,`${Z(s-l,16,a-16)}px`),this.#Te()}#Te(){if(!this.#b||this.#Ce()!==`tray`)return!1;let e=this.#e.querySelector(`.rg-feedback-navigator`),t=this.#e.querySelector(`.rg-thread-label`);if(!e||!t||!this.#_)return!1;let n=e.getBoundingClientRect(),r=t.getBoundingClientRect();if(n.width<=0||r.width<=0||r.height<=0)return!1;let i=window.innerWidth-n.right-8>=r.width+8||n.left<r.width+8+8?n.right+8:n.left-8-r.width,a=Z(n.top,8,Math.max(8,window.innerHeight-r.height-8));return t.dataset.layout=`navigator-detail`,t.dataset.side=`detached`,t.style.left=`${i+r.width/2}px`,t.style.top=`${a}px`,t.style.opacity=`1`,!0}#Ee(e){if(e!==`sheet`){this.#j?.(),this.#j=null;return}if(this.#j)return;let t=[...[...document.body.children].filter(e=>e!==this),...this.#e.querySelectorAll(`[data-slot="pins"], [data-slot="panels"], .rg-toolbar`)].filter(e=>e instanceof HTMLElement),n=t.map(e=>({element:e,inert:e.inert}));t.forEach(e=>{e.inert=!0});let r=this.#e.querySelector(`[data-slot="panels"]`),i=r?nn(r,`visibility`):null;r&&r.style.setProperty(`visibility`,`hidden`);let a=nn(document.body,`overflow`),o=nn(document.documentElement,`overflow`),s=e=>{let t=this.#e.querySelector(`.rg-feedback-navigator`);!t||e.composedPath().includes(t)||queueMicrotask(()=>this.#De())};document.addEventListener(`focusin`,s,!0),document.body.style.setProperty(`overflow`,`hidden`),document.documentElement.style.setProperty(`overflow`,`hidden`),this.#j=()=>{n.forEach(({element:e,inert:t})=>{e.inert=t}),r&&i&&rn(r,`visibility`,i),document.removeEventListener(`focusin`,s,!0),rn(document.body,`overflow`,a),rn(document.documentElement,`overflow`,o)}}#De(){if(!this.#b)return;let e=this.#_?this.#ke(this.#_):null,t=this.#e.querySelector(`.rg-feedback-row`),n=this.#e.querySelector(`.rg-feedback-navigator-retry`),r=this.#e.querySelector(`.rg-feedback-navigator-close`);(e??t??n??r)?.focus({preventScroll:!0})}#Oe(){return this.#e.querySelector(`.rg-feedback-list-tool`)}#ke(e){return[...this.#e.querySelectorAll(`.rg-feedback-row[data-comment-id]`)].find(({dataset:t})=>t.commentId===e)}#Ae(){let e=this.#a??{pageId:this.#t?.pageId??``,comments:[],replies:[]},t=this.#o;if(!t)return e;let n=this.#t?.pageId??e.pageId,r=t.comments.filter(({pageId:e})=>e!==n),i=new Set(r.map(({id:e})=>e)),a=new Set(e.comments.map(({id:e})=>e));return{pageId:n,comments:[...r.filter(({id:e})=>!a.has(e)),...e.comments],replies:[...t.replies.filter(({commentId:e})=>i.has(e)),...e.replies]}}#je(e){return e.pageId===this.#t?.pageId}#Me(e){return Et(e.target)}#Ne(e){let t=en(e);if(t)return $t(t);let n=this.#o?.pages?.find(({id:t})=>t===e.pageId);return n?.name.trim()?n.name.trim():e.target.pageTitle.trim()||`알 수 없는 페이지`}#Pe=e=>{e.stopPropagation();let t=e.target instanceof Element?e.target.closest(`[data-feedback-navigator-action]`):null,n=t?.dataset.feedbackNavigatorAction;if(n){if(n===`close`||n===`toggle`){this.#_e(!1);return}if(n===`retry`){this.#$();return}if(n===`filter`){let e=t.dataset.feedbackFilter;if(!Zt(e)||e===this.#x)return;this.#x=e,this.#be();return}n===`open-comment`&&t.dataset.commentId&&this.#Ie(t.dataset.commentId,{origin:`navigator`,navigate:!0})}};#Fe=e=>{if(e.stopPropagation(),e.isComposing)return;let t=[...this.#e.querySelectorAll(`.rg-feedback-row`)],n=e.target instanceof Element?e.target.closest(`.rg-feedback-row`):null;if(n&&[`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key)){e.preventDefault();let r=t.indexOf(n);t[e.key===`Home`?0:e.key===`End`?t.length-1:e.key===`ArrowDown`?Math.min(t.length-1,r+1):Math.max(0,r-1)]?.focus();return}if(e.key!==`Tab`||this.#Ce()!==`sheet`)return;let r=this.#e.querySelector(`.rg-feedback-navigator`),i=r?[...r.querySelectorAll(`button:not(:disabled), [tabindex]:not([tabindex="-1"])`)]:[];if(i.length===0)return;let a=i[0],o=i.at(-1);e.shiftKey&&this.#e.activeElement===a?(e.preventDefault(),o.focus()):!e.shiftKey&&this.#e.activeElement===o&&(e.preventDefault(),a.focus())};async#Ie(e,t){let n=this.#Ae().comments.find(({id:t})=>t===e);if(!n)return;this.#s&&this.#pe(!1);let r=++this.#D;if(t.origin===`navigator`&&this.#b&&this.#Ce()===`sheet`&&(this.#_e(!1,{restoreFocus:!1,restoreComposer:!1,cancelNavigation:!1}),await $()),!(r!==this.#D||!this.#k)){if(!this.#Ae().comments.some(({id:t})=>t===e)){this.#Le();return}if(!(t.navigate&&!await this.#Re(n))&&r===this.#D){if(!this.#Ae().comments.some(({id:t})=>t===e)){this.#Le();return}this.#d=null,this.#_=e,this.#v=t.origin,this.#fe(),q(n).available||this.#ze(`현재 화면에서 피드백 위치를 찾을 수 없습니다.`),queueMicrotask(()=>this.#e.querySelector(`.rg-thread-label`)?.focus({preventScroll:!0}))}}}#Le(){!this.#b&&this.#ye()||queueMicrotask(()=>{this.#b?this.#De():this.#Oe()?.focus({preventScroll:!0})})}async#Re(e){if(!this.#je(e)){let t=en(e);if(!t||t.origin!==window.location.origin)return this.#ze(`이 피드백의 페이지로 이동할 수 없습니다.`),!1;this.#ze(`${Qt(t.pathname)} 페이지로 이동합니다.`),this.#y=e.id;try{this.#t?.onNavigateToFeedback?await this.#t.onNavigateToFeedback(t.href,e):window.location.assign(t.href)}catch{this.#y=null,this.#ze(`피드백 페이지로 이동하지 못했습니다.`)}return!1}let t=q(e);if(!t.available||t.pageY===null)return!0;let n=window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches?`auto`:`smooth`;if(e.target.kind!==`viewport`){let t=S(e.anchor).element;if(t&&typeof t.scrollIntoView==`function`)try{return t.scrollIntoView({block:`center`,inline:`center`,behavior:n}),await $(),await $(),!0}catch{}}let r=window.visualViewport?.height??window.innerHeight,i=window.visualViewport?.width??window.innerWidth,a=Math.max(0,t.pageY-r/3),o=Math.max(0,(t.pageX??window.scrollX)-i/2);try{window.scrollTo({left:o,top:a,behavior:n})}catch{}return await $(),await $(),!0}#ze(e){let t=this.#e.querySelector(`[data-slot="announcer"]`);t&&(t.textContent=``,queueMicrotask(()=>{t.textContent=e}))}#Be(e,t=`neutral`){let n=this.#e.querySelector(`.rg-developer-status`);n&&(this.#Ve(),n.textContent=e,n.dataset.tone=t,n.dataset.visible=`true`,this.#P=window.setTimeout(()=>{this.#P=null,n.isConnected&&(n.dataset.visible=`false`)},1800))}#Ve(){this.#P!==null&&(window.clearTimeout(this.#P),this.#P=null)}#He=e=>{if(!this.#s||this.#It(e)||this.#l&&e.pointerId!==this.#u)return;let t=Kt(e);if(this.#l&&Ct(this.#l,t)>=6){this.#xt(this.#l,t);return}this.#bt(t)};#Ue=e=>{!this.#s||this.#It(e)||e.button!==0||this.#l||(e.preventDefault(),e.stopImmediatePropagation(),this.#l=Kt(e),this.#u=e.pointerId)};#We=e=>{if(!this.#s||!this.#l||e.pointerId!==this.#u)return;if(this.#It(e)){this.#l=null,this.#u=null,this.#St();return}e.preventDefault(),e.stopImmediatePropagation();let t=this.#l,n=this.#c,r=Kt(e),i=Ct(t,r)>=6;n===`feedback`&&(this.#d=i?le(t,r):ce(r));let a=n===`react-grab`?this.#qe(t,r,i):[];this.#ot(),this.#pe(!1),n===`react-grab`?this.#Je(a):queueMicrotask(()=>this.#e.querySelector(`.rg-selection-label textarea`)?.focus())};#Ge=e=>{!this.#s||!this.#l||e.pointerId!==this.#u||(e.preventDefault(),e.stopImmediatePropagation(),this.#l=null,this.#u=null,this.#St())};#Ke=e=>{if(!this.#s)return;if(e.key===`Escape`){e.preventDefault(),e.stopImmediatePropagation(),this.#pe(!1);return}if(e.key!==`Enter`||e.isComposing||this.#It(e)||Bt(e))return;let t=Ht(e);if(!t)return;let n=E(t);if(n.width<=0||n.height<=0)return;e.preventDefault(),e.stopImmediatePropagation();let r=this.#c;r===`feedback`&&(this.#d=se(t,{clientX:n.left+n.width/2,clientY:n.top+n.height/2})),this.#pe(!1),r===`react-grab`?this.#Je([t]):queueMicrotask(()=>this.#e.querySelector(`.rg-selection-label textarea`)?.focus())};#qe(e,t,n){if(!n){let e=T(t.clientX,t.clientY);return e?[e]:[]}return ue(new DOMRect(Math.min(e.clientX,t.clientX),Math.min(e.clientY,t.clientY),Math.abs(t.clientX-e.clientX),Math.abs(t.clientY-e.clientY))).slice(0,8)}async#Je(e){if(e.length===0){this.#ze(`선택할 요소를 찾지 못했습니다.`),this.#Be(`선택할 요소가 없습니다`,`error`),this.#Ze();return}if(!this.#k||this.#L)return;let t=this.#k.signal;this.#L=!0,this.#me(),this.#ze(`코드 컨텍스트를 복사하는 중입니다.`),this.#Be(`코드 컨텍스트 복사 중…`);try{let n=this.#Ye(),r=await n;if(t.aborted||n!==this.#R)return;let i=await r.copyElement(e.length===1?e[0]:e);if(t.aborted)return;this.#ze(i?`코드 컨텍스트를 복사했습니다.`:`코드 컨텍스트를 복사하지 못했습니다. 다시 시도하세요.`),this.#Be(i?`코드 컨텍스트 복사됨`:`복사 실패 · 다시 시도`,i?`neutral`:`error`)}catch{t.aborted||(this.#ze(`코드 컨텍스트를 복사하지 못했습니다. 다시 시도하세요.`),this.#Be(`복사 실패 · 다시 시도`,`error`))}finally{t.aborted||(this.#L=!1,this.#me(),this.#Ze())}}#Ye(){if(this.#R)return this.#R;let e=(this.#t?.developerTools?.loadReactGrab??(()=>Be(this.#t?.styleNonce)))();return this.#R=e,e.catch(()=>{this.#R===e&&(this.#R=null)}),e}#Xe(){let e=this.#R;this.#R=null,e&&e.then(e=>e.dispose()).catch(()=>void 0)}#Ze(){this.#d||queueMicrotask(()=>this.#e.querySelector(`.rg-developer-grab-tool`)?.focus({preventScroll:!0}))}#Qe=e=>{if(!this.#s)return;if(this.#It(e)||Bt(e)){this.#St();return}let t=Ht(e);if(!t){this.#St();return}let n=E(t);if(n.width<=0||n.height<=0){this.#St();return}let r=this.#e.querySelector(`[data-slot="region"]`);r&&(r.style.display=`none`);let i=this.#e.querySelector(`[data-slot="highlight"]`);i&&K(i,n)};#$e(){if(!this.#s)return;let e=Ut(document);if(!e||r(e)||Vt(e))return;let t=E(e);if(t.width<=0||t.height<=0)return;let n=this.#e.querySelector(`[data-slot="highlight"]`);n&&K(n,t)}#et=e=>{if(e.key===`Escape`&&!e.isComposing){if(this.#b){e.preventDefault(),e.stopImmediatePropagation(),this.#_e(!1);return}if(this.#_){e.preventDefault(),e.stopImmediatePropagation(),this.#vt(!0);return}if(this.#d){if(e.preventDefault(),e.stopImmediatePropagation(),this.#h?.target===this.#d){this.#ze(`피드백을 저장하는 중입니다.`);return}this.#d=null,this.#f=``,this.#p=``,this.#m=null,this.#Dt(),queueMicrotask(()=>this.#e.querySelector(`.rg-feedback-tool`)?.focus({preventScroll:!0}));return}}!((e.metaKey||e.ctrlKey)&&!e.shiftKey&&!e.altKey&&(e.code===`KeyC`||e.key.toLowerCase()===`c`))||this.#t?.developerTools?.reactGrab!==!0||e.repeat||this.#s||this.#d||this.#_||this.#b||this.#L||this.#N!==null||Bt(e)||Gt(e)||(this.#N=window.setTimeout(()=>{this.#N=null,!(this.#s||this.#d||this.#_||this.#b||this.#h||this.#L)&&this.#rt()},100))};#tt=e=>{let t=e.code===`KeyC`||e.key.toLowerCase()===`c`,n=e.key===`Meta`||e.key===`Control`;(t||n)&&this.#nt()};#nt(){this.#N!==null&&(window.clearTimeout(this.#N),this.#N=null)}#rt(){if(this.#t?.developerTools?.reactGrab!==!0)return;let e=this.#e.querySelector(`.rg-toolbar`);if(e?.dataset.collapsed===`true`){e.dataset.collapsed=`false`;let t=e.querySelector(`.rg-toolbar-actions-shell`);t&&(t.inert=!1,t.setAttribute(`aria-hidden`,`false`));let n=e.querySelector(`.rg-collapse`);n?.setAttribute(`aria-expanded`,`true`),n?.setAttribute(`aria-label`,`Visual Review 접기`)}this.#pe(!0,`react-grab`)}#it=e=>{!this.#_||this.#It(e)||this.#vt(!1)};#at=e=>{!this.#I||this.#It(e)||(e.preventDefault(),e.stopImmediatePropagation(),this.#st())};#ot(){this.#st(),this.#I=!0,this.#F=window.setTimeout(()=>{this.#F=null,this.#I=!1},0)}#st(){this.#F!==null&&(window.clearTimeout(this.#F),this.#F=null),this.#I=!1}#ct=()=>{this.#lt()};#lt(){if(!(!this.#k||this.#z!==null)){if(typeof window.requestAnimationFrame==`function`){this.#B=!0,this.#z=-1;let e=window.requestAnimationFrame(()=>{this.#z=null,this.#ut()});this.#z!==null&&(this.#z=e);return}this.#B=!1,this.#z=window.setTimeout(()=>{this.#z=null,this.#ut()},16)}}#ut(){if(!this.#k)return;this.#U&&(this.#U=!1,this.#ft()),this.#ht(),this.#Et(),this.#Ct(),this.#yt();let e=this.#e.querySelector(`.rg-feedback-navigator`);e&&e.dataset.presentation!==this.#Ce()?(this.#be(),this.#Se()):this.#we(),this.#_t()}#dt(){typeof window.ResizeObserver==`function`&&(this.#V=new window.ResizeObserver(this.#ct)),typeof window.MutationObserver==`function`&&(this.#H=new window.MutationObserver(e=>{e.some(({type:e})=>e===`childList`)&&(this.#U=!0),this.#ct()}),this.#ft()),this.#ht()}#ft(){let e=this.#H;if(!e)return;e.disconnect();let t=d();this.#pt(t),this.#mt();for(let r of t){if(r===this.#e)continue;let t=n(r)?r.documentElement:r;if(t)try{e.observe(t,{attributes:!0,characterData:!0,childList:!0,subtree:!0,attributeFilter:[`class`,`style`,`hidden`,`open`,`aria-hidden`,`id`,`data-review-id`,`data-testid`,`data-id`,`slot`]})}catch{}}}#pt(e){let t=new Set(e.filter(e=>n(e)&&e!==document));for(let[e,n]of this.#K)t.has(e)||(n(),this.#K.delete(e));for(let e of t){if(this.#K.has(e))continue;let t=[],n=(n,r,i=!0)=>{e.addEventListener(n,r,{capture:i,passive:n===`scroll`}),t.push({type:n,listener:r,capture:i})};n(`keydown`,this.#et),n(`keyup`,this.#tt),n(`keydown`,this.#Ke),n(`pointermove`,this.#He),n(`pointerdown`,this.#it),n(`pointerdown`,this.#Ue),n(`pointerup`,this.#We),n(`pointercancel`,this.#Ge),n(`click`,this.#at),n(`focusin`,this.#Qe),n(`scroll`,this.#ct);let r=e.defaultView;r?.addEventListener(`resize`,this.#ct,{passive:!0}),r?.visualViewport?.addEventListener(`scroll`,this.#ct,{passive:!0}),r?.visualViewport?.addEventListener(`resize`,this.#ct,{passive:!0}),this.#K.set(e,()=>{t.forEach(({type:t,listener:n,capture:r})=>{e.removeEventListener(t,n,r)}),r?.removeEventListener(`resize`,this.#ct),r?.visualViewport?.removeEventListener(`scroll`,this.#ct),r?.visualViewport?.removeEventListener(`resize`,this.#ct)})}}#mt(){let e=new Set(o(`iframe`));for(let[t,n]of this.#q)e.has(t)||(n(),this.#q.delete(t));for(let t of e){if(this.#q.has(t))continue;let e=()=>{this.#U=!0,this.#lt()};t.addEventListener(`load`,e),this.#q.set(t,()=>{t.removeEventListener(`load`,e)})}}#ht(){let e=this.#V;if(!e)return;let t=new Set,n=new Set;for(let e of this.#a?.comments??[]){let n=S(e.anchor).element;n&&Wt(n,t)}if(this.#d){let e=S(this.#d.anchor).element;e&&Wt(e,t)}for(let r of this.#G){if(t.has(r)){n.add(r);continue}try{e.unobserve(r)}catch{}}for(let r of t)if(!n.has(r))try{e.observe(r),n.add(r)}catch{}this.#G.clear(),n.forEach(e=>this.#G.add(e))}#gt(){this.#z!==null&&(this.#B&&typeof window.cancelAnimationFrame==`function`?window.cancelAnimationFrame(this.#z):window.clearTimeout(this.#z),this.#z=null),this.#W!==null&&(window.clearTimeout(this.#W),this.#W=null),this.#V?.disconnect(),this.#V=null,this.#H?.disconnect(),this.#H=null,this.#U=!1,this.#G.clear(),this.#K.forEach(e=>e()),this.#K.clear(),this.#q.forEach(e=>e()),this.#q.clear()}#_t(){let e=(this.#a?.comments??[]).some(e=>e.target.kind===`element`&&f(e.anchor.selector)&&!q(e).available);if(!this.#k||!e){this.#W!==null&&(window.clearTimeout(this.#W),this.#W=null);return}this.#W===null&&(this.#W=window.setTimeout(()=>{this.#W=null,this.#U=!0,this.#lt()},750))}#vt(e,t=!0){let n=this.#_;if(!n)return;let r=this.#v;this.#D+=1,this.#_=null,this.#v=null,this.#Tt(),this.#Dt(),this.#be(),!(t&&!this.#b&&this.#ye())&&e&&queueMicrotask(()=>{if(r===`navigator`&&this.#b){let e=this.#ke(n);e?e.focus():this.#De();return}if(r===`navigator`){this.#Oe()?.focus();return}let e=[...this.#e.querySelectorAll(`.pin[data-comment-id]`)].find(({dataset:e})=>e.commentId===n);e?e.focus():this.#Oe()?.focus({preventScroll:!0})})}#yt(){let e=this.#e.querySelector(`.rg-selection-label`);if(!e)return;if(this.#d){N(e,Dt(this.#d));return}if(!this.#_)return;let t=this.#a?.comments.find(({id:e})=>e===this.#_);t&&(this.#Te()||(e.removeAttribute(`data-layout`),N(e,Ot(t))))}#bt(e){let t=T(e.clientX,e.clientY),n=this.#e.querySelector(`[data-slot="highlight"]`),r=this.#e.querySelector(`[data-slot="region"]`);if(r&&(r.style.display=`none`),!n||!t){n&&(n.style.display=`none`);return}K(n,E(t))}#xt(e,t){let n=this.#e.querySelector(`[data-slot="highlight"]`),r=this.#e.querySelector(`[data-slot="region"]`);n&&(n.style.display=`none`),r&&(r.removeAttribute(`data-point`),r.removeAttribute(`data-context-target`),K(r,new DOMRect(Math.min(e.clientX,t.clientX),Math.min(e.clientY,t.clientY),Math.abs(t.clientX-e.clientX),Math.abs(t.clientY-e.clientY))))}#St(){this.#e.querySelectorAll(`.highlight, .region`).forEach(e=>{e.style.display=`none`,e.removeAttribute(`data-context-target`),e.removeAttribute(`data-point`)})}#Ct(){if(this.#s)return;if(this.#d){this.#wt(this.#d);return}let e=this.#a?.comments.find(({id:e})=>e===this.#_);if(e){this.#wt(e.target);return}this.#St()}#wt(e){let t=this.#e.querySelector(`[data-slot="highlight"]`),n=this.#e.querySelector(`[data-slot="region"]`);if(!(!t||!n)){if(t.style.display=`none`,n.style.display=`none`,t.removeAttribute(`data-context-target`),n.removeAttribute(`data-context-target`),n.removeAttribute(`data-point`),e.kind===`element`){let n=S(e.anchor);if(!n.anchored||!n.visible||!n.element)return;let r=E(n.element);t.dataset.contextTarget=`true`,K(t,r);return}if(n.dataset.contextTarget=`true`,e.kind===`viewport`){n.dataset.point=`true`,K(n,Nt(e));return}K(n,At(e))}}#Tt(){let e=this.#e.querySelector(`[data-slot="pins"]`);if(!e)return;let t=this.#e.activeElement instanceof HTMLElement&&this.#e.activeElement.matches(`.pin[data-comment-id]`)?this.#e.activeElement.dataset.commentId:void 0;e.replaceChildren();let n=this.#a;if(!n)return;let r=Ue(this.#Ae()).pinNumberByCommentId;n.comments.forEach(t=>{if(!this.#je(t))return;let n=q(t);if(!n.available||n.pageX===null||n.pageY===null)return;let i=r.get(t.id)??1,a=document.createElement(`button`);a.type=`button`,a.className=`pin`,a.dataset.commentId=t.id,a.dataset.resolved=String(t.status===`resolved`),a.dataset.active=String(t.id===this.#_),a.style.display=`grid`,a.style.left=`${n.pageX-window.scrollX}px`,a.style.top=`${n.pageY-window.scrollY}px`,a.textContent=String(i),a.setAttribute(`aria-label`,`${i}번 피드백: ${t.body.slice(0,80)}`),a.setAttribute(`aria-expanded`,String(t.id===this.#_)),a.setAttribute(`aria-controls`,kt(t.id)),a.addEventListener(`click`,()=>{if(!this.#s){if(this.#_===t.id){this.#vt(!0);return}this.#Ie(t.id,{origin:`pin`,navigate:!1})}}),e.append(a)}),t&&queueMicrotask(()=>{[...e.querySelectorAll(`.pin[data-comment-id]`)].find(({dataset:e})=>e.commentId===t)?.focus({preventScroll:!0})})}#Et(){let e=new Map(this.#a?.comments.map(e=>[e.id,e])??[]),t=[...this.#e.querySelectorAll(`.pin[data-comment-id]`)],n=new Set(t.map(({dataset:e})=>e.commentId??``));if([...e.values()].some(e=>{if(!this.#je(e)||n.has(e.id))return!1;let t=q(e);return t.available&&t.pageX!==null&&t.pageY!==null})){this.#Tt();return}t.forEach(t=>{let n=e.get(t.dataset.commentId??``);if(!n)return;if(!this.#je(n)){t.style.display=`none`;return}let r=q(n);if(!r.available||r.pageX===null||r.pageY===null){t.style.display=`none`;return}t.style.display=`grid`,t.style.left=`${r.pageX-window.scrollX}px`,t.style.top=`${r.pageY-window.scrollY}px`})}#Dt(){let e=this.#e.querySelector(`[data-slot="panels"]`);if(!e)return;let t=this.#e.activeElement,n=t instanceof HTMLTextAreaElement&&t.closest(`.rg-thread-label`)!==null,r=t instanceof HTMLTextAreaElement&&t.closest(`.rg-selection-label:not(.rg-thread-label)`)!==null,i=n||r?{start:t.selectionStart,end:t.selectionEnd,direction:t.selectionDirection}:null,a=e.querySelector(`.rg-thread-messages`)?.scrollTop??0;if(e.replaceChildren(),this.#d){this.#wt(this.#d),e.append(this.#Ot(this.#d)),r&&i&&queueMicrotask(()=>{let t=e.querySelector(`.rg-selection-label:not(.rg-thread-label) textarea`);t?.focus({preventScroll:!0}),t?.setSelectionRange(i.start,i.end,i.direction)});return}let o=this.#a?.comments.find(({id:e})=>e===this.#_);if(o){this.#wt(o.target),e.append(this.#jt(o)),queueMicrotask(()=>{let t=e.querySelector(`.rg-thread-messages`);if(t&&(t.scrollTop=a),!n||!i)return;let r=e.querySelector(`.rg-thread-label textarea`);r?.focus({preventScroll:!0}),r?.setSelectionRange(i.start,i.end,i.direction)});return}this.#s||this.#St()}#Ot(e){let t=Ne(`피드백`,`변경할 점`,`변경할 점 입력`);N(t,Dt(e));let n=t.querySelector(`textarea`),r=t.querySelector(`.rg-submit`);n.value=this.#f;let i=this.#h?.target===e&&this.#h.body===n.value.trim();n.disabled=i,r.disabled=i||!this.#he();let a=()=>{n.style.height=`auto`,n.style.height=`${Math.min(n.scrollHeight,95)}px`};return n.addEventListener(`input`,()=>{this.#f=n.value,r.disabled=!this.#he()||!n.value.trim(),this.#m?.body!==n.value.trim()&&(this.#m=null,this.#p=``,t.querySelector(`.rg-inline-error`)?.remove()),a()}),n.addEventListener(`keydown`,t=>{if(t.key===`Escape`){if(t.preventDefault(),this.#h?.target===e){this.#ze(`피드백을 저장하는 중입니다.`);return}this.#d=null,this.#f=``,this.#p=``,this.#m=null,this.#Dt(),queueMicrotask(()=>this.#e.querySelector(`.rg-feedback-tool`)?.focus({preventScroll:!0}))}t.key===`Enter`&&(t.metaKey||t.ctrlKey)&&!t.shiftKey&&!t.altKey&&!t.isComposing&&(t.preventDefault(),r.click())}),r.addEventListener(`click`,()=>void this.#kt(t,e)),this.#p&&Tt(t,this.#p),t}async#kt(e,t){if(!this.#t||this.#h||!this.#he())return;let n=this.#t,r=n.pageId,i=n.repository,a=this.#k?.signal;if(!a)return;let o=e.querySelector(`textarea`),s=e.querySelector(`.rg-submit`),c=o?.value.trim()??``;if(!c||!o||!s)return;s.disabled=!0,o.disabled=!0;let l={target:t,body:c,comment:null};this.#h=l;let u=i.attachScreenshot?st(t):Promise.resolve(null),d=this.#m?.target===t&&this.#m.body===c?this.#m.comment:null;if(!d){let e=t;if(n.sourceContextResolver)try{e=await me(t,n.sourceContextResolver,{signal:a})}catch{}if(a.aborted||this.#h!==l)return;let i=n.now?.()??Date.now();d={id:n.id?.()??crypto.randomUUID(),pageId:r,authorId:n.session.reviewerId,authorName:n.session.displayName,body:c,anchor:e.anchor,target:e,status:`open`,createdAt:i,updatedAt:i}}l.comment=d;let f=!1;try{await i.mutate(r,{type:`comment.upsert`,comment:d}),f=await this.#At(d.id,a)}catch{if(a.aborted||this.#h!==l)return;this.#h=null,this.#m={target:t,body:c,comment:d},this.#p=`저장하지 못했습니다. 다시 시도하세요.`,!this.#b&&this.#d===t&&(this.#Dt(),queueMicrotask(()=>this.#e.querySelector(`.rg-selection-label:not(.rg-thread-label) textarea`)?.focus({preventScroll:!0})));return}if(a.aborted||!f)return;this.#h===l&&(this.#h=null),this.#m=null,this.#p=``,this.#g?.target===t&&(this.#g=null),this.#d===t&&(this.#d=null,this.#f=``,this.#Dt(),queueMicrotask(()=>this.#e.querySelector(`.rg-feedback-tool`)?.focus({preventScroll:!0})));let p=await u;if(p&&i.attachScreenshot)try{await i.attachScreenshot(r,d.id,p),this.#ze(`피드백과 위치 캡처를 저장했습니다.`);return}catch{this.#ze(`피드백은 저장했지만 위치 캡처는 저장하지 못했습니다.`);return}this.#ze(`피드백을 저장했습니다.`)}async#At(e,t){return this.#a?.comments.some(({id:t})=>t===e)?!0:await new Promise((n,r)=>{let i=()=>{clearTimeout(o),t.removeEventListener(`abort`,a),this.#ee.delete(e)},a=()=>{i(),n(!1)},o=setTimeout(()=>{i(),r(Error(`Comment was not confirmed by the review service`))},_t);this.#ee.set(e,e=>{i(),n(e)}),t.addEventListener(`abort`,a,{once:!0})})}#jt(e){let t=this.#a?Ue(this.#a).pinNumberByCommentId.get(e.id)??1:1,n=!q(e).available,r=Ne(`피드백 ${t}${e.status===`resolved`?` · 완료`:``}${n?` · 위치 없음`:``}`,`답글`,`답글 입력`);r.classList.add(`rg-thread-label`),r.id=kt(e.id),r.tabIndex=-1,r.dataset.commentId=e.id,r.setAttribute(`aria-label`,`피드백 대화`),N(r,Ot(e));let i=r.querySelector(`.rg-tag-row`),a=document.createElement(`button`);a.type=`button`,a.className=`rg-thread-close`,a.setAttribute(`aria-label`,`피드백 닫기`),a.append(Pe()),i.append(a);let o=G(`rg-thread-messages`);o.append(wt(e.authorName,e.body,e.createdAt)),(this.#a?.replies.filter(({commentId:t})=>t===e.id)??[]).forEach(e=>o.append(wt(e.authorName,e.body,e.createdAt))),r.querySelector(`.rg-surface`)?.insertBefore(o,r.querySelector(`.rg-bottom-section`));let s=r.querySelector(`textarea`),c=r.querySelector(`.rg-submit`);s.value=this.#J.get(e.id)??``;let l=this.#Y.has(e.id);s.disabled=l,c.disabled=l,c.setAttribute(`aria-label`,`답글 저장`);let u=()=>{s.style.height=`auto`,s.style.height=`${Math.min(s.scrollHeight,95)}px`};s.addEventListener(`input`,()=>{this.#J.set(e.id,s.value),this.#Z.get(e.id)?.body!==s.value.trim()&&(this.#Z.delete(e.id),this.#X.delete(e.id),r.querySelector(`.rg-inline-error`)?.remove()),u()}),s.addEventListener(`keydown`,e=>{e.key===`Enter`&&(e.metaKey||e.ctrlKey)&&!e.shiftKey&&!e.altKey&&!e.isComposing&&(e.preventDefault(),c.click())}),a.addEventListener(`click`,()=>this.#vt(!0)),c.addEventListener(`click`,()=>void this.#Mt(r,e));let d=this.#X.get(e.id);return d&&Tt(r,d),queueMicrotask(u),r}async#Mt(e,t){if(!this.#t||!this.#he())return;let n=this.#k?.signal;if(!n||this.#Y.has(t.id))return;let r=e.querySelector(`textarea`),i=e.querySelector(`.rg-submit`),a=r?.value.trim()??``;if(!a||!r||!i)return;let o=this.#Z.get(t.id),s=this.#t.now?.()??Date.now(),c=o?.body===a?o.reply:{id:this.#t.id?.()??crypto.randomUUID(),commentId:t.id,authorId:this.#t.session.reviewerId,authorName:this.#t.session.displayName,body:a,createdAt:s,updatedAt:s},l=Symbol(t.id);this.#Y.set(t.id,{request:l,body:a,reply:c}),this.#Pt(t.id,!0);try{await this.#t.repository.mutate(this.#t.pageId,{type:`reply.upsert`,reply:c}),await this.#Nt(c,n)}catch{if(n.aborted||this.#Y.get(t.id)?.request!==l)return;this.#Y.delete(t.id),this.#Z.set(t.id,{body:a,reply:c}),this.#X.set(t.id,`답글을 저장하지 못했습니다. 다시 시도하세요.`),i.disabled=!1,r.disabled=!1,this.#_===t.id&&(this.#Dt(),queueMicrotask(()=>this.#Ft(t.id)?.querySelector(`textarea`)?.focus({preventScroll:!0})));return}if(n.aborted||this.#Y.get(t.id)?.request!==l)return;this.#Y.delete(t.id),this.#Z.delete(t.id),this.#X.delete(t.id),this.#J.delete(t.id);let u=this.#Ft(t.id)?.querySelector(`textarea`);u&&(u.value=``,u.style.height=`auto`),this.#Pt(t.id,!1),this.#ze(`답글을 저장했습니다.`)}async#Nt(e,t){this.#a?.replies.some(({id:t,commentId:n})=>t===e.id&&n===e.commentId)||await new Promise((n,r)=>{let i=()=>{clearTimeout(o),t.removeEventListener(`abort`,a),this.#te.delete(e.id)},a=()=>{i(),n()},o=setTimeout(()=>{i(),r(Error(`Reply was not confirmed by the review service`))},_t);this.#te.set(e.id,{commentId:e.commentId,settle:()=>{i(),n()}}),t.addEventListener(`abort`,a,{once:!0})})}#Pt(e,t){let n=this.#Ft(e),r=n?.querySelector(`textarea`),i=n?.querySelector(`.rg-submit`);r&&(r.disabled=t),i&&(i.disabled=t)}#Ft(e){return[...this.#e.querySelectorAll(`.rg-thread-label`)].find(({dataset:t})=>t.commentId===e)}#It(e){return e.composedPath().includes(this)}};function xt(e){w(e.styleNonce),customElements.get(`agency-review-widget`)||customElements.define(ht,bt);let t=document.createElement(ht);return t.configure(e),document.body.append(t),t}function St(e,t){let n=e.hostname.toLowerCase();return t.some(e=>e.toLowerCase()===n)||n===`localhost`||n===`127.0.0.1`||n.endsWith(`.test`)||n.endsWith(`.local`)}function G(e){let t=document.createElement(`div`);return t.className=e,t}function K(e,t){e.style.display=`block`,e.style.left=`${t.left}px`,e.style.top=`${t.top}px`,e.style.width=`${t.width}px`,e.style.height=`${t.height}px`}function Ct(e,t){return Math.hypot(e.clientX-t.clientX,e.clientY-t.clientY)}function wt(e,t,n){let r=document.createElement(`article`);r.className=`rg-message`;let i=G(`rg-message-meta`);i.textContent=`${e} · ${new Date(n).toLocaleString(void 0,{month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`})}`;let a=document.createElement(`p`);return a.className=`rg-message-body`,a.textContent=t,r.append(i,a),r}function Tt(e,t){let n=e.querySelector(`.rg-inline-error`);if(!n){n=G(`rg-inline-error`),n.setAttribute(`role`,`alert`);let t=e.querySelector(`.rg-surface`);t?.insertBefore(n,t.querySelector(`.rg-bottom-section`))}n.textContent=t}function Et(e){let t=e.elements.map(({textPreview:e})=>e.replace(/\s+/g,` `).trim()).find(Boolean);return t?t.length>48?`${t.slice(0,47).trimEnd()}…`:t:e.kind===`region`?`선택 영역`:e.kind===`viewport`?`화면 위치`:`선택 요소`}function Dt(e){let t=S(e.anchor),n=t.x-window.scrollX;if(e.kind===`element`&&t.element){let e=E(t.element);return{x:e.left,y:e.top,width:e.width,height:e.height,anchorX:n}}if(e.kind===`viewport`){let t=Nt(e);return{x:t.left,y:t.top,width:t.width,height:t.height,anchorX:t.left+t.width/2}}let r=At(e);return{x:r.left,y:r.top,width:r.width,height:r.height,anchorX:e.kind===`region`?r.left+r.width/2:n}}function Ot(e){if(e.target.kind===`element`){if(q(e).available)return Dt(e.target);let t=window.visualViewport,n=t?.offsetLeft??0,r=t?.offsetTop??0,i=t?.width??window.innerWidth;return{x:n+i/2,y:r+16,width:0,height:0,anchorX:n+i/2}}if(e.target.kind===`viewport`){let t=Nt(e.target);return{x:t.left,y:t.top,width:t.width,height:t.height,anchorX:t.left+t.width/2}}let t=At(e.target);return{x:t.left,y:t.top,width:t.width,height:t.height,anchorX:t.left+t.width/2}}function q(e){if(e.target.kind===`element`){let t=S(e.anchor);return t.anchored&&t.visible&&t.element?{available:!0,pageX:t.x,pageY:t.y}:{available:!1,pageX:null,pageY:null}}if(e.target.kind===`region`){let t=jt(e.target);return Number.isFinite(t.pageX)&&Number.isFinite(t.pageY)?{available:!0,pageX:t.pageX,pageY:t.pageY}:{available:!1,pageX:null,pageY:null}}let t=Ft(e.target);return Number.isFinite(t.pageX)&&Number.isFinite(t.pageY)?{available:!0,pageX:t.pageX,pageY:t.pageY}:{available:!1,pageX:null,pageY:null}}function kt(e){return`visual-review-thread-${e.replace(/[^a-zA-Z0-9_-]/g,`-`)}`}function At(e){let t=It(e),n=jt(e,t),r=Y(e.region.width)*t.x,i=Y(e.region.height)*t.y;return Lt(new DOMRect(n.pageX-window.scrollX-r/2,n.pageY-window.scrollY-i/2,r,i))}function jt(e,t=It(e)){return Mt(e,t)??Pt(e,t)}function Mt(e,t){if(e.kind!==`region`||!e.anchor.selector)return null;let n=S(e.anchor);if(!n.anchored||!n.visible||!n.element)return null;let r=e.elements.find(({selector:t})=>t===e.anchor.selector);if(!r)return{pageX:n.x,pageY:n.y};let i=r.rect.pageX+r.rect.width*e.anchor.offsetX,a=r.rect.pageY+r.rect.height*e.anchor.offsetY,o=e.region.pageX+e.region.width/2,s=e.region.pageY+e.region.height/2;return{pageX:n.x+(o-i)*t.x,pageY:n.y+(s-a)*t.y}}function Nt(e){let t=Ft(e);return Rt(new DOMRect(t.pageX-window.scrollX-7,t.pageY-window.scrollY-7,14,14))}function Pt(e,t=It(e)){let n=Ft(e,t);return{pageX:n.pageX+n.width/2,pageY:n.pageY+n.height/2}}function Ft(e,t=It(e)){let n=e.region,r=X(n.viewportX,n.pageX),i=X(n.viewportY,n.pageY),a=X(n.pageX,window.scrollX+r),o=X(n.pageY,window.scrollY+i),s=a-r,c=o-i;return{pageX:s+r*t.x,pageY:c+i*t.y,width:Y(n.width)*t.x,height:Y(n.height)*t.y}}function It(e){let t=J(window.innerWidth,1),n=J(window.innerHeight,1),r=J(e.region.viewportWidth,t),i=J(e.region.viewportHeight,n);return{x:t/r,y:n/i}}function Lt(e){let t=zt(),n=Z(X(e.left,t.left),t.left,t.right),r=Z(X(e.top,t.top),t.top,t.bottom),i=Z(X(e.right,n),t.left,t.right),a=Z(X(e.bottom,r),t.top,t.bottom);return new DOMRect(n,r,Math.max(0,i-n),Math.max(0,a-r))}function Rt(e){let t=zt(),n=Math.min(Y(e.width),t.width),r=Math.min(Y(e.height),t.height);return new DOMRect(Z(X(e.left,t.left),t.left,t.right-n),Z(X(e.top,t.top),t.top,t.bottom-r),n,r)}function zt(){let e=window.visualViewport;return new DOMRect(X(e?.offsetLeft,0),X(e?.offsetTop,0),J(e?.width,window.innerWidth),J(e?.height,window.innerHeight))}function J(e,t){return Number.isFinite(e)&&(e??0)>0?e:Math.max(Number.isFinite(t)?t:1,1)}function Y(e){return Number.isFinite(e)?Math.max(0,e):0}function X(e,t){return Number.isFinite(e)?e:Number.isFinite(t)?t:0}function Bt(e){return qt(e).designMode===`on`||e.composedPath().some(e=>{let t=Jt(e);return t?Vt(t):!1})}function Vt(e){let t=e.tagName.toLowerCase();return t===`input`||t===`textarea`||t===`select`||`isContentEditable`in e&&!!e.isContentEditable||yt.has(e.getAttribute(`role`)??``)}function Ht(e){let t=e.composedPath().map(Jt).find(Boolean)??null;return!t||t===t.ownerDocument.documentElement||t===t.ownerDocument.body||r(t)?null:t}function Ut(e){let t=e.activeElement,n=new Set;for(;t&&!n.has(t);){n.add(t);let e=t.shadowRoot?.activeElement;if(e){t=e;continue}if(t.tagName.toLowerCase()===`iframe`)try{let e=t.contentDocument?.activeElement;if(e){t=e;continue}}catch{}break}return t}function Wt(e,t){let r=e,i=new Set;for(;r&&!i.has(r);){i.add(r),t.add(r);let e=r.getRootNode();if(l(e)){r=e.host;continue}if(n(e)&&e!==document){try{r=e.defaultView?.frameElement??null}catch{r=null}continue}r=null}}function Gt(e){let t=qt(e).defaultView?.getSelection();return!!(t&&!t.isCollapsed&&t.toString().length>0)}function Kt(e){let t=e.clientX,n=e.clientY,r=qt(e);for(;r!==document;){let e=null;try{e=r.defaultView?.frameElement??null}catch{break}if(!e)break;let i=e.getBoundingClientRect(),o=e,s=a(o);t=i.left+(o.clientLeft+t)*s.x,n=i.top+(o.clientTop+n)*s.y,r=e.ownerDocument}return{clientX:t,clientY:n}}function qt(e){for(let t of e.composedPath()){if(Yt(t))return t;let e=Jt(t);if(e)return e.ownerDocument}return document}function Jt(e){return e&&`nodeType`in e&&e.nodeType===1?e:null}function Yt(e){return`nodeType`in e&&e.nodeType===9}function Xt(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.clearSnapshot===!0?t.type===`access-lost`?t.recovery===`reauthenticate`&&[`permission-denied`,`session-expired`,`membership-revoked`].includes(t.code??``):t.type===`error`&&t.recovery===`retry`&&[`transport`,`data-integrity`,`unknown`].includes(t.code??``):!1}function Zt(e){return e===`all`||e===`open`||e===`resolved`}function Z(e,t,n){return Math.min(n,Math.max(t,e))}function Qt(e){return e.replace(/\/+$/,``)||`/`}function $t(e){let t=`${Qt(e.pathname)}${e.search}${e.hash}`,n=`${e.host}${t}`;try{return decodeURI(n)}catch{return n}}function en(e){try{return new URL(e.target.pageUrl,window.location.href)}catch{return null}}function Q(...e){e.forEach(e=>{try{e?.()}catch{}})}function tn(e,t){let n=Math.max(0,Math.floor((t-e)/1e3));if(n<60)return`방금`;let r=Math.floor(n/60);if(r<60)return`${r}분 전`;let i=Math.floor(r/60);if(i<24)return`${i}시간 전`;let a=Math.floor(i/24);return a<7?`${a}일 전`:new Date(e).toLocaleDateString(void 0,{month:`short`,day:`numeric`})}function $(){return new Promise(e=>{if(typeof window.requestAnimationFrame==`function`){window.requestAnimationFrame(()=>e());return}queueMicrotask(e)})}function nn(e,t){return{value:e.style.getPropertyValue(t),priority:e.style.getPropertyPriority(t)}}function rn(e,t,n){n.value?e.style.setProperty(t,n.value,n.priority):e.style.removeProperty(t)}function an(){for(let e of[document.body,document.documentElement]){let t=getComputedStyle(e).backgroundColor.match(/[\d.]+/g)?.map(Number);if(!t||t.length<3)continue;let[n=0,r=0,i=0,a=1]=t;if(!(a<.5))return(n*.2126+r*.7152+i*.0722)/255<.45?`light`:`dark`}return window.matchMedia?.(`(prefers-color-scheme: dark)`).matches??!1?`light`:`dark`}export{gt as REVIEW_REAUTHENTICATION_REQUIRED_EVENT,ht as REVIEW_WIDGET_TAG,bt as ReviewWidgetElement,St as isStagingLocation,xt as mountReviewWidget};