@01.works/visual-review 0.9.3 → 0.9.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,1467 +0,0 @@
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=m(e);t&&!r.has(t)&&n.push(t);let i=h(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`?m(r):h(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=g(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){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 m(e){try{return e.shadowRoot}catch{return null}}function h(e){if(e.tagName.toLowerCase()!==`iframe`)return null;try{return e.contentDocument}catch{return null}}function g(e){try{let t=e.frameElement;return t&&`clientLeft`in t?t:null}catch{return null}}function _(e){return typeof CSS<`u`&&CSS.escape?CSS.escape(e):e.replace(/([^\w-])/g,`\\$1`)}function v(e){let t=S(e),r=y(e,t);if(t===document)return r;let i=[];for(;t!==document;){if(d(t)){let e=t.host,n=S(e);i.unshift({kind:`shadow`,selector:y(e,n)}),t=n;continue}let e=C(t);if(!e)return r;let n=S(e);i.unshift({kind:`frame`,selector:y(e,n)}),t=n}let a=n(i,r);return a.length<=4096?a:r}function y(e,t){let n=[],r=e,i=e.ownerDocument;for(;r&&r!==i.documentElement;){if(r===i.body){n.unshift(`body`);break}let e=x(r,t);if(e){n.unshift(e);break}let a=r.tagName.toLowerCase(),o=r.parentElement,s=o??b(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 b(e){let t=e.parentNode;return t&&`children`in t?t:null}function x(e,t){return[e.id?`#${_(e.id)}`:null,w(e,`data-review-id`),w(e,`data-testid`),w(e,`data-id`)].find(e=>{if(!e)return!1;try{return t.querySelectorAll(e).length===1}catch{return!1}})??null}function S(e){let t=e.getRootNode();return f(t)||d(t)?t:e.ownerDocument}function C(e){try{return e.defaultView?.frameElement??null}catch{return null}}function w(e,t){let n=e.getAttribute(t);return n?`[${t}="${_(n)}"]`:null}function T(e){if(!ee(e))return!1;let t=E(e);for(;t;){if(!ee(t))return!1;t=E(t)}let n=l(e);return n.width>0&&n.height>0&&e.getClientRects().length>0}function ee(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 E(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 D(e){if(!e.selector)return[];if(r(e.selector))return a(e.selector).filter(e=>!p(e));try{let t=Array.from(document.querySelectorAll(e.selector)).filter(e=>!p(e));if(t.length>0)return t}catch{return[]}return a(e.selector).filter(e=>!p(e))}function O(e,t,n){let r=l(e),i=Math.max(r.width,1),a=Math.max(r.height,1);return{selector:v(e),offsetX:j((t-(r.left+window.scrollX))/i),offsetY:j((n-(r.top+window.scrollY))/a),viewportX:j((t-window.scrollX)/Math.max(window.innerWidth,1)),viewportY:j((n-window.scrollY)/Math.max(window.innerHeight,1))}}function k(e,t){return{selector:``,offsetX:j(e),offsetY:j(t),viewportX:j(e),viewportY:j(t)}}function A(e){let t=D(e),n=t.find(T)??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:T(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 j(e){return Math.min(1,Math.max(0,Number.isFinite(e)?e:0))}let M=null,N=null;function te(e){F(e).catch(()=>void 0)}function P(){return M}function F(e){if(M)return Promise.resolve(M);if(N)return N;let t=ne(e);return N=t,t.catch(()=>{N===t&&(N=null)}),t}async function ne(e){let t=re(e);try{let e=await import(`./primitives-lxsPH8SN.js`);return M=e,e}finally{t()}}function re(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())}function ie(e){te(e)}function ae(e,t){let n=P();if(!n)return se(e,t);try{let r=n.getElementAtPoint(e,t,{filter:e=>n.isElementGrabbable(e)&&!p(e)});return r?ce(r,e,t):null}catch{return se(e,t)}}function I(e){if(e.ownerDocument!==document)return l(e);let t=P();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 oe(e){te(e);let t=P();if(!t)return()=>void 0;let n=!1;try{if(!t.isFreezeActive()){let r=re(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 se(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=>!p(e))??null;return n?ce(n,e,t):null}function ce(e,t,n){let r=e,i=t,a=n,o=new Set;for(;!o.has(r);){o.add(r);let e=le(r,i,a);if(e&&e!==r&&!p(e)){r=e;continue}let t=ue(r,i,a);if(!t)break;r=t.element,i=t.clientX,a=t.clientY}return r}function le(e,t,n){try{return e.shadowRoot?.elementFromPoint(t,n)??null}catch{return null}}function ue(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&&!p(l)?{element:l,clientX:s,clientY:c}:null}catch{return null}}const de=Symbol(`source-resolution-stopped`);function fe(e,t){let n=I(e),r=O(e,t.clientX+window.scrollX,t.clientY+window.scrollY),i=Ne(n);return we(r,`element`,i,[je(e,i)])}function pe(e){let t=ae(e.clientX,e.clientY);return t?fe(t,e):we(k(e.clientX/Math.max(window.innerWidth,1),e.clientY/Math.max(window.innerHeight,1)),`viewport`,{pageX:e.clientX+window.scrollX,pageY:e.clientY+window.scrollY,width:0,height:0,viewportX:e.clientX,viewportY:e.clientY,viewportWidth:window.innerWidth,viewportHeight:window.innerHeight},[])}function me(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=ve(he(o),_e(o)).slice(0,8),c={clientX:n+i/2,clientY:r+a/2},u=s[0];return we(u?O(u,c.clientX+window.scrollX,c.clientY+window.scrollY):k(c.clientX/Math.max(window.innerWidth,1),c.clientY/Math.max(window.innerHeight,1)),`region`,Ne(o),s.map(e=>je(e,Ne(l(e)))))}function he(e){let t=a(`*`).filter(t=>t===t.ownerDocument.body||t===t.ownerDocument.documentElement||p(t)||!T(t)?!1:Pe(e,l(t))),n=new Set(t),r=new Set;return t.forEach(e=>{let t=ge(e);for(;t;)n.has(t)&&r.add(t),t=ge(t)}),t.filter(e=>!r.has(e))}function ge(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 _e(e){return{clientX:e.left+e.width/2,clientY:e.top+e.height/2}}function ve(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 ye(e,t,n={}){if(n.signal?.aborted)return xe(e,t);let r=be(n),i=e.elements.map(async e=>{let n=Fe(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!==de?t.value.context:e.elements[n]),o=Ce(n.flatMap(e=>e.status===`fulfilled`&&e.value!==de&&e.value.provenance?[{located:e.value.context.source!==null,provenance:e.value.provenance}]:[]))??e.sourceProvenance??Se(t);return{...e,elements:a,...o?{sourceProvenance:o}:{}}}finally{r.dispose()}}function be(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(de);return}t.signal.addEventListener(`abort`,()=>e(de),{once:!0})});return{signal:t.signal,stopped:o,dispose(){clearTimeout(a),n?.removeEventListener(`abort`,r)}}}function xe(e,t){let n=e.sourceProvenance??Se(t);return{...e,...n?{sourceProvenance:n}:{}}}function Se(e){try{return e.unavailableProvenance?.()}catch{return}}function Ce(e){return(e.find(e=>e.located)??e[0])?.provenance}function we(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(),environment:Te()}}function Te(){let e=navigator.userAgent,t=Math.max(1,window.innerWidth),n=navigator.maxTouchPoints,r=Ae(window.screen?.width,t),i=Ae(window.screen?.height,Math.max(1,window.innerHeight));return{browser:Ee(e),operatingSystem:De(e,navigator.platform,n),deviceType:Oe(e,navigator.platform,t,n),screenWidth:r,screenHeight:i,devicePixelRatio:Ae(window.devicePixelRatio,1)}}function Ee(e){let t=(e.match(/(?:Edg|Edge)\/([\d.]+)/)??e.match(/OPR\/([\d.]+)/)??e.match(/(?:Chrome|CriOS)\/([\d.]+)/)??e.match(/(?:Firefox|FxiOS)\/([\d.]+)/)??e.match(/Version\/([\d.]+).*Safari\//))?.[1]?.split(`.`)[0],n=/(?:Edg|Edge)\//.test(e)?`Edge`:/OPR\//.test(e)?`Opera`:/(?:Chrome|CriOS)\//.test(e)?`Chrome`:/(?:Firefox|FxiOS)\//.test(e)?`Firefox`:/Safari\//.test(e)?`Safari`:`알 수 없는 브라우저`;return t?`${n} ${t}`:n}function De(e,t,n){return ke(e,t,n)?`iPadOS`:/iPhone|iPod/.test(e)?`iOS`:/Android/.test(e)?`Android`:/CrOS/.test(e)?`ChromeOS`:/Windows/.test(e)?`Windows`:/Mac OS X|Macintosh/.test(e)||/Mac/.test(t)?`macOS`:/Linux/.test(e)||/Linux/.test(t)?`Linux`:`알 수 없는 OS`}function Oe(e,t,n,r){return ke(e,t,r)?`tablet`:/Mobi|iPhone|iPod|Android.*Mobile/.test(e)?`mobile`:/iPad|Tablet|Android/.test(e)||r>1&&n<=1024?`tablet`:`desktop`}function ke(e,t,n){return/iPad/.test(e)||t===`MacIntel`&&n>1}function Ae(e,t){return typeof e==`number`&&Number.isFinite(e)&&e>0?e:t}function je(e,t){return{selector:v(e),tagName:e.tagName.toLowerCase(),textPreview:Me(e),rect:t,source:null,componentStack:[]}}function Me(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 Ne(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 Pe(e,t){return e.left<t.right&&e.right>t.left&&e.top<t.bottom&&e.bottom>t.top}function Fe(e){return e?D({selector:e,offsetX:0,offsetY:0,viewportX:0,viewportY:0})[0]??null:null}function Ie(e){let t,n=!1,r={pageId:e.pageId,peers:[],messages:[]},i,a,o=!1,s=``,c=``,l,u=e.cursors||e.chat,d={x:Math.max(24,window.innerWidth-180),y:Math.max(24,window.innerHeight-96)},f=L(`rg-collaboration-cursors`);f.setAttribute(`aria-hidden`,`true`);let p=L(`rg-cursor-chat-announcements`);p.setAttribute(`role`,`log`),p.setAttribute(`aria-live`,`polite`),p.setAttribute(`aria-relevant`,`additions`);let m=new Map,h=L(`rg-collaboration-participants`);h.setAttribute(`role`,`status`);let g=L(`rg-cursor-chat-composer`);g.hidden=!0,g.setAttribute(`role`,`dialog`),g.setAttribute(`aria-label`,`커서 채팅`),g.style.setProperty(`--rg-local-color`,Be(e.session.reviewerId));let _=L(`rg-cursor-chat-header`),v=document.createElement(`strong`);v.textContent=e.session.displayName;let y=document.createElement(`span`);y.textContent=`Enter 전송 · 바깥 클릭 닫기`,_.append(v,y);let b=L(`rg-cursor-chat-preview`);b.hidden=!0;let x=document.createElement(`input`);x.className=`rg-cursor-chat-input`,x.type=`text`,x.maxLength=280,x.placeholder=`메시지 입력…`,x.setAttribute(`aria-label`,`커서 채팅 메시지`),g.append(_,b,x);let S=document.createElement(`button`);S.className=`rg-cursor-chat-mobile-trigger`,S.type=`button`,S.setAttribute(`aria-label`,`커서 채팅 시작`),S.title=`커서 채팅`,S.textContent=`채팅`;let C=()=>{Re(h,r.peers,e.session.displayName),u&&ze(f,r.peers),e.chat&&Le(p,m,r.peers)},w=()=>(s.trim()||c).slice(0,280),T=()=>{b.textContent=c,b.hidden=!c,g.dataset.hasMessage=String(!!c);let e=Math.min(260,Math.max(180,window.innerWidth-24)),t=d.x>window.innerWidth/2,n=d.y>window.innerHeight/2,r=He(t?d.x-e-14:d.x+14,12,Math.max(12,window.innerWidth-e-12)),i=c?118:84,a=He(n?d.y-i-14:d.y+18,12,Math.max(12,window.innerHeight-i-12));g.dataset.horizontal=t?`left`:`right`,g.dataset.vertical=n?`above`:`below`,g.style.left=`${r}px`,g.style.top=`${a}px`},ee=()=>{l!==void 0&&window.clearTimeout(l),l=window.setTimeout(()=>{l=void 0,!s.trim()&&(c=``,T(),D(O()))},5e3)},E=e=>{o=e,g.hidden=!e,e?(T(),D(O()),queueMicrotask(()=>x.focus())):(l!==void 0&&(window.clearTimeout(l),l=void 0),s=``,c=``,x.value=``,D(O()),x.blur())};x.addEventListener(`input`,()=>{s=x.value,s.trim()&&(c=``),T(),D(O())}),x.addEventListener(`keydown`,e=>{if(e.key===`Escape`){e.preventDefault(),E(!1);return}if(e.key!==`Enter`||e.isComposing)return;e.preventDefault();let t=s.trim();t&&(c=t,s=``,x.value=``,T(),D(O()),ee(),x.focus())});let D=t=>{!u||n||e.repository.publishPresence(e.pageId,e.roomId,{...t,cursorChat:w()})},O=()=>({reviewerId:e.session.reviewerId,displayName:e.session.displayName,color:Be(e.session.reviewerId),active:!0,pathname:e.pathname,cursorX:d.x,cursorY:d.y,viewportWidth:window.innerWidth,viewportHeight:window.innerHeight}),k=()=>({reviewerId:e.session.reviewerId,displayName:e.session.displayName,color:Be(e.session.reviewerId),active:!1,pathname:e.pathname}),A=t=>{t.pointerType===`touch`||t.composedPath().includes(e.root.host)||(d.x=t.clientX,d.y=t.clientY,o&&T(),a=t,i===void 0&&(i=window.requestAnimationFrame(()=>{i=void 0;let e=a;a=void 0,e&&D({...O(),cursorX:e.clientX,cursorY:e.clientY})})))},j=()=>{document.visibilityState!==`visible`&&(o&&E(!1),D(k()))},M=()=>D(k()),N=e=>{!o||e.composedPath().includes(g)||E(!1)},te=()=>{o&&queueMicrotask(()=>{!o||g.contains(e.root.activeElement)||E(!1)})},P=t=>{t.key!==`/`||t.defaultPrevented||t.repeat||t.isComposing||t.metaKey||t.ctrlKey||t.altKey||o||Ve(t)||e.canOpenChat?.()===!1||(t.preventDefault(),E(!0))},F=e=>{e instanceof KeyboardEvent&&P(e)};return{start(){if(n)return;let i=e.root.querySelector(`.rg-toolbar-actions`);u&&i?.append(h),e.chat&&(i?.append(S),e.root.append(g,p),S.addEventListener(`click`,()=>E(!0)),e.root.addEventListener(`keydown`,F,!0),document.addEventListener(`keydown`,P),document.addEventListener(`pointerdown`,N,!0),g.addEventListener(`focusout`,te)),u&&(e.root.prepend(f),document.addEventListener(`pointermove`,A,{passive:!0}),document.addEventListener(`pointerleave`,M),document.addEventListener(`visibilitychange`,j)),t=e.repository.subscribe(e.pageId,{roomId:e.roomId,cursors:u,chat:!1},e=>{r=e,C()},e.onFailure),D(k()),C()},stop(){n||(n=!0,i!==void 0&&window.cancelAnimationFrame(i),l!==void 0&&window.clearTimeout(l),document.removeEventListener(`pointermove`,A),document.removeEventListener(`pointerleave`,M),document.removeEventListener(`visibilitychange`,j),e.root.removeEventListener(`keydown`,F,!0),document.removeEventListener(`keydown`,P),document.removeEventListener(`pointerdown`,N,!0),g.removeEventListener(`focusout`,te),t?.(),f.remove(),h.remove(),S.remove(),g.remove(),p.remove())}}}function Le(e,t,n){let r=new Set(n.map(({peerId:e})=>e));for(let e of t.keys())r.has(e)||t.delete(e);for(let r of n){let n=r.cursorChat?.trim()??``,i=t.get(r.peerId)??``;if(!n||n===i){t.set(r.peerId,n);continue}t.set(r.peerId,n);let a=L(`rg-cursor-chat-announcement`);for(a.textContent=`${r.displayName}, ${r.pathname||`/`}: ${n}`,e.append(a);e.childElementCount>20;)e.firstElementChild?.remove()}}function Re(e,t,n){let r=[n,...t.map(({displayName:e})=>e)];e.hidden=r.length<2,e.textContent=r.length<2?``:`${r.length}명`,e.title=r.join(`, `)}function ze(e,t){e.replaceChildren();for(let n of t){if(!n.active||n.cursorX===void 0||n.cursorY===void 0||!n.viewportWidth||!n.viewportHeight)continue;let t=L(`rg-collaboration-cursor`);t.style.setProperty(`--rg-peer-color`,n.color);let r=n.cursorX/n.viewportWidth*window.innerWidth,i=n.cursorY/n.viewportHeight*window.innerHeight;t.style.left=`${He(r,0,window.innerWidth)}px`,t.style.top=`${He(i,0,window.innerHeight)}px`,t.dataset.horizontal=r>window.innerWidth/2?`left`:`right`,t.dataset.vertical=i>window.innerHeight/2?`above`:`below`;let a=L(`rg-collaboration-cursor-pointer`),o=L(`rg-collaboration-cursor-label`);if(o.textContent=n.displayName,t.append(a,o),n.cursorChat){let e=L(`rg-collaboration-cursor-chat`),r=L(`rg-collaboration-cursor-chat-page`);r.textContent=n.pathname||`/`;let i=L(`rg-collaboration-cursor-chat-body`);i.textContent=n.cursorChat,e.append(r,i),t.append(e)}e.append(t)}}function Be(e){let t=[`#7c3aed`,`#2563eb`,`#0891b2`,`#059669`,`#ca8a04`,`#ea580c`,`#dc2626`],n=0;for(let t of e)n=(n<<5)-n+t.charCodeAt(0)|0;return t[Math.abs(n)%t.length]}function Ve(e){let t=e.composedPath()[0];return t instanceof Element&&t.closest(`input, textarea, select, [contenteditable]:not([contenteditable="false"]), [role="textbox"]`)!==null}function L(e){let t=document.createElement(`div`);return t.className=e,t}function He(e,t,n){return Math.min(n,Math.max(t,e))}function Ue(e={}){let t=document.createElement(`div`);t.className=`rg-toolbar`,t.setAttribute(`role`,`toolbar`),t.setAttribute(`aria-label`,`Visual Review`);let n=B(`rg-toolbar-actions-shell`),r=B(`rg-toolbar-actions`);e.developerGrab&&r.append(We());let i=B(`rg-action-wrap`),a=Qe(`rg-action rg-feedback-tool`,`피드백 위치 선택`);a.setAttribute(`aria-pressed`,`false`),a.append(Je());let o=document.createElement(`span`);o.className=`rg-tooltip`,o.setAttribute(`aria-hidden`,`true`),o.textContent=`피드백`,i.append(a,o),r.append(i),n.append(r);let s=Qe(`rg-collapse`,`Visual Review 접기`);if(s.setAttribute(`aria-expanded`,`true`),s.append(Xe()),t.append(n,s),e.developerGrab){let e=B(`rg-developer-status`);e.dataset.visible=`false`,e.dataset.tone=`neutral`,e.setAttribute(`aria-hidden`,`true`),t.append(e)}return t}function We(){let e=B(`rg-action-wrap`),t=Qe(`rg-action rg-developer-grab-tool`,`React Grab 코드 선택`);t.setAttribute(`aria-keyshortcuts`,`Meta+C Control+C`),t.setAttribute(`aria-pressed`,`false`),t.append(Ye());let n=document.createElement(`span`);return n.className=`rg-tooltip`,n.setAttribute(`aria-hidden`,`true`),n.textContent=`코드 선택 · ⌘/Ctrl+C 길게`,e.append(t,n),e}function 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=R(`0 0 16 8`,[z(`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=B(`rg-surface`),o=B(`rg-tag-row`),s=document.createElement(`span`);s.className=`rg-tag`,s.textContent=e,o.append(s);let c=B(`rg-bottom-section`),l=document.createElement(`textarea`);l.setAttribute(`aria-keyshortcuts`,`Meta+Enter Control+Enter Escape`),l.maxLength=4e3,l.rows=1,l.placeholder=t,l.setAttribute(`aria-label`,n);let u=Qe(`rg-submit`,`피드백 저장`);return u.title=`저장 (⌘/Ctrl+Enter)`,u.append(Ze()),c.append(l,u),a.append(o,c),r.append(i,a),r}function Ke(){return R(`0 0 12 12`,[z(`M2.47 1.76a.5.5 0 0 0-.71.71L5.29 6 1.76 9.53a.5.5 0 0 0 .71.71L6 6.71l3.53 3.53a.5.5 0 0 0 .71-.71L6.71 6l3.53-3.53a.5.5 0 0 0-.71-.71L6 5.29 2.47 1.76Z`)])}function qe(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=$e(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=$e(c-(l-n.width/2),16,n.width-16);e.style.setProperty(`--rg-arrow-left`,`${f}px`)})}function Je(){return R(`0 0 12 12`,[z(`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 Ye(){return R(`0 0 12 12`,[z(`M4.25 2 1.5 6l2.75 4M7.75 2l2.75 4-2.75 4`,{fill:`none`,stroke:`currentColor`,"stroke-width":`1.25`,"stroke-linecap":`round`,"stroke-linejoin":`round`})])}function Xe(){return R(`0 0 24 24`,[z(`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 Ze(){return R(`0 0 24 24`,[z(`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 R(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 z(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 B(e){let t=document.createElement(`div`);return t.className=e,t}function Qe(e,t){let n=document.createElement(`button`);return n.type=`button`,n.className=e,n.setAttribute(`aria-label`,t),n}function $e(e,t,n){return Math.min(n,Math.max(t,e))}const et={width:106,height:30};function tt(e,t){return`agency-review:toolbar:v1:${encodeURIComponent(e)}:${encodeURIComponent(t)}`}function nt(e){switch(e){case`top-left`:return{edge:`top`,ratio:0};case`top`:return{edge:`top`,ratio:.5};case`top-right`:return{edge:`top`,ratio:1};case`right`:return{edge:`right`,ratio:.5};case`bottom`:return{edge:`bottom`,ratio:.5};case`bottom-left`:return{edge:`bottom`,ratio:0};case`left`:return{edge:`left`,ratio:.5};default:return{edge:`bottom`,ratio:1}}}function rt(e,t,n,r,i,a=16){let o=i.offsetLeft+a,s=Math.max(o,i.offsetLeft+i.width-n-a),c=i.offsetTop+a,l=Math.max(c,i.offsetTop+i.height-r-a),u=U(t,0,1);return e===`top`||e===`bottom`?{x:o+(s-o)*u,y:e===`top`?c:l}:{x:e===`left`?o:s,y:c+(l-c)*u}}function it(e,t,n,r,i){if(e===`top`||e===`bottom`){let e=i.width-n-32;return e<=0?.5:U((t.x-i.offsetLeft-16)/e,0,1)}let a=i.height-r-32;return a<=0?.5:U((t.y-i.offsetTop-16)/a,0,1)}function at(e,t,n,r,i){let a=e.x+r.x*150,o=e.y+r.y*150,s={top:o-i.offsetTop+n/2,bottom:i.offsetTop+i.height-o-n/2,left:a-i.offsetLeft+t/2,right:i.offsetLeft+i.width-a-t/2},c=Object.entries(s).reduce((e,t)=>t[1]<e[1]?t:e)[0],l=i.offsetLeft+16,u=Math.max(l,i.offsetLeft+i.width-t-16),d=i.offsetTop+16,f=Math.max(d,i.offsetTop+i.height-n-16);return{edge:c,x:c===`left`?l:c===`right`?u:U(a,l,u),y:c===`top`?d:c===`bottom`?f:U(o,d,f)}}function ot(e,t,n,r,i){if(e===`top`||e===`bottom`){let a=t.x+(n.width-r.width)/2,o=i.offsetLeft;return{x:U(a,o,Math.max(o,i.offsetLeft+i.width-r.width)),y:e===`top`?i.offsetTop:i.offsetTop+i.height-r.height}}let a=t.y+(n.height-r.height)/2,o=i.offsetTop,s=Math.max(o,i.offsetTop+i.height-r.height);return{x:e===`left`?i.offsetLeft:i.offsetLeft+i.width-r.width,y:U(a,o,s)}}function st(e,t,n,r,i){if(e===`top`||e===`bottom`){let a=t.x-(n.width-r.width)/2,o=i.offsetLeft+16;return{x:U(a,o,Math.max(o,i.offsetLeft+i.width-n.width-16)),y:e===`top`?i.offsetTop+16:i.offsetTop+i.height-n.height-16}}let a=t.y-(n.height-r.height)/2,o=i.offsetTop+16,s=Math.max(o,i.offsetTop+i.height-n.height-16);return{x:e===`left`?i.offsetLeft+16:i.offsetLeft+i.width-n.width-16,y:U(a,o,s)}}function ct(e,t){let n=e.dataset.collapsed!==String(t),r=n?e.getBoundingClientRect():null,i=e.dataset.collapseAnimating===`true`;e.style.setProperty(`--rg-collapse-duration`,`${t?140:220}ms`),e.dataset.collapsed=String(t);let a=e.querySelector(`.rg-toolbar-actions-shell`);a&&(a.inert=t,a.setAttribute(`aria-hidden`,String(t)));let o=e.querySelector(`.rg-collapse`);o?.setAttribute(`aria-expanded`,String(!t)),o?.setAttribute(`aria-label`,t?`Visual Review 펼치기`:`Visual Review 접기`),n&&e.dispatchEvent(new CustomEvent(`review-dock-collapse`,{detail:{collapsed:t,previousRect:r,wasAnimating:i}}))}function lt(e){let{toolbar:t,offset:n,storageKey:r,signal:i}=e,a=nt(e.position),o=mt(r),s=o?.edge??a.edge,c=o?.ratio??a.ratio,l=o!==null,u=!1,d=!1,f=!1,p={x:0,y:0},m={x:0,y:0},h={x:0,y:0},g={x:0,y:0,time:0},_=!1,v=null,y=null,b=null,x=null,S=!1;t.dataset.dockManaged=`true`,t.dataset.dockEdge=s,l&&(t.dataset.position=s),ct(t,o?.collapsed??!1);let C=t.getBoundingClientRect(),w=t.dataset.collapsed===`false`&&H(C)?V(C):pt(t,s),T=t.dataset.collapsed===`true`&&H(C)?V(C):ft(s),ee=e=>{let t=rt(s,c,w.width,w.height,e);return{x:t.x+(l?0:n.x),y:t.y+(l?0:n.y)}},E=()=>{let e=ut(),n=ee(e),r=t.dataset.collapsed===`true`;dt(t,r?ot(s,n,w,T,e):n)},D=()=>{_||(_=!0,queueMicrotask(()=>{_=!1,S||E()}))},O=()=>{ht(r,{version:1,edge:s,ratio:c,collapsed:t.dataset.collapsed===`true`})},k=()=>{x?.abort(),x=null},A=n=>{if(!d){if(Math.hypot(n.clientX-m.x,n.clientY-m.y)<=5)return;d=!0,t.dataset.dragging=`true`,e.onDragStart?.()}n.preventDefault();let r=performance.now(),i=r-g.time;i>0&&(h={x:(n.clientX-g.x)/i,y:(n.clientY-g.y)/i}),g={x:n.clientX,y:n.clientY,time:r},dt(t,{x:n.clientX-p.x,y:n.clientY-p.y})},j=()=>{if(k(),u=!1,delete t.dataset.dragging,!d)return;f=!0;let e=t.getBoundingClientRect(),n=ut(),r=at({x:e.left,y:e.top},e.width,e.height,h,n);s=r.edge,c=it(s,r,e.width,e.height,n),l=!0,t.dataset.dockEdge=s,t.dataset.position=s,t.dataset.snapping=`true`,v!==null&&window.cancelAnimationFrame(v),v=window.requestAnimationFrame(()=>{v=window.requestAnimationFrame(()=>{v=null;let e=t.getBoundingClientRect();H(e)&&(w=V(e)),E(),O(),y!==null&&window.clearTimeout(y),y=window.setTimeout(()=>{y=null,delete t.dataset.snapping},300)})})},M=e=>{if(e.button!==0||t.dataset.collapsed===`true`||u)return;let n=t.getBoundingClientRect();u=!0,d=!1,h={x:0,y:0},m={x:e.clientX,y:e.clientY},p={x:e.clientX-n.left,y:e.clientY-n.top},g={x:e.clientX,y:e.clientY,time:performance.now()},k(),x=new AbortController;let r=x.signal;window.addEventListener(`pointermove`,A,{capture:!0,signal:r}),window.addEventListener(`pointerup`,j,{capture:!0,signal:r}),window.addEventListener(`pointercancel`,j,{capture:!0,signal:r})},N=e=>{f&&(f=!1,e.preventDefault(),e.stopImmediatePropagation())},te=e=>{let n=e.detail,r=n?.collapsed??t.dataset.collapsed===`true`,i=n?.previousRect,a=!n?.wasAnimating,o=ut();if(a&&i&&H(i)&&(r?w=V(i):T=V(i)),t.dataset.collapseAnimating=`true`,r){let e=a&&i&&H(i)?{x:i.left,y:i.top}:ee(o);dt(t,ot(s,e,w,T,o))}else{let e=a&&i&&H(i)?{x:i.left,y:i.top}:ot(s,ee(o),w,T,o);dt(t,st(s,e,w,T,o))}O(),b!==null&&window.clearTimeout(b),b=window.setTimeout(()=>{b=null,delete t.dataset.collapseAnimating;let e=t.getBoundingClientRect();H(e)&&(r?T=V(e):w=V(e))},r?140:220)},P=()=>D();t.addEventListener(`pointerdown`,M,{signal:i}),t.addEventListener(`click`,N,{capture:!0,signal:i}),t.addEventListener(`review-dock-collapse`,te,{signal:i}),window.addEventListener(`resize`,P,{passive:!0,signal:i}),window.visualViewport?.addEventListener(`resize`,P,{passive:!0,signal:i}),window.visualViewport?.addEventListener(`scroll`,P,{passive:!0,signal:i}),D();let F=()=>{S=!0,k(),v!==null&&window.cancelAnimationFrame(v),y!==null&&window.clearTimeout(y),b!==null&&window.clearTimeout(b),v=null,y=null,b=null};return i.addEventListener(`abort`,F,{once:!0}),F}function ut(){let e=window.visualViewport;return{offsetLeft:e?.offsetLeft??0,offsetTop:e?.offsetTop??0,width:e?.width??window.innerWidth,height:e?.height??window.innerHeight}}function dt(e,t){e.style.top=`${t.y}px`,e.style.right=`auto`,e.style.bottom=`auto`,e.style.left=`${t.x}px`,e.style.translate=`none`}function ft(e){return e===`top`||e===`bottom`?{width:32,height:28}:{width:28,height:32}}function V(e){return{width:e.width,height:e.height}}function H(e){return e.width>0&&e.height>0}function pt(e,t){let n=e.parentElement,r=t===`left`||t===`right`?{width:et.height,height:et.width}:et;if(!n)return r;let i=e.cloneNode(!0);i.dataset.collapsed=`false`,i.dataset.dockEdge=t,delete i.dataset.collapseAnimating,delete i.dataset.snapping,i.style.setProperty(`visibility`,`hidden`),i.style.setProperty(`pointer-events`,`none`),i.style.setProperty(`transition`,`none`,`important`),i.style.setProperty(`top`,`-10000px`),i.style.setProperty(`right`,`auto`),i.style.setProperty(`bottom`,`auto`),i.style.setProperty(`left`,`-10000px`),i.style.setProperty(`translate`,`none`);for(let e of i.querySelectorAll(`*`))e.style.setProperty(`transition`,`none`,`important`);n.append(i);let a=i.getBoundingClientRect();return i.remove(),H(a)?V(a):r}function mt(e){try{let t=window.localStorage.getItem(e);if(!t)return null;let n=JSON.parse(t);return n.version!==1||!gt(n.edge)||typeof n.ratio!=`number`||!Number.isFinite(n.ratio)||typeof n.collapsed!=`boolean`?null:{version:1,edge:n.edge,ratio:U(n.ratio,0,1),collapsed:n.collapsed}}catch{return null}}function ht(e,t){try{window.localStorage.setItem(e,JSON.stringify(t))}catch{}}function gt(e){return e===`top`||e===`right`||e===`bottom`||e===`left`}function U(e,t,n){return Math.min(n,Math.max(t,e))}async function _t(e){let t=window.__REACT_GRAB__;if(yt(t))return vt(t);let n=await F(e);return{async copyElement(e){let t=Array.isArray(e)?e:[e],r=(await Promise.allSettled(t.map(e=>n.getElementContext(e)))).flatMap(e=>e.status===`fulfilled`&&e.value.snippet.trim().length>0?[e.value.snippet.trim()]:[]);return r.length!==0&&n.copyContent(r.join(`
2
-
3
- `))},dispose(){}}}function vt(e){return{copyElement:t=>e.copyElement(t),dispose(){}}}function yt(e){return typeof e==`object`&&!!e&&`copyElement`in e&&typeof e.copyElement==`function`}function bt(e,t=`all`){let n=[...e.comments].sort(St),r=new Map;for(let e of n){if(!xt(e.pageNumber))continue;let t=r.get(e.pageId);t||(t=new Set,r.set(e.pageId,t)),t.add(e.pageNumber)}let i=new Map,a=new Map;for(let e of n){let t=i.get(e.pageId);t||(t=new Set,i.set(e.pageId,t));let n=xt(e.pageNumber)&&!t.has(e.pageNumber)?e.pageNumber:void 0,o=n??1,s=r.get(e.pageId);for(;t.has(o)||n===void 0&&s?.has(o);)o+=1;t.add(o),a.set(e.id,o)}let o=new Map;for(let t of e.replies){if(!a.has(t.commentId))continue;let e=o.get(t.commentId);e?(e.replyCount+=1,e.lastReplyAt=Math.max(e.lastReplyAt,t.updatedAt)):o.set(t.commentId,{replyCount:1,lastReplyAt:t.updatedAt})}let s=n.map(e=>{let t=o.get(e.id);return{comment:e,pinNumber:a.get(e.id),replyCount:t?.replyCount??0,lastActivityAt:Math.max(e.updatedAt,t?.lastReplyAt??e.updatedAt)}}),c={all:s.length,open:s.filter(({comment:e})=>e.status===`open`).length,resolved:s.filter(({comment:e})=>e.status===`resolved`).length};return{rows:s.filter(({comment:e})=>t===`all`||e.status===t).sort(Ct),counts:c,pinNumberByCommentId:a}}function xt(e){return Number.isSafeInteger(e)&&(e??0)>=1}function St(e,t){return e.createdAt-t.createdAt||e.id.localeCompare(t.id)}function Ct(e,t){return t.lastActivityAt-e.lastActivityAt||t.comment.createdAt-e.comment.createdAt||e.comment.id.localeCompare(t.comment.id)}const wt=`visual-review-feedback-navigator`,Tt=[`current`,`all`],Et={current:`현재 페이지`,all:`전체 페이지`},Dt=[`all`,`open`,`resolved`],Ot={all:`전체`,open:`진행 중`,resolved:`완료`};function kt(e,t={}){let n=t.controlsId??wt,r=G(`rg-action-wrap`),i=document.createElement(`button`);i.type=`button`,i.className=`rg-action rg-feedback-list-tool`,i.dataset.feedbackNavigatorAction=`toggle`,i.setAttribute(`aria-controls`,n),i.setAttribute(`aria-expanded`,String(t.expanded??!1)),t.presentation===`sheet`&&i.setAttribute(`aria-haspopup`,`dialog`),i.setAttribute(`aria-label`,`피드백 목록, 총 ${K(e)}개`),i.append(Lt(),It(e));let a=document.createElement(`span`);return a.className=`rg-tooltip`,a.setAttribute(`aria-hidden`,`true`),a.textContent=`피드백 ${K(e)}개`,r.append(i,a),r}function At(e,t={}){let n=t.id??wt,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.dataset.scope=e.scope,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=G(`rg-feedback-navigator-header`),s=G(`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(K(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(Rt()),o.append(s,u);let d=G(`rg-feedback-navigator-content`);if(Ht(d,e),e.loadState!==`loading`&&e.loadState!==`error`&&(e.rows.length===0?d.append(Ut(e.scopeCounts.all===0,e.scope===`current`&&e.scopeCounts.current===0&&e.scopeCounts.all>0)):Nt(d,e)),a.append(o),e.scopeCounts.all>e.scopeCounts.current&&e.loadState!==`loading`&&e.loadState!==`error`){let t=G(`rg-feedback-scopes`);t.setAttribute(`role`,`group`),t.setAttribute(`aria-label`,`피드백 페이지 범위`);for(let n of Tt)t.append(jt(n,e.scopeCounts[n],e.scope===n));a.append(t)}if(e.counts.all>0&&e.loadState!==`loading`&&e.loadState!==`error`){let t=G(`rg-feedback-filters`);t.setAttribute(`role`,`group`),t.setAttribute(`aria-label`,`피드백 상태 필터`);for(let n of Dt)t.append(Mt(n,e.counts[n],e.filter===n));let n=document.createElement(`span`);n.className=`rg-feedback-sort-label`,n.textContent=`최근 활동순`,n.setAttribute(`aria-hidden`,`true`),t.append(n),a.append(t)}return a.append(d),a}function jt(e,t,n){let r=document.createElement(`button`);r.type=`button`,r.className=`rg-feedback-scope`,r.dataset.feedbackScope=e,r.dataset.feedbackNavigatorAction=`scope`,r.setAttribute(`aria-pressed`,String(n)),r.setAttribute(`aria-label`,`${Et[e]} 피드백 ${K(t)}개`);let i=document.createElement(`span`);i.textContent=Et[e];let a=document.createElement(`span`);return a.className=`rg-feedback-scope-count`,a.setAttribute(`aria-hidden`,`true`),a.textContent=String(K(t)),r.append(i,a),r}function Mt(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`,`${Ot[e]} 피드백 ${K(t)}개`);let i=document.createElement(`span`);i.className=`rg-feedback-filter-label`,i.textContent=Ot[e];let a=document.createElement(`span`);return a.className=`rg-feedback-filter-count`,a.setAttribute(`aria-hidden`,`true`),a.textContent=String(K(t)),r.append(i,a),r}function Nt(e,t){if(t.scope!==`all`){e.append(Pt(t.rows,t.activeCommentId,!1));return}let n=new Map;for(let e of t.rows){let t=n.get(e.pageId);t?t.push(e):n.set(e.pageId,[e])}let r=[...n.values()].sort((e,t)=>Number(!!t[0]?.currentPage)-Number(!!e[0]?.currentPage));for(let n of r){let r=document.createElement(`section`);r.className=`rg-feedback-page-group`,r.setAttribute(`role`,`group`),n[0]?.currentPage&&(r.dataset.currentPage=`true`);let i=G(`rg-feedback-page-heading`),a=document.createElement(`span`);a.className=`rg-feedback-page-label`,a.textContent=n[0]?.pageLabel?.trim()||`알 수 없는 페이지`;let o=document.createElement(`span`);o.className=`rg-feedback-page-count`,o.textContent=String(n.length),o.setAttribute(`aria-hidden`,`true`),i.append(a,o),r.setAttribute(`aria-label`,`${a.textContent} 피드백 ${n.length}개`),r.append(i,Pt(n,t.activeCommentId,!0)),e.append(r)}}function Pt(e,t,n){let r=document.createElement(`ul`);r.className=`rg-feedback-list`,r.setAttribute(`aria-label`,n?`페이지 피드백 목록`:`피드백 목록`);for(let i of e)r.append(Ft(i,t,{showPageLabel:!n}));return r}function Ft(e,t,n={}){let r=document.createElement(`li`);r.className=`rg-feedback-item`,r.dataset.commentId=e.id;let i=document.createElement(`button`);i.type=`button`,i.className=`rg-feedback-row`,i.dataset.commentId=e.id,i.dataset.feedbackNavigatorAction=`open-comment`,i.dataset.status=e.status,i.dataset.currentPage=String(e.currentPage===!0),i.dataset.locationAvailable=String(e.locationAvailable!==!1),e.id===t&&i.setAttribute(`aria-current`,`true`),i.setAttribute(`aria-label`,Wt(e));let a=document.createElement(`span`);a.className=`rg-feedback-row-pin`,a.setAttribute(`aria-hidden`,`true`),a.textContent=`#${Math.max(1,Math.trunc(e.pinNumber))}`;let o=G(`rg-feedback-row-copy`),s=document.createElement(`span`);s.className=`rg-feedback-row-body`,s.textContent=e.body;let c=n.showPageLabel!==!1;if(c&&e.pageLabel?.trim()||e.targetLabel?.trim()){let t=document.createElement(`span`);t.className=`rg-feedback-row-context`,e.pageUrl?.trim()&&(t.dataset.pageUrl=e.pageUrl.trim(),t.title=e.pageUrl.trim()),e.currentPage&&(t.dataset.currentPage=`true`);let n=c?e.pageLabel?.trim():void 0;if(n&&t.append(document.createTextNode(n)),n&&e.targetLabel?.trim()&&t.append(document.createTextNode(` · `)),e.targetLabel?.trim()){let n=document.createElement(`span`);n.className=`rg-feedback-row-target`,n.textContent=e.targetLabel.trim(),t.append(n)}o.append(t)}let l=G(`rg-feedback-row-detail`),u=document.createElement(`span`);u.className=`rg-feedback-row-meta`,u.textContent=`${e.authorName} · ${e.timeLabel}`;let d=G(`rg-feedback-row-trailing`);if(!e.currentPage){let e=document.createElement(`span`);e.className=`rg-feedback-row-move`,e.setAttribute(`aria-hidden`,`true`),e.title=`이 페이지로 이동`;let t=document.createElement(`span`);t.textContent=`이동`,e.append(t,Vt()),d.append(e)}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(zt()),d.append(e)}if(e.replyCount>0){let t=document.createElement(`span`);t.className=`rg-feedback-row-replies`,t.setAttribute(`aria-hidden`,`true`),t.textContent=`답글 ${K(e.replyCount)}`,d.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(Bt());let t=document.createElement(`span`);t.className=`rg-visually-hidden`,t.textContent=`완료`,e.append(t),d.append(e)}return l.append(u,d),o.append(s,l),i.append(a,o),r.append(i),r}function It(e){let t=document.createElement(`span`);return t.className=`rg-feedback-list-count`,t.dataset.feedbackCount=``,t.setAttribute(`aria-hidden`,`true`),t.hidden=K(e)===0,t.textContent=String(K(e)),t}function Lt(){return Gt(`0 0 14 14`,[W(`M4.75 3.25h6.5M4.75 7h6.5M4.75 10.75h6.5`),W(`M2.25 3.25h.01M2.25 7h.01M2.25 10.75h.01`,{"stroke-linecap":`round`,"stroke-width":`1.5`})])}function Rt(){return Gt(`0 0 12 12`,[W(`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 zt(){return Gt(`0 0 14 14`,[W(`M7 12.25s4-3.27 4-6.5a4 4 0 1 0-8 0c0 3.23 4 6.5 4 6.5Z`),W(`m4.75 3.5 4.5 4.5`)])}function Bt(){return Gt(`0 0 12 12`,[W(`m2.25 6.25 2.25 2.25 5.25-5.25`)])}function Vt(){return Gt(`0 0 12 12`,[W(`M2.25 6h7.5M6.75 3l3 3-3 3`)])}function Ht(e,t){let n=t.loadState??`ready`;if(n===`ready`)return;let r=G(`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 Ut(e,t=!1){let n=G(`rg-feedback-navigator-empty`);return n.setAttribute(`role`,`status`),n.textContent=e?`피드백 없음`:t?`현재 페이지 피드백 없음`:`해당 피드백 없음`,n}function Wt(e){let t=[`피드백 #${Math.max(1,Math.trunc(e.pinNumber))}`,...e.pageLabel?.trim()?[`페이지 ${e.pageLabel.trim()}`]:[],...e.targetLabel?.trim()?[`대상 ${e.targetLabel.trim()}`]:[],e.body,e.authorName,`최근 활동 ${e.timeLabel}`];return e.replyCount>0&&t.push(`답글 ${K(e.replyCount)}개`),t.push(e.status===`resolved`?`완료`:`진행 중`),e.locationAvailable===!1&&t.push(`현재 화면에서 위치를 찾을 수 없음`),e.currentPage||t.push(`다른 페이지로 이동`),t.join(`, `)}function Gt(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 W(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 G(e){let t=document.createElement(`div`);return t.className=e,t}function K(e){return Math.max(0,Math.trunc(Number.isFinite(e)?e:0))}function Kt(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 qt(e){let t=A(e.anchor),n=t.x-window.scrollX;if(e.kind===`element`&&t.element){let e=I(t.element);return{x:e.left,y:e.top,width:e.width,height:e.height,anchorX:n}}if(e.kind===`viewport`){let t=$t(e);return{x:t.left,y:t.top,width:t.width,height:t.height,anchorX:t.left+t.width/2}}let r=Xt(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 Jt(e){if(e.target.kind===`element`){if(q(e).available)return qt(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=$t(e.target);return{x:t.left,y:t.top,width:t.width,height:t.height,anchorX:t.left+t.width/2}}let t=Xt(e.target);return{x:t.left,y:t.top,width:t.width,height:t.height,anchorX:t.left+t.width/2}}function q(e){if(e.target.kind===`element`){let t=A(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=Zt(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=tn(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 Yt(e){return`visual-review-thread-${e.replace(/[^a-zA-Z0-9_-]/g,`-`)}`}function Xt(e){let t=nn(e),n=Zt(e,t),r=Y(e.region.width)*t.x,i=Y(e.region.height)*t.y;return rn(new DOMRect(n.pageX-window.scrollX-r/2,n.pageY-window.scrollY-i/2,r,i))}function Zt(e,t=nn(e)){return Qt(e,t)??en(e,t)}function Qt(e,t){if(e.kind!==`region`||!e.anchor.selector)return null;let n=A(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 $t(e){let t=tn(e);return an(new DOMRect(t.pageX-window.scrollX-7,t.pageY-window.scrollY-7,14,14))}function en(e,t=nn(e)){let n=tn(e,t);return{pageX:n.pageX+n.width/2,pageY:n.pageY+n.height/2}}function tn(e,t=nn(e)){let n=e.region,r=X(n.viewportX,n.pageX),i=X(n.viewportY,n.pageY),a=X(n.pageX,window.scrollX+r),o=X(n.pageY,window.scrollY+i),s=a-r,c=o-i;return{pageX:s+r*t.x,pageY:c+i*t.y,width:Y(n.width)*t.x,height:Y(n.height)*t.y}}function nn(e){let t=J(window.innerWidth,1),n=J(window.innerHeight,1),r=J(e.region.viewportWidth,t),i=J(e.region.viewportHeight,n);return{x:t/r,y:n/i}}function rn(e){let t=on(),n=sn(X(e.left,t.left),t.left,t.right),r=sn(X(e.top,t.top),t.top,t.bottom),i=sn(X(e.right,n),t.left,t.right),a=sn(X(e.bottom,r),t.top,t.bottom);return new DOMRect(n,r,Math.max(0,i-n),Math.max(0,a-r))}function an(e){let t=on(),n=Math.min(Y(e.width),t.width),r=Math.min(Y(e.height),t.height);return new DOMRect(sn(X(e.left,t.left),t.left,t.right-n),sn(X(e.top,t.top),t.top,t.bottom-r),n,r)}function on(){let e=window.visualViewport;return new DOMRect(X(e?.offsetLeft,0),X(e?.offsetTop,0),J(e?.width,window.innerWidth),J(e?.height,window.innerHeight))}function J(e,t){return Number.isFinite(e)&&(e??0)>0?e:Math.max(Number.isFinite(t)?t:1,1)}function Y(e){return Number.isFinite(e)?Math.max(0,e):0}function X(e,t){return Number.isFinite(e)?e:Number.isFinite(t)?t:0}function sn(e,t,n){return Math.min(n,Math.max(t,e))}const cn=1e6;async function ln(e){if(!document.body||typeof HTMLCanvasElement>`u`)return null;let t=dn(e);document.body.append(t);try{let{toCanvas:t}=await import(`./es-BeyOi4lh.js`),n=un(e,window.innerWidth,window.innerHeight),r=await t(document.body,{width:n.outputWidth,height:n.outputHeight,pixelRatio:1,cacheBust:!0,skipAutoScale:!0,backgroundColor:pn(),filter:e=>!fn(e),style:{margin:`0`,transform:`translate(${-(window.scrollX+n.left)*n.scale}px, ${-(window.scrollY+n.top)*n.scale}px) scale(${n.scale})`,transformOrigin:`top left`}}),i=await hn(r);return!i||i.size>cn?null:{bytes:new Uint8Array(await i.arrayBuffer()),contentType:i.type===`image/png`?`image/png`:`image/webp`,width:r.width,height:r.height}}catch{return null}finally{t.remove()}}function un(e,t,n){let r=gn(t),i=gn(n),a=e.region,o=_n(a.viewportX,a.pageX-window.scrollX),s=_n(a.viewportY,a.pageY-window.scrollY),c=Math.max(18,_n(a.width,0)),l=Math.max(18,_n(a.height,0)),u=vn(o+c/2,0,r),d=vn(s+l/2,0,i),f=Math.min(r,Math.max(Math.min(640,r),c+192)),p=Math.min(i,Math.max(Math.min(420,i),l+160)),m=vn(u-f/2,0,r-f),h=vn(d-p/2,0,i-p),g=Math.min(1,960/f,640/p);return{left:m,top:h,width:f,height:p,scale:g,outputWidth:Math.max(1,Math.round(f*g)),outputHeight:Math.max(1,Math.round(p*g))}}function dn(e){let t=e.region,n=document.createElement(`div`);return n.dataset.reviewCaptureMarker=`true`,Object.assign(n.style,{position:`absolute`,zIndex:`2147483646`,pointerEvents:`none`,boxSizing:`border-box`,left:`${Math.max(0,t.pageX)}px`,top:`${Math.max(0,t.pageY)}px`,width:`${Math.max(18,t.width)}px`,height:`${Math.max(18,t.height)}px`,border:`3px solid #ff4d67`,borderRadius:`6px`,background:`rgba(255, 77, 103, .12)`,boxShadow:`0 0 0 3px rgba(255,255,255,.92), 0 4px 18px rgba(0,0,0,.24)`}),n}function fn(e){return e instanceof HTMLElement?e.tagName===`AGENCY-REVIEW-WIDGET`||e.dataset.reviewCaptureExclude===`true`||e.id===`__next-build-watcher`||!!e.closest?.(`nextjs-portal`):!1}function pn(){let e=getComputedStyle(document.body).backgroundColor;if(e&&e!==`rgba(0, 0, 0, 0)`)return e;let t=getComputedStyle(document.documentElement).backgroundColor;return t&&t!==`rgba(0, 0, 0, 0)`?t:`#ffffff`}function mn(e,t,n){return new Promise(r=>e.toBlob(r,t,n))}async function hn(e){for(let t of[.78,.64,.5]){let n=await mn(e,`image/webp`,t);if(n&&n.size<=cn)return n}let t=await mn(e,`image/png`);return t&&t.size<=cn?t:null}function gn(e){return Number.isFinite(e)&&e>0?e:1}function _n(e,t){return Number.isFinite(e)?e:Number.isFinite(t)?t:0}function vn(e,t,n){return Math.min(n,Math.max(t,e))}const yn=[`top-left`,`top`,`top-right`,`right`,`bottom-right`,`bottom`,`bottom-left`,`left`],bn=`agency-review-widget`,xn=`visual-review:reauthenticate-required`,Sn=1e4,Cn=`visual-review-feedback-navigator`,wn=`${Cn}-surface`,Tn=new Set([`combobox`,`menuitem`,`menuitemcheckbox`,`menuitemradio`,`option`,`radio`,`searchbox`,`slider`,`spinbutton`,`textbox`]);var En=class extends HTMLElement{#e=this.attachShadow({mode:`open`});#t=null;#n=null;#r=null;#i=null;#a=null;#o=null;#s=!1;#c=null;#l=null;#u=null;#d=null;#f=``;#p=``;#m=null;#h=null;#g=null;#_=null;#v=null;#y=null;#b=!1;#x=0;#S=`current`;#C=`all`;#w=`loading`;#T=``;#E=`retry`;#D=!1;#O=0;#k=0;#A=!navigator.onLine;#j=null;#M=null;#N=null;#P=null;#F=null;#I=null;#L=null;#R=!1;#z=!1;#B=null;#V=null;#H=!1;#U=null;#W=null;#G=!1;#K=null;#q=new Set;#J=new Map;#Y=new Map;#X=new Map;#Z=new Map;#Q=new Map;#$=new Map;configure(e){if(this.#t)throw Error(`Review widget is already configured`);if(!On(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.#ee()}setPage(e,t){let n=this.#t;if(!n)throw Error(`Review widget is not configured`);let r=n.collaboration&&e.collaboration?{...n.collaboration,roomId:e.collaboration.roomId,scopeId:e.collaboration.scopeId}:n.collaboration;(t?.reload===!0||n.pageId!==e.pageId||r?.roomId!==n.collaboration?.roomId||r?.scopeId!==n.collaboration?.scopeId)&&(this.#t={...n,pageId:e.pageId,collaboration:r},this.#j&&(this.#le(),this.#i?.stop(),this.#i=null,this.#fe(),this.#me(),this.#te()))}connectedCallback(){this.dataset.agencyReviewRoot=``,this.dataset.reactGrabIgnore=``,this.dataset.rgTheme=or(),this.#t&&this.#ee()}disconnectedCallback(){this.#ue()}async#ee(){!this.#t||this.#j||(this.#j=new AbortController,this.#A=!navigator.onLine,this.#de(),this.#fe(),this.#me(),this.#ft(),document.addEventListener(`keydown`,this.#tt,{capture:!0,signal:this.#j.signal}),document.addEventListener(`keyup`,this.#nt,{capture:!0,signal:this.#j.signal}),document.addEventListener(`pointerdown`,this.#at,{capture:!0,signal:this.#j.signal}),document.addEventListener(`click`,this.#ot,{capture:!0,signal:this.#j.signal}),document.addEventListener(`focusin`,this.#$e,{capture:!0,signal:this.#j.signal}),document.addEventListener(`scroll`,this.#lt,{capture:!0,passive:!0,signal:this.#j.signal}),window.addEventListener(`scroll`,this.#lt,{passive:!0,signal:this.#j.signal}),window.addEventListener(`resize`,this.#lt,{passive:!0,signal:this.#j.signal}),window.visualViewport?.addEventListener(`scroll`,this.#lt,{passive:!0,signal:this.#j.signal}),window.visualViewport?.addEventListener(`resize`,this.#lt,{passive:!0,signal:this.#j.signal}),window.addEventListener(`online`,this.#ce,{signal:this.#j.signal}),window.addEventListener(`offline`,this.#ce,{signal:this.#j.signal}),await this.#te())}async#te(){if(!this.#t||!this.#j)return;let e=null,t=null,n=this.#w===`error`,r=++this.#O,i=this.#j.signal,{pageId:a,repository:o,session:s}=this.#t,c=o,l=!!(c.getProjectSnapshot&&c.subscribeProject);this.#w=`loading`,this.#T=``,this.#ge(),this.#Se();try{let n,o=null;if(l?[n,o]=await Promise.all([c.getSnapshot(a),c.getProjectSnapshot(s.projectId)]):n=await c.getSnapshot(a),i.aborted||r!==this.#O)return;let u=this.#n,d=this.#r;this.#n=null,this.#r=null,$(u,d);let f=!1,p=!1,m=n,h=o,g=e=>{i.aborted||r!==this.#O||!this.#j||(f=!0,this.#oe(e))};if(e=c.subscribe(a,e=>{if(!(i.aborted||r!==this.#O||!this.#j)){if(!p){m=e;return}this.#ie(e)}},g),t=o&&c.subscribeProject?c.subscribeProject(s.projectId,e=>{if(!(i.aborted||r!==this.#O||!this.#j)){if(!p){h=e;return}this.#ae(e)}},g):null,f){$(e,t);return}if(i.aborted||r!==this.#O||!this.#j){$(e,t);return}this.#n=e,this.#r=t,e=null,t=null,p=!0,this.#ie(m),h&&this.#ae(h)}catch(a){if($(e,t),i.aborted||r!==this.#O)return;let o=Hn(a)?a:{type:`error`,code:`unknown`,recovery:`retry`,clearSnapshot:!0};this.#oe(o,o.type===`access-lost`),n&&this.#b&&queueMicrotask(()=>this.#e.querySelector(`.rg-feedback-navigator-retry`)?.focus({preventScroll:!0}))}}#ne=new Map;#re=new Map;#ie=e=>{for(let[t,n]of[...this.#ne])e.comments.some(({id:e})=>e===t)&&(this.#ne.delete(t),n(!0));for(let[t,{commentId:n,settle:r}]of[...this.#re])e.replies.some(e=>e.id===t&&e.commentId===n)&&(this.#re.delete(t),r());this.#w=`ready`,this.#E=`retry`,this.#D=!1,this.#a=e,this.#se(e);let t=!1;if(this.#_&&!e.comments.some(({id:e})=>e===this.#_)){let e=this.#_;t=!0,this.#X.delete(e),this.#Z.delete(e),this.#Q.delete(e),this.#$.delete(e),this.#_=null,this.#v=null,this.#Be(`열려 있던 피드백이 삭제되었습니다.`)}this.#me();let n=this.#y;n&&e.comments.some(({id:e})=>e===n)&&(this.#y=null,queueMicrotask(()=>void this.#Le(n,{origin:`pin`,navigate:!1,announceOpened:!0})));let r=t&&this.#b&&this.#Te()===`sheet`&&this.#g?this.#ye(!1,{restoreFocus:!1,cancelNavigation:!1}):t&&!this.#b?this.#xe():!1;t&&queueMicrotask(()=>{r||(this.#b?this.#Oe():this.#ke()?.focus())})};#ae=e=>{e.projectId===this.#t?.session.projectId&&(this.#o=e,this.#Et(),this.#Se(),this.#we())};#oe(e,t=!0){let n=e.type===`access-lost`;this.#O+=1,this.#k+=1;let r=this.#n,i=this.#r;if(this.#n=null,this.#r=null,e.clearSnapshot&&(this.#a=null,this.#o=null),!n&&this.#d){let e=this.#e.querySelector(`.rg-selection-label:not(.rg-thread-label) textarea`);this.#g={target:this.#d,body:e?.value??this.#f},this.#d=null,this.#f=``}if(!n&&this.#h?.comment){let{target:e,body:t,comment:n}=this.#h;this.#m??={target:e,body:t,comment:n},this.#p||=`저장하지 못했습니다. 다시 시도하세요.`}if(n||this.#Z.forEach(({body:e,reply:t},n)=>{this.#X.set(n,e),this.#$.has(n)||this.#$.set(n,{body:e,reply:t}),this.#Q.has(n)||this.#Q.set(n,`답글을 저장하지 못했습니다. 다시 시도하세요.`)}),this.#h=null,this.#Z.clear(),n&&(this.#d=null,this.#f=``,this.#p=``,this.#m=null,this.#g=null,this.#_=null,this.#v=null,this.#X.clear(),this.#Q.clear(),this.#$.clear()),this.#s?this.#he(!1):this.#Ct(),this.#w=`error`,this.#E=e.recovery,this.#D=e.type===`access-lost`,this.#T=e.type===`access-lost`?Un(e.code):`다시 시도하세요.`,t&&(this.#b=!0),$(r,i),this.#ge(),this.#me(),this.#Be(this.#T),e.type===`access-lost`){try{this.#t?.onReauthenticationRequired?.(e)}catch{}this.dispatchEvent(new CustomEvent(xn,{bubbles:!0,composed:!0,detail:{code:e.code}}))}}#se(e){let t=new Set(e.comments.map(({id:e})=>e)),n=this.#h,r=this.#m,i=!!(n?.comment&&t.has(n.comment.id)),a=!!(r&&t.has(r.comment.id)),o=[...i&&n?[n.target]:[],...a&&r?[r.target]:[]];if(o.length>0){let e=this.#d!==null&&o.includes(this.#d);this.#d&&o.includes(this.#d)&&(this.#d=null,this.#f=``),this.#g&&o.includes(this.#g.target)&&(this.#g=null),i&&(this.#h=null),a&&(this.#m=null),this.#p=``,this.#Be(`피드백을 저장했습니다.`),e&&queueMicrotask(()=>this.#e.querySelector(`.rg-feedback-tool`)?.focus({preventScroll:!0}))}new Set([...this.#X.keys(),...this.#Z.keys(),...this.#Q.keys(),...this.#$.keys()]).forEach(n=>{if(!t.has(n)){this.#X.delete(n),this.#Z.delete(n),this.#Q.delete(n),this.#$.delete(n);return}let r=this.#Z.get(n),i=this.#$.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.#Z.delete(n),o&&this.#$.delete(n),this.#Q.delete(n),this.#X.delete(n),this.#Be(`답글을 저장했습니다.`))})}#ce=()=>{this.#A=!navigator.onLine,this.#Se()};#le(){this.#O+=1,this.#k+=1;let e=this.#n,t=this.#r;this.#n=null,this.#r=null;for(let[e,t]of[...this.#ne])this.#ne.delete(e),t(!1);for(let[e,{settle:t}]of[...this.#re])this.#re.delete(e),t();this.#s?this.#he(!1):this.#Ct(),this.#a=null,this.#o=null,this.#w=`loading`,this.#T=``,this.#E=`retry`,this.#D=!1,this.#d=null,this.#f=``,this.#p=``,this.#m=null,this.#h=null,this.#g=null,this.#_=null,this.#v=null,this.#X.clear(),this.#Z.clear(),this.#Q.clear(),this.#$.clear(),$(e,t)}#ue(){this.#O+=1,this.#k+=1,this.#rt(),this.#He(),this.#ct(),this.#Ze(),this.#_t(),this.#s&&this.#he(!1),this.#N?.(),this.#N=null,this.#M?.(),this.#M=null;let e=this.#n,t=this.#r;this.#n=null,this.#r=null,this.#i?.stop(),this.#i=null,this.#j?.abort(),this.#j=null,this.#a=null,this.#o=null,this.#w=`loading`,this.#T=``,this.#E=`retry`,this.#D=!1,this.#d=null,this.#f=``,this.#p=``,this.#m=null,this.#h=null,this.#g=null,this.#_=null,this.#v=null,this.#b=!1,this.#S=`current`,this.#C=`all`,this.#z=!1,this.#X.clear(),this.#Z.clear(),this.#Q.clear(),this.#$.clear(),this.#e.replaceChildren(),$(e,t)}#de(){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.#j?.signal})});let t=document.createElement(`style`);this.#t?.styleNonce&&(t.nonce=this.#t.styleNonce),t.textContent=`
4
- :host {
5
- all: initial;
6
- /* The reviewer sees this pin on the staging page and the owner sees the
7
- same pin in the dashboard, so both surfaces read one value. It is also
8
- dark enough for the white count badge to clear AA; the previous red sat
9
- at 3.9:1 behind 8px text. */
10
- --review-accent: #cf3339;
11
- position: fixed;
12
- inset: 0;
13
- z-index: 2147483000;
14
- pointer-events: none;
15
- direction: ltr;
16
- color: #171918;
17
- font: 500 14px/1.45 Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
18
- }
19
-
20
- * { box-sizing: border-box; }
21
- button, textarea { font: inherit; }
22
-
23
- .highlight, .region {
24
- position: fixed;
25
- display: none;
26
- border: 2px solid var(--review-accent);
27
- border-radius: 6px;
28
- background: rgba(207, 51, 57, 0.07);
29
- box-shadow: 0 0 0 1px rgba(255,255,255,.8), 0 0 0 4px rgba(207,51,57,.12);
30
- }
31
- .region { border-radius: 4px; }
32
- .highlight[data-context-target="true"],
33
- .region[data-context-target="true"] {
34
- background: rgba(207, 51, 57, 0.05);
35
- }
36
- .region[data-point="true"] {
37
- border-radius: 50%;
38
- background: rgba(207, 51, 57, 0.14);
39
- }
40
-
41
- .pin {
42
- position: fixed;
43
- display: grid;
44
- place-items: center;
45
- width: 26px;
46
- height: 26px;
47
- padding: 0;
48
- z-index: 1;
49
- transform: translate(-8px, -21px);
50
- pointer-events: auto;
51
- border: 2px solid #fff;
52
- border-radius: 50%;
53
- color: #fff;
54
- background: #18181b;
55
- box-shadow:
56
- 0 0 0 1px rgba(0, 0, 0, .18),
57
- 0 2px 6px rgba(0, 0, 0, .28),
58
- 0 6px 16px rgba(0, 0, 0, .14);
59
- cursor: pointer;
60
- appearance: none;
61
- isolation: isolate;
62
- font: 700 11px/1 Geist, ui-sans-serif, system-ui, sans-serif;
63
- font-variant-numeric: tabular-nums;
64
- font-synthesis: none;
65
- text-shadow: 0 1px 1px rgba(0, 0, 0, .24);
66
- -webkit-tap-highlight-color: transparent;
67
- transition:
68
- opacity 100ms ease-out,
69
- background 150ms ease-out,
70
- box-shadow 150ms ease-out,
71
- transform 300ms var(--rg-ease-spring);
72
- }
73
- .pins[data-selection-suppressed="true"] .pin {
74
- opacity: 0;
75
- pointer-events: none;
76
- transform: translate(-8px, -21px) scale(.82);
77
- transition-duration: 80ms;
78
- }
79
- .pin::after {
80
- position: absolute;
81
- inset: -2px;
82
- content: '';
83
- }
84
- @media (hover: hover) and (pointer: fine) {
85
- .pin:hover {
86
- z-index: 3;
87
- background: #09090b;
88
- box-shadow:
89
- 0 0 0 1px rgba(0, 0, 0, .22),
90
- 0 3px 8px rgba(0, 0, 0, .32),
91
- 0 8px 20px rgba(0, 0, 0, .16);
92
- transform: translate(-8px, -21px) scale(1.1);
93
- }
94
- }
95
- .pin[data-active="true"] {
96
- z-index: 4;
97
- background: #18181b;
98
- box-shadow:
99
- 0 0 0 2px var(--review-accent),
100
- 0 0 0 4px #fff,
101
- 0 5px 16px rgba(0, 0, 0, .3);
102
- transform: translate(-8px, -21px) scale(1.1);
103
- }
104
- .pin:active,
105
- .pin[data-active="true"]:active {
106
- transform: translate(-8px, -21px) scale(.96);
107
- transition-duration: 60ms;
108
- }
109
- .pin:focus-visible {
110
- z-index: 5;
111
- outline: 3px solid var(--review-accent);
112
- outline-offset: 3px;
113
- }
114
- .pin[data-resolved="true"] {
115
- color: #fff;
116
- background: #737373;
117
- }
118
- .pin[data-resolved="true"][data-active="true"] { background: #404040; }
119
-
120
-
121
- :host {
122
- --rg-panel-bg: #151618;
123
- --rg-panel-secondary: #1d1f22;
124
- --rg-text-primary: #f4f4f2;
125
- --rg-text-secondary: #9b9c9f;
126
- --rg-surface-hover: rgba(255, 255, 255, 0.07);
127
- --rg-border-subtle: rgba(255, 255, 255, 0.1);
128
- --rg-submit-bg: #f4f4f2;
129
- --rg-submit-fg: #151618;
130
- --rg-status-error: #ff8a8f;
131
- --rg-shadow: 0 12px 40px rgba(0, 0, 0, 0.34), inset 0 1px rgba(255, 255, 255, 0.04);
132
- --rg-drop-shadow: drop-shadow(0 12px 30px rgba(0, 0, 0, 0.28));
133
- --rg-ease-drawer: cubic-bezier(0.32, 0.72, 0, 1);
134
- --rg-ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
135
- }
136
-
137
- :host([data-rg-theme="light"]) {
138
- --rg-panel-bg: #ffffff;
139
- --rg-panel-secondary: #f5f5f5;
140
- --rg-text-primary: #171717;
141
- --rg-text-secondary: #737373;
142
- --rg-surface-hover: rgba(0, 0, 0, 0.05);
143
- --rg-border-subtle: rgba(0, 0, 0, 0.08);
144
- --rg-submit-bg: #171717;
145
- --rg-submit-fg: #ffffff;
146
- --rg-status-error: #b42318;
147
- --rg-shadow: 0 10px 32px rgba(0, 0, 0, 0.16), inset 0 1px rgba(255, 255, 255, 0.7);
148
- --rg-drop-shadow: drop-shadow(0 10px 24px rgba(0, 0, 0, 0.14));
149
- }
150
-
151
- .rg-toolbar {
152
- --rg-toolbar-offset-x: 0px;
153
- --rg-toolbar-offset-y: 0px;
154
- --rg-collapse-duration: 220ms;
155
- position: fixed;
156
- top: auto;
157
- right: max(12px, env(safe-area-inset-right));
158
- bottom: max(12px, env(safe-area-inset-bottom));
159
- left: auto;
160
- translate: var(--rg-toolbar-offset-x) var(--rg-toolbar-offset-y);
161
- display: flex;
162
- align-items: center;
163
- justify-content: center;
164
- width: max-content;
165
- height: max-content;
166
- min-width: 0;
167
- min-height: 28px;
168
- padding: 2px 4px;
169
- pointer-events: auto;
170
- border: .5px solid var(--rg-border-subtle);
171
- border-radius: 13px;
172
- color: var(--rg-text-secondary);
173
- background: var(--rg-panel-bg);
174
- box-shadow: var(--rg-shadow);
175
- font: 500 13px/16px Geist, ui-sans-serif, system-ui, sans-serif;
176
- font-synthesis: none;
177
- z-index: 2147483647;
178
- transition:
179
- padding var(--rg-collapse-duration) var(--rg-ease-drawer),
180
- border-radius var(--rg-collapse-duration) var(--rg-ease-drawer),
181
- opacity 400ms var(--rg-ease-drawer),
182
- transform 400ms var(--rg-ease-drawer);
183
- }
184
- .rg-toolbar[data-dock-managed="true"] {
185
- touch-action: none;
186
- user-select: none;
187
- cursor: grab;
188
- }
189
- .rg-toolbar[data-dragging="true"] {
190
- cursor: grabbing;
191
- transition: none;
192
- }
193
- .rg-toolbar[data-dragging="true"] * { cursor: grabbing; }
194
- .rg-toolbar[data-collapse-animating="true"] {
195
- transition:
196
- top var(--rg-collapse-duration) var(--rg-ease-drawer),
197
- left var(--rg-collapse-duration) var(--rg-ease-drawer),
198
- padding var(--rg-collapse-duration) var(--rg-ease-drawer),
199
- border-radius var(--rg-collapse-duration) var(--rg-ease-drawer),
200
- opacity 400ms var(--rg-ease-drawer),
201
- transform 400ms var(--rg-ease-drawer);
202
- }
203
- .rg-toolbar[data-snapping="true"] {
204
- transition:
205
- top 300ms var(--rg-ease-drawer),
206
- left 300ms var(--rg-ease-drawer),
207
- padding 220ms var(--rg-ease-drawer),
208
- border-radius 220ms var(--rg-ease-drawer),
209
- opacity 400ms var(--rg-ease-drawer),
210
- transform 400ms var(--rg-ease-drawer);
211
- }
212
- .rg-toolbar[data-position="top-left"] {
213
- top: max(12px, env(safe-area-inset-top));
214
- right: auto;
215
- bottom: auto;
216
- left: max(12px, env(safe-area-inset-left));
217
- }
218
- .rg-toolbar[data-position="top"] {
219
- top: max(12px, env(safe-area-inset-top));
220
- right: auto;
221
- bottom: auto;
222
- left: 50%;
223
- translate: calc(-50% + var(--rg-toolbar-offset-x)) var(--rg-toolbar-offset-y);
224
- }
225
- .rg-toolbar[data-position="top-right"] {
226
- top: max(12px, env(safe-area-inset-top));
227
- right: max(12px, env(safe-area-inset-right));
228
- bottom: auto;
229
- left: auto;
230
- }
231
- .rg-toolbar[data-position="right"] {
232
- top: 50%;
233
- right: max(12px, env(safe-area-inset-right));
234
- bottom: auto;
235
- left: auto;
236
- translate: var(--rg-toolbar-offset-x) calc(-50% + var(--rg-toolbar-offset-y));
237
- }
238
- .rg-toolbar[data-position="bottom-right"] {
239
- top: auto;
240
- right: max(12px, env(safe-area-inset-right));
241
- bottom: max(12px, env(safe-area-inset-bottom));
242
- left: auto;
243
- }
244
- .rg-toolbar[data-position="bottom"] {
245
- top: auto;
246
- right: auto;
247
- bottom: max(12px, env(safe-area-inset-bottom));
248
- left: 50%;
249
- translate: calc(-50% + var(--rg-toolbar-offset-x)) var(--rg-toolbar-offset-y);
250
- }
251
- .rg-toolbar[data-position="bottom-left"] {
252
- top: auto;
253
- right: auto;
254
- bottom: max(12px, env(safe-area-inset-bottom));
255
- left: max(12px, env(safe-area-inset-left));
256
- }
257
- .rg-toolbar[data-position="left"] {
258
- top: 50%;
259
- right: auto;
260
- bottom: auto;
261
- left: max(12px, env(safe-area-inset-left));
262
- translate: var(--rg-toolbar-offset-x) calc(-50% + var(--rg-toolbar-offset-y));
263
- }
264
- .rg-toolbar-actions-shell {
265
- display: grid;
266
- grid-template-columns: 1fr;
267
- min-width: 0;
268
- overflow: visible;
269
- transition: grid-template-columns var(--rg-collapse-duration) var(--rg-ease-drawer);
270
- }
271
- .rg-toolbar-actions {
272
- display: flex;
273
- align-items: center;
274
- min-width: 0;
275
- opacity: 1;
276
- transition: opacity 180ms var(--rg-ease-drawer) 80ms;
277
- }
278
- .rg-action-wrap {
279
- position: relative;
280
- display: flex;
281
- align-items: center;
282
- justify-content: center;
283
- width: 24px;
284
- height: 24px;
285
- margin-right: 0;
286
- }
287
- .rg-action, .rg-collapse, .rg-submit {
288
- all: unset;
289
- display: flex;
290
- align-items: center;
291
- justify-content: center;
292
- flex: none;
293
- cursor: pointer;
294
- color: var(--rg-text-secondary);
295
- -webkit-tap-highlight-color: transparent;
296
- transition: color 150ms var(--rg-ease-drawer), transform 400ms var(--rg-ease-spring);
297
- }
298
- .rg-submit::after {
299
- position: absolute;
300
- width: max(24px, 100%);
301
- height: max(24px, 100%);
302
- content: '';
303
- }
304
- .rg-action, .rg-collapse, .rg-submit { position: relative; }
305
- .rg-action:focus-visible,
306
- .rg-collapse:focus-visible,
307
- .rg-submit:focus-visible,
308
- .rg-thread-close:focus-visible {
309
- outline: 2px solid var(--review-accent);
310
- outline-offset: 3px;
311
- }
312
- .rg-action { width: 24px; height: 24px; }
313
- .rg-action svg { width: 14px; height: 14px; fill: currentColor; }
314
- .rg-action:hover,
315
- .rg-action[aria-pressed="true"],
316
- .rg-feedback-list-tool[aria-expanded="true"],
317
- .rg-collapse:hover {
318
- color: var(--rg-text-primary);
319
- }
320
- @media (hover: hover) and (pointer: fine) {
321
- .rg-action:hover, .rg-collapse:hover, .rg-submit:hover { transform: scale(1.05); }
322
- }
323
- .rg-action:active, .rg-collapse:active, .rg-submit:active {
324
- transform: scale(.96);
325
- transition-duration: 60ms;
326
- transition-timing-function: cubic-bezier(0, 0, .2, 1);
327
- }
328
- .rg-collapse { width: 24px; height: 24px; }
329
- .rg-collapse svg {
330
- width: 18px;
331
- height: 18px;
332
- margin: -2px;
333
- fill: currentColor;
334
- transform: rotate(90deg);
335
- transition: transform 150ms var(--rg-ease-drawer), color 150ms var(--rg-ease-drawer);
336
- }
337
- .rg-tooltip {
338
- position: absolute;
339
- left: 50%;
340
- bottom: calc(100% + 10px);
341
- transform: translate(-50%, 2px) scale(.97);
342
- padding: 2px 8px;
343
- pointer-events: none;
344
- border-radius: 999px;
345
- color: var(--rg-text-primary);
346
- background: var(--rg-panel-bg);
347
- box-shadow: var(--rg-shadow);
348
- opacity: 0;
349
- font: 500 10px/16px Geist, ui-sans-serif, system-ui, sans-serif;
350
- white-space: nowrap;
351
- transition: opacity 100ms ease-out, transform 100ms ease-out;
352
- transition-delay: 0ms;
353
- }
354
- .rg-action-wrap:hover .rg-tooltip, .rg-action-wrap:focus-within .rg-tooltip {
355
- transform: translate(-50%, 0) scale(1);
356
- opacity: 1;
357
- transition-delay: 400ms;
358
- }
359
- .rg-toolbar[data-selecting="true"]:not(:hover) {
360
- transform: scale(.97);
361
- opacity: .55;
362
- }
363
- .rg-toolbar[data-selecting="true"] .rg-tooltip,
364
- .rg-toolbar[data-collapsed="true"] .rg-tooltip { display: none; }
365
- .rg-toolbar[data-collapsed="true"] {
366
- padding: 1px 3px;
367
- }
368
- .rg-toolbar[data-position^="top"][data-collapsed="true"] {
369
- top: 0;
370
- padding: 1px 3px;
371
- border-radius: 0 0 10px 10px;
372
- }
373
- .rg-toolbar[data-position^="bottom"][data-collapsed="true"] {
374
- bottom: 0;
375
- border-radius: 10px 10px 0 0;
376
- }
377
- .rg-toolbar[data-position="left"][data-collapsed="true"] {
378
- left: 0;
379
- border-radius: 0 10px 10px 0;
380
- }
381
- .rg-toolbar[data-position="right"][data-collapsed="true"] {
382
- right: 0;
383
- border-radius: 10px 0 0 10px;
384
- }
385
- .rg-toolbar[data-collapsed="true"] .rg-toolbar-actions-shell {
386
- grid-template-columns: 0fr;
387
- pointer-events: none;
388
- }
389
- .rg-toolbar[data-collapsed="true"] .rg-toolbar-actions {
390
- overflow: hidden;
391
- opacity: 0;
392
- transition: opacity 100ms var(--rg-ease-drawer);
393
- }
394
- .rg-toolbar[data-collapsed="true"] .rg-collapse svg { transform: rotate(-90deg); }
395
- .rg-toolbar[data-position^="top"] .rg-collapse svg { transform: rotate(-90deg); }
396
- .rg-toolbar[data-position^="top"][data-collapsed="true"] .rg-collapse svg {
397
- transform: rotate(90deg);
398
- }
399
- .rg-toolbar[data-position="left"] .rg-collapse svg { transform: rotate(180deg); }
400
- .rg-toolbar[data-position="left"][data-collapsed="true"] .rg-collapse svg {
401
- transform: rotate(0deg);
402
- }
403
- .rg-toolbar[data-position="right"] .rg-collapse svg { transform: rotate(0deg); }
404
- .rg-toolbar[data-position="right"][data-collapsed="true"] .rg-collapse svg {
405
- transform: rotate(180deg);
406
- }
407
- .rg-toolbar[data-dock-edge="left"],
408
- .rg-toolbar[data-dock-edge="right"] {
409
- flex-direction: column;
410
- }
411
- .rg-toolbar[data-dock-edge="left"] .rg-toolbar-actions-shell,
412
- .rg-toolbar[data-dock-edge="right"] .rg-toolbar-actions-shell {
413
- grid-template-columns: 1fr;
414
- grid-template-rows: 1fr;
415
- min-height: 0;
416
- transition: grid-template-rows var(--rg-collapse-duration) var(--rg-ease-drawer);
417
- }
418
- .rg-toolbar[data-dock-edge="left"] .rg-toolbar-actions,
419
- .rg-toolbar[data-dock-edge="right"] .rg-toolbar-actions {
420
- flex-direction: column;
421
- min-height: 0;
422
- }
423
- .rg-toolbar[data-dock-edge="left"] .rg-action-wrap,
424
- .rg-toolbar[data-dock-edge="right"] .rg-action-wrap {
425
- margin-right: 0;
426
- margin-bottom: 0;
427
- }
428
- .rg-toolbar[data-dock-edge="left"][data-collapsed="true"] .rg-toolbar-actions-shell,
429
- .rg-toolbar[data-dock-edge="right"][data-collapsed="true"] .rg-toolbar-actions-shell {
430
- grid-template-columns: 1fr;
431
- grid-template-rows: 0fr;
432
- }
433
- .rg-toolbar[data-dock-edge="left"][data-collapsed="true"],
434
- .rg-toolbar[data-dock-edge="right"][data-collapsed="true"] {
435
- padding: 3px 1px;
436
- }
437
- .rg-toolbar[data-dock-edge="top"] .rg-collapse svg { transform: rotate(-90deg); }
438
- .rg-toolbar[data-dock-edge="top"][data-collapsed="true"] .rg-collapse svg {
439
- transform: rotate(90deg);
440
- }
441
- .rg-toolbar[data-dock-edge="bottom"] .rg-collapse svg { transform: rotate(90deg); }
442
- .rg-toolbar[data-dock-edge="bottom"][data-collapsed="true"] .rg-collapse svg {
443
- transform: rotate(-90deg);
444
- }
445
- .rg-toolbar[data-dock-edge="left"] .rg-collapse svg { transform: rotate(180deg); }
446
- .rg-toolbar[data-dock-edge="left"][data-collapsed="true"] .rg-collapse svg {
447
- transform: rotate(0deg);
448
- }
449
- .rg-toolbar[data-dock-edge="right"] .rg-collapse svg { transform: rotate(0deg); }
450
- .rg-toolbar[data-dock-edge="right"][data-collapsed="true"] .rg-collapse svg {
451
- transform: rotate(180deg);
452
- }
453
- .rg-toolbar[data-dock-edge="left"] .rg-tooltip {
454
- top: 50%;
455
- right: auto;
456
- bottom: auto;
457
- left: calc(100% + 10px);
458
- transform: translate(2px, -50%) scale(.97);
459
- }
460
- .rg-toolbar[data-dock-edge="right"] .rg-tooltip {
461
- top: 50%;
462
- right: calc(100% + 10px);
463
- bottom: auto;
464
- left: auto;
465
- transform: translate(-2px, -50%) scale(.97);
466
- }
467
- .rg-toolbar[data-dock-edge="left"] .rg-action-wrap:hover .rg-tooltip,
468
- .rg-toolbar[data-dock-edge="left"] .rg-action-wrap:focus-within .rg-tooltip,
469
- .rg-toolbar[data-dock-edge="right"] .rg-action-wrap:hover .rg-tooltip,
470
- .rg-toolbar[data-dock-edge="right"] .rg-action-wrap:focus-within .rg-tooltip {
471
- transform: translate(0, -50%) scale(1);
472
- }
473
- .rg-toolbar[data-position^="top"] .rg-tooltip {
474
- top: calc(100% + 10px);
475
- bottom: auto;
476
- }
477
- .rg-developer-status {
478
- position: absolute;
479
- left: 50%;
480
- bottom: calc(100% + 8px);
481
- transform: translate(-50%, 4px) scale(.98);
482
- padding: 4px 8px;
483
- pointer-events: none;
484
- border-radius: 999px;
485
- color: var(--rg-text-primary);
486
- background: var(--rg-panel-bg);
487
- box-shadow: var(--rg-shadow);
488
- opacity: 0;
489
- white-space: nowrap;
490
- font: 500 11px/16px Geist, ui-sans-serif, system-ui, sans-serif;
491
- transition: opacity 120ms ease-out, transform 120ms ease-out;
492
- }
493
- .rg-developer-status[data-tone="error"] { color: var(--rg-status-error); }
494
- .rg-developer-status[data-visible="true"] {
495
- transform: translate(-50%, 0) scale(1);
496
- opacity: 1;
497
- }
498
- .rg-toolbar[data-position^="top"] .rg-developer-status {
499
- top: calc(100% + 8px);
500
- bottom: auto;
501
- }
502
-
503
- .rg-selection-label {
504
- position: fixed;
505
- transform: translateX(-50%);
506
- z-index: 2147483002;
507
- width: min(264px, calc(100vw - 16px));
508
- min-width: 0;
509
- max-width: none;
510
- pointer-events: auto;
511
- color: var(--rg-text-primary);
512
- filter: var(--rg-drop-shadow);
513
- font: 500 13px/16px Geist, ui-sans-serif, system-ui, sans-serif;
514
- font-synthesis: none;
515
- transition: opacity 125ms ease-out, filter 125ms ease-out;
516
- }
517
- .rg-selection-label:focus { outline: none; }
518
- .rg-surface {
519
- overflow: hidden;
520
- width: 100%;
521
- min-width: 0;
522
- max-width: none;
523
- border: .5px solid var(--rg-border-subtle);
524
- border-radius: 8px;
525
- corner-shape: superellipse(1.25);
526
- background: var(--rg-panel-bg);
527
- }
528
- .rg-tag-row {
529
- display: flex;
530
- align-items: center;
531
- max-width: none;
532
- padding: 4px 7px 3px;
533
- overflow: hidden;
534
- }
535
- .rg-tag {
536
- overflow: hidden;
537
- color: var(--rg-text-primary);
538
- text-overflow: ellipsis;
539
- white-space: nowrap;
540
- }
541
- .rg-bottom-section {
542
- display: flex;
543
- align-items: center;
544
- width: auto;
545
- min-height: 38px;
546
- padding: 4px 7px;
547
- border-top: .5px solid var(--rg-border-subtle);
548
- }
549
- .rg-bottom-section textarea {
550
- flex: 1;
551
- field-sizing: content;
552
- min-width: 0;
553
- min-height: 28px;
554
- max-height: 84px;
555
- margin: 0;
556
- padding: 0;
557
- resize: none;
558
- outline: none;
559
- border: 0;
560
- border-radius: 0;
561
- color: var(--rg-text-primary);
562
- background: transparent;
563
- box-shadow: none;
564
- overflow-y: auto;
565
- scrollbar-width: none;
566
- font: 500 12px/16px Geist, ui-sans-serif, system-ui, sans-serif;
567
- overflow-wrap: break-word;
568
- word-break: keep-all;
569
- }
570
- .rg-bottom-section textarea::placeholder { color: var(--rg-text-secondary); }
571
- .rg-thread-label .rg-surface {
572
- display: flex;
573
- flex-direction: column;
574
- width: min(264px, calc(100vw - 16px));
575
- max-height: min(340px, calc(100vh - 16px));
576
- max-height: min(340px, calc(100dvh - 16px));
577
- }
578
- .rg-thread-label .rg-tag-row { flex: none; gap: 8px; }
579
- .rg-thread-close {
580
- all: unset;
581
- position: relative;
582
- display: flex;
583
- align-items: center;
584
- justify-content: center;
585
- flex: none;
586
- width: 28px;
587
- height: 28px;
588
- margin-left: auto;
589
- color: var(--rg-text-secondary);
590
- cursor: pointer;
591
- -webkit-tap-highlight-color: transparent;
592
- transition: color 150ms var(--rg-ease-drawer), transform 400ms var(--rg-ease-spring);
593
- }
594
- .rg-thread-close::after {
595
- position: absolute;
596
- width: 44px;
597
- height: 44px;
598
- content: '';
599
- }
600
- .rg-thread-close svg { width: 10px; height: 10px; fill: currentColor; }
601
- .rg-thread-close:hover { color: var(--rg-text-primary); }
602
- .rg-thread-close:active {
603
- transform: scale(.96);
604
- transition-duration: 60ms;
605
- }
606
- .rg-thread-messages {
607
- min-height: 0;
608
- overflow: auto;
609
- scrollbar-width: none;
610
- border-top: .5px solid var(--rg-border-subtle);
611
- }
612
- .rg-thread-messages::-webkit-scrollbar { display: none; }
613
- .rg-message { padding: 5px 7px; }
614
- .rg-message + .rg-message { border-top: .5px solid var(--rg-border-subtle); }
615
- .rg-message-meta {
616
- overflow: hidden;
617
- color: var(--rg-text-secondary);
618
- font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
619
- text-overflow: ellipsis;
620
- white-space: nowrap;
621
- }
622
- .rg-message-body {
623
- margin: 2px 0 0;
624
- color: var(--rg-text-primary);
625
- font: 500 12px/16px Geist, ui-sans-serif, system-ui, sans-serif;
626
- overflow-wrap: anywhere;
627
- white-space: pre-wrap;
628
- }
629
- .rg-thread-label .rg-bottom-section { flex: none; }
630
- .rg-submit {
631
- width: 28px;
632
- height: 28px;
633
- margin-left: 3px;
634
- border-radius: 50%;
635
- color: var(--rg-submit-fg);
636
- background: var(--rg-submit-bg);
637
- }
638
- .rg-submit svg { width: 10px; height: 10px; fill: currentColor; }
639
- .rg-submit:disabled { cursor: wait; opacity: .5; }
640
- .rg-label-arrow {
641
- position: absolute;
642
- left: var(--rg-arrow-left, 50%);
643
- display: block;
644
- width: 16px;
645
- height: 8px;
646
- translate: -50% 0;
647
- fill: var(--rg-panel-bg);
648
- }
649
- .rg-selection-label[data-side="below"] .rg-label-arrow {
650
- top: -7px;
651
- }
652
- .rg-selection-label[data-side="above"] .rg-label-arrow {
653
- bottom: -7px;
654
- transform: rotate(180deg);
655
- }
656
-
657
- @media (hover: none), (pointer: coarse) {
658
- .rg-toolbar {
659
- min-height: 28px;
660
- padding: 2px 4px;
661
- border-radius: 13px;
662
- }
663
- .rg-toolbar .rg-action-wrap {
664
- width: 44px;
665
- height: 44px;
666
- margin-right: 0;
667
- }
668
- .rg-toolbar .rg-action,
669
- .rg-toolbar .rg-collapse {
670
- width: 44px;
671
- height: 44px;
672
- }
673
- .rg-toolbar .rg-action svg { width: 14px; height: 14px; }
674
- .rg-toolbar .rg-collapse svg { width: 18px; height: 18px; }
675
- .rg-thread-close::after,
676
- .rg-submit::after {
677
- width: 100%;
678
- height: 100%;
679
- }
680
- .rg-thread-label .rg-tag-row,
681
- .rg-thread-label .rg-bottom-section {
682
- min-height: 44px;
683
- padding-top: 0;
684
- padding-bottom: 0;
685
- }
686
- .rg-thread-close,
687
- .rg-submit {
688
- width: 44px;
689
- height: 44px;
690
- }
691
- }
692
-
693
- @media (max-width: 640px) {
694
- .rg-toolbar {
695
- min-height: 28px;
696
- padding: 2px 4px;
697
- border-radius: 13px;
698
- }
699
- .rg-toolbar .rg-action-wrap {
700
- width: 44px;
701
- height: 44px;
702
- margin-right: 0;
703
- }
704
- .rg-toolbar .rg-action,
705
- .rg-toolbar .rg-collapse {
706
- width: 44px;
707
- height: 44px;
708
- }
709
- .rg-toolbar .rg-action svg { width: 14px; height: 14px; }
710
- .rg-toolbar .rg-collapse svg { width: 18px; height: 18px; }
711
- .rg-selection-label {
712
- width: min(360px, calc(100vw - 16px));
713
- }
714
- .rg-thread-label .rg-tag-row,
715
- .rg-thread-label .rg-bottom-section {
716
- min-height: 44px;
717
- }
718
- .rg-thread-close,
719
- .rg-submit {
720
- width: 44px;
721
- height: 44px;
722
- }
723
- .rg-toolbar[data-mobile-position="bottom-left"] {
724
- top: auto;
725
- right: auto;
726
- bottom: max(16px, env(safe-area-inset-bottom));
727
- left: max(16px, env(safe-area-inset-left));
728
- translate: var(--rg-toolbar-offset-x) var(--rg-toolbar-offset-y);
729
- }
730
- .rg-toolbar[data-mobile-position="bottom-right"] {
731
- top: auto;
732
- right: max(16px, env(safe-area-inset-right));
733
- bottom: max(16px, env(safe-area-inset-bottom));
734
- left: auto;
735
- translate: var(--rg-toolbar-offset-x) var(--rg-toolbar-offset-y);
736
- }
737
- .rg-toolbar[data-mobile-position][data-collapsed="true"] {
738
- top: auto;
739
- bottom: 0;
740
- padding: 1px 3px;
741
- border-radius: 10px 10px 0 0;
742
- }
743
- .rg-toolbar[data-dock-edge="left"][data-collapsed="true"],
744
- .rg-toolbar[data-dock-edge="right"][data-collapsed="true"] {
745
- padding: 3px 1px;
746
- }
747
- .rg-toolbar[data-mobile-position] .rg-collapse svg { transform: rotate(90deg); }
748
- .rg-toolbar[data-mobile-position][data-collapsed="true"] .rg-collapse svg {
749
- transform: rotate(-90deg);
750
- }
751
- .rg-toolbar[data-mobile-position] .rg-tooltip {
752
- top: auto;
753
- bottom: calc(100% + 10px);
754
- }
755
- .rg-toolbar[data-mobile-position] .rg-developer-status {
756
- top: auto;
757
- bottom: calc(100% + 8px);
758
- }
759
- }
760
-
761
- @media (prefers-reduced-motion: reduce) {
762
- .rg-toolbar, .rg-toolbar *, .rg-selection-label, .rg-selection-label * {
763
- animation: none !important;
764
- transition: none !important;
765
- }
766
- }
767
-
768
- @supports (-webkit-touch-callout: none) {
769
- .rg-bottom-section textarea { font-size: 16px; }
770
- }
771
-
772
-
773
- .rg-visually-hidden {
774
- position: fixed;
775
- width: 1px;
776
- height: 1px;
777
- padding: 0;
778
- overflow: hidden;
779
- clip: rect(0 0 0 0);
780
- clip-path: inset(50%);
781
- white-space: nowrap;
782
- border: 0;
783
- }
784
-
785
- .rg-feedback-navigator-scrim {
786
- display: none;
787
- position: fixed;
788
- inset: 0;
789
- z-index: 2147483001;
790
- pointer-events: auto;
791
- background: rgba(0, 0, 0, .08);
792
- touch-action: none;
793
- }
794
-
795
- .rg-feedback-navigator {
796
- position: fixed;
797
- right: auto;
798
- bottom: calc(max(12px, env(safe-area-inset-bottom)) + 32px);
799
- left: max(8px, calc(50% - 160px));
800
- z-index: 2147483646;
801
- display: flex;
802
- flex-direction: column;
803
- width: min(320px, calc(100vw - 16px));
804
- max-height: min(380px, calc(100dvh - 58px));
805
- overflow: hidden;
806
- pointer-events: auto;
807
- border: .5px solid var(--rg-border-subtle);
808
- border-radius: 8px;
809
- corner-shape: superellipse(1.25);
810
- color: var(--rg-text-primary);
811
- background: var(--rg-panel-bg);
812
- box-shadow: var(--rg-shadow);
813
- font: 500 13px/16px Geist, ui-sans-serif, system-ui, sans-serif;
814
- font-synthesis: none;
815
- transform-origin: var(--rg-navigator-origin, 50% calc(100% + 8px));
816
- }
817
- .rg-feedback-navigator[data-motion="enter"] {
818
- animation: rg-feedback-navigator-enter 220ms var(--rg-ease-spring) both;
819
- }
820
- .rg-feedback-navigator-detail {
821
- position: absolute;
822
- inset: 0;
823
- z-index: 1;
824
- display: flex;
825
- min-width: 0;
826
- min-height: 0;
827
- background: var(--rg-panel-bg);
828
- }
829
- .rg-feedback-navigator[data-presentation="sheet"][data-detail-open="true"] {
830
- height: min(360px, calc(100dvh - 96px));
831
- }
832
- .rg-feedback-navigator[data-presentation="sheet"][data-detail-open="true"]
833
- > :not(.rg-feedback-navigator-detail) {
834
- visibility: hidden;
835
- pointer-events: none;
836
- }
837
- .rg-feedback-navigator-detail .rg-feedback-navigator-thread {
838
- position: relative !important;
839
- top: auto !important;
840
- left: auto !important;
841
- display: flex;
842
- flex: 1;
843
- width: 100%;
844
- min-width: 0;
845
- opacity: 1 !important;
846
- filter: none;
847
- transform: none !important;
848
- }
849
- .rg-feedback-navigator-detail .rg-feedback-navigator-thread .rg-surface {
850
- display: flex;
851
- flex: 1;
852
- flex-direction: column;
853
- width: 100%;
854
- max-height: none;
855
- border: 0;
856
- border-radius: inherit;
857
- }
858
- .rg-feedback-navigator-detail .rg-thread-messages {
859
- flex: 1;
860
- }
861
- .rg-feedback-navigator-detail .rg-label-arrow { display: none; }
862
- .rg-feedback-navigator-detail .rg-feedback-navigator-back {
863
- order: -1;
864
- margin-right: 2px;
865
- margin-left: 0;
866
- }
867
- .rg-feedback-navigator-detail .rg-feedback-navigator-back svg {
868
- width: 16px;
869
- height: 16px;
870
- }
871
- .rg-feedback-navigator-header {
872
- display: flex;
873
- align-items: center;
874
- flex: none;
875
- min-height: 30px;
876
- padding: 3px 4px 2px 7px;
877
- }
878
- .rg-feedback-navigator-heading {
879
- display: flex;
880
- align-items: center;
881
- min-width: 0;
882
- gap: 4px;
883
- }
884
- .rg-feedback-navigator-title {
885
- overflow: hidden;
886
- margin: 0;
887
- color: var(--rg-text-primary);
888
- font: 500 12px/16px Geist, ui-sans-serif, system-ui, sans-serif;
889
- text-overflow: ellipsis;
890
- white-space: nowrap;
891
- }
892
- .rg-feedback-navigator-total {
893
- color: var(--rg-text-secondary);
894
- font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
895
- font-variant-numeric: tabular-nums;
896
- }
897
- .rg-feedback-list-count {
898
- position: absolute;
899
- top: 1px;
900
- right: 0;
901
- display: grid;
902
- place-items: center;
903
- min-width: 13px;
904
- height: 13px;
905
- padding: 0 3px;
906
- border: 1.5px solid var(--rg-panel-bg);
907
- border-radius: 999px;
908
- color: #fff;
909
- background: var(--review-accent);
910
- font: 700 8px/1 Geist, ui-sans-serif, system-ui, sans-serif;
911
- font-variant-numeric: tabular-nums;
912
- transform: translate(25%, -18%);
913
- }
914
- .rg-feedback-list-count:empty,
915
- .rg-feedback-list-count[hidden] { display: none; }
916
-
917
- .rg-feedback-navigator-close,
918
- .rg-feedback-scope,
919
- .rg-feedback-filter,
920
- .rg-feedback-row,
921
- .rg-feedback-navigator-retry {
922
- all: unset;
923
- box-sizing: border-box;
924
- cursor: pointer;
925
- -webkit-tap-highlight-color: transparent;
926
- }
927
-
928
- .rg-inline-error {
929
- padding: 5px 8px;
930
- border-top: .5px solid var(--rg-border-subtle);
931
- color: var(--review-accent);
932
- font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
933
- }
934
- .rg-feedback-navigator-close {
935
- position: relative;
936
- display: flex;
937
- align-items: center;
938
- justify-content: center;
939
- flex: none;
940
- width: 22px;
941
- height: 22px;
942
- margin-left: auto;
943
- border-radius: 6px;
944
- color: var(--rg-text-secondary);
945
- transition:
946
- color 150ms var(--rg-ease-drawer),
947
- background 150ms var(--rg-ease-drawer),
948
- transform 400ms var(--rg-ease-spring);
949
- }
950
- .rg-feedback-navigator-close svg {
951
- width: 14px;
952
- height: 14px;
953
- fill: currentColor;
954
- }
955
-
956
- .rg-feedback-filters {
957
- display: flex;
958
- align-items: center;
959
- flex: none;
960
- gap: 2px;
961
- margin: 0 3px 3px;
962
- }
963
- .rg-feedback-scopes {
964
- display: grid;
965
- grid-template-columns: 1fr 1fr;
966
- flex: none;
967
- gap: 2px;
968
- margin: 0 3px 3px;
969
- padding: 2px;
970
- border-radius: 8px;
971
- background: var(--rg-surface-hover);
972
- }
973
- .rg-feedback-scope {
974
- display: flex;
975
- align-items: center;
976
- justify-content: center;
977
- min-width: 0;
978
- min-height: 22px;
979
- padding: 3px 6px;
980
- gap: 5px;
981
- border-radius: 6px;
982
- color: var(--rg-text-secondary);
983
- text-align: center;
984
- transition:
985
- color 150ms var(--rg-ease-drawer),
986
- background 150ms var(--rg-ease-drawer),
987
- transform 400ms var(--rg-ease-spring);
988
- }
989
- .rg-feedback-scope[aria-pressed="true"] {
990
- color: var(--rg-text-primary);
991
- background: var(--rg-panel-bg);
992
- box-shadow: 0 1px 2px rgba(0, 0, 0, .08);
993
- }
994
- .rg-feedback-scope-count {
995
- color: var(--rg-text-secondary);
996
- font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
997
- font-variant-numeric: tabular-nums;
998
- }
999
- .rg-feedback-filter {
1000
- display: flex;
1001
- align-items: center;
1002
- min-width: 0;
1003
- min-height: 22px;
1004
- padding: 3px 5px;
1005
- gap: 4px;
1006
- border-radius: 6px;
1007
- color: var(--rg-text-secondary);
1008
- text-align: center;
1009
- transition:
1010
- color 150ms var(--rg-ease-drawer),
1011
- background 150ms var(--rg-ease-drawer),
1012
- transform 400ms var(--rg-ease-spring);
1013
- }
1014
- .rg-feedback-filter[aria-pressed="true"] {
1015
- color: var(--rg-text-primary);
1016
- background: var(--rg-surface-hover);
1017
- }
1018
- .rg-feedback-filter-label {
1019
- overflow: hidden;
1020
- text-overflow: ellipsis;
1021
- white-space: nowrap;
1022
- }
1023
- .rg-feedback-filter-count {
1024
- color: var(--rg-text-secondary);
1025
- font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
1026
- font-variant-numeric: tabular-nums;
1027
- }
1028
- .rg-feedback-sort-label {
1029
- overflow: hidden;
1030
- margin-left: auto;
1031
- padding-right: 4px;
1032
- color: var(--rg-text-secondary);
1033
- font: 500 9px/14px Geist, ui-sans-serif, system-ui, sans-serif;
1034
- text-overflow: ellipsis;
1035
- white-space: nowrap;
1036
- }
1037
-
1038
- .rg-feedback-navigator-content {
1039
- min-height: 0;
1040
- overflow: auto;
1041
- overscroll-behavior: contain;
1042
- scrollbar-color: var(--rg-border-subtle) transparent;
1043
- scrollbar-width: thin;
1044
- border-top: .5px solid var(--rg-border-subtle);
1045
- }
1046
- .rg-feedback-list {
1047
- margin: 0;
1048
- padding: 3px;
1049
- list-style: none;
1050
- }
1051
- .rg-feedback-page-group + .rg-feedback-page-group {
1052
- border-top: .5px solid var(--rg-border-subtle);
1053
- }
1054
- .rg-feedback-page-heading {
1055
- position: sticky;
1056
- top: 0;
1057
- z-index: 1;
1058
- display: flex;
1059
- align-items: center;
1060
- min-height: 24px;
1061
- padding: 4px 8px 2px;
1062
- gap: 5px;
1063
- color: var(--rg-text-secondary);
1064
- background: var(--rg-panel-bg);
1065
- backdrop-filter: blur(8px);
1066
- font: 600 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
1067
- }
1068
- .rg-feedback-page-group[data-current-page="true"] .rg-feedback-page-heading {
1069
- color: var(--rg-text-primary);
1070
- }
1071
- .rg-feedback-page-label {
1072
- overflow: hidden;
1073
- text-overflow: ellipsis;
1074
- white-space: nowrap;
1075
- }
1076
- .rg-feedback-page-count {
1077
- flex: none;
1078
- color: var(--rg-text-secondary);
1079
- font-variant-numeric: tabular-nums;
1080
- }
1081
- .rg-feedback-page-group .rg-feedback-list { padding-top: 0; }
1082
- .rg-feedback-row {
1083
- display: grid;
1084
- grid-template-columns: 18px minmax(0, 1fr);
1085
- align-items: start;
1086
- width: 100%;
1087
- min-height: 44px;
1088
- padding: 5px 7px;
1089
- gap: 5px;
1090
- border-radius: 5px;
1091
- color: var(--rg-text-primary);
1092
- text-align: left;
1093
- transition:
1094
- background 150ms var(--rg-ease-drawer),
1095
- opacity 150ms var(--rg-ease-drawer);
1096
- }
1097
- .rg-feedback-row[aria-current="true"] {
1098
- background: var(--rg-surface-hover);
1099
- box-shadow: inset 2px 0 var(--review-accent);
1100
- }
1101
- .rg-feedback-row[data-status="resolved"] .rg-feedback-row-copy {
1102
- opacity: .68;
1103
- }
1104
- .rg-feedback-row-pin {
1105
- display: grid;
1106
- place-items: center;
1107
- width: 18px;
1108
- height: 18px;
1109
- color: var(--rg-text-secondary);
1110
- font: 600 9px/14px Geist, ui-sans-serif, system-ui, sans-serif;
1111
- font-variant-numeric: tabular-nums;
1112
- }
1113
- .rg-feedback-row-copy {
1114
- display: flex;
1115
- flex-direction: column;
1116
- min-width: 0;
1117
- gap: 2px;
1118
- }
1119
- .rg-feedback-row-body {
1120
- display: -webkit-box;
1121
- overflow: hidden;
1122
- color: var(--rg-text-primary);
1123
- overflow-wrap: anywhere;
1124
- white-space: pre-wrap;
1125
- -webkit-box-orient: vertical;
1126
- -webkit-line-clamp: 2;
1127
- }
1128
- .rg-feedback-row-context {
1129
- overflow: hidden;
1130
- color: var(--rg-text-secondary);
1131
- font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
1132
- text-overflow: ellipsis;
1133
- white-space: nowrap;
1134
- }
1135
- .rg-feedback-row-context[data-current-page="true"] {
1136
- color: var(--rg-text-primary);
1137
- }
1138
- .rg-feedback-row-detail {
1139
- display: flex;
1140
- align-items: center;
1141
- min-width: 0;
1142
- color: var(--rg-text-secondary);
1143
- }
1144
- .rg-feedback-row-meta {
1145
- overflow: hidden;
1146
- color: var(--rg-text-secondary);
1147
- font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
1148
- text-overflow: ellipsis;
1149
- white-space: nowrap;
1150
- }
1151
- .rg-feedback-row-trailing {
1152
- display: flex;
1153
- align-items: center;
1154
- min-width: 0;
1155
- margin-left: 6px;
1156
- gap: 6px;
1157
- color: var(--rg-text-secondary);
1158
- font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
1159
- white-space: nowrap;
1160
- }
1161
- .rg-feedback-row-move {
1162
- display: inline-flex;
1163
- align-items: center;
1164
- gap: 2px;
1165
- color: var(--review-accent);
1166
- }
1167
- .rg-feedback-row-move svg {
1168
- width: 11px;
1169
- height: 11px;
1170
- }
1171
- .rg-feedback-row-location-missing {
1172
- display: flex;
1173
- align-items: center;
1174
- justify-content: center;
1175
- width: 12px;
1176
- height: 12px;
1177
- color: var(--review-accent);
1178
- }
1179
- .rg-feedback-row-location-missing svg {
1180
- width: 12px;
1181
- height: 12px;
1182
- }
1183
- .rg-feedback-row-replies,
1184
- .rg-feedback-row-status {
1185
- display: inline-flex;
1186
- align-items: center;
1187
- min-height: 14px;
1188
- }
1189
- .rg-feedback-row-status {
1190
- width: 12px;
1191
- height: 12px;
1192
- }
1193
- .rg-feedback-row-status svg {
1194
- width: 12px;
1195
- height: 12px;
1196
- }
1197
-
1198
- .rg-feedback-navigator-state,
1199
- .rg-feedback-navigator-empty {
1200
- display: flex;
1201
- align-items: center;
1202
- justify-content: center;
1203
- min-height: 52px;
1204
- padding: 10px;
1205
- color: var(--rg-text-secondary);
1206
- text-align: center;
1207
- }
1208
- .rg-feedback-navigator-state[data-state="reconnecting"] {
1209
- min-height: 0;
1210
- padding: 5px 8px;
1211
- border-bottom: .5px solid var(--rg-border-subtle);
1212
- color: var(--rg-text-secondary);
1213
- background: var(--rg-surface-hover);
1214
- font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
1215
- }
1216
- .rg-feedback-navigator-state[data-state="loading"]::before {
1217
- width: 12px;
1218
- height: 12px;
1219
- margin-right: 8px;
1220
- border: 1.5px solid var(--rg-border-subtle);
1221
- border-top-color: var(--rg-text-secondary);
1222
- border-radius: 50%;
1223
- content: '';
1224
- animation: rg-feedback-spinner 700ms linear infinite;
1225
- }
1226
- .rg-feedback-navigator-state[data-state="error"] {
1227
- flex-wrap: wrap;
1228
- gap: 8px;
1229
- }
1230
- .rg-feedback-navigator-retry {
1231
- display: inline-flex;
1232
- align-items: center;
1233
- justify-content: center;
1234
- min-height: 17px;
1235
- padding: 1px 4px;
1236
- border: .5px solid var(--rg-border-subtle);
1237
- border-radius: 4px;
1238
- color: var(--rg-text-primary);
1239
- background: var(--rg-panel-bg);
1240
- transition:
1241
- background 150ms var(--rg-ease-drawer),
1242
- transform 400ms var(--rg-ease-spring);
1243
- }
1244
-
1245
- .rg-feedback-list-tool:focus-visible,
1246
- .rg-feedback-navigator-close:focus-visible,
1247
- .rg-feedback-scope:focus-visible,
1248
- .rg-feedback-filter:focus-visible,
1249
- .rg-feedback-row:focus-visible,
1250
- .rg-feedback-navigator-retry:focus-visible {
1251
- outline: 2px solid var(--review-accent);
1252
- outline-offset: 2px;
1253
- }
1254
- .rg-feedback-row:focus-visible {
1255
- outline-offset: -2px;
1256
- }
1257
-
1258
- @media (hover: hover) and (pointer: fine) {
1259
- .rg-feedback-navigator-close:hover,
1260
- .rg-feedback-scope:hover,
1261
- .rg-feedback-filter:hover,
1262
- .rg-feedback-navigator-retry:hover {
1263
- color: var(--rg-text-primary);
1264
- background: var(--rg-surface-hover);
1265
- }
1266
- .rg-feedback-row:hover { background: var(--rg-surface-hover); }
1267
- .rg-feedback-navigator-close:active,
1268
- .rg-feedback-scope:active,
1269
- .rg-feedback-filter:active,
1270
- .rg-feedback-navigator-retry:active {
1271
- transform: scale(.96);
1272
- transition-duration: 60ms;
1273
- }
1274
- .rg-feedback-row:active {
1275
- background: var(--rg-surface-hover);
1276
- transform: translateY(1px);
1277
- transition-duration: 60ms;
1278
- }
1279
- }
1280
-
1281
- @media (max-width: 640px) {
1282
- .pin::after {
1283
- top: 50%;
1284
- left: 50%;
1285
- width: 44px;
1286
- height: 44px;
1287
- transform: translate(-50%, -50%);
1288
- }
1289
- .rg-feedback-navigator-scrim {
1290
- display: block;
1291
- }
1292
- .rg-feedback-navigator-scrim[data-motion="enter"] {
1293
- animation: rg-feedback-scrim-enter 160ms ease-out both;
1294
- }
1295
- .rg-feedback-navigator {
1296
- right: auto;
1297
- bottom: calc(max(16px, env(safe-area-inset-bottom)) + 38px);
1298
- left: 50%;
1299
- width: min(360px, calc(100vw - 16px));
1300
- max-height: min(70dvh, 480px);
1301
- border-radius: 14px;
1302
- transform: translateX(-50%);
1303
- }
1304
- .rg-feedback-navigator[data-motion="enter"] {
1305
- animation: rg-feedback-sheet-enter 220ms var(--rg-ease-drawer) both;
1306
- }
1307
- .rg-feedback-navigator-header { min-height: 44px; padding-top: 5px; }
1308
- .rg-feedback-navigator-content { -webkit-overflow-scrolling: touch; }
1309
- .rg-feedback-scope { min-height: 44px; }
1310
- .rg-feedback-filter { min-height: 44px; }
1311
- .rg-feedback-row { min-height: 56px; padding-top: 8px; padding-bottom: 8px; }
1312
- .rg-feedback-navigator-close,
1313
- .rg-feedback-navigator-retry { min-width: 44px; min-height: 44px; }
1314
- }
1315
-
1316
- @media (hover: none), (pointer: coarse) {
1317
- .rg-feedback-list-tool svg {
1318
- width: 14px;
1319
- height: 14px;
1320
- }
1321
- .pin::after {
1322
- top: 50%;
1323
- left: 50%;
1324
- width: 44px;
1325
- height: 44px;
1326
- transform: translate(-50%, -50%);
1327
- }
1328
- .rg-feedback-filter { min-height: 44px; }
1329
- .rg-feedback-scope { min-height: 44px; }
1330
- .rg-feedback-row { min-height: 56px; }
1331
- .rg-feedback-navigator-close,
1332
- .rg-feedback-navigator-retry { min-width: 44px; min-height: 44px; }
1333
- }
1334
-
1335
- @media (prefers-reduced-motion: reduce) {
1336
- .pin,
1337
- .rg-feedback-navigator-scrim,
1338
- .rg-feedback-navigator,
1339
- .rg-feedback-navigator *,
1340
- .rg-feedback-list-tool {
1341
- animation: none !important;
1342
- transition: none !important;
1343
- }
1344
- }
1345
-
1346
- @media (forced-colors: active) {
1347
- .pin,
1348
- .pin[data-resolved="true"],
1349
- .pin[data-resolved="true"][data-active="true"] {
1350
- border-color: Canvas;
1351
- color: Canvas;
1352
- background: CanvasText;
1353
- box-shadow: 0 0 0 1px CanvasText;
1354
- }
1355
- .pin[data-active="true"],
1356
- .pin:focus-visible {
1357
- outline: 3px solid Highlight;
1358
- outline-offset: 3px;
1359
- }
1360
- }
1361
-
1362
- @keyframes rg-feedback-navigator-enter {
1363
- from { opacity: 0; transform: translateY(2px) scale(.92); }
1364
- to { opacity: 1; transform: translateY(0) scale(1); }
1365
- }
1366
- @keyframes rg-feedback-sheet-enter {
1367
- from { opacity: 0; transform: translate(-50%, 12px) scale(.98); }
1368
- to { opacity: 1; transform: translate(-50%, 0) scale(1); }
1369
- }
1370
- @keyframes rg-feedback-scrim-enter {
1371
- from { opacity: 0; }
1372
- to { opacity: 1; }
1373
- }
1374
- @keyframes rg-feedback-spinner {
1375
- to { transform: rotate(360deg); }
1376
- }
1377
-
1378
-
1379
- .rg-collaboration-cursors { position: fixed; inset: 0; z-index: 2147483645; pointer-events: none; }
1380
- .rg-collaboration-cursor { position: fixed; transform: translate(-2px, -2px); color: var(--rg-peer-color); }
1381
- .rg-collaboration-cursor-pointer {
1382
- width: 14px; height: 18px; background: currentColor;
1383
- clip-path: polygon(0 0, 100% 68%, 58% 72%, 40% 100%);
1384
- filter: drop-shadow(0 1px 1px rgba(0,0,0,.28));
1385
- }
1386
- .rg-collaboration-cursor-label {
1387
- margin: -1px 0 0 11px; padding: 2px 6px; border-radius: 0 6px 6px 6px;
1388
- color: #fff; background: var(--rg-peer-color); white-space: nowrap;
1389
- font: 600 11px/16px Geist, ui-sans-serif, system-ui, sans-serif;
1390
- text-shadow: 0 1px 1px rgba(0,0,0,.18);
1391
- }
1392
- .rg-collaboration-cursor-chat {
1393
- position: absolute; left: 11px; top: 22px; width: max-content;
1394
- max-width: min(260px, calc(100vw - 24px)); padding: 7px 9px;
1395
- border-radius: 3px 10px 10px 10px;
1396
- color: #fff; background: var(--rg-peer-color); white-space: pre-wrap; overflow-wrap: anywhere;
1397
- font: 600 13px/18px Geist, ui-sans-serif, system-ui, sans-serif;
1398
- box-shadow: 0 3px 14px rgba(0,0,0,.2);
1399
- }
1400
- .rg-collaboration-cursor[data-horizontal="left"] .rg-collaboration-cursor-chat {
1401
- right: 12px; left: auto; border-radius: 10px 3px 10px 10px;
1402
- }
1403
- .rg-collaboration-cursor[data-vertical="above"] .rg-collaboration-cursor-chat {
1404
- top: auto; bottom: 20px; border-bottom-left-radius: 3px; border-top-left-radius: 10px;
1405
- }
1406
- .rg-collaboration-cursor-chat-page {
1407
- margin-bottom: 2px; opacity: .72; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
1408
- font: 500 10px/14px Geist, ui-sans-serif, system-ui, sans-serif;
1409
- }
1410
- .rg-collaboration-cursor-chat-body { white-space: pre-wrap; overflow-wrap: anywhere; }
1411
- .rg-collaboration-participants {
1412
- all: unset; box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center;
1413
- flex: none; width: 28px; height: 28px; color: var(--rg-text-secondary);
1414
- font: 600 10px/1 Geist, ui-sans-serif, system-ui, sans-serif;
1415
- }
1416
- .rg-collaboration-participants[hidden] { display: none; }
1417
- .rg-cursor-chat-mobile-trigger {
1418
- all: unset; box-sizing: border-box; display: none; align-items: center; justify-content: center;
1419
- flex: none; min-width: 44px; height: 44px; padding: 0 8px; cursor: pointer;
1420
- color: var(--rg-text-secondary); font: 600 11px/1 Geist, ui-sans-serif, system-ui, sans-serif;
1421
- }
1422
- .rg-cursor-chat-mobile-trigger:focus-visible {
1423
- outline: 2px solid var(--review-accent); outline-offset: 2px;
1424
- }
1425
- .rg-cursor-chat-composer {
1426
- position: fixed; z-index: 2147483646; display: grid; gap: 5px;
1427
- width: min(260px, calc(100vw - 24px)); padding: 7px; border: 0;
1428
- border-left: 3px solid var(--rg-local-color); border-radius: 5px 13px 13px 13px;
1429
- color: var(--rg-text-primary); background: var(--rg-panel-bg);
1430
- box-shadow: 0 8px 28px rgba(0,0,0,.22), 0 0 0 1px var(--rg-border-subtle);
1431
- font: 13px/18px Geist, ui-sans-serif, system-ui, sans-serif;
1432
- }
1433
- .rg-cursor-chat-composer::before {
1434
- position: absolute; top: 8px; left: -6px; width: 9px; height: 9px;
1435
- border-radius: 2px; background: var(--rg-local-color); content: ''; transform: rotate(45deg);
1436
- }
1437
- .rg-cursor-chat-composer[data-horizontal="left"] {
1438
- border-right: 3px solid var(--rg-local-color); border-left: 0;
1439
- border-radius: 13px 5px 13px 13px;
1440
- }
1441
- .rg-cursor-chat-composer[data-horizontal="left"]::before { right: -6px; left: auto; }
1442
- .rg-cursor-chat-composer[hidden] { display: none; }
1443
- .rg-cursor-chat-header { display: flex; align-items: center; min-width: 0; padding: 1px 6px 3px; gap: 7px; }
1444
- .rg-cursor-chat-header strong { overflow: hidden; color: var(--rg-local-color); font: 650 11px/15px Geist, ui-sans-serif, system-ui, sans-serif; text-overflow: ellipsis; white-space: nowrap; }
1445
- .rg-cursor-chat-header span { margin-left: auto; color: var(--rg-text-secondary); font: 500 9px/13px Geist, ui-sans-serif, system-ui, sans-serif; white-space: nowrap; }
1446
- .rg-cursor-chat-preview { padding: 4px 7px; border-radius: 8px; color: var(--rg-text-primary); background: color-mix(in srgb, var(--rg-local-color) 10%, transparent); overflow-wrap: anywhere; }
1447
- .rg-cursor-chat-preview[hidden] { display: none; }
1448
- .rg-cursor-chat-input {
1449
- all: unset; box-sizing: border-box; width: 100%; min-height: 32px; padding: 6px 8px;
1450
- border-radius: 8px; color: var(--rg-text-primary); background: var(--rg-panel-secondary);
1451
- font: inherit;
1452
- }
1453
- .rg-cursor-chat-input::placeholder { color: var(--rg-text-secondary); }
1454
- .rg-cursor-chat-input:focus, .rg-cursor-chat-input:focus-visible { outline: none; }
1455
- .rg-cursor-chat-announcements {
1456
- position: fixed; width: 1px; height: 1px; overflow: hidden;
1457
- clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap;
1458
- }
1459
- @media (pointer: coarse) {
1460
- .rg-cursor-chat-mobile-trigger { display: inline-flex; }
1461
- .rg-cursor-chat-composer {
1462
- right: 12px; bottom: 64px; left: 12px !important; top: auto !important; width: auto;
1463
- border-right: 0; border-left: 3px solid var(--rg-local-color); border-radius: 5px 13px 13px 13px;
1464
- }
1465
- .rg-cursor-chat-composer::before { right: auto; left: -6px; }
1466
- }
1467
- `;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=Cn,o.addEventListener(`click`,this.#Fe),o.addEventListener(`keydown`,this.#Ie);let s=Z(`rg-visually-hidden`);s.dataset.slot=`announcer`,s.setAttribute(`aria-live`,`polite`),s.setAttribute(`aria-atomic`,`true`);let c=Ue({developerGrab:this.#t?.developerTools?.codeContextCopy===!0}),l=Yn(this.#t?.position);c.dataset.position=l,c.dataset.mobilePosition=Xn(l),c.style.setProperty(`--rg-toolbar-offset-x`,`${Qn(this.#t?.offset?.x)}px`),c.style.setProperty(`--rg-toolbar-offset-y`,`${Qn(this.#t?.offset?.y)}px`),c.querySelector(`.rg-toolbar-actions`)?.append(kt(0,{controlsId:Cn,presentation:this.#Te()})),c.querySelector(`.rg-feedback-tool`)?.addEventListener(`click`,()=>{if(!this.#_e()){this.#b||this.#ye(!0),this.#Be(this.#ve());return}if(this.#b&&this.#ye(!1,{restoreFocus:!1,restoreComposer:!0}))return;if(this.#h){this.#Be(`피드백을 저장하는 중입니다.`);return}if(this.#s&&this.#c===`react-grab`&&this.#g){this.#he(!1);return}let e=this.#s&&this.#c===`feedback`;this.#he(!e,`feedback`)}),c.querySelector(`.rg-developer-grab-tool`)?.addEventListener(`click`,()=>{if(this.#z){this.#Be(`코드 컨텍스트를 복사하는 중입니다.`);return}if(this.#h){this.#Be(`피드백을 저장하는 중입니다.`);return}this.#b&&this.#ye(!1,{restoreFocus:!1});let e=this.#s&&this.#c===`react-grab`;e||this.#be(),this.#he(!e,`react-grab`)}),c.querySelector(`.rg-feedback-list-tool`)?.addEventListener(`click`,()=>{this.#ye(!this.#b)}),c.querySelector(`.rg-collapse`)?.addEventListener(`click`,()=>{let e=c.dataset.collapsed===`true`;!e&&this.#s&&this.#he(!1),!e&&this.#b&&this.#ye(!1,{restoreFocus:!1}),ct(c,!e)}),this.#e.append(t,n,r,i,a,o,s,c),this.#t&&this.#j&&lt({toolbar:c,position:l,offset:{x:Qn(this.#t.offset?.x),y:Qn(this.#t.offset?.y)},storageKey:tt(this.#t.session.projectId,this.#t.session.reviewerId),signal:this.#j.signal,onDragStart:()=>{this.#s&&this.#he(!1),this.#b&&this.#ye(!1,{restoreFocus:!1})}})}#fe(){let e=this.#t?.collaboration,t=e?.repository;if(!this.#t||!t||!e.cursors&&!e.chat)return;let n=e.roomId??e.scopeId;this.#i=Ie({root:this.#e,pageId:this.#t.pageId,pathname:$n(window.location.pathname),roomId:n,session:this.#t.session,repository:t,cursors:e.cursors,chat:e.chat,canOpenChat:()=>this.#pe(),onFailure:e=>{e.type===`access-lost`?(this.#i?.stop(),this.#i=null,this.#oe(e)):this.#Be(`실시간 협업 연결이 불안정합니다. 다시 연결하는 중입니다.`)}}),this.#i.start()}#pe(){return this.#h||this.#z?!1:(this.#s&&this.#he(!1),this.#b&&this.#ye(!1,{restoreFocus:!1,restoreComposer:!1}),this.#d&&(this.#be(),this.#kt()),this.#_&&this.#yt(!1,!1),!this.#s&&!this.#b&&!this.#d&&!this.#_)}#me(){this.#Et(),this.#kt(),this.#Se(),this.#we(),this.#ge(),this.#gt(),this.#vt()}#he(e,t=`feedback`){let n=this.#c;if(e&&(this.#k+=1),e&&t===`feedback`&&!this.#_e()){this.#b||this.#ye(!0),this.#Be(this.#ve());return}if(e&&t===`feedback`&&this.#h){this.#Be(`피드백을 저장하는 중입니다.`);return}if(e&&t===`feedback`&&this.#g){this.#_?this.#yt(!1):this.#xe(),this.#Be(`작성 중인 피드백을 복원했습니다.`);return}if(e&&this.#s){this.#c=t,this.#l=null,this.#u=null,this.#Ct(),this.#ge();return}this.#s=e,this.#c=e?t:null,this.#ge(),e?(this.#_=null,this.#v=null,this.#d=null,this.#f=``,this.#p=``,this.#m=null,this.#Ct(),document.addEventListener(`pointermove`,this.#Ue,!0),document.addEventListener(`pointerdown`,this.#We,!0),document.addEventListener(`pointerup`,this.#Ge,!0),document.addEventListener(`pointercancel`,this.#Ke,!0),document.addEventListener(`keydown`,this.#qe,!0),this.#P={value:document.body.style.getPropertyValue(`cursor`),priority:document.body.style.getPropertyPriority(`cursor`)},document.body.style.setProperty(`cursor`,`crosshair`),this.#M=oe(this.#t?.styleNonce),queueMicrotask(()=>this.#et())):(document.removeEventListener(`pointermove`,this.#Ue,!0),document.removeEventListener(`pointerdown`,this.#We,!0),document.removeEventListener(`pointerup`,this.#Ge,!0),document.removeEventListener(`pointercancel`,this.#Ke,!0),document.removeEventListener(`keydown`,this.#qe,!0),this.#P&&=(ar(document.body,`cursor`,this.#P),null),this.#M?.(),this.#M=null,this.#l=null,this.#u=null,this.#Ct()),this.#kt(),!e&&n===`react-grab`&&this.#xe()}#ge(){let e=this.#e.querySelector(`.rg-toolbar`),t=this.#e.querySelector(`[data-slot="pins"]`),n=this.#e.querySelector(`.rg-feedback-tool`),r=this.#e.querySelector(`.rg-developer-grab-tool`),i=this.#s&&this.#c===`feedback`,a=this.#s&&this.#c===`react-grab`;e&&(e.dataset.selecting=String(this.#s)),t&&(t.dataset.selectionSuppressed=String(this.#s),t.toggleAttribute(`inert`,this.#s),t.setAttribute(`aria-hidden`,String(this.#s))),n&&(n.setAttribute(`aria-pressed`,String(i)),n.setAttribute(`aria-label`,i?`선택 취소`:`피드백 위치 선택`),n.setAttribute(`aria-disabled`,String(!this.#_e()))),r&&(r.setAttribute(`aria-pressed`,String(a)),r.setAttribute(`aria-label`,a?`코드 선택 취소`:`React Grab 코드 선택`),r.setAttribute(`aria-disabled`,String(this.#z)))}#_e(){return!this.#D&&this.#w===`ready`&&this.#a!==null}#ve(){return this.#D?`다시 인증하세요.`:this.#w===`loading`?`불러오는 중입니다.`:`다시 시도하세요.`}#ye(e,t={}){let n=t.restoreFocus??!0,r=t.restoreComposer??!0;if(e===this.#b)return!1;if(e)return this.#k+=1,this.#s&&this.#he(!1),this.#be(),this.#b=!0,this.#kt(),this.#Se(),this.#we(),queueMicrotask(()=>this.#Oe()),!1;(t.cancelNavigation??!0)&&(this.#k+=1),this.#b=!1,this.#N?.(),this.#N=null,this.#kt(),this.#Se(),this.#we(),queueMicrotask(()=>this.#bt());let i=r&&this.#xe();return n&&!i&&queueMicrotask(()=>this.#ke()?.focus()),i}#be(){if(!this.#d)return!1;let e=this.#e.querySelector(`.rg-selection-label:not(.rg-thread-label) textarea`);return this.#g={target:this.#d,body:e?.value??this.#f},this.#d=null,this.#f=``,!0}#xe(){if(!this.#g||this.#b||this.#_)return!1;let e=this.#g;return this.#g=null,this.#d=e.target,this.#f=e.body,this.#kt(),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}#Se(){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=t?.dataset.presentation===`sheet`&&t.dataset.detailOpen===`true`,o=this.#b&&!!this.#_&&this.#Te()===`sheet`,s=n&&!a&&!o?n.scrollTop:this.#x;this.#x=s;let c=this.#e.activeElement instanceof HTMLElement?this.#e.activeElement:null,l=c?.closest(`.rg-feedback-row[data-comment-id]`)?.dataset.commentId,u=c?.closest(`[data-feedback-filter]`)?.dataset.feedbackFilter,d=c?.closest(`[data-feedback-scope]`)?.dataset.feedbackScope,f=!!c?.closest(`.rg-feedback-navigator-close`),p=!!c?.closest(`.rg-feedback-navigator-retry`),m=c instanceof HTMLTextAreaElement&&c.closest(`.rg-feedback-navigator-detail`)!==null?c:null,h=m?{start:m.selectionStart,end:m.selectionEnd,direction:m.selectionDirection}:null,g=t?.querySelector(`.rg-feedback-navigator-detail .rg-thread-messages`)?.scrollTop??0;if(e.replaceChildren(),!this.#b){this.#x=0;return}let _=this.#Te(),v=Z(`rg-feedback-navigator-scrim`);v.dataset.motion=i,v.dataset.feedbackNavigatorAction=`close`,v.setAttribute(`aria-hidden`,`true`);let y=At(this.#Ce(),{id:wn,presentation:_});y.dataset.motion=i;let b=_===`sheet`&&this.#_?this.#a?.comments.find(({id:e})=>e===this.#_):null;if(y.dataset.detailOpen=String(!!this.#_),b){y.removeAttribute(`aria-labelledby`),y.setAttribute(`aria-label`,`피드백 상세`),[...y.children].forEach(e=>{e instanceof HTMLElement&&(e.inert=!0)});let e=Z(`rg-feedback-navigator-detail`),t=this.#Nt(b);t.classList.add(`rg-feedback-navigator-thread`);let n=t.querySelector(`.rg-thread-close`);n&&(n.classList.add(`rg-feedback-navigator-back`),n.setAttribute(`aria-label`,`피드백 목록으로 돌아가기`),n.replaceChildren(qn()),n.closest(`.rg-tag-row`)?.prepend(n)),e.append(t),y.append(e)}e.append(v,y),this.#De(_),queueMicrotask(()=>this.#Ee()),queueMicrotask(()=>{if(!this.#b)return;let t=e.querySelector(`.rg-feedback-navigator-content`);if(t&&(t.scrollTop=s),b){let e=y.querySelector(`.rg-feedback-navigator-detail .rg-thread-messages`);if(e&&(e.scrollTop=g),m&&h){let e=y.querySelector(`.rg-feedback-navigator-detail textarea`);e?.focus({preventScroll:!0}),e?.setSelectionRange(h.start,h.end,h.direction);return}}if(l){let e=this.#Ae(l);e?e.focus({preventScroll:!0}):this.#Oe()}else if(u&&Wn(u))e.querySelector(`[data-feedback-filter="${u}"]`)?.focus({preventScroll:!0});else if(d&&Gn(d))e.querySelector(`[data-feedback-scope="${d}"]`)?.focus({preventScroll:!0});else if(f)e.querySelector(`.rg-feedback-navigator-close`)?.focus({preventScroll:!0});else if(p){let t=e.querySelector(`.rg-feedback-navigator-retry`);t?t.focus({preventScroll:!0}):this.#Oe()}else _===`sheet`&&r!==`sheet`&&this.#Oe()})}#Ce(){let e=this.#je(),t=e.comments.filter(e=>this.#Me(e)),n=this.#S===`current`?t:e.comments,r=new Set(n.map(({id:e})=>e)),i=bt({pageId:e.pageId,comments:n,replies:e.replies.filter(({commentId:e})=>r.has(e))},this.#C),a=this.#t?.now?.()??Date.now(),o=this.#A&&this.#w===`ready`?`reconnecting`:this.#w;return{scope:this.#S,scopeCounts:{current:t.length,all:e.comments.length},filter:this.#C,counts:i.counts,rows:i.rows.map(({comment:e,pinNumber:t,replyCount:n,lastActivityAt:r})=>({id:e.id,pageId:e.pageId,pinNumber:t,pageLabel:this.#Pe(e),pageUrl:tr(e)?.href,currentPage:this.#Me(e),targetLabel:this.#Ne(e),authorName:e.authorName,body:e.body,timeLabel:nr(r,a),replyCount:n,status:e.status,locationAvailable:!this.#Me(e)||q(e).available})),activeCommentId:this.#_,loadState:o,errorMessage:this.#T,errorRecovery:this.#E}}#we(){let e=this.#ke();if(!e)return;let t=this.#je().comments.length;e.setAttribute(`aria-label`,`피드백 목록, 총 ${t}개`);let n=e.querySelector(`[data-feedback-count]`);n&&(n.textContent=String(t),n.hidden=t===0);let r=e.closest(`.rg-action-wrap`)?.querySelector(`.rg-tooltip`);r&&(r.textContent=`피드백 ${t}개`),e.setAttribute(`aria-expanded`,String(this.#b)),e.setAttribute(`aria-controls`,Cn),this.#Te()===`sheet`?e.setAttribute(`aria-haspopup`,`dialog`):e.removeAttribute(`aria-haspopup`),e.removeAttribute(`aria-pressed`)}#Te(){return window.matchMedia?.(`(max-width: 640px)`).matches||window.innerWidth<=640?`sheet`:`tray`}#Ee(){let e=this.#e.querySelector(`.rg-feedback-navigator`),t=this.#ke(),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||r.height<=0||a<=0)return;let o=Zn(Yn(n.dataset.position)),s=r.left+r.width/2,c=r.top+r.height/2;if(o===`top`||o===`bottom`){let t=Jn(s-a/2,8,Math.max(8,window.innerWidth-a-8));e.style.left=`${t}px`,e.style.right=`auto`,o===`top`?(e.style.top=`${Math.max(8,i.bottom+8)}px`,e.style.bottom=`auto`):(e.style.top=`auto`,e.style.bottom=`${Math.max(8,window.innerHeight-i.top+8)}px`);let n=`${Jn(s-t,16,a-16)}px`;e.style.setProperty(`--rg-navigator-origin`,o===`top`?`${n} -8px`:`${n} calc(100% + 8px)`)}else{let t=e.offsetHeight;if(t<=0)return;let n=Jn(c-t/2,8,Math.max(8,window.innerHeight-t-8)),r=o===`left`?Math.min(window.innerWidth-a-8,i.right+8):Math.max(8,i.left-a-8);e.style.top=`${n}px`,e.style.right=`auto`,e.style.bottom=`auto`,e.style.left=`${Math.max(8,r)}px`,e.style.setProperty(`--rg-navigator-origin`,o===`left`?`-8px 50%`:`calc(100% + 8px) 50%`)}}#De(e){if(e!==`sheet`){this.#N?.(),this.#N=null;return}if(this.#N)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?ir(r,`visibility`):null;r&&r.style.setProperty(`visibility`,`hidden`);let a=ir(document.body,`overflow`),o=ir(document.documentElement,`overflow`),s=e=>{let t=this.#e.querySelector(`.rg-feedback-navigator`);!t||e.composedPath().includes(t)||queueMicrotask(()=>this.#Oe())};document.addEventListener(`focusin`,s,!0),document.body.style.setProperty(`overflow`,`hidden`),document.documentElement.style.setProperty(`overflow`,`hidden`),this.#N=()=>{n.forEach(({element:e,inert:t})=>{e.inert=t}),r&&i&&ar(r,`visibility`,i),document.removeEventListener(`focusin`,s,!0),ar(document.body,`overflow`,a),ar(document.documentElement,`overflow`,o)}}#Oe(){if(!this.#b)return;let e=this.#e.querySelector(`.rg-feedback-navigator-detail .rg-thread-label`);if(e){e.focus({preventScroll:!0});return}let t=this.#_?this.#Ae(this.#_):null,n=this.#e.querySelector(`.rg-feedback-row`),r=this.#e.querySelector(`.rg-feedback-navigator-retry`),i=this.#e.querySelector(`.rg-feedback-navigator-close`);(t??n??r??i)?.focus({preventScroll:!0})}#ke(){return this.#e.querySelector(`.rg-feedback-list-tool`)}#Ae(e){return[...this.#e.querySelectorAll(`.rg-feedback-row[data-comment-id]`)].find(({dataset:t})=>t.commentId===e)}#je(){let e=this.#a??{pageId:this.#t?.pageId??``,comments:[],replies:[]},t=this.#o;if(!t)return e;let n=this.#t?.pageId??e.pageId,r=t.comments.filter(({pageId:e})=>e!==n),i=new Set(r.map(({id:e})=>e)),a=new Set(e.comments.map(({id:e})=>e));return{pageId:n,comments:[...r.filter(({id:e})=>!a.has(e)),...e.comments],replies:[...t.replies.filter(({commentId:e})=>i.has(e)),...e.replies]}}#Me(e){return e.pageId===this.#t?.pageId}#Ne(e){return Kt(e.target)}#Pe(e){let t=tr(e);if(t)return er(t);let n=this.#o?.pages?.find(({id:t})=>t===e.pageId);return n?.name.trim()?n.name.trim():e.target.pageTitle.trim()||`알 수 없는 페이지`}#Fe=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.#ye(!1);return}if(n===`retry`){this.#te();return}if(n===`filter`){let e=t.dataset.feedbackFilter;if(!Wn(e)||e===this.#C)return;this.#C=e,this.#Se();return}if(n===`scope`){let e=t.dataset.feedbackScope;if(!Gn(e)||e===this.#S)return;this.#S=e,this.#C=`all`,this.#Se();return}n===`open-comment`&&t.dataset.commentId&&this.#Le(t.dataset.commentId,{origin:`navigator`,navigate:!0})}};#Ie=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.#Te()!==`sheet`)return;let r=this.#e.querySelector(`.rg-feedback-navigator`),i=r?[...r.querySelectorAll(`button:not(:disabled), [tabindex]:not([tabindex="-1"])`)].filter(e=>!e.closest(`[inert]`)):[];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#Le(e,t){let n=this.#je().comments.find(({id:t})=>t===e);if(!n)return;if(t.origin===`navigator`){let e=this.#e.querySelector(`.rg-feedback-navigator-content`);e&&(this.#x=e.scrollTop)}this.#s&&this.#he(!1);let r=++this.#k,i=t.navigate&&!this.#Me(n),a=i?tr(n):null,o=!!(a&&a.origin===window.location.origin);if(t.origin===`navigator`&&this.#b&&i&&o&&(this.#ye(!1,{restoreFocus:!1,restoreComposer:!1,cancelNavigation:!1}),await rr()),r!==this.#k||!this.#j)return;if(!this.#je().comments.some(({id:t})=>t===e)){this.#Re();return}let s=t.origin===`navigator`&&this.#b&&this.#Te()===`sheet`;s&&(this.#N?.(),this.#N=null);let c=!0;try{t.navigate&&(c=await this.#ze(n))}finally{s&&this.#b&&this.#De(`sheet`)}if(c&&r===this.#k){if(!this.#je().comments.some(({id:t})=>t===e)){this.#Re();return}if(this.#d=null,this.#_=e,this.#v=t.origin,this.#me(),!q(n).available)this.#Be(`현재 화면에서 피드백 위치를 찾을 수 없습니다.`);else if(t.announceOpened){let e=bt(this.#je()).pinNumberByCommentId.get(n.id)??1;this.#Be(`피드백 #${e} 대화를 열었습니다.`)}queueMicrotask(()=>this.#e.querySelector(`.rg-thread-label`)?.focus({preventScroll:!0}))}}#Re(){if(this.#g&&this.#b&&this.#Te()===`sheet`){this.#ye(!1,{restoreFocus:!1,cancelNavigation:!1});return}!this.#b&&this.#xe()||queueMicrotask(()=>{this.#b?this.#Oe():this.#ke()?.focus({preventScroll:!0})})}async#ze(e){if(!this.#Me(e)){let t=tr(e);if(!t||t.origin!==window.location.origin)return this.#Be(`이 피드백의 페이지로 이동할 수 없습니다.`),!1;this.#Be(`${$n(t.pathname)} 페이지로 이동합니다.`),this.#y=e.id;try{this.#t?.onNavigateToFeedback?await this.#t.onNavigateToFeedback(t.href,e):window.location.assign(t.href)}catch{this.#y=null,this.#Be(`피드백 페이지로 이동하지 못했습니다.`)}return!1}let t=q(e);if(!t.available||t.pageY===null)return!0;let n=window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches?`auto`:`smooth`;if(e.target.kind!==`viewport`){let t=A(e.anchor).element;if(t&&typeof t.scrollIntoView==`function`)try{return t.scrollIntoView({block:`center`,inline:`center`,behavior:n}),await rr(),await rr(),!0}catch{}}let r=window.visualViewport?.height??window.innerHeight,i=window.visualViewport?.width??window.innerWidth,a=Math.max(0,t.pageY-r/3),o=Math.max(0,(t.pageX??window.scrollX)-i/2);try{window.scrollTo({left:o,top:a,behavior:n})}catch{}return await rr(),await rr(),!0}#Be(e){let t=this.#e.querySelector(`[data-slot="announcer"]`);t&&(t.textContent=``,queueMicrotask(()=>{t.textContent=e}))}#Ve(e,t=`neutral`){let n=this.#e.querySelector(`.rg-developer-status`);n&&(this.#He(),n.textContent=e,n.dataset.tone=t,n.dataset.visible=`true`,this.#I=window.setTimeout(()=>{this.#I=null,n.isConnected&&(n.dataset.visible=`false`)},1800))}#He(){this.#I!==null&&(window.clearTimeout(this.#I),this.#I=null)}#Ue=e=>{if(!this.#s||this.#Rt(e)||this.#l&&e.pointerId!==this.#u)return;let t=Rn(e);if(this.#l&&kn(this.#l,t)>=6){this.#St(this.#l,t);return}this.#xt(t)};#We=e=>{!this.#s||this.#Rt(e)||e.button!==0||this.#l||(e.preventDefault(),e.stopImmediatePropagation(),this.#l=Rn(e),this.#u=e.pointerId)};#Ge=e=>{if(!this.#s||!this.#l||e.pointerId!==this.#u)return;if(this.#Rt(e)){this.#l=null,this.#u=null,this.#Ct();return}e.preventDefault(),e.stopImmediatePropagation();let t=this.#l,n=this.#c,r=Rn(e),i=kn(t,r)>=6;n===`feedback`&&(this.#d=i?me(t,r):pe(r));let a=n===`react-grab`?this.#Je(t,r,i):[];this.#st(),this.#he(!1),n===`react-grab`?this.#Ye(a):queueMicrotask(()=>this.#e.querySelector(`.rg-selection-label textarea`)?.focus())};#Ke=e=>{!this.#s||!this.#l||e.pointerId!==this.#u||(e.preventDefault(),e.stopImmediatePropagation(),this.#l=null,this.#u=null,this.#Ct())};#qe=e=>{if(!this.#s)return;if(e.key===`Escape`){e.preventDefault(),e.stopImmediatePropagation(),this.#he(!1);return}if(e.key!==`Enter`||e.isComposing||this.#Rt(e)||Mn(e))return;let t=Pn(e);if(!t)return;let n=I(t);if(n.width<=0||n.height<=0)return;e.preventDefault(),e.stopImmediatePropagation();let r=this.#c;r===`feedback`&&(this.#d=fe(t,{clientX:n.left+n.width/2,clientY:n.top+n.height/2})),this.#he(!1),r===`react-grab`?this.#Ye([t]):queueMicrotask(()=>this.#e.querySelector(`.rg-selection-label textarea`)?.focus())};#Je(e,t,n){if(!n){let e=ae(t.clientX,t.clientY);return e?[e]:[]}return he(new DOMRect(Math.min(e.clientX,t.clientX),Math.min(e.clientY,t.clientY),Math.abs(t.clientX-e.clientX),Math.abs(t.clientY-e.clientY))).slice(0,8)}async#Ye(e){if(e.length===0){this.#Be(`선택할 요소를 찾지 못했습니다.`),this.#Ve(`선택할 요소가 없습니다`,`error`),this.#Qe();return}if(!this.#j||this.#z)return;let t=this.#j.signal;this.#z=!0,this.#ge(),this.#Be(`코드 컨텍스트를 복사하는 중입니다.`),this.#Ve(`코드 컨텍스트 복사 중…`);try{let n=this.#Xe(),r=await n;if(t.aborted||n!==this.#B)return;let i=await r.copyElement(e.length===1?e[0]:e);if(t.aborted)return;this.#Be(i?`코드 컨텍스트를 복사했습니다.`:`코드 컨텍스트를 복사하지 못했습니다. 다시 시도하세요.`),this.#Ve(i?`코드 컨텍스트 복사됨`:`복사 실패 · 다시 시도`,i?`neutral`:`error`)}catch{t.aborted||(this.#Be(`코드 컨텍스트를 복사하지 못했습니다. 다시 시도하세요.`),this.#Ve(`복사 실패 · 다시 시도`,`error`))}finally{t.aborted||(this.#z=!1,this.#ge(),this.#Qe())}}#Xe(){if(this.#B)return this.#B;let e=(this.#t?.developerTools?.loadReactGrab??(()=>_t(this.#t?.styleNonce)))();return this.#B=e,e.catch(()=>{this.#B===e&&(this.#B=null)}),e}#Ze(){let e=this.#B;this.#B=null,e&&e.then(e=>e.dispose()).catch(()=>void 0)}#Qe(){this.#d||queueMicrotask(()=>this.#e.querySelector(`.rg-developer-grab-tool`)?.focus({preventScroll:!0}))}#$e=e=>{if(!this.#s)return;if(this.#Rt(e)||Mn(e)){this.#Ct();return}let t=Pn(e);if(!t){this.#Ct();return}let n=I(t);if(n.width<=0||n.height<=0){this.#Ct();return}let r=this.#e.querySelector(`[data-slot="region"]`);r&&(r.style.display=`none`);let i=this.#e.querySelector(`[data-slot="highlight"]`);i&&Q(i,n)};#et(){if(!this.#s)return;let e=Fn(document);if(!e||p(e)||Nn(e))return;let t=I(e);if(t.width<=0||t.height<=0)return;let n=this.#e.querySelector(`[data-slot="highlight"]`);n&&Q(n,t)}#tt=e=>{if(e.key===`Escape`&&!e.isComposing){let t=!!this.#e.activeElement?.closest(`.rg-thread-label`);if(this.#_&&t){e.preventDefault(),e.stopImmediatePropagation(),this.#yt(!0);return}if(this.#b){e.preventDefault(),e.stopImmediatePropagation(),this.#ye(!1);return}if(this.#_){e.preventDefault(),e.stopImmediatePropagation(),this.#yt(!0);return}if(this.#d){if(e.preventDefault(),e.stopImmediatePropagation(),this.#h?.target===this.#d){this.#Be(`피드백을 저장하는 중입니다.`);return}this.#d=null,this.#f=``,this.#p=``,this.#m=null,this.#kt(),queueMicrotask(()=>this.#e.querySelector(`.rg-feedback-tool`)?.focus({preventScroll:!0}));return}}!((e.metaKey||e.ctrlKey)&&!e.shiftKey&&!e.altKey&&(e.code===`KeyC`||e.key.toLowerCase()===`c`))||this.#t?.developerTools?.codeContextCopy!==!0||e.repeat||this.#s||this.#d||this.#_||this.#b||this.#z||this.#F!==null||Mn(e)||Ln(e)||(this.#F=window.setTimeout(()=>{this.#F=null,!(this.#s||this.#d||this.#_||this.#b||this.#h||this.#z)&&this.#it()},100))};#nt=e=>{let t=e.code===`KeyC`||e.key.toLowerCase()===`c`,n=e.key===`Meta`||e.key===`Control`;(t||n)&&this.#rt()};#rt(){this.#F!==null&&(window.clearTimeout(this.#F),this.#F=null)}#it(){if(this.#t?.developerTools?.codeContextCopy!==!0)return;let e=this.#e.querySelector(`.rg-toolbar`);e?.dataset.collapsed===`true`&&ct(e,!1),this.#he(!0,`react-grab`)}#at=e=>{!this.#_||this.#Rt(e)||this.#yt(!1)};#ot=e=>{!this.#R||this.#Rt(e)||(e.preventDefault(),e.stopImmediatePropagation(),this.#ct())};#st(){this.#ct(),this.#R=!0,this.#L=window.setTimeout(()=>{this.#L=null,this.#R=!1},0)}#ct(){this.#L!==null&&(window.clearTimeout(this.#L),this.#L=null),this.#R=!1}#lt=()=>{this.#ut()};#ut(){if(!(!this.#j||this.#V!==null)){if(typeof window.requestAnimationFrame==`function`){this.#H=!0,this.#V=-1;let e=window.requestAnimationFrame(()=>{this.#V=null,this.#dt()});this.#V!==null&&(this.#V=e);return}this.#H=!1,this.#V=window.setTimeout(()=>{this.#V=null,this.#dt()},16)}}#dt(){if(!this.#j)return;this.#G&&(this.#G=!1,this.#pt()),this.#gt(),this.#Ot(),this.#wt(),this.#bt();let e=this.#e.querySelector(`.rg-feedback-navigator`);e&&e.dataset.presentation!==this.#Te()?(this.#kt(),this.#Se(),this.#we()):this.#Ee(),this.#vt()}#ft(){typeof window.ResizeObserver==`function`&&(this.#U=new window.ResizeObserver(this.#lt)),typeof window.MutationObserver==`function`&&(this.#W=new window.MutationObserver(e=>{e.some(({type:e})=>e===`childList`)&&(this.#G=!0),this.#lt()}),this.#pt()),this.#gt()}#pt(){let e=this.#W;if(!e)return;e.disconnect();let t=i();this.#mt(t),this.#ht();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{}}}#mt(e){let t=new Set(e.filter(e=>f(e)&&e!==document));for(let[e,n]of this.#J)t.has(e)||(n(),this.#J.delete(e));for(let e of t){if(this.#J.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.#tt),n(`keyup`,this.#nt),n(`keydown`,this.#qe),n(`pointermove`,this.#Ue),n(`pointerdown`,this.#at),n(`pointerdown`,this.#We),n(`pointerup`,this.#Ge),n(`pointercancel`,this.#Ke),n(`click`,this.#ot),n(`focusin`,this.#$e),n(`scroll`,this.#lt);let r=e.defaultView;r?.addEventListener(`resize`,this.#lt,{passive:!0}),r?.visualViewport?.addEventListener(`scroll`,this.#lt,{passive:!0}),r?.visualViewport?.addEventListener(`resize`,this.#lt,{passive:!0}),this.#J.set(e,()=>{t.forEach(({type:t,listener:n,capture:r})=>{e.removeEventListener(t,n,r)}),r?.removeEventListener(`resize`,this.#lt),r?.visualViewport?.removeEventListener(`scroll`,this.#lt),r?.visualViewport?.removeEventListener(`resize`,this.#lt)})}}#ht(){let e=new Set(a(`iframe`));for(let[t,n]of this.#Y)e.has(t)||(n(),this.#Y.delete(t));for(let t of e){if(this.#Y.has(t))continue;let e=()=>{this.#G=!0,this.#ut()};t.addEventListener(`load`,e),this.#Y.set(t,()=>{t.removeEventListener(`load`,e)})}}#gt(){let e=this.#U;if(!e)return;let t=new Set,n=new Set;for(let e of this.#a?.comments??[]){let n=A(e.anchor).element;n&&In(n,t)}if(this.#d){let e=A(this.#d.anchor).element;e&&In(e,t)}for(let r of this.#q){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.#q.clear(),n.forEach(e=>this.#q.add(e))}#_t(){this.#V!==null&&(this.#H&&typeof window.cancelAnimationFrame==`function`?window.cancelAnimationFrame(this.#V):window.clearTimeout(this.#V),this.#V=null),this.#K!==null&&(window.clearTimeout(this.#K),this.#K=null),this.#U?.disconnect(),this.#U=null,this.#W?.disconnect(),this.#W=null,this.#G=!1,this.#q.clear(),this.#J.forEach(e=>e()),this.#J.clear(),this.#Y.forEach(e=>e()),this.#Y.clear()}#vt(){let e=(this.#a?.comments??[]).some(e=>e.target.kind===`element`&&r(e.anchor.selector)&&!q(e).available);if(!this.#j||!e){this.#K!==null&&(window.clearTimeout(this.#K),this.#K=null);return}this.#K===null&&(this.#K=window.setTimeout(()=>{this.#K=null,this.#G=!0,this.#ut()},750))}#yt(e,t=!0){let n=this.#_;if(!n)return;let r=this.#v;this.#k+=1,this.#_=null,this.#v=null,this.#Et(),this.#kt(),this.#Se(),!(t&&!this.#b&&this.#xe())&&e&&queueMicrotask(()=>{if(r===`navigator`&&this.#b){let e=this.#Ae(n);e?e.focus({preventScroll:!0}):this.#Oe();return}if(r===`navigator`){this.#ke()?.focus({preventScroll:!0});return}let e=[...this.#e.querySelectorAll(`.pin[data-comment-id]`)].find(({dataset:e})=>e.commentId===n);e?e.focus():this.#ke()?.focus({preventScroll:!0})})}#bt(){let e=this.#e.querySelector(`.rg-selection-label`);if(!e)return;if(this.#d){qe(e,qt(this.#d));return}if(!this.#_)return;let t=this.#a?.comments.find(({id:e})=>e===this.#_);t&&(e.removeAttribute(`data-layout`),qe(e,Jt(t)))}#xt(e){let t=ae(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}Q(n,I(t))}#St(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`),Q(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))))}#Ct(){this.#e.querySelectorAll(`.highlight, .region`).forEach(e=>{e.style.display=`none`,e.removeAttribute(`data-context-target`),e.removeAttribute(`data-point`)})}#wt(){if(this.#s)return;if(this.#d){this.#Tt(this.#d);return}let e=this.#a?.comments.find(({id:e})=>e===this.#_);if(e){this.#Tt(e.target);return}this.#Ct()}#Tt(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=A(e.anchor);if(!n.anchored||!n.visible||!n.element)return;let r=I(n.element);t.dataset.contextTarget=`true`,Q(t,r);return}if(n.dataset.contextTarget=`true`,e.kind===`viewport`){n.dataset.point=`true`,Q(n,$t(e));return}Q(n,Xt(e))}}#Et(){let e=this.#e.querySelector(`[data-slot="pins"]`);if(!e)return;let t=this.#e.activeElement instanceof HTMLElement&&this.#e.activeElement.matches(`.pin[data-comment-id]`)?this.#e.activeElement.dataset.commentId:void 0;e.replaceChildren();let n=this.#a;if(!n)return;let r=bt(this.#je()).pinNumberByCommentId,i=this.#Dt(n.comments);n.comments.forEach(t=>{if(!this.#Me(t))return;let n=q(t);if(!n.available||n.pageX===null||n.pageY===null)return;let a=r.get(t.id)??1,o=i.get(t.id)??{x:0,y:0},s=document.createElement(`button`);s.type=`button`,s.className=`pin`,s.dataset.commentId=t.id,s.dataset.resolved=String(t.status===`resolved`),s.dataset.active=String(t.id===this.#_),s.dataset.collided=String(i.has(t.id)),s.style.display=`grid`,s.style.left=`${n.pageX+o.x-window.scrollX}px`,s.style.top=`${n.pageY+o.y-window.scrollY}px`,s.textContent=String(a),s.setAttribute(`aria-label`,`피드백 #${a}: ${t.body.slice(0,80)}`),s.setAttribute(`aria-expanded`,String(t.id===this.#_)),s.setAttribute(`aria-controls`,Yt(t.id)),s.addEventListener(`click`,()=>{if(!this.#s){if(this.#_===t.id){this.#yt(!0);return}this.#Le(t.id,{origin:`pin`,navigate:!1})}}),e.append(s)}),t&&queueMicrotask(()=>{[...e.querySelectorAll(`.pin[data-comment-id]`)].find(({dataset:e})=>e.commentId===t)?.focus({preventScroll:!0})})}#Dt(e){if(!(window.innerWidth<=640||window.matchMedia?.(`(pointer: coarse)`).matches===!0))return new Map;let t=e.flatMap(e=>{if(!this.#Me(e))return[];let t=q(e);return!t.available||t.pageX===null||t.pageY===null?[]:[{comment:e,x:t.pageX,y:t.pageY}]}),n=new Set(t.map((e,t)=>t)),r=new Map;for(;n.size>0;){let e=n.values().next().value;n.delete(e);let i=[e];for(let e=0;e<i.length;e+=1){let r=t[i[e]];for(let e of[...n]){let a=t[e];Math.hypot(a.x-r.x,a.y-r.y)>40||(n.delete(e),i.push(e))}}if(i.length<2)continue;i.sort((e,n)=>Kn(t[e].comment,t[n].comment));let a=i.reduce((e,n)=>({x:e.x+t[n].x/i.length,y:e.y+t[n].y/i.length}),{x:0,y:0}),o=Math.ceil(Math.sqrt(i.length)),s=Math.ceil(i.length/o),c=(o-1)*50/2,l=(s-1)*50/2,u=window.scrollX,d=window.scrollY;if(a.x>=u&&a.x<=u+window.innerWidth&&a.y>=d&&a.y<=d+window.innerHeight){let e=u+17+c,t=u+window.innerWidth-27-c,n=d+30+l,r=d+window.innerHeight-14-l;e<=t&&(a.x=Jn(a.x,e,t)),n<=r&&(a.y=Jn(a.y,n,r))}i.forEach((e,n)=>{let c=Math.floor(n/o),l=n%o,u=Math.min(o,i.length-c*o),d=t[e];r.set(d.comment.id,{x:Math.round(a.x+(l-(u-1)/2)*50-d.x),y:Math.round(a.y+(c-(s-1)/2)*50-d.y)})})}return r}#Ot(){let e=new Map(this.#a?.comments.map(e=>[e.id,e])??[]),t=this.#Dt([...e.values()]),n=[...this.#e.querySelectorAll(`.pin[data-comment-id]`)],r=new Set(n.map(({dataset:e})=>e.commentId??``));if([...e.values()].some(e=>{if(!this.#Me(e)||r.has(e.id))return!1;let t=q(e);return t.available&&t.pageX!==null&&t.pageY!==null})){this.#Et();return}n.forEach(n=>{let r=e.get(n.dataset.commentId??``);if(!r)return;if(!this.#Me(r)){n.style.display=`none`;return}let i=q(r);if(!i.available||i.pageX===null||i.pageY===null){n.style.display=`none`;return}let a=t.get(r.id)??{x:0,y:0};n.dataset.collided=String(t.has(r.id)),n.style.display=`grid`,n.style.left=`${i.pageX+a.x-window.scrollX}px`,n.style.top=`${i.pageY+a.y-window.scrollY}px`})}#kt(){let e=this.#e.querySelector(`[data-slot="panels"]`);if(!e)return;let t=this.#e.activeElement,n=t instanceof HTMLTextAreaElement&&t.closest(`.rg-thread-label`)!==null,r=t instanceof HTMLTextAreaElement&&t.closest(`.rg-selection-label:not(.rg-thread-label)`)!==null,i=n||r?{start:t.selectionStart,end:t.selectionEnd,direction:t.selectionDirection}:null,a=e.querySelector(`.rg-thread-messages`)?.scrollTop??0;if(e.replaceChildren(),this.#d){this.#Tt(this.#d),e.append(this.#At(this.#d)),r&&i&&queueMicrotask(()=>{let t=e.querySelector(`.rg-selection-label:not(.rg-thread-label) textarea`);t?.focus({preventScroll:!0}),t?.setSelectionRange(i.start,i.end,i.direction)});return}let o=this.#a?.comments.find(({id:e})=>e===this.#_);if(o){if(this.#Tt(o.target),this.#b&&this.#Te()===`sheet`)return;e.append(this.#Nt(o)),queueMicrotask(()=>{let t=e.querySelector(`.rg-thread-messages`);if(t&&(t.scrollTop=a),!n||!i)return;let r=e.querySelector(`.rg-thread-label textarea`);r?.focus({preventScroll:!0}),r?.setSelectionRange(i.start,i.end,i.direction)});return}this.#s||this.#Ct()}#At(e){let t=Ge(`피드백`,`변경할 점`,`변경할 점 입력`);qe(t,qt(e));let n=t.querySelector(`textarea`),r=t.querySelector(`.rg-submit`);n.value=this.#f;let i=this.#h?.target===e&&this.#h.body===n.value.trim();n.disabled=i,r.disabled=i||!this.#_e();let a=()=>{n.style.height=`auto`,n.style.height=`${Math.min(n.scrollHeight,95)}px`};return n.addEventListener(`input`,()=>{this.#f=n.value,r.disabled=!this.#_e()||!n.value.trim(),this.#m?.body!==n.value.trim()&&(this.#m=null,this.#p=``,t.querySelector(`.rg-inline-error`)?.remove()),a()}),n.addEventListener(`keydown`,t=>{if(t.key===`Escape`){if(t.preventDefault(),this.#h?.target===e){this.#Be(`피드백을 저장하는 중입니다.`);return}this.#d=null,this.#f=``,this.#p=``,this.#m=null,this.#kt(),queueMicrotask(()=>this.#e.querySelector(`.rg-feedback-tool`)?.focus({preventScroll:!0}))}t.key===`Enter`&&(t.metaKey||t.ctrlKey)&&!t.shiftKey&&!t.altKey&&!t.isComposing&&(t.preventDefault(),r.click())}),r.addEventListener(`click`,()=>void this.#jt(t,e)),this.#p&&jn(t,this.#p),t}async#jt(e,t){if(!this.#t||this.#h||!this.#_e())return;let n=this.#t,r=n.pageId,i=n.repository,a=this.#j?.signal;if(!a)return;let o=e.querySelector(`textarea`),s=e.querySelector(`.rg-submit`),c=o?.value.trim()??``;if(!c||!o||!s)return;s.disabled=!0,o.disabled=!0;let l={target:t,body:c,comment:null};this.#h=l;let u=i.attachScreenshot?ln(t):Promise.resolve(null),d=this.#m?.target===t&&this.#m.body===c?this.#m.comment:null;if(!d){let e=t;if(n.sourceContextResolver)try{e=await ye(t,n.sourceContextResolver,{signal:a})}catch{}if(a.aborted||this.#h!==l)return;let i=n.now?.()??Date.now();d={id:n.id?.()??crypto.randomUUID(),pageId:r,authorId:n.session.reviewerId,authorName:n.session.displayName,body:c,anchor:e.anchor,target:e,status:`open`,createdAt:i,updatedAt:i}}l.comment=d;let f=!1;try{await i.mutate(r,{type:`comment.upsert`,comment:d}),f=await this.#Mt(d.id,a)}catch{if(a.aborted||this.#h!==l)return;this.#h=null,this.#m={target:t,body:c,comment:d},this.#p=`저장하지 못했습니다. 다시 시도하세요.`,!this.#b&&this.#d===t&&(this.#kt(),queueMicrotask(()=>this.#e.querySelector(`.rg-selection-label:not(.rg-thread-label) textarea`)?.focus({preventScroll:!0})));return}if(a.aborted||!f)return;this.#h===l&&(this.#h=null),this.#m=null,this.#p=``,this.#g?.target===t&&(this.#g=null),this.#d===t&&(this.#d=null,this.#f=``,this.#kt(),queueMicrotask(()=>this.#e.querySelector(`.rg-feedback-tool`)?.focus({preventScroll:!0})));let p=await u;if(p&&i.attachScreenshot)try{await i.attachScreenshot(r,d.id,p),this.#Be(`피드백과 위치 캡처를 저장했습니다.`);return}catch{this.#Be(`피드백은 저장했지만 위치 캡처는 저장하지 못했습니다.`);return}this.#Be(`피드백을 저장했습니다.`)}async#Mt(e,t){return this.#a?.comments.some(({id:t})=>t===e)?!0:await new Promise((n,r)=>{let i=()=>{clearTimeout(o),t.removeEventListener(`abort`,a),this.#ne.delete(e)},a=()=>{i(),n(!1)},o=setTimeout(()=>{i(),r(Error(`Comment was not confirmed by the review service`))},Sn);this.#ne.set(e,e=>{i(),n(e)}),t.addEventListener(`abort`,a,{once:!0})})}#Nt(e){let t=this.#a?bt(this.#a).pinNumberByCommentId.get(e.id)??1:1,n=!q(e).available,r=Ge(`피드백 #${t}${e.status===`resolved`?` · 완료`:``}${n?` · 위치 없음`:``}`,`답글`,`답글 입력`);r.classList.add(`rg-thread-label`),r.id=Yt(e.id),r.tabIndex=-1,r.dataset.commentId=e.id,r.setAttribute(`aria-label`,`피드백 대화`),qe(r,Jt(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(An(e.authorName,e.body,e.createdAt)),(this.#a?.replies.filter(({commentId:t})=>t===e.id)??[]).forEach(e=>o.append(An(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.#X.get(e.id)??``;let l=this.#Z.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.#X.set(e.id,s.value),this.#$.get(e.id)?.body!==s.value.trim()&&(this.#$.delete(e.id),this.#Q.delete(e.id),r.querySelector(`.rg-inline-error`)?.remove()),u()}),s.addEventListener(`keydown`,e=>{e.key===`Enter`&&(e.metaKey||e.ctrlKey)&&!e.shiftKey&&!e.altKey&&!e.isComposing&&(e.preventDefault(),c.click())}),a.addEventListener(`click`,()=>this.#yt(!0)),c.addEventListener(`click`,()=>void this.#Pt(r,e));let d=this.#Q.get(e.id);return d&&jn(r,d),queueMicrotask(u),r}async#Pt(e,t){if(!this.#t||!this.#_e())return;let n=this.#j?.signal;if(!n||this.#Z.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.#$.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.#Z.set(t.id,{request:l,body:a,reply:c}),this.#It(t.id,!0);try{await this.#t.repository.mutate(this.#t.pageId,{type:`reply.upsert`,reply:c}),await this.#Ft(c,n)}catch{if(n.aborted||this.#Z.get(t.id)?.request!==l)return;this.#Z.delete(t.id),this.#$.set(t.id,{body:a,reply:c}),this.#Q.set(t.id,`답글을 저장하지 못했습니다. 다시 시도하세요.`),i.disabled=!1,r.disabled=!1,this.#_===t.id&&(this.#b&&this.#Te()===`sheet`?this.#Se():this.#kt(),queueMicrotask(()=>this.#Lt(t.id)?.querySelector(`textarea`)?.focus({preventScroll:!0})));return}if(n.aborted||this.#Z.get(t.id)?.request!==l)return;this.#Z.delete(t.id),this.#$.delete(t.id),this.#Q.delete(t.id),this.#X.delete(t.id);let u=this.#Lt(t.id)?.querySelector(`textarea`);u&&(u.value=``,u.style.height=`auto`),this.#It(t.id,!1),this.#Be(`답글을 저장했습니다.`)}async#Ft(e,t){this.#a?.replies.some(({id:t,commentId:n})=>t===e.id&&n===e.commentId)||await new Promise((n,r)=>{let i=()=>{clearTimeout(o),t.removeEventListener(`abort`,a),this.#re.delete(e.id)},a=()=>{i(),n()},o=setTimeout(()=>{i(),r(Error(`Reply was not confirmed by the review service`))},Sn);this.#re.set(e.id,{commentId:e.commentId,settle:()=>{i(),n()}}),t.addEventListener(`abort`,a,{once:!0})})}#It(e,t){let n=this.#Lt(e),r=n?.querySelector(`textarea`),i=n?.querySelector(`.rg-submit`);r&&(r.disabled=t),i&&(i.disabled=t)}#Lt(e){return[...this.#e.querySelectorAll(`.rg-thread-label`)].find(({dataset:t})=>t.commentId===e)}#Rt(e){return e.composedPath().includes(this)}};function Dn(e){ie(e.styleNonce),customElements.get(`agency-review-widget`)||customElements.define(bn,En);let t=document.createElement(bn);return t.configure(e),document.body.append(t),t}function On(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 Q(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 kn(e,t){return Math.hypot(e.clientX-t.clientX,e.clientY-t.clientY)}function An(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 jn(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 Mn(e){return zn(e).designMode===`on`||e.composedPath().some(e=>{let t=Bn(e);return t?Nn(t):!1})}function Nn(e){let t=e.tagName.toLowerCase();return t===`input`||t===`textarea`||t===`select`||`isContentEditable`in e&&!!e.isContentEditable||Tn.has(e.getAttribute(`role`)??``)}function Pn(e){let t=e.composedPath().map(Bn).find(Boolean)??null;return!t||t===t.ownerDocument.documentElement||t===t.ownerDocument.body||p(t)?null:t}function Fn(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 In(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 Ln(e){let t=zn(e).defaultView?.getSelection();return!!(t&&!t.isCollapsed&&t.toString().length>0)}function Rn(e){let t=e.clientX,n=e.clientY,r=zn(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 zn(e){for(let t of e.composedPath()){if(Vn(t))return t;let e=Bn(t);if(e)return e.ownerDocument}return document}function Bn(e){return e&&`nodeType`in e&&e.nodeType===1?e:null}function Vn(e){return`nodeType`in e&&e.nodeType===9}function Hn(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 Un(e){return e===`membership-revoked`?`리뷰 권한이 취소되었습니다. 작성 중인 내용은 저장되지 않았습니다.`:e===`session-expired`?`세션이 만료되었습니다. 다시 인증하세요.`:`이 리뷰에 접근할 수 없습니다. 다시 인증하세요.`}function Wn(e){return e===`all`||e===`open`||e===`resolved`}function Gn(e){return e===`current`||e===`all`}function Kn(e,t){return e.createdAt-t.createdAt||e.id.localeCompare(t.id)}function qn(){let e=document.createElementNS(`http://www.w3.org/2000/svg`,`svg`);e.setAttribute(`viewBox`,`0 0 16 16`),e.setAttribute(`aria-hidden`,`true`);let t=document.createElementNS(`http://www.w3.org/2000/svg`,`path`);return t.setAttribute(`d`,`M9.78 3.47a.75.75 0 0 1 0 1.06L6.31 8l3.47 3.47a.75.75 0 1 1-1.06 1.06l-4-4a.75.75 0 0 1 0-1.06l4-4a.75.75 0 0 1 1.06 0Z`),e.append(t),e}function Jn(e,t,n){return Math.min(n,Math.max(t,e))}function Yn(e){return yn.includes(e)?e:`bottom-right`}function Xn(e){return e===`top-left`||e===`left`||e===`bottom-left`?`bottom-left`:`bottom-right`}function Zn(e){return e===`top-left`||e===`top`||e===`top-right`?`top`:e===`bottom-left`||e===`bottom`||e===`bottom-right`?`bottom`:e}function Qn(e){return Number.isFinite(e)?e:0}function $n(e){return e.replace(/\/+$/,``)||`/`}function er(e){let t=`${$n(e.pathname)}${e.search}${e.hash}`,n=`${e.host}${t}`;try{return decodeURI(n)}catch{return n}}function tr(e){try{return new URL(e.target.pageUrl,window.location.href)}catch{return null}}function $(...e){e.forEach(e=>{try{e?.()}catch{}})}function nr(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 rr(){return new Promise(e=>{if(typeof window.requestAnimationFrame==`function`){window.requestAnimationFrame(()=>e());return}queueMicrotask(e)})}function ir(e,t){return{value:e.style.getPropertyValue(t),priority:e.style.getPropertyPriority(t)}}function ar(e,t,n){n.value?e.style.setProperty(t,n.value,n.priority):e.style.removeProperty(t)}function or(){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{xn as REVIEW_REAUTHENTICATION_REQUIRED_EVENT,yn as REVIEW_WIDGET_POSITIONS,bn as REVIEW_WIDGET_TAG,En as ReviewWidgetElement,On as isStagingLocation,Dn as mountReviewWidget};