@01.works/visual-review 0.1.0

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,840 @@
1
+ const e=`visual-review:v1:`,t=4096;function n(t,n){return`${e}${encodeURIComponent(JSON.stringify({roots:t,target:n}))}`}function r(t){return t.startsWith(e)}function i(e=document){let t=[],n=[e],r=new Set;for(;n.length>0;){let e=n.shift();if(r.has(e))continue;r.add(e),t.push(e);let i=[];try{i=Array.from(e.querySelectorAll(`*`))}catch{continue}for(let e of i){let t=p(e);t&&!r.has(t)&&n.push(t);let i=ee(e);i&&!r.has(i)&&n.push(i)}}return t}function a(e,t=document){if(!e)return[];let n=s(e);if(r(e))return n?o(n,t):[];let a=[];for(let n of i(t))try{a.push(...n.querySelectorAll(e))}catch{return[]}return a}function o(e,t){let n=[t];for(let t of e.roots){let e=[];for(let r of n){let n;try{n=r.querySelectorAll(t.selector)}catch{return[]}for(let r of n){let n=t.kind===`shadow`?p(r):ee(r);n&&e.push(n)}}if(e.length===0)return[];n=e}let r=[];for(let t of n)try{r.push(...t.querySelectorAll(e.target))}catch{return[]}return r}function s(e){if(!r(e)||e.length>t)return null;try{let t=JSON.parse(decodeURIComponent(e.slice(17)));return!Array.isArray(t.roots)||t.roots.length===0||t.roots.length>16||!c(t.target)||!t.roots.every(e=>e&&(e.kind===`shadow`||e.kind===`frame`)&&c(e.selector))?null:{roots:t.roots,target:t.target}}catch{return null}}function c(e){return typeof e==`string`&&e.length>0&&e.length<=t}function l(e){let t=e.getBoundingClientRect(),n=t.left,r=t.top,i=t.width,a=t.height,o=e.ownerDocument.defaultView;for(;o&&typeof window<`u`&&o!==window;){let e=te(o);if(!e)break;let t=e.getBoundingClientRect(),s=u(e);n=t.left+(e.clientLeft+n)*s.x,r=t.top+(e.clientTop+r)*s.y,i*=s.x,a*=s.y,o=e.ownerDocument.defaultView}return new DOMRect(n,r,i,a)}function u(e){let t=e.getBoundingClientRect();return{x:e.offsetWidth>0?t.width/e.offsetWidth:1,y:e.offsetHeight>0?t.height/e.offsetHeight:1}}function d(e){return e.nodeType===11&&`host`in e}function f(e){return e.nodeType===9}function p(e){try{return e.shadowRoot}catch{return null}}function ee(e){if(e.tagName.toLowerCase()!==`iframe`)return null;try{return e.contentDocument}catch{return null}}function te(e){try{let t=e.frameElement;return t&&`clientLeft`in t?t:null}catch{return null}}function ne(e){return typeof CSS<`u`&&CSS.escape?CSS.escape(e):e.replace(/([^\w-])/g,`\\$1`)}function re(e){let t=h(e),r=m(e,t);if(t===document)return r;let i=[];for(;t!==document;){if(d(t)){let e=t.host,n=h(e);i.unshift({kind:`shadow`,selector:m(e,n)}),t=n;continue}let e=oe(t);if(!e)return r;let n=h(e);i.unshift({kind:`frame`,selector:m(e,n)}),t=n}let a=n(i,r);return a.length<=4096?a:r}function m(e,t){let n=[],r=e,i=e.ownerDocument;for(;r&&r!==i.documentElement;){if(r===i.body){n.unshift(`body`);break}let e=ae(r,t);if(e){n.unshift(e);break}let a=r.tagName.toLowerCase(),o=r.parentElement,s=o??ie(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 ie(e){let t=e.parentNode;return t&&`children`in t?t:null}function ae(e,t){return[e.id?`#${ne(e.id)}`:null,se(e,`data-review-id`),se(e,`data-testid`),se(e,`data-id`)].find(e=>{if(!e)return!1;try{return t.querySelectorAll(e).length===1}catch{return!1}})??null}function h(e){let t=e.getRootNode();return f(t)||d(t)?t:e.ownerDocument}function oe(e){try{return e.defaultView?.frameElement??null}catch{return null}}function se(e,t){let n=e.getAttribute(t);return n?`[${t}="${ne(n)}"]`:null}function ce(e){if(!le(e))return!1;let t=ue(e);for(;t;){if(!le(t))return!1;t=ue(t)}let n=l(e);return n.width>0&&n.height>0&&e.getClientRects().length>0}function le(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 ue(e){if(e.assignedSlot)return e.assignedSlot;if(e.parentElement)return e.parentElement;let t=e.getRootNode();if(d(t))return t.host;if(t.nodeType===9&&t!==document)try{return t.defaultView?.frameElement??null}catch{return null}return null}function de(e){if(!e.selector)return[];if(r(e.selector))return a(e.selector).filter(e=>!g(e));try{let t=Array.from(document.querySelectorAll(e.selector)).filter(e=>!g(e));if(t.length>0)return t}catch{return[]}return a(e.selector).filter(e=>!g(e))}function g(e){let t=e;for(;t;){if(t.closest(`[data-agency-review-root], [data-react-grab-ignore]`))return!0;let e=t.getRootNode();t=d(e)?e.host:null}return!1}function _(e,t,n){let r=l(e),i=Math.max(r.width,1),a=Math.max(r.height,1);return{selector:re(e),offsetX:y((t-(r.left+window.scrollX))/i),offsetY:y((n-(r.top+window.scrollY))/a),viewportX:y((t-window.scrollX)/Math.max(window.innerWidth,1)),viewportY:y((n-window.scrollY)/Math.max(window.innerHeight,1))}}function fe(e,t){return{selector:``,offsetX:y(e),offsetY:y(t),viewportX:y(e),viewportY:y(t)}}function pe(e,t){let n=typeof document.elementFromPoint==`function`?document.elementFromPoint(e,t):null;return!n||n.closest(`[data-agency-review-root]`)?fe(e/Math.max(window.innerWidth,1),t/Math.max(window.innerHeight,1)):_(n,e+window.scrollX,t+window.scrollY)}function v(e){let t=de(e),n=t.find(ce)??t[0]??null;if(n){let t=l(n);return{x:t.left+window.scrollX+t.width*e.offsetX,y:t.top+window.scrollY+t.height*e.offsetY,anchored:!0,visible:ce(n),element:n}}return{x:window.scrollX+window.innerWidth*e.viewportX,y:window.scrollY+window.innerHeight*e.viewportY,anchored:!1,visible:!0,element:null}}function y(e){return Math.min(1,Math.max(0,Number.isFinite(e)?e:0))}let b=null,x=null;function me(e){he(e).catch(()=>void 0)}function S(){return b}function he(e){if(b)return Promise.resolve(b);if(x)return x;let t=ge(e);return x=t,t.catch(()=>{x===t&&(x=null)}),t}async function ge(e){let t=_e(e);try{let e=await import(`./primitives-lxsPH8SN.js`);return b=e,e}finally{t()}}function _e(e){if(!e||typeof document>`u`)return()=>void 0;let t=[];for(let n of i()){if(!f(n)||!n.head||n.querySelector(`script[nonce], style[nonce]`)?.nonce===e)continue;let r=n.createElement(`style`);r.dataset.agencyReviewNonceMarker=``,r.nonce=e,n.head.prepend(r),t.push(r)}return()=>t.forEach(e=>e.remove())}const ve=`visual-review-sources-[0-9a-f]{16}\\.json`;RegExp(`^/(?:[^/]+/)*\\.visual-review/${ve}$`,`u`),RegExp(`^/(?:[^/]+/)*_next/static/${ve}$`,`u`);const ye=`[data-agency-review-root], [data-react-grab-ignore]`;function be(e){me(e)}function xe(e,t){let n=S();if(!n)return Ce(e,t);try{let r=n.getElementAtPoint(e,t,{filter:e=>n.isElementGrabbable(e)&&!w(e)});return r?we(r,e,t):null}catch{return Ce(e,t)}}function C(e){if(e.ownerDocument!==document)return l(e);let t=S();if(!t)return e.getBoundingClientRect();try{let n=t.getElementBounds(e);return new DOMRect(n.x,n.y,n.width,n.height)}catch{return e.getBoundingClientRect()}}function Se(e){me(e);let t=S();if(!t)return()=>void 0;let n=!1;try{if(!t.isFreezeActive()){let r=_e(e);try{t.freeze(),n=!0}finally{r()}}}catch{return()=>void 0}let r=!1;return()=>{if(!(r||!n)){r=!0;try{t.unfreeze()}catch{}}}}function w(e){let t=e;for(;t;){if(t.matches(ye)||t.closest(ye))return!0;let e=t.getRootNode();t=d(e)?e.host:null}return!1}function Ce(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=>!w(e))??null;return n?we(n,e,t):null}function we(e,t,n){let r=e,i=t,a=n,o=new Set;for(;!o.has(r);){o.add(r);let e=Te(r,i,a);if(e&&e!==r&&!w(e)){r=e;continue}let t=Ee(r,i,a);if(!t)break;r=t.element,i=t.clientX,a=t.clientY}return r}function Te(e,t,n){try{return e.shadowRoot?.elementFromPoint(t,n)??null}catch{return null}}function Ee(e,t,n){if(e.tagName.toLowerCase()!==`iframe`)return null;try{let r=e,i=r.contentDocument;if(!i)return null;let a=e.getBoundingClientRect(),o=u(r),s=(t-a.left)/o.x-r.clientLeft,c=(n-a.top)/o.y-r.clientTop,l=i.elementFromPoint(s,c);return l&&!w(l)?{element:l,clientX:s,clientY:c}:null}catch{return null}}const T=Symbol(`source-resolution-stopped`);function De(e,t){let n=C(e),r=_(e,t.clientX+window.scrollX,t.clientY+window.scrollY),i=Ve(n);return E(r,`element`,i,[ze(e,i)])}function Oe(e){let t=xe(e.clientX,e.clientY);return t?De(t,e):E(pe(e.clientX,e.clientY),`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 ke(e,t){let n=Math.min(e.clientX,t.clientX),r=Math.min(e.clientY,t.clientY),i=Math.abs(t.clientX-e.clientX),a=Math.abs(t.clientY-e.clientY),o=new DOMRect(n,r,i,a),s=Ne(Ae(o),Me(o)).slice(0,8),c={clientX:n+i/2,clientY:r+a/2},u=s[0];return E(u?_(u,c.clientX+window.scrollX,c.clientY+window.scrollY):fe(c.clientX/Math.max(window.innerWidth,1),c.clientY/Math.max(window.innerHeight,1)),`region`,Ve(o),s.map(e=>ze(e,Ve(l(e)))))}function Ae(e){let t=a(`*`).filter(t=>t===t.ownerDocument.body||t===t.ownerDocument.documentElement||w(t)||!ce(t)?!1:He(e,l(t))),n=new Set(t),r=new Set;return t.forEach(e=>{let t=je(e);for(;t;)n.has(t)&&r.add(t),t=je(t)}),t.filter(e=>!r.has(e))}function je(e){if(e.assignedSlot)return e.assignedSlot;if(e.parentElement)return e.parentElement;let t=e.getRootNode();if(d(t))return t.host;if(f(t)&&t!==document)try{return t.defaultView?.frameElement??null}catch{return null}return null}function Me(e){return{clientX:e.left+e.width/2,clientY:e.top+e.height/2}}function Ne(e,t){let n=e.findIndex(e=>{let n=l(e);return t.clientX>=n.left&&t.clientX<=n.right&&t.clientY>=n.top&&t.clientY<=n.bottom});return n<=0?e:[e[n],...e.slice(0,n),...e.slice(n+1)]}async function Pe(e,t,n={}){if(n.signal?.aborted)return Ie(e,t);let r=Fe(n),i=e.elements.map(async e=>{let n=Ue(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!==T?t.value.context:e.elements[n]),o=Re(n.flatMap(e=>e.status===`fulfilled`&&e.value!==T&&e.value.provenance?[e.value.provenance]:[]))??e.sourceProvenance??Le(t);return{...e,elements:a,...o?{sourceProvenance:o}:{}}}finally{r.dispose()}}function Fe(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(T);return}t.signal.addEventListener(`abort`,()=>e(T),{once:!0})});return{signal:t.signal,stopped:o,dispose(){clearTimeout(a),n?.removeEventListener(`abort`,r)}}}function Ie(e,t){let n=e.sourceProvenance??Le(t);return{...e,...n?{sourceProvenance:n}:{}}}function Le(e){try{return e.unavailableProvenance?.()}catch{return}}function Re(e){let t={resolved:3,fallback:2,unavailable:1};return e.reduce((e,n)=>!e||t[n.sourceMapStatus]>t[e.sourceMapStatus]?n:e,void 0)}function E(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 ze(e,t){return{selector:re(e),tagName:e.tagName.toLowerCase(),textPreview:Be(e),rect:t,source:null,componentStack:[]}}function Be(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 Ve(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 He(e,t){return e.left<t.right&&e.right>t.left&&e.top<t.bottom&&e.bottom>t.top}function Ue(e){return e?de({selector:e,offsetX:0,offsetY:0,viewportX:0,viewportY:0})[0]??null:null}function We(){let e=document.createElement(`div`);e.className=`rg-toolbar`,e.setAttribute(`role`,`toolbar`),e.setAttribute(`aria-label`,`Visual Review`);let t=A(`rg-toolbar-actions-shell`),n=A(`rg-toolbar-actions`),r=A(`rg-action-wrap`),i=j(`rg-action rg-feedback-tool`,`피드백 위치 선택`);i.setAttribute(`aria-keyshortcuts`,`Meta+C Control+C`),i.setAttribute(`aria-pressed`,`false`),i.append(qe());let a=document.createElement(`span`);a.className=`rg-tooltip`,a.setAttribute(`aria-hidden`,`true`),a.textContent=`피드백`,r.append(i,a),n.append(r),t.append(n);let o=j(`rg-collapse`,`Visual Review 접기`);return o.setAttribute(`aria-expanded`,`true`),o.append(Je()),e.append(t,o),e}function Ge(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=O(`0 0 16 8`,[k(`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=A(`rg-surface`),o=A(`rg-tag-row`),s=document.createElement(`span`);s.className=`rg-tag`,s.textContent=e,o.append(s);let c=A(`rg-bottom-section`),l=document.createElement(`textarea`);l.setAttribute(`aria-keyshortcuts`,`Enter Escape`),l.maxLength=4e3,l.rows=1,l.placeholder=t,l.setAttribute(`aria-label`,n);let u=j(`rg-submit`,`피드백 저장`);return u.append(Ye()),c.append(l,u),a.append(o,c),r.append(i,a),r}function Ke(){return O(`0 0 12 12`,[k(`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 D(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=Xe(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=Xe(c-(l-n.width/2),16,n.width-16);e.style.setProperty(`--rg-arrow-left`,`${f}px`)})}function qe(){return O(`0 0 12 12`,[k(`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 Je(){return O(`0 0 24 24`,[k(`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 Ye(){return O(`0 0 24 24`,[k(`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 O(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 k(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 A(e){let t=document.createElement(`div`);return t.className=e,t}function j(e,t){let n=document.createElement(`button`);return n.type=`button`,n.className=e,n.setAttribute(`aria-label`,t),n}function Xe(e,t,n){return Math.min(n,Math.max(t,e))}function M(e,t=`all`){let n=[...e.comments].sort(Ze),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(Qe),counts:o,pinNumberByCommentId:r}}function Ze(e,t){return e.createdAt-t.createdAt||e.id.localeCompare(t.id)}function Qe(e,t){return t.lastActivityAt-e.lastActivityAt||t.comment.createdAt-e.comment.createdAt||e.comment.id.localeCompare(t.comment.id)}const $e=`visual-review-feedback-navigator`,et=[`all`,`open`,`resolved`],tt={all:`전체`,open:`진행 중`,resolved:`완료`};function nt(e,t={}){let n=t.controlsId??$e,r=F(`rg-action-wrap rg-feedback-list-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`,`피드백 목록, 총 ${I(e)}개`),i.append(ot());let a=document.createElement(`span`);return a.className=`rg-tooltip`,a.setAttribute(`aria-hidden`,`true`),a.textContent=`목록`,r.append(i,a),r}function rt(e,t={}){let n=t.id??$e,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=F(`rg-feedback-navigator-header`),s=F(`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(I(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(st()),o.append(s,u);let d=F(`rg-feedback-navigator-content`);if(ut(d,e),e.loadState!==`loading`&&e.loadState!==`error`)if(e.rows.length===0)d.append(dt(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(at(n,e.activeCommentId));d.append(t)}if(a.append(o),e.counts.all>0&&e.loadState!==`loading`&&e.loadState!==`error`){let t=F(`rg-feedback-filters`);t.setAttribute(`role`,`group`),t.setAttribute(`aria-label`,`피드백 상태 필터`);for(let n of et)t.append(it(n,e.counts[n],e.filter===n));a.append(t)}return a.append(d),a}function it(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`,`${tt[e]} 피드백 ${I(t)}개`);let i=document.createElement(`span`);i.className=`rg-feedback-filter-label`,i.textContent=tt[e];let a=document.createElement(`span`);return a.className=`rg-feedback-filter-count`,a.setAttribute(`aria-hidden`,`true`),a.textContent=String(I(t)),r.append(i,a),r}function at(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`,ft(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=F(`rg-feedback-row-copy`),o=document.createElement(`span`);if(o.className=`rg-feedback-row-body`,e.targetLabel?.trim()){let t=document.createElement(`span`);t.className=`rg-feedback-row-target`,t.textContent=e.targetLabel.trim(),o.append(t,document.createTextNode(` — ${e.body}`))}else o.textContent=e.body;let s=F(`rg-feedback-row-detail`),c=document.createElement(`span`);c.className=`rg-feedback-row-meta`,c.textContent=`${e.authorName} · ${e.timeLabel}`;let l=F(`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(ct()),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=`답글 ${I(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(lt());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 ot(){return N(`0 0 14 14`,[P(`M4.75 3.25h6.5M4.75 7h6.5M4.75 10.75h6.5`),P(`M2.25 3.25h.01M2.25 7h.01M2.25 10.75h.01`,{"stroke-linecap":`round`,"stroke-width":`1.5`})])}function st(){return N(`0 0 12 12`,[P(`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 ct(){return N(`0 0 14 14`,[P(`M7 12.25s4-3.27 4-6.5a4 4 0 1 0-8 0c0 3.23 4 6.5 4 6.5Z`),P(`m4.75 3.5 4.5 4.5`)])}function lt(){return N(`0 0 12 12`,[P(`m2.25 6.25 2.25 2.25 5.25-5.25`)])}function ut(e,t){let n=t.loadState??`ready`;if(n===`ready`)return;let r=F(`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 dt(e){let t=F(`rg-feedback-navigator-empty`);return t.setAttribute(`role`,`status`),t.textContent=e?`피드백 없음`:`해당 피드백 없음`,t}function ft(e){let t=[`${Math.max(1,Math.trunc(e.pinNumber))}번 피드백`,...e.targetLabel?.trim()?[`대상 ${e.targetLabel.trim()}`]:[],e.body,e.authorName,`최근 활동 ${e.timeLabel}`];return e.replyCount>0&&t.push(`답글 ${I(e.replyCount)}개`),t.push(e.status===`resolved`?`완료`:`진행 중`),e.locationAvailable===!1&&t.push(`현재 화면에서 위치를 찾을 수 없음`),t.join(`, `)}function N(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 P(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 F(e){let t=document.createElement(`div`);return t.className=e,t}function I(e){return Math.max(0,Math.trunc(Number.isFinite(e)?e:0))}const L=`agency-review-widget`,pt=`visual-review:reauthenticate-required`,R=`visual-review-feedback-navigator`,mt=`${R}-surface`,ht=new Set([`combobox`,`menuitem`,`menuitemcheckbox`,`menuitemradio`,`option`,`radio`,`searchbox`,`slider`,`spinbutton`,`textbox`]);var gt=class extends HTMLElement{#e=this.attachShadow({mode:`open`});#t=null;#n=null;#r=null;#i=!1;#a=null;#o=null;#s=null;#c=``;#l=``;#u=null;#d=null;#f=null;#p=null;#m=null;#h=!1;#g=`all`;#_=`loading`;#v=``;#y=`retry`;#b=!1;#x=0;#S=0;#C=!navigator.onLine;#w=null;#T=null;#E=null;#D=null;#O=null;#k=null;#A=!1;#j=null;#M=!1;#N=null;#P=null;#F=!1;#I=null;#L=new Set;#R=new Map;#z=new Map;#B=new Map;#V=new Map;#H=new Map;#U=new Map;configure(e){if(this.#t)throw Error(`Review widget is already configured`);if(!vt(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.#W()}connectedCallback(){this.dataset.agencyReviewRoot=``,this.dataset.reactGrabIgnore=``,this.dataset.rgTheme=Wt(),this.#t&&this.#W()}disconnectedCallback(){this.#X()}async#W(){!this.#t||this.#w||(this.#w=new AbortController,this.#C=!navigator.onLine,this.#Z(),this.#Q(),this.#Re(),document.addEventListener(`keydown`,this.#De,{capture:!0,signal:this.#w.signal}),document.addEventListener(`keyup`,this.#Oe,{capture:!0,signal:this.#w.signal}),document.addEventListener(`pointerdown`,this.#je,{capture:!0,signal:this.#w.signal}),document.addEventListener(`click`,this.#Me,{capture:!0,signal:this.#w.signal}),document.addEventListener(`focusin`,this.#Te,{capture:!0,signal:this.#w.signal}),document.addEventListener(`scroll`,this.#Fe,{capture:!0,passive:!0,signal:this.#w.signal}),window.addEventListener(`scroll`,this.#Fe,{passive:!0,signal:this.#w.signal}),window.addEventListener(`resize`,this.#Fe,{passive:!0,signal:this.#w.signal}),window.visualViewport?.addEventListener(`scroll`,this.#Fe,{passive:!0,signal:this.#w.signal}),window.visualViewport?.addEventListener(`resize`,this.#Fe,{passive:!0,signal:this.#w.signal}),window.addEventListener(`online`,this.#Y,{signal:this.#w.signal}),window.addEventListener(`offline`,this.#Y,{signal:this.#w.signal}),await this.#G())}async#G(){if(!this.#t||!this.#w)return;let e=this.#_===`error`,t=++this.#x,n=this.#w.signal,{pageId:r,repository:i}=this.#t;this.#_=`loading`,this.#v=``,this.#ee(),this.#ae();try{let e=await i.getSnapshot(r);if(n.aborted||t!==this.#x)return;let a=this.#n;this.#n=null;try{a?.()}catch{}let o=!1,s=!1,c=e,l=i.subscribe(r,e=>{if(!(n.aborted||t!==this.#x||!this.#w)){if(!s){c=e;return}this.#K(e)}},e=>{n.aborted||t!==this.#x||!this.#w||(o=!0,this.#q(e))});if(o){try{l()}catch{}return}if(n.aborted||t!==this.#x||!this.#w){try{l()}catch{}return}this.#n=l,s=!0,this.#K(c)}catch(r){if(n.aborted||t!==this.#x)return;let i=Bt(r)?r:{type:`error`,code:`unknown`,recovery:`retry`,clearSnapshot:!0};this.#q(i,i.type===`access-lost`),e&&this.#h&&queueMicrotask(()=>this.#e.querySelector(`.rg-feedback-navigator-retry`)?.focus({preventScroll:!0}))}}#K=e=>{this.#_=`ready`,this.#y=`retry`,this.#b=!1,this.#r=e,this.#J(e);let t=!1;if(this.#p&&!e.comments.some(({id:e})=>e===this.#p)){let e=this.#p;t=!0,this.#B.delete(e),this.#V.delete(e),this.#H.delete(e),this.#U.delete(e),this.#p=null,this.#m=null,this.#ye(`열려 있던 피드백이 삭제되었습니다.`)}this.#Q();let n=t&&!this.#h?this.#ie():!1;t&&queueMicrotask(()=>{n||(this.#h?this.#de():this.#fe()?.focus())})};#q(e,t=!0){let n=e.type===`access-lost`;this.#x+=1,this.#S+=1;let r=this.#n;if(this.#n=null,e.clearSnapshot&&(this.#r=null),!n&&this.#s){let e=this.#e.querySelector(`.rg-selection-label:not(.rg-thread-label) textarea`);this.#f={target:this.#s,body:e?.value??this.#c},this.#s=null,this.#c=``}if(!n&&this.#d?.comment){let{target:e,body:t,comment:n}=this.#d;this.#u??={target:e,body:t,comment:n},this.#l||=`저장하지 못했습니다. 다시 시도하세요.`}n||this.#V.forEach(({body:e,reply:t},n)=>{this.#B.set(n,e),this.#U.has(n)||this.#U.set(n,{body:e,reply:t}),this.#H.has(n)||this.#H.set(n,`답글을 저장하지 못했습니다. 다시 시도하세요.`)}),this.#d=null,this.#V.clear(),n&&(this.#s=null,this.#c=``,this.#l=``,this.#u=null,this.#f=null,this.#p=null,this.#m=null,this.#B.clear(),this.#H.clear(),this.#U.clear()),this.#i?this.#$(!1):this.#Ye(),this.#_=`error`,this.#y=e.recovery,this.#b=e.type===`access-lost`,this.#v=e.type===`access-lost`?`다시 인증하세요.`:`다시 시도하세요.`,t&&(this.#h=!0);try{r?.()}catch{}if(this.#ee(),this.#Q(),this.#ye(this.#v),e.type===`access-lost`){try{this.#t?.onReauthenticationRequired?.(e)}catch{}this.dispatchEvent(new CustomEvent(pt,{bubbles:!0,composed:!0,detail:{code:e.code}}))}}#J(e){let t=new Set(e.comments.map(({id:e})=>e)),n=this.#d,r=this.#u,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.#s!==null&&o.includes(this.#s);this.#s&&o.includes(this.#s)&&(this.#s=null,this.#c=``),this.#f&&o.includes(this.#f.target)&&(this.#f=null),i&&(this.#d=null),a&&(this.#u=null),this.#l=``,this.#ye(`피드백을 저장했습니다.`),e&&queueMicrotask(()=>this.#e.querySelector(`.rg-feedback-tool`)?.focus({preventScroll:!0}))}new Set([...this.#B.keys(),...this.#V.keys(),...this.#H.keys(),...this.#U.keys()]).forEach(n=>{if(!t.has(n)){this.#B.delete(n),this.#V.delete(n),this.#H.delete(n),this.#U.delete(n);return}let r=this.#V.get(n),i=this.#U.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.#V.delete(n),o&&this.#U.delete(n),this.#H.delete(n),this.#B.delete(n),this.#ye(`답글을 저장했습니다.`))})}#Y=()=>{this.#C=!navigator.onLine,this.#ae()};#X(){this.#x+=1,this.#S+=1,this.#ke(),this.#Pe(),this.#Ue(),this.#i&&this.#$(!1),this.#E?.(),this.#E=null,this.#T?.(),this.#T=null;let e=this.#n;this.#n=null,this.#w?.abort(),this.#w=null,this.#r=null,this.#_=`loading`,this.#v=``,this.#y=`retry`,this.#b=!1,this.#s=null,this.#c=``,this.#l=``,this.#u=null,this.#d=null,this.#f=null,this.#p=null,this.#m=null,this.#h=!1,this.#g=`all`,this.#B.clear(),this.#V.clear(),this.#H.clear(),this.#U.clear(),this.#e.replaceChildren();try{e?.()}catch{}}#Z(){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.#w?.signal})});let t=document.createElement(`style`);this.#t?.styleNonce&&(t.nonce=this.#t.styleNonce),t.textContent=`
2
+ :host {
3
+ all: initial;
4
+ --review-accent: #e5484d;
5
+ position: fixed;
6
+ inset: 0;
7
+ z-index: 2147483000;
8
+ pointer-events: none;
9
+ direction: ltr;
10
+ color: #171918;
11
+ font: 500 14px/1.45 Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
12
+ }
13
+
14
+ * { box-sizing: border-box; }
15
+ button, textarea { font: inherit; }
16
+
17
+ .highlight, .region {
18
+ position: fixed;
19
+ display: none;
20
+ border: 2px solid var(--review-accent);
21
+ border-radius: 6px;
22
+ background: rgba(229, 72, 77, 0.07);
23
+ box-shadow: 0 0 0 1px rgba(255,255,255,.8), 0 0 0 4px rgba(229,72,77,.12);
24
+ }
25
+ .region { border-radius: 4px; }
26
+ .highlight[data-context-target="true"],
27
+ .region[data-context-target="true"] {
28
+ background: rgba(229, 72, 77, 0.05);
29
+ }
30
+ .region[data-point="true"] {
31
+ border-radius: 50%;
32
+ background: rgba(229, 72, 77, 0.14);
33
+ }
34
+
35
+ .pin {
36
+ position: fixed;
37
+ display: grid;
38
+ place-items: center;
39
+ width: 20px;
40
+ height: 20px;
41
+ padding: 0;
42
+ transform: translate(-6px, -17px);
43
+ pointer-events: auto;
44
+ border: .5px solid var(--rg-border-subtle);
45
+ border-radius: 50%;
46
+ color: var(--rg-text-primary);
47
+ background: var(--rg-panel-bg);
48
+ box-shadow: var(--rg-shadow);
49
+ cursor: pointer;
50
+ appearance: none;
51
+ font: 500 10px/16px Geist, ui-sans-serif, system-ui, sans-serif;
52
+ -webkit-tap-highlight-color: transparent;
53
+ transition: opacity 150ms ease-out, transform 400ms var(--rg-ease-spring);
54
+ }
55
+ .pin::after {
56
+ position: absolute;
57
+ inset: -2px;
58
+ content: '';
59
+ }
60
+ @media (hover: hover) and (pointer: fine) {
61
+ .pin:hover { transform: translate(-6px, -17px) scale(1.08); }
62
+ }
63
+ .pin[data-active="true"] { transform: translate(-6px, -17px) scale(1.08); }
64
+ .pin:active { transform: translate(-6px, -17px) scale(.96); }
65
+ .pin:focus-visible { outline: 2px solid var(--review-accent); outline-offset: 2px; }
66
+ .pin[data-resolved="true"] { opacity: .55; }
67
+
68
+
69
+ :host {
70
+ --rg-panel-bg: #ffffff;
71
+ --rg-text-primary: #171717;
72
+ --rg-text-secondary: #737373;
73
+ --rg-surface-hover: rgba(0, 0, 0, 0.05);
74
+ --rg-border-subtle: rgba(0, 0, 0, 0.08);
75
+ --rg-submit-bg: #171717;
76
+ --rg-submit-fg: #ffffff;
77
+ --rg-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
78
+ --rg-drop-shadow: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.1));
79
+ --rg-ease-drawer: cubic-bezier(0.32, 0.72, 0, 1);
80
+ --rg-ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
81
+ }
82
+
83
+ :host([data-rg-theme="dark"]) {
84
+ --rg-panel-bg: #161616;
85
+ --rg-text-primary: #ffffff;
86
+ --rg-text-secondary: #a7a7a7;
87
+ --rg-surface-hover: rgba(255, 255, 255, 0.1);
88
+ --rg-border-subtle: rgba(255, 255, 255, 0.1);
89
+ --rg-submit-bg: #ffffff;
90
+ --rg-submit-fg: #161616;
91
+ --rg-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
92
+ --rg-drop-shadow: drop-shadow(0 2px 8px rgba(0, 0, 0, 0.08));
93
+ }
94
+
95
+ .rg-toolbar {
96
+ position: fixed;
97
+ left: 50%;
98
+ bottom: max(16px, env(safe-area-inset-bottom));
99
+ transform: translateX(-50%);
100
+ display: flex;
101
+ align-items: center;
102
+ justify-content: center;
103
+ min-width: 0;
104
+ min-height: 26px;
105
+ padding: 6px 8px;
106
+ pointer-events: auto;
107
+ border: 0;
108
+ border-radius: 13px;
109
+ color: var(--rg-text-secondary);
110
+ background: var(--rg-panel-bg);
111
+ box-shadow: var(--rg-shadow);
112
+ font: 500 13px/16px Geist, ui-sans-serif, system-ui, sans-serif;
113
+ font-synthesis: none;
114
+ z-index: 2147483647;
115
+ transition:
116
+ padding 220ms var(--rg-ease-drawer),
117
+ border-radius 220ms var(--rg-ease-drawer),
118
+ opacity 400ms var(--rg-ease-drawer),
119
+ transform 400ms var(--rg-ease-drawer);
120
+ }
121
+ .rg-toolbar-actions-shell {
122
+ display: grid;
123
+ grid-template-columns: 1fr;
124
+ min-width: 0;
125
+ overflow: visible;
126
+ transition: grid-template-columns 220ms var(--rg-ease-drawer);
127
+ }
128
+ .rg-toolbar-actions {
129
+ display: flex;
130
+ align-items: center;
131
+ min-width: 0;
132
+ opacity: 1;
133
+ transition: opacity 180ms var(--rg-ease-drawer) 80ms;
134
+ }
135
+ .rg-action-wrap {
136
+ position: relative;
137
+ display: flex;
138
+ align-items: center;
139
+ justify-content: center;
140
+ margin-right: 6px;
141
+ }
142
+ .rg-action, .rg-collapse, .rg-submit {
143
+ all: unset;
144
+ display: flex;
145
+ align-items: center;
146
+ justify-content: center;
147
+ flex: none;
148
+ cursor: pointer;
149
+ color: var(--rg-text-secondary);
150
+ -webkit-tap-highlight-color: transparent;
151
+ transition: color 150ms var(--rg-ease-drawer), transform 400ms var(--rg-ease-spring);
152
+ }
153
+ .rg-action::after, .rg-collapse::after, .rg-submit::after {
154
+ position: absolute;
155
+ width: max(24px, 100%);
156
+ height: max(24px, 100%);
157
+ content: '';
158
+ }
159
+ .rg-action, .rg-collapse, .rg-submit { position: relative; }
160
+ .rg-action:focus-visible,
161
+ .rg-collapse:focus-visible,
162
+ .rg-submit:focus-visible,
163
+ .rg-thread-close:focus-visible {
164
+ outline: 2px solid var(--review-accent);
165
+ outline-offset: 3px;
166
+ }
167
+ .rg-action { width: 14px; height: 14px; }
168
+ .rg-action svg { width: 14px; height: 14px; fill: currentColor; }
169
+ .rg-action:hover,
170
+ .rg-action[aria-pressed="true"],
171
+ .rg-feedback-list-tool[aria-expanded="true"],
172
+ .rg-collapse:hover {
173
+ color: var(--rg-text-primary);
174
+ }
175
+ @media (hover: hover) and (pointer: fine) {
176
+ .rg-action:hover, .rg-collapse:hover, .rg-submit:hover { transform: scale(1.05); }
177
+ }
178
+ .rg-action:active, .rg-collapse:active, .rg-submit:active {
179
+ transform: scale(.96);
180
+ transition-duration: 60ms;
181
+ transition-timing-function: cubic-bezier(0, 0, .2, 1);
182
+ }
183
+ .rg-collapse { width: 14px; height: 14px; }
184
+ .rg-collapse svg {
185
+ width: 18px;
186
+ height: 18px;
187
+ margin: -2px;
188
+ fill: currentColor;
189
+ transform: rotate(90deg);
190
+ transition: transform 150ms var(--rg-ease-drawer), color 150ms var(--rg-ease-drawer);
191
+ }
192
+ .rg-tooltip {
193
+ position: absolute;
194
+ left: 50%;
195
+ bottom: calc(100% + 10px);
196
+ transform: translate(-50%, 2px) scale(.97);
197
+ padding: 2px 8px;
198
+ pointer-events: none;
199
+ border-radius: 999px;
200
+ color: var(--rg-text-primary);
201
+ background: var(--rg-panel-bg);
202
+ box-shadow: var(--rg-shadow);
203
+ opacity: 0;
204
+ font: 500 10px/16px Geist, ui-sans-serif, system-ui, sans-serif;
205
+ white-space: nowrap;
206
+ transition: opacity 100ms ease-out, transform 100ms ease-out;
207
+ transition-delay: 0ms;
208
+ }
209
+ .rg-action-wrap:hover .rg-tooltip, .rg-action-wrap:focus-within .rg-tooltip {
210
+ transform: translate(-50%, 0) scale(1);
211
+ opacity: 1;
212
+ transition-delay: 400ms;
213
+ }
214
+ .rg-toolbar[data-selecting="true"]:not(:hover) {
215
+ transform: translateX(-50%) scale(.97);
216
+ opacity: .55;
217
+ }
218
+ .rg-toolbar[data-selecting="true"] .rg-tooltip,
219
+ .rg-toolbar[data-collapsed="true"] .rg-tooltip { display: none; }
220
+ .rg-toolbar[data-collapsed="true"] {
221
+ bottom: 0;
222
+ padding: 2px 8px 0;
223
+ border-radius: 10px 10px 0 0;
224
+ }
225
+ .rg-toolbar[data-collapsed="true"] .rg-toolbar-actions-shell {
226
+ grid-template-columns: 0fr;
227
+ pointer-events: none;
228
+ }
229
+ .rg-toolbar[data-collapsed="true"] .rg-toolbar-actions {
230
+ overflow: hidden;
231
+ opacity: 0;
232
+ transition: opacity 100ms var(--rg-ease-drawer);
233
+ }
234
+ .rg-toolbar[data-collapsed="true"] .rg-collapse svg { transform: rotate(-90deg); }
235
+
236
+ .rg-selection-label {
237
+ position: fixed;
238
+ transform: translateX(-50%);
239
+ z-index: 2147483002;
240
+ min-width: 150px;
241
+ max-width: 280px;
242
+ pointer-events: auto;
243
+ color: var(--rg-text-primary);
244
+ filter: var(--rg-drop-shadow);
245
+ font: 500 13px/16px Geist, ui-sans-serif, system-ui, sans-serif;
246
+ font-synthesis: none;
247
+ transition: opacity 125ms ease-out, filter 125ms ease-out;
248
+ }
249
+ .rg-selection-label:focus { outline: none; }
250
+ .rg-surface {
251
+ overflow: hidden;
252
+ min-width: 150px;
253
+ max-width: 280px;
254
+ border-radius: 14px;
255
+ corner-shape: superellipse(1.25);
256
+ background: var(--rg-panel-bg);
257
+ }
258
+ .rg-tag-row {
259
+ display: flex;
260
+ align-items: center;
261
+ max-width: 280px;
262
+ padding: 6px 8px 4px;
263
+ overflow: hidden;
264
+ }
265
+ .rg-tag {
266
+ overflow: hidden;
267
+ color: var(--rg-text-primary);
268
+ text-overflow: ellipsis;
269
+ white-space: nowrap;
270
+ }
271
+ .rg-bottom-section {
272
+ display: flex;
273
+ align-items: end;
274
+ width: auto;
275
+ min-height: 28px;
276
+ padding: 6px 8px;
277
+ border-top: .5px solid var(--rg-border-subtle);
278
+ }
279
+ .rg-bottom-section textarea {
280
+ flex: 1;
281
+ field-sizing: content;
282
+ min-width: 110px;
283
+ min-height: 16px;
284
+ max-height: 95px;
285
+ margin: 0;
286
+ padding: 0;
287
+ resize: none;
288
+ outline: none;
289
+ border: 0;
290
+ border-radius: 0;
291
+ color: var(--rg-text-primary);
292
+ background: transparent;
293
+ box-shadow: none;
294
+ overflow-y: auto;
295
+ scrollbar-width: none;
296
+ font: 500 13px/16px Geist, ui-sans-serif, system-ui, sans-serif;
297
+ overflow-wrap: break-word;
298
+ word-break: keep-all;
299
+ }
300
+ .rg-bottom-section textarea::placeholder { color: var(--rg-text-secondary); }
301
+ .rg-thread-label .rg-surface {
302
+ display: flex;
303
+ flex-direction: column;
304
+ width: min(280px, calc(100vw - 16px));
305
+ max-height: min(360px, calc(100vh - 16px));
306
+ max-height: min(360px, calc(100dvh - 16px));
307
+ }
308
+ .rg-thread-label .rg-tag-row { flex: none; gap: 8px; }
309
+ .rg-thread-close {
310
+ all: unset;
311
+ position: relative;
312
+ display: flex;
313
+ align-items: center;
314
+ justify-content: center;
315
+ flex: none;
316
+ width: 14px;
317
+ height: 14px;
318
+ margin-left: auto;
319
+ color: var(--rg-text-secondary);
320
+ cursor: pointer;
321
+ -webkit-tap-highlight-color: transparent;
322
+ transition: color 150ms var(--rg-ease-drawer), transform 400ms var(--rg-ease-spring);
323
+ }
324
+ .rg-thread-close::after {
325
+ position: absolute;
326
+ width: 24px;
327
+ height: 24px;
328
+ content: '';
329
+ }
330
+ .rg-thread-close svg { width: 10px; height: 10px; fill: currentColor; }
331
+ .rg-thread-close:hover { color: var(--rg-text-primary); }
332
+ .rg-thread-close:active {
333
+ transform: scale(.96);
334
+ transition-duration: 60ms;
335
+ }
336
+ .rg-thread-messages {
337
+ min-height: 0;
338
+ overflow: auto;
339
+ scrollbar-width: none;
340
+ border-top: .5px solid var(--rg-border-subtle);
341
+ }
342
+ .rg-thread-messages::-webkit-scrollbar { display: none; }
343
+ .rg-message { padding: 6px 8px; }
344
+ .rg-message + .rg-message { border-top: .5px solid var(--rg-border-subtle); }
345
+ .rg-message-meta {
346
+ overflow: hidden;
347
+ color: var(--rg-text-secondary);
348
+ font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
349
+ text-overflow: ellipsis;
350
+ white-space: nowrap;
351
+ }
352
+ .rg-message-body {
353
+ margin: 2px 0 0;
354
+ color: var(--rg-text-primary);
355
+ font: 500 13px/16px Geist, ui-sans-serif, system-ui, sans-serif;
356
+ overflow-wrap: anywhere;
357
+ white-space: pre-wrap;
358
+ }
359
+ .rg-thread-label .rg-bottom-section { flex: none; }
360
+ .rg-submit {
361
+ width: 16px;
362
+ height: 16px;
363
+ margin-left: 4px;
364
+ border-radius: 50%;
365
+ color: var(--rg-submit-fg);
366
+ background: var(--rg-submit-bg);
367
+ }
368
+ .rg-submit svg { width: 10px; height: 10px; fill: currentColor; }
369
+ .rg-submit:disabled { cursor: wait; opacity: .5; }
370
+ .rg-label-arrow {
371
+ position: absolute;
372
+ left: var(--rg-arrow-left, 50%);
373
+ display: block;
374
+ width: 16px;
375
+ height: 8px;
376
+ translate: -50% 0;
377
+ fill: var(--rg-panel-bg);
378
+ }
379
+ .rg-selection-label[data-side="below"] .rg-label-arrow {
380
+ top: -7px;
381
+ }
382
+ .rg-selection-label[data-side="above"] .rg-label-arrow {
383
+ bottom: -7px;
384
+ transform: rotate(180deg);
385
+ }
386
+
387
+ @media (hover: none), (pointer: coarse) {
388
+ .rg-toolbar {
389
+ min-height: 56px;
390
+ padding: 6px;
391
+ border-radius: 28px;
392
+ }
393
+ .rg-toolbar .rg-action-wrap {
394
+ width: 44px;
395
+ height: 44px;
396
+ margin-right: 0;
397
+ }
398
+ .rg-toolbar .rg-action,
399
+ .rg-toolbar .rg-collapse {
400
+ width: 44px;
401
+ height: 44px;
402
+ }
403
+ .rg-toolbar .rg-action::after,
404
+ .rg-toolbar .rg-collapse::after,
405
+ .rg-thread-close::after,
406
+ .rg-submit::after {
407
+ width: 100%;
408
+ height: 100%;
409
+ }
410
+ .rg-thread-label .rg-tag-row,
411
+ .rg-thread-label .rg-bottom-section {
412
+ min-height: 44px;
413
+ padding-top: 0;
414
+ padding-bottom: 0;
415
+ }
416
+ .rg-thread-close,
417
+ .rg-submit {
418
+ width: 44px;
419
+ height: 44px;
420
+ }
421
+ }
422
+
423
+ @media (prefers-reduced-motion: reduce) {
424
+ .rg-toolbar, .rg-toolbar *, .rg-selection-label, .rg-selection-label * {
425
+ animation: none !important;
426
+ transition: none !important;
427
+ }
428
+ }
429
+
430
+ @supports (-webkit-touch-callout: none) {
431
+ .rg-bottom-section textarea { font-size: 16px; }
432
+ }
433
+
434
+
435
+ .rg-visually-hidden {
436
+ position: fixed;
437
+ width: 1px;
438
+ height: 1px;
439
+ padding: 0;
440
+ overflow: hidden;
441
+ clip: rect(0 0 0 0);
442
+ clip-path: inset(50%);
443
+ white-space: nowrap;
444
+ border: 0;
445
+ }
446
+
447
+ .rg-feedback-navigator-scrim {
448
+ display: none;
449
+ position: fixed;
450
+ inset: 0;
451
+ z-index: 2147483001;
452
+ pointer-events: auto;
453
+ background: rgba(0, 0, 0, .08);
454
+ touch-action: none;
455
+ }
456
+
457
+ .rg-feedback-navigator {
458
+ position: fixed;
459
+ right: auto;
460
+ bottom: calc(max(16px, env(safe-area-inset-bottom)) + 34px);
461
+ left: max(8px, calc(50% - 140px));
462
+ z-index: 2147483646;
463
+ display: flex;
464
+ flex-direction: column;
465
+ width: min(280px, calc(100vw - 16px));
466
+ max-height: min(420px, calc(100dvh - 66px));
467
+ overflow: hidden;
468
+ pointer-events: auto;
469
+ border: 0;
470
+ border-radius: 14px;
471
+ corner-shape: superellipse(1.25);
472
+ color: var(--rg-text-primary);
473
+ background: var(--rg-panel-bg);
474
+ box-shadow: var(--rg-shadow);
475
+ font: 500 13px/16px Geist, ui-sans-serif, system-ui, sans-serif;
476
+ font-synthesis: none;
477
+ transform-origin: var(--rg-navigator-origin-x, 50%) calc(100% + 8px);
478
+ }
479
+ .rg-feedback-navigator[data-motion="enter"] {
480
+ animation: rg-feedback-navigator-enter 220ms var(--rg-ease-spring) both;
481
+ }
482
+ .rg-feedback-navigator-header {
483
+ display: flex;
484
+ align-items: center;
485
+ flex: none;
486
+ min-height: 34px;
487
+ padding: 5px 5px 3px 8px;
488
+ }
489
+ .rg-feedback-navigator-heading {
490
+ display: flex;
491
+ align-items: center;
492
+ min-width: 0;
493
+ gap: 4px;
494
+ }
495
+ .rg-feedback-navigator-title {
496
+ overflow: hidden;
497
+ margin: 0;
498
+ color: var(--rg-text-primary);
499
+ font: 500 13px/16px Geist, ui-sans-serif, system-ui, sans-serif;
500
+ text-overflow: ellipsis;
501
+ white-space: nowrap;
502
+ }
503
+ .rg-feedback-navigator-total {
504
+ color: var(--rg-text-secondary);
505
+ font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
506
+ font-variant-numeric: tabular-nums;
507
+ }
508
+
509
+ .rg-feedback-navigator-close,
510
+ .rg-feedback-filter,
511
+ .rg-feedback-row,
512
+ .rg-feedback-navigator-retry {
513
+ all: unset;
514
+ box-sizing: border-box;
515
+ cursor: pointer;
516
+ -webkit-tap-highlight-color: transparent;
517
+ }
518
+
519
+ .rg-inline-error {
520
+ padding: 5px 8px;
521
+ border-top: .5px solid var(--rg-border-subtle);
522
+ color: var(--review-accent);
523
+ font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
524
+ }
525
+ .rg-feedback-navigator-close {
526
+ position: relative;
527
+ display: flex;
528
+ align-items: center;
529
+ justify-content: center;
530
+ flex: none;
531
+ width: 24px;
532
+ height: 24px;
533
+ margin-left: auto;
534
+ border-radius: 6px;
535
+ color: var(--rg-text-secondary);
536
+ transition:
537
+ color 150ms var(--rg-ease-drawer),
538
+ background 150ms var(--rg-ease-drawer),
539
+ transform 400ms var(--rg-ease-spring);
540
+ }
541
+ .rg-feedback-navigator-close svg {
542
+ width: 14px;
543
+ height: 14px;
544
+ fill: currentColor;
545
+ }
546
+
547
+ .rg-feedback-filters {
548
+ display: flex;
549
+ align-items: center;
550
+ flex: none;
551
+ gap: 2px;
552
+ margin: 0 4px 4px;
553
+ }
554
+ .rg-feedback-filter {
555
+ display: flex;
556
+ align-items: center;
557
+ min-width: 0;
558
+ min-height: 24px;
559
+ padding: 4px 6px;
560
+ gap: 4px;
561
+ border-radius: 6px;
562
+ color: var(--rg-text-secondary);
563
+ text-align: center;
564
+ transition:
565
+ color 150ms var(--rg-ease-drawer),
566
+ background 150ms var(--rg-ease-drawer),
567
+ transform 400ms var(--rg-ease-spring);
568
+ }
569
+ .rg-feedback-filter[aria-pressed="true"] {
570
+ color: var(--rg-text-primary);
571
+ background: var(--rg-surface-hover);
572
+ }
573
+ .rg-feedback-filter-label {
574
+ overflow: hidden;
575
+ text-overflow: ellipsis;
576
+ white-space: nowrap;
577
+ }
578
+ .rg-feedback-filter-count {
579
+ color: var(--rg-text-secondary);
580
+ font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
581
+ font-variant-numeric: tabular-nums;
582
+ }
583
+
584
+ .rg-feedback-navigator-content {
585
+ min-height: 0;
586
+ overflow: auto;
587
+ overscroll-behavior: contain;
588
+ scrollbar-color: var(--rg-border-subtle) transparent;
589
+ scrollbar-width: thin;
590
+ border-top: .5px solid var(--rg-border-subtle);
591
+ }
592
+ .rg-feedback-list {
593
+ margin: 0;
594
+ padding: 4px;
595
+ list-style: none;
596
+ }
597
+ .rg-feedback-row {
598
+ display: grid;
599
+ grid-template-columns: 18px minmax(0, 1fr);
600
+ align-items: start;
601
+ width: 100%;
602
+ min-height: 50px;
603
+ padding: 7px 8px;
604
+ gap: 6px;
605
+ border-radius: 8px;
606
+ color: var(--rg-text-primary);
607
+ text-align: left;
608
+ transition:
609
+ background 150ms var(--rg-ease-drawer),
610
+ opacity 150ms var(--rg-ease-drawer);
611
+ }
612
+ .rg-feedback-row[aria-current="true"] {
613
+ background: var(--rg-surface-hover);
614
+ }
615
+ .rg-feedback-row[data-status="resolved"] .rg-feedback-row-copy {
616
+ opacity: .68;
617
+ }
618
+ .rg-feedback-row-pin {
619
+ display: grid;
620
+ place-items: center;
621
+ width: 18px;
622
+ height: 18px;
623
+ color: var(--rg-text-secondary);
624
+ font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
625
+ font-variant-numeric: tabular-nums;
626
+ }
627
+ .rg-feedback-row-copy {
628
+ display: flex;
629
+ flex-direction: column;
630
+ min-width: 0;
631
+ gap: 2px;
632
+ }
633
+ .rg-feedback-row-body {
634
+ display: -webkit-box;
635
+ overflow: hidden;
636
+ color: var(--rg-text-primary);
637
+ overflow-wrap: anywhere;
638
+ white-space: pre-wrap;
639
+ -webkit-box-orient: vertical;
640
+ -webkit-line-clamp: 2;
641
+ }
642
+ .rg-feedback-row-target {
643
+ color: var(--rg-text-secondary);
644
+ }
645
+ .rg-feedback-row-detail {
646
+ display: flex;
647
+ align-items: center;
648
+ min-width: 0;
649
+ color: var(--rg-text-secondary);
650
+ }
651
+ .rg-feedback-row-meta {
652
+ overflow: hidden;
653
+ color: var(--rg-text-secondary);
654
+ font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
655
+ text-overflow: ellipsis;
656
+ white-space: nowrap;
657
+ }
658
+ .rg-feedback-row-trailing {
659
+ display: flex;
660
+ align-items: center;
661
+ min-width: 0;
662
+ margin-left: 6px;
663
+ gap: 6px;
664
+ color: var(--rg-text-secondary);
665
+ font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
666
+ white-space: nowrap;
667
+ }
668
+ .rg-feedback-row-location-missing {
669
+ display: flex;
670
+ align-items: center;
671
+ justify-content: center;
672
+ width: 12px;
673
+ height: 12px;
674
+ color: var(--review-accent);
675
+ }
676
+ .rg-feedback-row-location-missing svg {
677
+ width: 12px;
678
+ height: 12px;
679
+ }
680
+ .rg-feedback-row-replies,
681
+ .rg-feedback-row-status {
682
+ display: inline-flex;
683
+ align-items: center;
684
+ min-height: 14px;
685
+ }
686
+ .rg-feedback-row-status {
687
+ width: 12px;
688
+ height: 12px;
689
+ }
690
+ .rg-feedback-row-status svg {
691
+ width: 12px;
692
+ height: 12px;
693
+ }
694
+
695
+ .rg-feedback-navigator-state,
696
+ .rg-feedback-navigator-empty {
697
+ display: flex;
698
+ align-items: center;
699
+ justify-content: center;
700
+ min-height: 58px;
701
+ padding: 12px;
702
+ color: var(--rg-text-secondary);
703
+ text-align: center;
704
+ }
705
+ .rg-feedback-navigator-state[data-state="reconnecting"] {
706
+ min-height: 0;
707
+ padding: 5px 8px;
708
+ border-bottom: .5px solid var(--rg-border-subtle);
709
+ color: var(--rg-text-secondary);
710
+ background: var(--rg-surface-hover);
711
+ font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
712
+ }
713
+ .rg-feedback-navigator-state[data-state="loading"]::before {
714
+ width: 12px;
715
+ height: 12px;
716
+ margin-right: 8px;
717
+ border: 1.5px solid var(--rg-border-subtle);
718
+ border-top-color: var(--rg-text-secondary);
719
+ border-radius: 50%;
720
+ content: '';
721
+ animation: rg-feedback-spinner 700ms linear infinite;
722
+ }
723
+ .rg-feedback-navigator-state[data-state="error"] {
724
+ flex-wrap: wrap;
725
+ gap: 8px;
726
+ }
727
+ .rg-feedback-navigator-retry {
728
+ display: inline-flex;
729
+ align-items: center;
730
+ justify-content: center;
731
+ min-height: 17px;
732
+ padding: 1px 4px;
733
+ border: .5px solid var(--rg-border-subtle);
734
+ border-radius: 4px;
735
+ color: var(--rg-text-primary);
736
+ background: var(--rg-panel-bg);
737
+ transition:
738
+ background 150ms var(--rg-ease-drawer),
739
+ transform 400ms var(--rg-ease-spring);
740
+ }
741
+
742
+ .rg-feedback-list-tool:focus-visible,
743
+ .rg-feedback-navigator-close:focus-visible,
744
+ .rg-feedback-filter:focus-visible,
745
+ .rg-feedback-row:focus-visible,
746
+ .rg-feedback-navigator-retry:focus-visible {
747
+ outline: 2px solid var(--review-accent);
748
+ outline-offset: 2px;
749
+ }
750
+ .rg-feedback-row:focus-visible {
751
+ outline-offset: -2px;
752
+ }
753
+
754
+ @media (hover: hover) and (pointer: fine) {
755
+ .rg-feedback-navigator-close:hover,
756
+ .rg-feedback-filter:hover,
757
+ .rg-feedback-navigator-retry:hover {
758
+ color: var(--rg-text-primary);
759
+ background: var(--rg-surface-hover);
760
+ }
761
+ .rg-feedback-row:hover { background: var(--rg-surface-hover); }
762
+ .rg-feedback-navigator-close:active,
763
+ .rg-feedback-filter:active,
764
+ .rg-feedback-navigator-retry:active {
765
+ transform: scale(.96);
766
+ transition-duration: 60ms;
767
+ }
768
+ }
769
+
770
+ @media (max-width: 640px) {
771
+ .rg-feedback-navigator-scrim {
772
+ display: block;
773
+ }
774
+ .rg-feedback-navigator-scrim[data-motion="enter"] {
775
+ animation: rg-feedback-scrim-enter 160ms ease-out both;
776
+ }
777
+ .rg-feedback-navigator {
778
+ right: auto;
779
+ bottom: calc(max(16px, env(safe-area-inset-bottom)) + 64px);
780
+ left: 50%;
781
+ width: min(360px, calc(100vw - 16px));
782
+ max-height: min(70dvh, 480px);
783
+ border-radius: 14px;
784
+ transform: translateX(-50%);
785
+ }
786
+ .rg-feedback-navigator[data-motion="enter"] {
787
+ animation: rg-feedback-sheet-enter 220ms var(--rg-ease-drawer) both;
788
+ }
789
+ .rg-feedback-navigator-header { min-height: 44px; padding-top: 5px; }
790
+ .rg-feedback-navigator-content { -webkit-overflow-scrolling: touch; }
791
+ .rg-feedback-filter { min-height: 44px; }
792
+ .rg-feedback-row { min-height: 56px; padding-top: 8px; padding-bottom: 8px; }
793
+ .rg-feedback-navigator-close,
794
+ .rg-feedback-navigator-retry { min-width: 44px; min-height: 44px; }
795
+ }
796
+
797
+ @media (hover: none), (pointer: coarse) {
798
+ .rg-feedback-list-tool svg {
799
+ width: 14px;
800
+ height: 14px;
801
+ }
802
+ .pin::after {
803
+ top: 50%;
804
+ left: 50%;
805
+ width: 44px;
806
+ height: 44px;
807
+ transform: translate(-50%, -50%);
808
+ }
809
+ .rg-feedback-filter { min-height: 44px; }
810
+ .rg-feedback-row { min-height: 56px; }
811
+ .rg-feedback-navigator-close,
812
+ .rg-feedback-navigator-retry { min-width: 44px; min-height: 44px; }
813
+ }
814
+
815
+ @media (prefers-reduced-motion: reduce) {
816
+ .rg-feedback-navigator-scrim,
817
+ .rg-feedback-navigator,
818
+ .rg-feedback-navigator *,
819
+ .rg-feedback-list-tool {
820
+ animation: none !important;
821
+ transition: none !important;
822
+ }
823
+ }
824
+
825
+ @keyframes rg-feedback-navigator-enter {
826
+ from { opacity: 0; transform: translateY(2px) scale(.92); }
827
+ to { opacity: 1; transform: translateY(0) scale(1); }
828
+ }
829
+ @keyframes rg-feedback-sheet-enter {
830
+ from { opacity: 0; transform: translate(-50%, 12px) scale(.98); }
831
+ to { opacity: 1; transform: translate(-50%, 0) scale(1); }
832
+ }
833
+ @keyframes rg-feedback-scrim-enter {
834
+ from { opacity: 0; }
835
+ to { opacity: 1; }
836
+ }
837
+ @keyframes rg-feedback-spinner {
838
+ to { transform: rotate(360deg); }
839
+ }
840
+ `;let n=z(`highlight`);n.dataset.slot=`highlight`;let r=z(`region`);r.dataset.slot=`region`;let i=z(`pins`);i.dataset.slot=`pins`;let a=z(`panels`);a.dataset.slot=`panels`;let o=z(`navigator-slot`);o.dataset.slot=`navigator`,o.id=R,o.addEventListener(`click`,this.#me),o.addEventListener(`keydown`,this.#he);let s=z(`rg-visually-hidden`);s.dataset.slot=`announcer`,s.setAttribute(`aria-live`,`polite`),s.setAttribute(`aria-atomic`,`true`);let c=We();c.querySelector(`.rg-toolbar-actions`)?.append(nt(0,{controlsId:R,presentation:this.#ce()})),c.querySelector(`.rg-feedback-tool`)?.addEventListener(`click`,()=>{if(!this.#te()){this.#h||this.#re(!0),this.#ye(this.#ne());return}if(!(this.#h&&this.#re(!1,{restoreFocus:!1,restoreComposer:!0}))){if(this.#d){this.#ye(`피드백을 저장하는 중입니다.`);return}this.#$(!this.#i)}}),c.querySelector(`.rg-feedback-list-tool`)?.addEventListener(`click`,()=>{this.#re(!this.#h)}),c.querySelector(`.rg-collapse`)?.addEventListener(`click`,()=>{let e=c.dataset.collapsed===`true`;!e&&this.#i&&this.#$(!1),!e&&this.#h&&this.#re(!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)}#Q(){this.#Qe(),this.#et(),this.#ae(),this.#se(),this.#ee(),this.#He(),this.#We()}#$(e){if(e&&(this.#S+=1),e&&!this.#te()){this.#h||this.#re(!0),this.#ye(this.#ne());return}if(e&&this.#d){this.#ye(`피드백을 저장하는 중입니다.`);return}if(e&&this.#f){this.#p?this.#Ge(!1):this.#ie(),this.#ye(`작성 중인 피드백을 복원했습니다.`);return}this.#i=e,this.#ee(),e?(this.#p=null,this.#m=null,this.#s=null,this.#c=``,this.#l=``,this.#u=null,this.#Ye(),document.addEventListener(`pointermove`,this.#be,!0),document.addEventListener(`pointerdown`,this.#xe,!0),document.addEventListener(`pointerup`,this.#Se,!0),document.addEventListener(`pointercancel`,this.#Ce,!0),document.addEventListener(`keydown`,this.#we,!0),this.#D={value:document.body.style.getPropertyValue(`cursor`),priority:document.body.style.getPropertyPriority(`cursor`)},document.body.style.setProperty(`cursor`,`crosshair`),this.#T=Se(this.#t?.styleNonce),queueMicrotask(()=>this.#Ee())):(document.removeEventListener(`pointermove`,this.#be,!0),document.removeEventListener(`pointerdown`,this.#xe,!0),document.removeEventListener(`pointerup`,this.#Se,!0),document.removeEventListener(`pointercancel`,this.#Ce,!0),document.removeEventListener(`keydown`,this.#we,!0),this.#D&&=($(document.body,`cursor`,this.#D),null),this.#T?.(),this.#T=null,this.#a=null,this.#o=null,this.#Ye()),this.#et()}#ee(){let e=this.#e.querySelector(`.rg-toolbar`),t=this.#e.querySelector(`.rg-feedback-tool`);e&&(e.dataset.selecting=String(this.#i)),t&&(t.setAttribute(`aria-pressed`,String(this.#i)),t.setAttribute(`aria-label`,this.#i?`선택 취소`:`피드백 위치 선택`),t.setAttribute(`aria-disabled`,String(!this.#te())))}#te(){return!this.#b&&this.#_===`ready`&&this.#r!==null}#ne(){return this.#b?`다시 인증하세요.`:this.#_===`loading`?`불러오는 중입니다.`:`다시 시도하세요.`}#re(e,t={}){let n=t.restoreFocus??!0,r=t.restoreComposer??!0;if(e===this.#h)return!1;if(e){if(this.#S+=1,this.#i&&this.#$(!1),this.#s){let e=this.#e.querySelector(`.rg-selection-label:not(.rg-thread-label) textarea`);this.#f={target:this.#s,body:e?.value??this.#c},this.#s=null,this.#c=``}return this.#h=!0,this.#et(),this.#ae(),this.#se(),queueMicrotask(()=>this.#de()),!1}(t.cancelNavigation??!0)&&(this.#S+=1),this.#h=!1,this.#E?.(),this.#E=null,this.#ae(),this.#se();let i=r&&this.#ie();return n&&!i&&queueMicrotask(()=>this.#fe()?.focus()),i}#ie(){if(!this.#f||this.#h||this.#p)return!1;let e=this.#f;return this.#f=null,this.#s=e.target,this.#c=e.body,this.#et(),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}#ae(){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.#h)return;let d=this.#ce(),f=z(`rg-feedback-navigator-scrim`);f.dataset.motion=i,f.dataset.feedbackNavigatorAction=`close`,f.setAttribute(`aria-hidden`,`true`);let p=rt(this.#oe(),{id:mt,presentation:d});p.dataset.motion=i,e.append(f,p),this.#ue(d),queueMicrotask(()=>this.#le()),queueMicrotask(()=>{if(!this.#h)return;let t=e.querySelector(`.rg-feedback-navigator-content`);if(t&&(t.scrollTop=a),s){let e=this.#pe(s);e?e.focus({preventScroll:!0}):this.#de()}else if(c&&Vt(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()})}#oe(){let e=M(this.#r??{pageId:this.#t?.pageId??``,comments:[],replies:[]},this.#g),t=this.#t?.now?.()??Date.now(),n=this.#C&&this.#_===`ready`?`reconnecting`:this.#_;return{filter:this.#g,counts:e.counts,rows:e.rows.map(({comment:e,pinNumber:n,replyCount:r,lastActivityAt:i})=>({id:e.id,pinNumber:n,targetLabel:St(e.target),authorName:e.authorName,body:e.body,timeLabel:Ht(i,t),replyCount:r,status:e.status,locationAvailable:H(e).available})),activeCommentId:this.#p,loadState:n,errorMessage:this.#v,errorRecovery:this.#y}}#se(){let e=this.#fe();if(!e)return;let t=this.#r?.comments.length??0;e.setAttribute(`aria-label`,`피드백 목록, 총 ${t}개`),e.setAttribute(`aria-expanded`,String(this.#h)),e.setAttribute(`aria-controls`,R),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`}#le(){let e=this.#e.querySelector(`.rg-feedback-navigator`),t=this.#fe(),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;if(r.width<=0||a<=0)return;let o=r.left+r.width/2,s=Z(o-a/2,8,Math.max(8,window.innerWidth-a-8));e.style.left=`${s}px`,e.style.bottom=`${Math.max(8,window.innerHeight-i.top+8)}px`,e.style.setProperty(`--rg-navigator-origin-x`,`${Z(o-s,16,a-16)}px`)}#ue(e){if(e!==`sheet`){this.#E?.(),this.#E=null;return}if(this.#E)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?Ut(r,`visibility`):null;r&&r.style.setProperty(`visibility`,`hidden`);let a=Ut(document.body,`overflow`),o=Ut(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.#E=()=>{n.forEach(({element:e,inert:t})=>{e.inert=t}),r&&i&&$(r,`visibility`,i),document.removeEventListener(`focusin`,s,!0),$(document.body,`overflow`,a),$(document.documentElement,`overflow`,o)}}#de(){if(!this.#h)return;let e=this.#p?this.#pe(this.#p):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})}#fe(){return this.#e.querySelector(`.rg-feedback-list-tool`)}#pe(e){return[...this.#e.querySelectorAll(`.rg-feedback-row[data-comment-id]`)].find(({dataset:t})=>t.commentId===e)}#me=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.#re(!1);return}if(n===`retry`){this.#G();return}if(n===`filter`){let e=t.dataset.feedbackFilter;if(!Vt(e)||e===this.#g)return;this.#g=e,this.#ae();return}n===`open-comment`&&t.dataset.commentId&&this.#ge(t.dataset.commentId,{origin:`navigator`,navigate:!0})}};#he=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#ge(e,t){let n=this.#r?.comments.find(({id:t})=>t===e);if(!n)return;this.#i&&this.#$(!1);let r=++this.#S;if(t.origin===`navigator`&&this.#h&&this.#ce()===`sheet`&&(this.#re(!1,{restoreFocus:!1,restoreComposer:!1,cancelNavigation:!1}),await Q()),!(r!==this.#S||!this.#w)){if(!this.#r?.comments.some(({id:t})=>t===e)){this.#_e();return}if(t.navigate&&await this.#ve(n),r===this.#S){if(!this.#r?.comments.some(({id:t})=>t===e)){this.#_e();return}this.#s=null,this.#p=e,this.#m=t.origin,this.#Q(),H(n).available||this.#ye(`현재 화면에서 피드백 위치를 찾을 수 없습니다.`),queueMicrotask(()=>this.#e.querySelector(`.rg-thread-label`)?.focus({preventScroll:!0}))}}}#_e(){!this.#h&&this.#ie()||queueMicrotask(()=>{this.#h?this.#de():this.#fe()?.focus({preventScroll:!0})})}async#ve(e){let t=H(e);if(!t.available||t.pageY===null)return;let n=window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches?`auto`:`smooth`;if(e.target.kind!==`viewport`){let t=v(e.anchor).element;if(t&&typeof t.scrollIntoView==`function`)try{t.scrollIntoView({block:`center`,inline:`center`,behavior:n}),await Q(),await Q();return}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{}await Q(),await Q()}#ye(e){let t=this.#e.querySelector(`[data-slot="announcer"]`);t&&(t.textContent=``,queueMicrotask(()=>{t.textContent=e}))}#be=e=>{if(!this.#i||this.#st(e)||this.#a&&e.pointerId!==this.#o)return;let t=It(e);if(this.#a&&yt(this.#a,t)>=6){this.#Je(this.#a,t);return}this.#qe(t)};#xe=e=>{!this.#i||this.#st(e)||e.button!==0||this.#a||(e.preventDefault(),e.stopImmediatePropagation(),this.#a=It(e),this.#o=e.pointerId)};#Se=e=>{if(!this.#i||!this.#a||e.pointerId!==this.#o)return;if(this.#st(e)){this.#a=null,this.#o=null,this.#Ye();return}e.preventDefault(),e.stopImmediatePropagation();let t=It(e);this.#s=yt(this.#a,t)>=6?ke(this.#a,t):Oe(t),this.#Ne(),this.#$(!1),queueMicrotask(()=>this.#e.querySelector(`.rg-selection-label textarea`)?.focus())};#Ce=e=>{!this.#i||!this.#a||e.pointerId!==this.#o||(e.preventDefault(),e.stopImmediatePropagation(),this.#a=null,this.#o=null,this.#Ye())};#we=e=>{if(!this.#i)return;if(e.key===`Escape`){e.preventDefault(),e.stopImmediatePropagation(),this.#$(!1);return}if(e.key!==`Enter`||e.isComposing||this.#st(e)||X(e))return;let t=Mt(e);if(!t)return;let n=C(t);n.width<=0||n.height<=0||(e.preventDefault(),e.stopImmediatePropagation(),this.#s=De(t,{clientX:n.left+n.width/2,clientY:n.top+n.height/2}),this.#$(!1),queueMicrotask(()=>this.#e.querySelector(`.rg-selection-label textarea`)?.focus()))};#Te=e=>{if(!this.#i)return;if(this.#st(e)||X(e)){this.#Ye();return}let t=Mt(e);if(!t){this.#Ye();return}let n=C(t);if(n.width<=0||n.height<=0){this.#Ye();return}let r=this.#e.querySelector(`[data-slot="region"]`);r&&(r.style.display=`none`);let i=this.#e.querySelector(`[data-slot="highlight"]`);i&&B(i,n)};#Ee(){if(!this.#i)return;let e=Nt(document);if(!e||w(e)||jt(e))return;let t=C(e);if(t.width<=0||t.height<=0)return;let n=this.#e.querySelector(`[data-slot="highlight"]`);n&&B(n,t)}#De=e=>{if(e.key===`Escape`&&!e.isComposing){if(this.#h){e.preventDefault(),e.stopImmediatePropagation(),this.#re(!1);return}if(this.#p){e.preventDefault(),e.stopImmediatePropagation(),this.#Ge(!0);return}if(this.#s){if(e.preventDefault(),e.stopImmediatePropagation(),this.#d?.target===this.#s){this.#ye(`피드백을 저장하는 중입니다.`);return}this.#s=null,this.#c=``,this.#l=``,this.#u=null,this.#et(),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`))||e.repeat||this.#i||this.#s||this.#p||this.#h||!this.#te()||this.#O!==null||X(e)||Ft(e)||(this.#O=window.setTimeout(()=>{this.#O=null,!(this.#i||this.#s||this.#p||this.#h||this.#d||!this.#te())&&this.#Ae()},100))};#Oe=e=>{let t=e.code===`KeyC`||e.key.toLowerCase()===`c`,n=e.key===`Meta`||e.key===`Control`;(t||n)&&this.#ke()};#ke(){this.#O!==null&&(window.clearTimeout(this.#O),this.#O=null)}#Ae(){if(!this.#te()){this.#h||this.#re(!0),this.#ye(this.#ne());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.#$(!0)}#je=e=>{!this.#p||this.#st(e)||this.#Ge(!1)};#Me=e=>{!this.#A||this.#st(e)||(e.preventDefault(),e.stopImmediatePropagation(),this.#Pe())};#Ne(){this.#Pe(),this.#A=!0,this.#k=window.setTimeout(()=>{this.#k=null,this.#A=!1},0)}#Pe(){this.#k!==null&&(window.clearTimeout(this.#k),this.#k=null),this.#A=!1}#Fe=()=>{this.#Ie()};#Ie(){if(!(!this.#w||this.#j!==null)){if(typeof window.requestAnimationFrame==`function`){this.#M=!0,this.#j=-1;let e=window.requestAnimationFrame(()=>{this.#j=null,this.#Le()});this.#j!==null&&(this.#j=e);return}this.#M=!1,this.#j=window.setTimeout(()=>{this.#j=null,this.#Le()},16)}}#Le(){if(!this.#w)return;this.#F&&(this.#F=!1,this.#ze()),this.#He(),this.#$e(),this.#Xe(),this.#Ke();let e=this.#e.querySelector(`.rg-feedback-navigator`);e&&e.dataset.presentation!==this.#ce()?(this.#ae(),this.#se()):this.#le(),this.#We()}#Re(){typeof window.ResizeObserver==`function`&&(this.#N=new window.ResizeObserver(this.#Fe)),typeof window.MutationObserver==`function`&&(this.#P=new window.MutationObserver(e=>{e.some(({type:e})=>e===`childList`)&&(this.#F=!0),this.#Fe()}),this.#ze()),this.#He()}#ze(){let e=this.#P;if(!e)return;e.disconnect();let t=i();this.#Be(t),this.#Ve();for(let n of t){if(n===this.#e)continue;let t=f(n)?n.documentElement:n;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{}}}#Be(e){let t=new Set(e.filter(e=>f(e)&&e!==document));for(let[e,n]of this.#R)t.has(e)||(n(),this.#R.delete(e));for(let e of t){if(this.#R.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.#De),n(`keyup`,this.#Oe),n(`keydown`,this.#we),n(`pointermove`,this.#be),n(`pointerdown`,this.#je),n(`pointerdown`,this.#xe),n(`pointerup`,this.#Se),n(`pointercancel`,this.#Ce),n(`click`,this.#Me),n(`focusin`,this.#Te),n(`scroll`,this.#Fe);let r=e.defaultView;r?.addEventListener(`resize`,this.#Fe,{passive:!0}),r?.visualViewport?.addEventListener(`scroll`,this.#Fe,{passive:!0}),r?.visualViewport?.addEventListener(`resize`,this.#Fe,{passive:!0}),this.#R.set(e,()=>{t.forEach(({type:t,listener:n,capture:r})=>{e.removeEventListener(t,n,r)}),r?.removeEventListener(`resize`,this.#Fe),r?.visualViewport?.removeEventListener(`scroll`,this.#Fe),r?.visualViewport?.removeEventListener(`resize`,this.#Fe)})}}#Ve(){let e=new Set(a(`iframe`));for(let[t,n]of this.#z)e.has(t)||(n(),this.#z.delete(t));for(let t of e){if(this.#z.has(t))continue;let e=()=>{this.#F=!0,this.#Ie()};t.addEventListener(`load`,e),this.#z.set(t,()=>{t.removeEventListener(`load`,e)})}}#He(){let e=this.#N;if(!e)return;let t=new Set,n=new Set;for(let e of this.#r?.comments??[]){let n=v(e.anchor).element;n&&Pt(n,t)}if(this.#s){let e=v(this.#s.anchor).element;e&&Pt(e,t)}for(let r of this.#L){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.#L.clear(),n.forEach(e=>this.#L.add(e))}#Ue(){this.#j!==null&&(this.#M&&typeof window.cancelAnimationFrame==`function`?window.cancelAnimationFrame(this.#j):window.clearTimeout(this.#j),this.#j=null),this.#I!==null&&(window.clearTimeout(this.#I),this.#I=null),this.#N?.disconnect(),this.#N=null,this.#P?.disconnect(),this.#P=null,this.#F=!1,this.#L.clear(),this.#R.forEach(e=>e()),this.#R.clear(),this.#z.forEach(e=>e()),this.#z.clear()}#We(){let e=(this.#r?.comments??[]).some(e=>e.target.kind===`element`&&r(e.anchor.selector)&&!H(e).available);if(!this.#w||!e){this.#I!==null&&(window.clearTimeout(this.#I),this.#I=null);return}this.#I===null&&(this.#I=window.setTimeout(()=>{this.#I=null,this.#F=!0,this.#Ie()},750))}#Ge(e){let t=this.#p;if(!t)return;let n=this.#m;this.#S+=1,this.#p=null,this.#m=null,this.#Qe(),this.#et(),this.#ae(),!(!this.#h&&this.#ie())&&e&&queueMicrotask(()=>{if(n===`navigator`&&this.#h){let e=this.#pe(t);e?e.focus():this.#de();return}if(n===`navigator`){this.#fe()?.focus();return}let e=[...this.#e.querySelectorAll(`.pin[data-comment-id]`)].find(({dataset:e})=>e.commentId===t);e?e.focus():this.#fe()?.focus({preventScroll:!0})})}#Ke(){let e=this.#e.querySelector(`.rg-selection-label`);if(!e)return;if(this.#s){D(e,V(this.#s));return}if(!this.#p)return;let t=this.#r?.comments.find(({id:e})=>e===this.#p);t&&D(e,Ct(t))}#qe(e){let t=xe(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}B(n,C(t))}#Je(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`),B(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))))}#Ye(){this.#e.querySelectorAll(`.highlight, .region`).forEach(e=>{e.style.display=`none`,e.removeAttribute(`data-context-target`),e.removeAttribute(`data-point`)})}#Xe(){if(this.#i)return;if(this.#s){this.#Ze(this.#s);return}let e=this.#r?.comments.find(({id:e})=>e===this.#p);if(e){this.#Ze(e.target);return}this.#Ye()}#Ze(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=v(e.anchor);if(!n.anchored||!n.visible||!n.element)return;let r=C(n.element);t.dataset.contextTarget=`true`,B(t,r);return}if(n.dataset.contextTarget=`true`,e.kind===`viewport`){n.dataset.point=`true`,B(n,W(e));return}B(n,U(e))}}#Qe(){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.#r;if(!n)return;let r=M(n).pinNumberByCommentId;n.comments.forEach(t=>{let n=H(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.#p),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.#p)),a.setAttribute(`aria-controls`,wt(t.id)),a.addEventListener(`click`,()=>{if(this.#p===t.id){this.#Ge(!0);return}this.#ge(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})})}#$e(){let e=new Map(this.#r?.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(n.has(e.id))return!1;let t=H(e);return t.available&&t.pageX!==null&&t.pageY!==null})){this.#Qe();return}t.forEach(t=>{let n=e.get(t.dataset.commentId??``);if(!n)return;let r=H(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`})}#et(){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.#s){this.#Ze(this.#s),e.append(this.#tt(this.#s)),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.#r?.comments.find(({id:e})=>e===this.#p);if(o){this.#Ze(o.target),e.append(this.#rt(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.#i||this.#Ye()}#tt(e){let t=Ge(`피드백`,`변경할 점`,`변경할 점 입력`);D(t,V(e));let n=t.querySelector(`textarea`),r=t.querySelector(`.rg-submit`);n.value=this.#c;let i=this.#d?.target===e&&this.#d.body===n.value.trim();n.disabled=i,r.disabled=i||!this.#te();let a=()=>{n.style.height=`auto`,n.style.height=`${Math.min(n.scrollHeight,95)}px`};return n.addEventListener(`input`,()=>{this.#c=n.value,this.#u?.body!==n.value.trim()&&(this.#u=null,this.#l=``,t.querySelector(`.rg-inline-error`)?.remove()),a()}),n.addEventListener(`keydown`,t=>{if(t.key===`Escape`){if(t.preventDefault(),this.#d?.target===e){this.#ye(`피드백을 저장하는 중입니다.`);return}this.#s=null,this.#c=``,this.#l=``,this.#u=null,this.#et(),queueMicrotask(()=>this.#e.querySelector(`.rg-feedback-tool`)?.focus({preventScroll:!0}))}t.key===`Enter`&&!t.shiftKey&&!t.isComposing&&(t.preventDefault(),r.click())}),r.addEventListener(`click`,()=>void this.#nt(t,e)),this.#l&&xt(t,this.#l),t}async#nt(e,t){if(!this.#t||this.#d||!this.#te())return;let n=this.#w?.signal;if(!n)return;let r=e.querySelector(`textarea`),i=e.querySelector(`.rg-submit`),a=r?.value.trim()??``;if(!a||!r||!i)return;i.disabled=!0,r.disabled=!0;let o={target:t,body:a,comment:null};this.#d=o;let s=this.#u?.target===t&&this.#u.body===a?this.#u.comment:null;if(!s){let e=t;if(this.#t.sourceContextResolver)try{e=await Pe(t,this.#t.sourceContextResolver,{signal:n})}catch{}if(n.aborted||this.#d!==o)return;let r=this.#t.now?.()??Date.now();s={id:this.#t.id?.()??crypto.randomUUID(),pageId:this.#t.pageId,authorId:this.#t.session.reviewerId,authorName:this.#t.session.displayName,body:a,anchor:e.anchor,target:e,status:`open`,createdAt:r,updatedAt:r}}o.comment=s;try{await this.#t.repository.mutate(this.#t.pageId,{type:`comment.upsert`,comment:s})}catch{if(n.aborted||this.#d!==o)return;this.#d=null,this.#u={target:t,body:a,comment:s},this.#l=`저장하지 못했습니다. 다시 시도하세요.`,!this.#h&&this.#s===t&&(this.#et(),queueMicrotask(()=>this.#e.querySelector(`.rg-selection-label:not(.rg-thread-label) textarea`)?.focus({preventScroll:!0})));return}n.aborted||this.#d!==o||(this.#d=null,this.#u=null,this.#l=``,this.#f?.target===t&&(this.#f=null),this.#s===t&&(this.#s=null,this.#c=``,this.#et(),queueMicrotask(()=>this.#e.querySelector(`.rg-feedback-tool`)?.focus({preventScroll:!0}))),this.#ye(`피드백을 저장했습니다.`))}#rt(e){let t=this.#r?M(this.#r).pinNumberByCommentId.get(e.id)??1:1,n=!H(e).available,r=Ge(`피드백 ${t}${e.status===`resolved`?` · 완료`:``}${n?` · 위치 없음`:``}`,`답글`,`답글 입력`);r.classList.add(`rg-thread-label`),r.id=wt(e.id),r.tabIndex=-1,r.dataset.commentId=e.id,r.setAttribute(`aria-label`,`피드백 대화`),D(r,Ct(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(Ke()),i.append(a);let o=z(`rg-thread-messages`);o.append(bt(e.authorName,e.body,e.createdAt)),(this.#r?.replies.filter(({commentId:t})=>t===e.id)??[]).forEach(e=>o.append(bt(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.#B.get(e.id)??``;let l=this.#V.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.#B.set(e.id,s.value),this.#U.get(e.id)?.body!==s.value.trim()&&(this.#U.delete(e.id),this.#H.delete(e.id),r.querySelector(`.rg-inline-error`)?.remove()),u()}),s.addEventListener(`keydown`,e=>{e.key===`Enter`&&!e.shiftKey&&!e.isComposing&&(e.preventDefault(),c.click())}),a.addEventListener(`click`,()=>this.#Ge(!0)),c.addEventListener(`click`,()=>void this.#it(r,e));let d=this.#H.get(e.id);return d&&xt(r,d),queueMicrotask(u),r}async#it(e,t){if(!this.#t||!this.#te())return;let n=this.#w?.signal;if(!n||this.#V.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.#U.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.#V.set(t.id,{request:l,body:a,reply:c}),this.#at(t.id,!0);try{await this.#t.repository.mutate(this.#t.pageId,{type:`reply.upsert`,reply:c})}catch{if(n.aborted||this.#V.get(t.id)?.request!==l)return;this.#V.delete(t.id),this.#U.set(t.id,{body:a,reply:c}),this.#H.set(t.id,`답글을 저장하지 못했습니다. 다시 시도하세요.`),i.disabled=!1,r.disabled=!1,this.#p===t.id&&(this.#et(),queueMicrotask(()=>this.#ot(t.id)?.querySelector(`textarea`)?.focus({preventScroll:!0})));return}if(n.aborted||this.#V.get(t.id)?.request!==l)return;this.#V.delete(t.id),this.#U.delete(t.id),this.#H.delete(t.id),this.#B.delete(t.id);let u=this.#ot(t.id)?.querySelector(`textarea`);u&&(u.value=``,u.style.height=`auto`),this.#at(t.id,!1),this.#ye(`답글을 저장했습니다.`)}#at(e,t){let n=this.#ot(e),r=n?.querySelector(`textarea`),i=n?.querySelector(`.rg-submit`);r&&(r.disabled=t),i&&(i.disabled=t)}#ot(e){return[...this.#e.querySelectorAll(`.rg-thread-label`)].find(({dataset:t})=>t.commentId===e)}#st(e){return e.composedPath().includes(this)}};function _t(e){be(e.styleNonce),customElements.get(`agency-review-widget`)||customElements.define(L,gt);let t=document.createElement(L);return t.configure(e),document.body.append(t),t}function vt(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 z(e){let t=document.createElement(`div`);return t.className=e,t}function B(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 yt(e,t){return Math.hypot(e.clientX-t.clientX,e.clientY-t.clientY)}function bt(e,t,n){let r=document.createElement(`article`);r.className=`rg-message`;let i=z(`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 xt(e,t){let n=e.querySelector(`.rg-inline-error`);if(!n){n=z(`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 St(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 V(e){let t=v(e.anchor),n=t.x-window.scrollX;if(t.y-window.scrollY,e.kind===`element`&&t.element){let e=C(t.element);return{x:e.left,y:e.top,width:e.width,height:e.height,anchorX:n}}if(e.kind===`viewport`){let t=W(e);return{x:t.left,y:t.top,width:t.width,height:t.height,anchorX:t.left+t.width/2}}let r=U(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 Ct(e){if(e.target.kind===`element`){if(H(e).available)return V(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=W(e.target);return{x:t.left,y:t.top,width:t.width,height:t.height,anchorX:t.left+t.width/2}}let t=U(e.target);return{x:t.left,y:t.top,width:t.width,height:t.height,anchorX:t.left+t.width/2}}function H(e){if(e.target.kind===`element`){let t=v(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=Tt(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=G(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 wt(e){return`visual-review-thread-${e.replace(/[^a-zA-Z0-9_-]/g,`-`)}`}function U(e){let t=K(e),n=Tt(e,t),r=J(e.region.width)*t.x,i=J(e.region.height)*t.y;return Ot(new DOMRect(n.pageX-window.scrollX-r/2,n.pageY-window.scrollY-i/2,r,i))}function Tt(e,t=K(e)){return Et(e,t)??Dt(e,t)}function Et(e,t){if(e.kind!==`region`||!e.anchor.selector)return null;let n=v(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 W(e){let t=G(e);return kt(new DOMRect(t.pageX-window.scrollX-7,t.pageY-window.scrollY-7,14,14))}function Dt(e,t=K(e)){let n=G(e,t);return{pageX:n.pageX+n.width/2,pageY:n.pageY+n.height/2}}function G(e,t=K(e)){let n=e.region,r=Y(n.viewportX,n.pageX),i=Y(n.viewportY,n.pageY),a=Y(n.pageX,window.scrollX+r),o=Y(n.pageY,window.scrollY+i),s=a-r,c=o-i;return{pageX:s+r*t.x,pageY:c+i*t.y,width:J(n.width)*t.x,height:J(n.height)*t.y}}function K(e){let t=q(window.innerWidth,1),n=q(window.innerHeight,1),r=q(e.region.viewportWidth,t),i=q(e.region.viewportHeight,n);return{x:t/r,y:n/i}}function Ot(e){let t=At(),n=Z(Y(e.left,t.left),t.left,t.right),r=Z(Y(e.top,t.top),t.top,t.bottom),i=Z(Y(e.right,n),t.left,t.right),a=Z(Y(e.bottom,r),t.top,t.bottom);return new DOMRect(n,r,Math.max(0,i-n),Math.max(0,a-r))}function kt(e){let t=At(),n=Math.min(J(e.width),t.width),r=Math.min(J(e.height),t.height);return new DOMRect(Z(Y(e.left,t.left),t.left,t.right-n),Z(Y(e.top,t.top),t.top,t.bottom-r),n,r)}function At(){let e=window.visualViewport;return new DOMRect(Y(e?.offsetLeft,0),Y(e?.offsetTop,0),q(e?.width,window.innerWidth),q(e?.height,window.innerHeight))}function q(e,t){return Number.isFinite(e)&&(e??0)>0?e:Math.max(Number.isFinite(t)?t:1,1)}function J(e){return Number.isFinite(e)?Math.max(0,e):0}function Y(e,t){return Number.isFinite(e)?e:Number.isFinite(t)?t:0}function X(e){return Lt(e).designMode===`on`||e.composedPath().some(e=>{let t=Rt(e);return t?jt(t):!1})}function jt(e){let t=e.tagName.toLowerCase();return t===`input`||t===`textarea`||t===`select`||`isContentEditable`in e&&!!e.isContentEditable||ht.has(e.getAttribute(`role`)??``)}function Mt(e){let t=e.composedPath().map(Rt).find(Boolean)??null;return!t||t===t.ownerDocument.documentElement||t===t.ownerDocument.body||w(t)?null:t}function Nt(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 Pt(e,t){let n=e,r=new Set;for(;n&&!r.has(n);){r.add(n),t.add(n);let e=n.getRootNode();if(d(e)){n=e.host;continue}if(f(e)&&e!==document){try{n=e.defaultView?.frameElement??null}catch{n=null}continue}n=null}}function Ft(e){let t=Lt(e).defaultView?.getSelection();return!!(t&&!t.isCollapsed&&t.toString().length>0)}function It(e){let t=e.clientX,n=e.clientY,r=Lt(e);for(;r!==document;){let e=null;try{e=r.defaultView?.frameElement??null}catch{break}if(!e)break;let i=e.getBoundingClientRect(),a=e,o=u(a);t=i.left+(a.clientLeft+t)*o.x,n=i.top+(a.clientTop+n)*o.y,r=e.ownerDocument}return{clientX:t,clientY:n}}function Lt(e){for(let t of e.composedPath()){if(zt(t))return t;let e=Rt(t);if(e)return e.ownerDocument}return document}function Rt(e){return e&&`nodeType`in e&&e.nodeType===1?e:null}function zt(e){return`nodeType`in e&&e.nodeType===9}function Bt(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 Vt(e){return e===`all`||e===`open`||e===`resolved`}function Z(e,t,n){return Math.min(n,Math.max(t,e))}function Ht(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 Q(){return new Promise(e=>{if(typeof window.requestAnimationFrame==`function`){window.requestAnimationFrame(()=>e());return}queueMicrotask(e)})}function Ut(e,t){return{value:e.style.getPropertyValue(t),priority:e.style.getPropertyPriority(t)}}function $(e,t,n){n.value?e.style.setProperty(t,n.value,n.priority):e.style.removeProperty(t)}function Wt(){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{pt as REVIEW_REAUTHENTICATION_REQUIRED_EVENT,L as REVIEW_WIDGET_TAG,gt as ReviewWidgetElement,vt as isStagingLocation,_t as mountReviewWidget};