pk-annotator 0.6.2 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/README.ko.md +17 -9
  2. package/README.md +11 -3
  3. package/dist/overlay.mjs +48 -4
  4. package/dist/{pka-mcp-server-DJ7A2u68.mjs → pka-mcp-server-BhcwUcgs.mjs} +251 -19
  5. package/dist/pka-mcp.mjs +1 -1
  6. package/dist/{pka-overlay-agent-art-BKBtrWqF.mjs → pka-overlay-agent-art-n6aH_1kF.mjs} +1 -1
  7. package/dist/{pka-overlay-agent-theme-CfCyg5Gv.mjs → pka-overlay-agent-theme-BiWi6_IJ.mjs} +13 -1
  8. package/dist/pka-overlay-app-DjGKtS7t.mjs +274 -0
  9. package/dist/pka-overlay-channel-BZI-qbPH.mjs +113 -0
  10. package/dist/pka-overlay-composer-DCu_eGT0.mjs +244 -0
  11. package/dist/{pka-overlay-copy-CvKjfQl1.mjs → pka-overlay-copy-B-PxSL-y.mjs} +1 -1
  12. package/dist/{pka-overlay-gifenc-BGK0llcr.mjs → pka-overlay-gifenc-DqOpaD2I.mjs} +1 -1
  13. package/dist/{pka-overlay-perf-panel-gQYSZ0gA.mjs → pka-overlay-perf-panel-DZY5Nwil.mjs} +2 -2
  14. package/dist/pka-overlay-send-Cu8DXY6B.mjs +139 -0
  15. package/dist/{pka-overlay-snapdom-djDPjHu_.mjs → pka-overlay-snapdom-BArbLl8i.mjs} +1 -1
  16. package/dist/pka-overlay-thread-store-C55iLxND.mjs +1 -0
  17. package/dist/pka-overlay-untracked-fetch-Dj1et-Fv.mjs +1 -0
  18. package/dist/pka.mjs +24 -4
  19. package/dist/{recording-CpEDddkZ.mjs → recording-D_Qkyq0N.mjs} +73 -23
  20. package/dist/vite.mjs +318 -13
  21. package/package.json +1 -1
  22. package/dist/pka-overlay-app-CsIxnRqJ.mjs +0 -246
  23. package/dist/pka-overlay-channel-D5Ghnvgb.mjs +0 -113
  24. package/dist/pka-overlay-composer-CT2x7vgj.mjs +0 -244
  25. package/dist/pka-overlay-send-BZyT4xuW.mjs +0 -139
  26. package/dist/pka-overlay-thread-store-DOxLXsAv.mjs +0 -1
  27. package/dist/pka-overlay-untracked-fetch-BCn3eft5.mjs +0 -1
package/README.ko.md CHANGED
@@ -8,7 +8,7 @@ pk-annotator는 Vite와 React 앱을 위한 개발 전용 오버레이입니다.
8
8
 
9
9
  ## 설치
10
10
 
11
- Node 24 이상, Vite 8, React 19가 필요합니다.
11
+ Node 24 이상, Vite 8, React 19가 필요합니다. Yarn 2 이상에서는 `.yarnrc.yml`에 `nodeLinker: node-modules`도 필요하며, Plug’n’Play는 지원하지 않습니다.
12
12
 
13
13
  **에이전트에게 맡기기.** 프로젝트 루트에서 Claude Code, Codex, Pi에 다음을 붙여 넣으세요.
14
14
 
@@ -65,17 +65,25 @@ Codex는 서버를 전역 설정에 저장하므로 이 항목은 한 프로젝
65
65
 
66
66
  에이전트는 `wait_for_annotation`으로 기다리고, 보낸 주석을 `set_status`로 맡고, `reply`로 답하고, `get_errors`로 페이지 오류를 읽습니다. 연결되어 있는 동안 오버레이는 Claude나 Codex의 모습으로 바뀝니다.
67
67
 
68
+ Claude Code에서는 주석을 보내는 즉시 세션에 나타나게 할 수도 있습니다. pka를 채널로 불러와 Claude Code를 시작하고 확인 화면에서 승인하세요.
69
+
70
+ ```sh
71
+ claude --dangerously-load-development-channels server:pka
72
+ ```
73
+
74
+ 채널은 Claude Code의 리서치 프리뷰 기능이며, Team과 Enterprise 조직은 먼저 채널을 허용해야 합니다. 세션을 시작하기 전부터 기다리던 주석은 보내지 않고 개수만 알려 줍니다.
75
+
68
76
  ## 사용
69
77
 
70
- | 그룹 | 도구 |
71
- | --------- | ------------------------------------------- |
72
- | 요소 선택 | 선택(Shift로 여러 개), 영역 선택, 올가미 |
73
- | 캡처 | 스크린샷과 자르기, 영역 녹화(GIF 또는 WebM) |
74
- | 그리기 | 자유 그리기, 사각형, 원 |
75
- | 디버그 | 콘솔, 네트워크, 성능 |
76
- | 설정 | 기록, English/한국어, 종료 |
78
+ | 그룹 | 도구 |
79
+ | --------- | ------------------------------------------------ |
80
+ | 요소 선택 | 선택(Shift로 여러 개), 영역 선택, 올가미, 텍스트 |
81
+ | 캡처 | 스크린샷과 자르기, 영역 녹화(GIF 또는 WebM) |
82
+ | 그리기 | 자유 그리기, 사각형, 원 |
83
+ | 디버그 | 콘솔, 네트워크, 성능 |
84
+ | 설정 | 기록, English/한국어, 종료 |
77
85
 
78
- 요소 선택과 캡처 도구는 요청 편집기를 열고, 그리기를 마치면 스크린샷 주석으로 쌓여 함께 보낼 수 있습니다. 바로 보내거나, 주석을 저장해 두었다가 한 번에 보낼 수 있습니다. 본문의 요소와 캡처 배지는 에이전트에게 `[element n]`, `[attachment n: label]` 참조로 전달됩니다. 연결된 에이전트가 없으면 보내기는 주석을 마크다운으로도 복사합니다.
86
+ 요소 선택과 캡처 도구는 요청 편집기를 열고, 그리기를 마치면 스크린샷 주석으로 쌓여 함께 보낼 수 있습니다. 바로 보내거나, 주석을 저장해 두었다가 한 번에 보낼 수 있습니다. 텍스트 도구는 페이지에서 드래그한 글을 강조하고, 그 문구를 요소와 함께 인용으로 보내 정확한 표현을 고치게 합니다. 본문의 요소와 캡처 배지는 에이전트에게 `[element n]`, `[attachment n: label]` 참조로 전달됩니다. 연결된 에이전트가 없으면 보내기는 주석을 마크다운으로도 복사합니다.
79
87
 
80
88
  ## CLI
81
89
 
package/README.md CHANGED
@@ -8,7 +8,7 @@ pk-annotator is a dev-only overlay for Vite and React apps. Anyone reviewing the
8
8
 
9
9
  ## Install
10
10
 
11
- Requires Node 24+, Vite 8, and React 19.
11
+ Requires Node 24+, Vite 8, and React 19. Yarn 2+ also requires `nodeLinker: node-modules` in `.yarnrc.yml`; Plug’n’Play is not supported.
12
12
 
13
13
  **Ask your agent.** Paste this into Claude Code, Codex, or Pi from the project root:
14
14
 
@@ -65,17 +65,25 @@ Codex keeps servers in its global config, so that entry points at one project. A
65
65
 
66
66
  The agent calls `wait_for_annotation`, claims what you send with `set_status`, answers with `reply`, and reads page errors with `get_errors`. While it is connected, the overlay takes on Claude's or Codex's look.
67
67
 
68
+ In Claude Code, each annotation can instead appear in the session the moment you send it. Start Claude Code with pka as a channel and confirm its prompt:
69
+
70
+ ```sh
71
+ claude --dangerously-load-development-channels server:pka
72
+ ```
73
+
74
+ Channels are a Claude Code research preview, and Team and Enterprise organizations must enable them. Annotations that were waiting before the session started are counted, not sent.
75
+
68
76
  ## Use
69
77
 
70
78
  | Group | Tools |
71
79
  | -------- | --------------------------------------------------- |
72
- | Pick | Select (Shift for several), Box, Lasso |
80
+ | Pick | Select (Shift for several), Box, Lasso, Text |
73
81
  | Capture | Screenshot with crop, area recording as GIF or WebM |
74
82
  | Annotate | Freehand, Rectangle, Circle |
75
83
  | Debug | Console, Network, Performance |
76
84
  | Settings | History, English/한국어, Exit |
77
85
 
78
- Pick and Capture tools open the prompt editor; a finished drawing becomes a screenshot mark stacked for Send. Send at once, or Save marks and send them together. Element and capture badges in the text become `[element n]` and `[attachment n: label]` references for the agent. Without a connected agent, Send also copies the annotation as Markdown.
86
+ Pick and Capture tools open the prompt editor; a finished drawing becomes a screenshot mark stacked for Send. Send at once, or Save marks and send them together. Text highlights the page text you select and sends it as a quote with its element, for fixing that exact wording. Element and capture badges in the text become `[element n]` and `[attachment n: label]` references for the agent. Without a connected agent, Send also copies the annotation as Markdown.
79
87
 
80
88
  ## CLI
81
89
 
package/dist/overlay.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import{captureOwnerStack as e}from"react";const t=/((?:[a-z][a-z\d+.-]*:\/\/|\/)[^\s()]*?):(\d+):\d+\)?\s*$/i,n=/^\s*at (?:async )?(.+?) \(/,r=/^([^@\s]*)@/,i=/\/node_modules\/|\/\.vite\/deps\/|\/@vite\/|\/@react-refresh/,a=/\/pka-overlay-[^/]+\.m?js$/,o=c(import.meta.url);function s(e){let i=[];for(let a of e.split(`
2
- `)){let e=t.exec(a);if(e===null)continue;let o=(n.exec(a)??r.exec(a))?.[1];i.push({fn:o===void 0||o===``?void 0:o,path:c(e[1]??``),line:Number(e[2])})}return i}function c(e){return e.replace(/^[a-z][a-z\d+.-]*:\/\/[^/]*/i,``).replace(/[?#].*$/,``)}function l(e){return e.slice(0,500).replace(/\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi,`<uuid>`).replace(/\b(?:0x[0-9a-f]+|(?=[0-9a-f]*\d)[0-9a-f]{8,})\b/gi,`<hex>`).replace(/\d+(?:\.\d+)?/g,`<n>`)}function u(e,t,n){let r=s(n).filter(e=>e.path!==``&&!i.test(e.path)),a=r[0];return{fingerprint:p([e,l(t),...r.slice(0,3).map(e=>`${e.path}:${e.fn??e.line}`)].join(`|`)),topFrame:a&&`${a.path}:${a.line}`}}function d(e){let t=!1;for(let n of s(e))if(a.test(n.path))t=!0;else if(n.path!==o&&!i.test(n.path))return!1;return t}function f(e,t){return p(`resource|${e}|${c(t)}`)}function p(e){let t=3735928559,n=1103547991;for(let r=0;r<e.length;r+=1){let i=e.charCodeAt(r);t=Math.imul(t^i,2654435761),n=Math.imul(n^i,1597334677)}return t=Math.imul(t^t>>>16,2246822507)^Math.imul(n^n>>>13,3266489909),n=Math.imul(n^n>>>16,2246822507)^Math.imul(t^t>>>13,3266489909),(4294967296*(2097151&n)+(t>>>0)).toString(16).padStart(14,`0`)}const m=globalThis.PerformanceObserver,h=/* @__PURE__ */ new Set,g=/* @__PURE__ */ new Set,_=/* @__PURE__ */ new WeakSet,v=/* @__PURE__ */ new WeakMap;let y=!1,b=[];function x(e){return{getEntries:()=>e,getEntriesByType:t=>e.filter(e=>e.entryType===t),getEntriesByName:(t,n)=>e.filter(e=>e.name===t&&(n===void 0||e.entryType===n))}}var S=class extends m{#e;constructor(e){let t=/* @__PURE__ */ new WeakSet;super((n,r)=>{if(!_.has(r)){e(n,r);return}let i=n.getEntries().filter(e=>!t.has(e));for(let e of i)t.add(e);i.length>0&&e(x(i),r)}),this.#e=t,b.length===0&&queueMicrotask(()=>{b=[]}),b.push(this)}observe(e={}){if((e.entryTypes??(e.type===void 0?[]:[e.type])).some(e=>e!==`resource`)&&_.add(this),v.set(this,[...v.get(this)??[],e]),y&&_.has(this)){g.add(this);return}h.add(this),super.observe(e)}takeRecords(){let e=super.takeRecords();if(!_.has(this))return e;let t=e.filter(e=>!this.#e.has(e));for(let e of t)this.#e.add(e);return t}disconnect(){h.delete(this),g.delete(this),super.disconnect()}};function C(){for(let e of b)_.add(e)}function w(){y=!0;for(let e of h)_.has(e)&&(m.prototype.disconnect.call(e),h.delete(e),g.add(e))}function T(){y=!1;for(let e of g){for(let t of v.get(e)??[])m.prototype.observe.call(e,t);h.add(e)}g.clear()}const E=2e3,D=Symbol(`no fit`);function O(e){return structuredClone(e)}function k(e,t=E){return O(e.length<=t?e:`${e.slice(0,t)}…[+${e.length-t} chars]`)}function ee(e){let t=F(e,e.length,50,0,{ancestors:[],nodes:0,used:0,reserved:0},`[`,`]`,`args`);if(t===D)throw Error(`The console budget cannot hold an empty argument list`);return t}function A(e){return 8e3-e.used-e.reserved}function j(e,t,n){return t>A(e)?D:(e.used+=t,n)}function M(e,t){let n=e.charCodeAt(t);if(n===34||n===92)return[2,1];if(n<32)return[n===8||n===9||n===10||n===12||n===13?2:6,1];if(n<55296||n>57343)return[1,1];let r=e.charCodeAt(t+1);return n<=56319&&r>=56320&&r<=57343?[2,2]:[6,1]}function N(e,t){let n=A(e),r=Math.min(t.length,E),i=10+String(t.length).length,a=2,o=0,s=-1,c=0;for(;a+i<=n&&(s=o,c=a),!(o>=r||a>n);){let[e,n]=M(t,o);a+=e,o+=n}if(o>=t.length&&a<=n)return e.used+=a,O(t);if(s<0)return D;let l=`…[+${t.length-s} chars]`;return e.used+=c+l.length,O(`${t.slice(0,s)}${l}`)}function te(e){return k(ee(e).map(e=>Object.prototype.toString.call(e)===`[object String]`?String(e):JSON.stringify(e)).join(` `))}function ne(e){let t=`${e.name}: ${e.message}`,n=e.stack??``;return k(n===``?t:n.startsWith(t)?n:`${t}\n${n}`)}function P(e,t,n){if(n.nodes>=1e3)return D;if(n.nodes+=1,e===null)return j(n,4,null);let r;try{r=Object.prototype.toString.call(e)}catch(e){return N(n,`[Unserializable: ${String(e)}]`)}switch(r){case`[object Undefined]`:return N(n,`[undefined]`);case`[object String]`:return N(n,String(e));case`[object Number]`:{let t=Number(e);return Number.isFinite(t)?j(n,String(t).length,t):N(n,`[${t}]`)}case`[object Boolean]`:{let t=String(e)===`true`;return j(n,t?4:5,t)}case`[object BigInt]`:return N(n,`${String(e)}n`);case`[object Symbol]`:return N(n,String(e))}return e instanceof Function?N(n,`[Function ${e.name||`(anonymous)`}]`):re(e,t,n)}function re(e,t,n){let r=ae(e);if(r!==void 0)return N(n,r);if(n.ancestors.includes(e))return N(n,`[Circular]`);if(t>=3)return N(n,I(e));let{used:i,reserved:a}=n;n.ancestors.push(e);try{if(Array.isArray(e))return F(e,e.length,50,t+1,n,`[`,`]`,`items`);if(e instanceof Map||e instanceof Set){let r=e instanceof Map?`[Map]`:`[Set]`,i=[],a=e.entries();for(let t=a.next();!t.done&&i.length<50;t=a.next())i.push(e instanceof Map?t.value:t.value[0]);let o=F(i,e.size,50,t+1,n,`{"${r}":[`,`]}`,`items`);return o===D?D:{[r]:o}}return ie(e,t,n)}catch(e){return n.used=i,n.reserved=a,N(n,`[Unserializable: ${String(e)}]`)}finally{n.ancestors.pop()}}function F(e,t,n,r,i,a,o,s){if(a.length+o.length+40>A(i))return D;i.used+=a.length,i.reserved+=o.length+40;let c=[],l=Math.min(e.length,n);for(;c.length<l;){let t=c.length===0?0:1;if(t>A(i))break;i.used+=t;let n=P(e[c.length],r,i);if(n===D){i.used-=t;break}c.push(n)}if(i.reserved-=o.length+40,i.used+=o.length,t>c.length){let e=`[+${t-c.length} ${s}]`;i.used+=(c.length===0?0:1)+e.length+2,c.push(e)}return c}function ie(e,t,n){if(42>A(n))return D;let r=Object(e),i=Object.keys(r);n.used+=1,n.reserved+=41;let a={},o=0;for(let e of i){if(o===50)break;let i=n.used,s=o===0?1:2;if(s>A(n))break;n.used+=s,n.reserved+=24;let c=N(n,e);n.reserved-=24;let l=D;if(c!==D){let i=Object.getOwnPropertyDescriptor(r,e);l=i===void 0||!(`value`in i)?N(n,`[Getter]`):P(i.value,t+1,n)}if(c===D||l===D){n.used=i;break}a[c]=l,o+=1}if(n.reserved-=41,n.used+=1,i.length>o){let e=`[+${i.length-o} keys]`;n.used+=(o===0?0:1)+4+e.length+2,a[`…`]=e}return a}function ae(e){if(e instanceof Error)return ne(e);if(e instanceof Date)return Number.isNaN(e.getTime())?`[Invalid Date]`:e.toISOString();if(e instanceof RegExp)return String(e);if(globalThis.Node!==void 0&&e instanceof Node)return L(e);if(globalThis.window!==void 0&&e===globalThis.window)return`[Window]`;if(e instanceof Promise)return`[Promise]`;if(e instanceof WeakMap)return`[WeakMap]`;if(e instanceof WeakSet)return`[WeakSet]`;if(e instanceof ArrayBuffer)return`[ArrayBuffer(${e.byteLength})]`;if(ArrayBuffer.isView(e))return`[${e.constructor.name}(${e.byteLength} bytes)]`}function I(e){return Array.isArray(e)?`[Array(${e.length})]`:e instanceof Map?`[Map(${e.size})]`:e instanceof Set?`[Set(${e.size})]`:`[Object]`}function L(e){if(e instanceof Element){let t=e.id===``?``:`#${e.id}`,n=[...e.classList].slice(0,3).map(e=>`.${e}`).join(``);return`[Element ${e.localName}${t}${n}]`}return e instanceof Text?`[Text ${JSON.stringify(k(e.data,40))}]`:`[${e.nodeName}]`}const oe=8388608,se=2e3,R=1e3,z=/auth|cookie|token|secret|session|api-?key|csrf|xsrf|passw/i,ce=/token|code|state|passw|secret|key|session|auth|credential/i,B=/token|secret|passw(?:or)?d|session|cookie|authorization|api[-_ ]?key|credential/i,V=/^\s*(?:text\/(?!event-stream)|application\/(?:[\w.-]+\+)?json\b)/i,H=/^\s*text\/event-stream/i,U=/^\s*application\/(?!stream\+)(?:[\w.-]+\+)?json\s*(?:;|$)/i;let W;const le=/* @__PURE__ */ new WeakSet;let G=!1;function ue(e){let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function de(e){return e===void 0?{}:new Proxy(e,{get:fe})}function fe(e,t){return e[t]}function pe(e,t){if(e===void 0)return{headers:t};if(ue(e))return{...e,headers:t};if(Object.getOwnPropertyDescriptor(e,`headers`)?.configurable!==!1)return new Proxy(e,{get:(e,n)=>n===`headers`?t:fe(e,n)})}function me(e,t,n){let r=de(n);le.add(r);let i=G;G=!0;try{return e(t,r)}finally{G=i}}function K(e){let t;try{t=new URL(e,location.href)}catch{return`[invalid url]`}if(t.username=``,t.password=``,he(t.searchParams)&&(t.search=t.searchParams.toString()),t.hash.includes(`=`)){let e=new URLSearchParams(t.hash.slice(1));he(e)&&(t.hash=e.toString())}return k(t.href,se)}function he(e){let t=!1;for(let n of new Set(e.keys()))ce.test(n)&&(e.set(n,`REDACTED`),t=!0);return t}function ge(e){let t={},n=0;for(let[r,i]of e)if(!z.test(r)){if(n===50)break;t[r]=i.length>R?`${i.slice(0,R)}…`:i,n+=1}return t}function _e(e){if(!/^\s*[[{]/.test(e))return e;let t=!1,n;try{n=JSON.parse(e,(e,n)=>B.test(e)?(t=!0,`[redacted]`):n)}catch{return e}return t?JSON.stringify(n):e}function q(e){let t=0;for(let n=0;n<e.length;n+=1){let r=e.charCodeAt(n);r<128?t+=1:r<2048?t+=2:r>=55296&&r<=56319?(t+=4,n+=1):t+=3}return t}function ve(){let e=crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(24)),t=Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``);return`00-${t.slice(0,32)}-${t.slice(32)}-01`}function ye(e){let t=e.get(`content-length`);if(t!==null&&/^\d+$/.test(t.trim()))return Number(t)}function be(e){if(e==null)return{};if(e instanceof URLSearchParams)return{size:q(e.toString())};if(e instanceof Blob)return{size:e.size};if(e instanceof ArrayBuffer||ArrayBuffer.isView(e))return{size:e.byteLength};if(e instanceof FormData||e instanceof ReadableStream||e instanceof Document)return{};let t=String(e);return{size:q(t),text:t}}function xe(e){let t=[],n=[],r=new S(e=>a(e.getEntries()));r.observe({type:`resource`});let i=0;function a(e){for(let t of e)!(t instanceof PerformanceResourceTiming)||t.initiatorType!==`fetch`&&t.initiatorType!==`xmlhttprequest`||(n.push({name:K(t.name),timing:t}),n.length>500&&n.shift())}function o(n,r,a,o,s){let c=performance.now(),l=new URL(a,location.href),u=l.origin===location.origin,d={kind:`request`,seq:e.nextSeq(),at:(/* @__PURE__ */ new Date()).toISOString(),performanceMs:c,initiator:n,method:r.toUpperCase(),url:K(l.href),state:`pending`,stream:!1,serverFn:o.has(`x-tsr-serverfn`)||l.pathname.includes(`/_serverFn/`),requestHeaders:{},responseHeaders:{}};s&&u&&!o.has(`traceparent`)&&(d.traceparent=ve(),o.set(`traceparent`,d.traceparent)),d.requestHeaders=ge(o);let f={entry:d,start:c,bodyAllowed:u&&e.bodies.some(e=>l.pathname.startsWith(e)),bodyBytes:0,timingUntil:void 0,timed:!1};return t.push(f),t.length>500&&(i-=t.shift()?.bodyBytes??0),e.added(d),e.changed(),f}function s(e,t,n){let{size:r,text:i}=be(t);r!==void 0&&(e.entry.requestSize=r);let a=n??(i===void 0?``:`text/plain`);e.bodyAllowed&&i!==void 0&&V.test(a)&&c(e,`requestBody`,_e(i))}function c(e,n,r){let a=q(r);if(!(a>65536)){if(!t.includes(e)){e.entry[n]=r;return}for(let n of t){if(i+a<=8388608)break;n!==e&&n.bodyBytes!==0&&(delete n.entry.requestBody,delete n.entry.responseBody,i-=n.bodyBytes,n.bodyBytes=0)}i+a>8388608||(e.entry[n]=r,e.bodyBytes+=a,i+=a)}}function l(e,t,n,r){let{entry:i}=e;i.status=t,i.responseType=r,i.responseHeaders=ge(n);let a=n.get(`content-type`);a!==null&&(i.contentType=a);let o=ye(n);o!==void 0&&(i.responseSize=o),a!==null&&H.test(a)&&(i.stream=!0,i.state=`open`,e.timingUntil=1/0)}function u(t,n,r){let i=performance.now();t.entry.state=n,t.entry.durationMs=Math.round(i-t.start),r!==void 0&&(t.entry.error=r),t.timingUntil=i+1e4,e.settled(t.entry),e.changed()}function d(e,t){u(e,t instanceof DOMException&&t.name===`AbortError`?`aborted`:`failed`,String(t))}function f(t,n){if(l(t,n.status,n.headers,n.type),t.entry.stream){e.changed();return}let r=t.entry.contentType??``,i=t.entry.responseSize,a=t.bodyAllowed&&n.body!==null&&V.test(r)&&(i===void 0?U.test(r):i<=65536)?n.clone().body:null;if(a===null){u(t,`done`);return}e.changed(),p(a).then(e=>{e!==void 0&&(i===void 0&&(t.entry.responseSize=e.bytes),c(t,`responseBody`,_e(e.text))),u(t,`done`)},e=>d(t,e))}async function p(t){let n=t.getReader(),r=new TextDecoder,i=``,a=0;for(;;){let t=await n.read();if(t.done)return{text:i+r.decode(),bytes:a};if(a+=t.value.byteLength,a>65536){n.cancel().catch(t=>e.fail(`response body cancel`,t));return}i+=r.decode(t.value,{stream:!0})}}let m=globalThis.fetch,h=!1,g=(t,n,r)=>{let i,a=n;try{let e=t instanceof Request,r=new Headers(n?.headers??(e?t.headers:void 0)),c=n?.method??(e?t.method:`GET`),l=pe(n,r);i=o(`fetch`,c,e?t.url:String(t),r,l!==void 0),i.entry.traceparent!==void 0&&(a=l),s(i,n?.body,r.get(`content-type`))}catch(i){return e.fail(`fetch capture`,i),me(r,t,n)}let c;try{c=me(r,t,a)}catch(e){throw d(i,e),e}return c.then(t=>{try{f(i,t)}catch(t){e.fail(`fetch response capture`,t)}return t},e=>{throw d(i,e),e})},_=function(e,t){let n=G||t!==void 0&&le.has(t)?void 0:W;return n===void 0?m(e,t):n(e,t,m)};W=g,globalThis.fetch=_;let v=XMLHttpRequest.prototype,y=v.open,b=v.send,x=v.setRequestHeader,C=/* @__PURE__ */ new WeakMap,w=/* @__PURE__ */ new WeakMap,T=function(e,t,n,r,i){h||(w.get(this)?.(),C.set(this,{method:e,url:String(t),headers:new Headers})),y.call(this,e,t,n??!0,r??null,i??null)},E=function(t,n){if(x.call(this,t,n),!h)try{C.get(this)?.headers.append(t,n)}catch(t){e.fail(`XMLHttpRequest header capture`,t)}},D=function(t){let n=h?void 0:C.get(this),r;if(n!==void 0)try{r=O(this,n,t)}catch(t){e.fail(`XMLHttpRequest capture`,t)}try{b.call(this,t)}catch(e){throw r?.(e),e}};v.open=T,v.setRequestHeader=E,v.send=D;function O(t,n,r){let i=o(`xhr`,n.method,n.url,n.headers,!0);i.entry.traceparent!==void 0&&x.call(t,`traceparent`,i.entry.traceparent),s(i,r,n.headers.get(`content-type`));let a=new AbortController,c=()=>{t.readyState<XMLHttpRequest.HEADERS_RECEIVED||(t.removeEventListener(`readystatechange`,c),l(i,t.status,Ce(t),t.responseType||`text`),e.changed())},u=()=>p(`abort`);function f(){a.abort(),w.get(t)===u&&w.delete(t)}function p(n){f();try{k(t,i,n)}catch(t){e.fail(`XMLHttpRequest response capture`,t)}}let m=e=>p(e.type);w.set(t,u),t.addEventListener(`readystatechange`,c,{signal:a.signal});for(let e of[`load`,`error`,`abort`,`timeout`])t.addEventListener(e,m,{signal:a.signal});return e=>{a.signal.aborted||(f(),d(i,e))}}function k(e,t,n){if(n===`abort`)return u(t,`aborted`);if(n!==`load`)return u(t,`failed`,n);t.entry.status===void 0&&l(t,e.status,Ce(e),e.responseType||`text`);let r=t.entry.contentType??``;if(t.bodyAllowed&&V.test(r)&&(t.entry.responseSize??0)<=65536){let n=we(e);n!==void 0&&n.length<=65536&&(t.entry.responseSize??=q(n),c(t,`responseBody`,_e(n)))}u(t,`done`)}function ee(){if(a(r.takeRecords()),!t.some(e=>e.timingUntil!==void 0))return!1;let i=/* @__PURE__ */ new Map;for(let e of t){if(e.timed)continue;let t=i.get(e.entry.url);t===void 0?i.set(e.entry.url,[e]):t.push(e)}let o=!1,s=0;for(;s<n.length;){let e=n[s];if(e===void 0)throw Error(`No resource timing at index ${s}`);let{name:t,timing:r}=e,a=(i.get(t)??[]).filter(e=>!e.timed&&e.start<=r.startTime+1),c;for(let e of a){let t=Math.abs(r.startTime-e.start);(c===void 0||t<Math.abs(r.startTime-c.start))&&(c=e)}if(c!==void 0&&a.some(e=>e!==c&&Math.abs(e.start-c.start)<=1)){n.splice(s,1);continue}if(c?.timingUntil===void 0){s+=1;continue}n.splice(s,1),Se(c,r),o=!0}let c=performance.now();for(let e of t)e.timingUntil===void 0||c<=e.timingUntil||(e.timingUntil=void 0,e.timed=!0);return o&&e.changed(),o}return{list:()=>t.map(e=>({...e.entry})),resolveTimings:ee,untracked:(e,t)=>me(m,e,t),restore(){h=!0,r.disconnect(),W===g&&(W=void 0),globalThis.fetch===_&&(globalThis.fetch=m),v.open===T&&(v.open=y),v.send===D&&(v.send=b),v.setRequestHeader===E&&(v.setRequestHeader=x)}}}function Se(e,t){let{entry:n}=e;e.timingUntil=void 0,e.timed=!0,t.responseEnd>0&&(n.durationMs=Math.round(t.duration)),t.transferSize>0&&(n.transferSize=t.transferSize),n.responseSize===void 0&&t.decodedBodySize>0&&(n.responseSize=t.decodedBodySize),t.serverTiming.length>0&&(n.serverTiming=t.serverTiming.map(({name:e,duration:t,description:n})=>({name:e,duration:t,description:n}))),n.state===`open`&&(n.state=`done`)}function Ce(e){let t=new Headers;for(let n of e.getAllResponseHeaders().split(/\r?\n/)){let e=n.indexOf(`:`);e>0&&t.append(n.slice(0,e).trim(),n.slice(e+1).trim())}return t}function we(e){if(e.responseType===``||e.responseType===`text`)return e.responseText;if(e.responseType===`json`)return JSON.stringify(e.response)}const Te=`pk-annotator`,J=16e3,Ee=[`log`,`info`,`warn`,`error`,`debug`],De=[`click`,`input`,`change`,`submit`,`keydown`];function Oe(e,t){let n=e.stack??``;return t===void 0?{stack:n}:{stack:n,topFrame:t}}const ke={console:[],errors:[],groups:[],requests:[],actions:[]};function Ae(){return{subscribe:()=>()=>{},snapshot:()=>ke,clear:()=>{},markSent:()=>{},markResolved:()=>{},huntContext:e=>{throw Error(`No error group ${e}: capture is off under navigator.webdriver`)},applySymbolicated:()=>{},tap:()=>()=>{},fetch:globalThis.fetch.bind(globalThis),reactRootOptions:{},stop:()=>{}}}function je(e,t){e.push(t),e.length>500&&e.shift()}function Me(e,t){return e instanceof Error?{type:e.name,message:k(e.message),stack:k(e.stack??``,J)}:{type:t,message:te([e]),stack:``}}function Ne(e){let t=(e.stack??``).split(`
2
+ `)){let e=t.exec(a);if(e===null)continue;let o=(n.exec(a)??r.exec(a))?.[1];i.push({fn:o===void 0||o===``?void 0:o,path:c(e[1]??``),line:Number(e[2])})}return i}function c(e){return e.replace(/^[a-z][a-z\d+.-]*:\/\/[^/]*/i,``).replace(/[?#].*$/,``)}function l(e){return e.slice(0,500).replace(/\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi,`<uuid>`).replace(/\b(?:0x[0-9a-f]+|(?=[0-9a-f]*\d)[0-9a-f]{8,})\b/gi,`<hex>`).replace(/\d+(?:\.\d+)?/g,`<n>`)}function u(e,t,n){let r=s(n).filter(e=>e.path!==``&&!i.test(e.path)),a=r[0];return{fingerprint:p([e,l(t),...r.slice(0,3).map(e=>`${e.path}:${e.fn??e.line}`)].join(`|`)),topFrame:a&&`${a.path}:${a.line}`}}function d(e){let t=!1;for(let n of s(e))if(a.test(n.path))t=!0;else if(n.path!==o&&!i.test(n.path))return!1;return t}function f(e,t){return p(`resource|${e}|${c(t)}`)}function p(e){let t=3735928559,n=1103547991;for(let r=0;r<e.length;r+=1){let i=e.charCodeAt(r);t=Math.imul(t^i,2654435761),n=Math.imul(n^i,1597334677)}return t=Math.imul(t^t>>>16,2246822507)^Math.imul(n^n>>>13,3266489909),n=Math.imul(n^n>>>16,2246822507)^Math.imul(t^t>>>13,3266489909),(4294967296*(2097151&n)+(t>>>0)).toString(16).padStart(14,`0`)}const m=globalThis.PerformanceObserver,h=/* @__PURE__ */ new Set,g=/* @__PURE__ */ new Set,_=/* @__PURE__ */ new WeakSet,v=/* @__PURE__ */ new WeakMap;let y=!1,b=[];function x(e){return{getEntries:()=>e,getEntriesByType:t=>e.filter(e=>e.entryType===t),getEntriesByName:(t,n)=>e.filter(e=>e.name===t&&(n===void 0||e.entryType===n))}}var S=class extends m{#e;constructor(e){let t=/* @__PURE__ */ new WeakSet;super((n,r)=>{if(!_.has(r)){e(n,r);return}let i=n.getEntries().filter(e=>!t.has(e));for(let e of i)t.add(e);i.length>0&&e(x(i),r)}),this.#e=t,b.length===0&&queueMicrotask(()=>{b=[]}),b.push(this)}observe(e={}){if((e.entryTypes??(e.type===void 0?[]:[e.type])).some(e=>e!==`resource`)&&_.add(this),v.set(this,[...v.get(this)??[],e]),y&&_.has(this)){g.add(this);return}h.add(this),super.observe(e)}takeRecords(){let e=super.takeRecords();if(!_.has(this))return e;let t=e.filter(e=>!this.#e.has(e));for(let e of t)this.#e.add(e);return t}disconnect(){h.delete(this),g.delete(this),super.disconnect()}};function C(){for(let e of b)_.add(e)}function w(){y=!0;for(let e of h)_.has(e)&&(m.prototype.disconnect.call(e),h.delete(e),g.add(e))}function T(){y=!1;for(let e of g){for(let t of v.get(e)??[])m.prototype.observe.call(e,t);h.add(e)}g.clear()}const E=2e3,D=Symbol(`no fit`);function O(e){return structuredClone(e)}function k(e,t=E){return O(e.length<=t?e:`${e.slice(0,t)}…[+${e.length-t} chars]`)}function A(e){let t=I(e,e.length,50,0,{ancestors:[],nodes:0,used:0,reserved:0},`[`,`]`,`args`);if(t===D)throw Error(`The console budget cannot hold an empty argument list`);return t}function j(e){return 8e3-e.used-e.reserved}function M(e,t,n){return t>j(e)?D:(e.used+=t,n)}function N(e,t){let n=e.charCodeAt(t);if(n===34||n===92)return[2,1];if(n<32)return[n===8||n===9||n===10||n===12||n===13?2:6,1];if(n<55296||n>57343)return[1,1];let r=e.charCodeAt(t+1);return n<=56319&&r>=56320&&r<=57343?[2,2]:[6,1]}function P(e,t){let n=j(e),r=Math.min(t.length,E),i=10+String(t.length).length,a=2,o=0,s=-1,c=0;for(;a+i<=n&&(s=o,c=a),!(o>=r||a>n);){let[e,n]=N(t,o);a+=e,o+=n}if(o>=t.length&&a<=n)return e.used+=a,O(t);if(s<0)return D;let l=`…[+${t.length-s} chars]`;return e.used+=c+l.length,O(`${t.slice(0,s)}${l}`)}function ee(e){return k(A(e).map(e=>Object.prototype.toString.call(e)===`[object String]`?String(e):JSON.stringify(e)).join(` `))}function te(e){let t=`${e.name}: ${e.message}`,n=e.stack??``;return k(n===``?t:n.startsWith(t)?n:`${t}\n${n}`)}function F(e,t,n){if(n.nodes>=1e3)return D;if(n.nodes+=1,e===null)return M(n,4,null);let r;try{r=Object.prototype.toString.call(e)}catch(e){return P(n,`[Unserializable: ${String(e)}]`)}switch(r){case`[object Undefined]`:return P(n,`[undefined]`);case`[object String]`:return P(n,String(e));case`[object Number]`:{let t=Number(e);return Number.isFinite(t)?M(n,String(t).length,t):P(n,`[${t}]`)}case`[object Boolean]`:{let t=String(e)===`true`;return M(n,t?4:5,t)}case`[object BigInt]`:return P(n,`${String(e)}n`);case`[object Symbol]`:return P(n,String(e))}return e instanceof Function?P(n,`[Function ${e.name||`(anonymous)`}]`):ne(e,t,n)}function ne(e,t,n){let r=ie(e);if(r!==void 0)return P(n,r);if(n.ancestors.includes(e))return P(n,`[Circular]`);if(t>=3)return P(n,L(e));let{used:i,reserved:a}=n;n.ancestors.push(e);try{if(Array.isArray(e))return I(e,e.length,50,t+1,n,`[`,`]`,`items`);if(e instanceof Map||e instanceof Set){let r=e instanceof Map?`[Map]`:`[Set]`,i=[],a=e.entries();for(let t=a.next();!t.done&&i.length<50;t=a.next())i.push(e instanceof Map?t.value:t.value[0]);let o=I(i,e.size,50,t+1,n,`{"${r}":[`,`]}`,`items`);return o===D?D:{[r]:o}}return re(e,t,n)}catch(e){return n.used=i,n.reserved=a,P(n,`[Unserializable: ${String(e)}]`)}finally{n.ancestors.pop()}}function I(e,t,n,r,i,a,o,s){if(a.length+o.length+40>j(i))return D;i.used+=a.length,i.reserved+=o.length+40;let c=[],l=Math.min(e.length,n);for(;c.length<l;){let t=c.length===0?0:1;if(t>j(i))break;i.used+=t;let n=F(e[c.length],r,i);if(n===D){i.used-=t;break}c.push(n)}if(i.reserved-=o.length+40,i.used+=o.length,t>c.length){let e=`[+${t-c.length} ${s}]`;i.used+=(c.length===0?0:1)+e.length+2,c.push(e)}return c}function re(e,t,n){if(42>j(n))return D;let r=Object(e),i=Object.keys(r);n.used+=1,n.reserved+=41;let a={},o=0;for(let e of i){if(o===50)break;let i=n.used,s=o===0?1:2;if(s>j(n))break;n.used+=s,n.reserved+=24;let c=P(n,e);n.reserved-=24;let l=D;if(c!==D){let i=Object.getOwnPropertyDescriptor(r,e);l=i===void 0||!(`value`in i)?P(n,`[Getter]`):F(i.value,t+1,n)}if(c===D||l===D){n.used=i;break}a[c]=l,o+=1}if(n.reserved-=41,n.used+=1,i.length>o){let e=`[+${i.length-o} keys]`;n.used+=(o===0?0:1)+4+e.length+2,a[`…`]=e}return a}function ie(e){if(e instanceof Error)return te(e);if(e instanceof Date)return Number.isNaN(e.getTime())?`[Invalid Date]`:e.toISOString();if(e instanceof RegExp)return String(e);if(globalThis.Node!==void 0&&e instanceof Node)return R(e);if(globalThis.window!==void 0&&e===globalThis.window)return`[Window]`;if(e instanceof Promise)return`[Promise]`;if(e instanceof WeakMap)return`[WeakMap]`;if(e instanceof WeakSet)return`[WeakSet]`;if(e instanceof ArrayBuffer)return`[ArrayBuffer(${e.byteLength})]`;if(ArrayBuffer.isView(e))return`[${e.constructor.name}(${e.byteLength} bytes)]`}function L(e){return Array.isArray(e)?`[Array(${e.length})]`:e instanceof Map?`[Map(${e.size})]`:e instanceof Set?`[Set(${e.size})]`:`[Object]`}function R(e){if(e instanceof Element){let t=e.id===``?``:`#${e.id}`,n=[...e.classList].slice(0,3).map(e=>`.${e}`).join(``);return`[Element ${e.localName}${t}${n}]`}return e instanceof Text?`[Text ${JSON.stringify(k(e.data,40))}]`:`[${e.nodeName}]`}const ae=8388608,oe=2e3,z=1e3,B=/auth|cookie|token|secret|session|api-?key|csrf|xsrf|passw/i,se=/token|code|state|passw|secret|key|session|auth|credential/i,V=/token|secret|passw(?:or)?d|session|cookie|authorization|api[-_ ]?key|credential/i,H=/^\s*(?:text\/(?!event-stream)|application\/(?:[\w.-]+\+)?json\b)/i,U=/^\s*text\/event-stream/i,W=/^\s*application\/(?!stream\+)(?:[\w.-]+\+)?json\s*(?:;|$)/i;let G;const ce=/* @__PURE__ */ new WeakSet;let K=!1;function le(e){let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function ue(e){return e===void 0?{}:new Proxy(e,{get:de})}function de(e,t){return e[t]}function fe(e,t){if(e===void 0)return{headers:t};if(le(e))return{...e,headers:t};if(Object.getOwnPropertyDescriptor(e,`headers`)?.configurable!==!1)return new Proxy(e,{get:(e,n)=>n===`headers`?t:de(e,n)})}function pe(e,t,n){let r=ue(n);ce.add(r);let i=K;K=!0;try{return e(t,r)}finally{K=i}}function q(e){let t;try{t=new URL(e,location.href)}catch{return`[invalid url]`}if(t.username=``,t.password=``,me(t.searchParams)&&(t.search=t.searchParams.toString()),t.hash.includes(`=`)){let e=new URLSearchParams(t.hash.slice(1));me(e)&&(t.hash=e.toString())}return k(t.href,oe)}function me(e){let t=!1;for(let n of new Set(e.keys()))se.test(n)&&(e.set(n,`REDACTED`),t=!0);return t}function he(e){let t={},n=0;for(let[r,i]of e)if(!B.test(r)){if(n===50)break;t[r]=i.length>z?`${i.slice(0,z)}…`:i,n+=1}return t}function ge(e){if(!/^\s*[[{]/.test(e))return e;let t=!1,n;try{n=JSON.parse(e)}catch(t){if(t instanceof SyntaxError)return e;throw t}let r=[n];for(;r.length>0;){let e=r.pop();if(Array.isArray(e)){for(let t of e)r.push(t);continue}if(Object.prototype.toString.call(e)!==`[object Object]`)continue;let n=e;for(let[e,i]of Object.entries(n))V.test(e)?(n[e]=`[redacted]`,t=!0):i!==void 0&&r.push(i)}if(!t)return e;try{return JSON.stringify(n)}catch(e){if(e instanceof RangeError)return`[redacted: JSON nesting exceeds serialization limit]`;throw e}}function J(e){let t=0;for(let n=0;n<e.length;n+=1){let r=e.charCodeAt(n);r<128?t+=1:r<2048?t+=2:r>=55296&&r<=56319?(t+=4,n+=1):t+=3}return t}function _e(){let e=crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(24)),t=Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``);return`00-${t.slice(0,32)}-${t.slice(32)}-01`}function ve(e){let t=e.get(`content-length`);if(t!==null&&/^\d+$/.test(t.trim()))return Number(t)}function ye(e){if(e==null)return{};if(e instanceof URLSearchParams)return{size:J(e.toString())};if(e instanceof Blob)return{size:e.size};if(e instanceof ArrayBuffer||ArrayBuffer.isView(e))return{size:e.byteLength};if(e instanceof FormData||e instanceof ReadableStream||e instanceof Document)return{};let t=String(e);return{size:J(t),text:t}}function be(e){let t=[],n=[],r=new S(e=>a(e.getEntries()));r.observe({type:`resource`});let i=0;function a(e){for(let t of e)!(t instanceof PerformanceResourceTiming)||t.initiatorType!==`fetch`&&t.initiatorType!==`xmlhttprequest`||(n.push({name:q(t.name),timing:t}),n.length>500&&n.shift())}function o(n,r,a,o,s){let c=performance.now(),l=new URL(a,location.href),u=l.origin===location.origin,d={kind:`request`,seq:e.nextSeq(),at:(/* @__PURE__ */ new Date()).toISOString(),performanceMs:c,initiator:n,method:r.toUpperCase(),url:q(l.href),state:`pending`,stream:!1,serverFn:o.has(`x-tsr-serverfn`)||l.pathname.includes(`/_serverFn/`),requestHeaders:{},responseHeaders:{}};s&&u&&!o.has(`traceparent`)&&(d.traceparent=_e(),o.set(`traceparent`,d.traceparent)),d.requestHeaders=he(o);let f={entry:d,start:c,bodyAllowed:u&&e.bodies.some(e=>l.pathname.startsWith(e)),bodyBytes:0,timingUntil:void 0,timed:!1};return t.push(f),t.length>500&&(i-=t.shift()?.bodyBytes??0),e.added(d),e.changed(),f}function s(e,t,n){let{size:r,text:i}=ye(t);r!==void 0&&(e.entry.requestSize=r);let a=n??(i===void 0?``:`text/plain`);e.bodyAllowed&&i!==void 0&&H.test(a)&&c(e,`requestBody`,ge(i))}function c(e,n,r){let a=J(r);if(!(a>65536)){if(!t.includes(e)){e.entry[n]=r;return}for(let n of t){if(i+a<=8388608)break;n!==e&&n.bodyBytes!==0&&(delete n.entry.requestBody,delete n.entry.responseBody,i-=n.bodyBytes,n.bodyBytes=0)}i+a>8388608||(e.entry[n]=r,e.bodyBytes+=a,i+=a)}}function l(e,t,n,r){let{entry:i}=e;i.status=t,i.responseType=r,i.responseHeaders=he(n);let a=n.get(`content-type`);a!==null&&(i.contentType=a);let o=ve(n);o!==void 0&&(i.responseSize=o),a!==null&&U.test(a)&&(i.stream=!0,i.state=`open`,e.timingUntil=1/0)}function u(t,n,r){let i=performance.now();t.entry.state=n,t.entry.durationMs=Math.round(i-t.start),r!==void 0&&(t.entry.error=r),t.timingUntil=i+1e4,e.settled(t.entry),e.changed()}function d(e,t){u(e,t instanceof DOMException&&t.name===`AbortError`?`aborted`:`failed`,String(t))}function f(t,n){if(l(t,n.status,n.headers,n.type),t.entry.stream){e.changed();return}let r=t.entry.contentType??``,i=t.entry.responseSize,a=t.bodyAllowed&&n.body!==null&&H.test(r)&&(i===void 0?W.test(r):i<=65536)?n.clone().body:null;if(a===null){u(t,`done`);return}e.changed(),p(a).then(e=>{e!==void 0&&(i===void 0&&(t.entry.responseSize=e.bytes),c(t,`responseBody`,ge(e.text))),u(t,`done`)},e=>d(t,e))}async function p(t){let n=t.getReader(),r=new TextDecoder,i=``,a=0;for(;;){let t=await n.read();if(t.done)return{text:i+r.decode(),bytes:a};if(a+=t.value.byteLength,a>65536){n.cancel().catch(t=>e.fail(`response body cancel`,t));return}i+=r.decode(t.value,{stream:!0})}}let m=globalThis.fetch,h=!1,g=(t,n,r)=>{let i,a=n;try{let e=t instanceof Request,r=new Headers(n?.headers??(e?t.headers:void 0)),c=n?.method??(e?t.method:`GET`),l=fe(n,r);i=o(`fetch`,c,e?t.url:String(t),r,l!==void 0),i.entry.traceparent!==void 0&&(a=l),s(i,n?.body,r.get(`content-type`))}catch(i){return e.fail(`fetch capture`,i),pe(r,t,n)}let c;try{c=pe(r,t,a)}catch(e){throw d(i,e),e}return c.then(t=>{try{f(i,t)}catch(t){e.fail(`fetch response capture`,t)}return t},e=>{throw d(i,e),e})},_=function(e,t){let n=K||t!==void 0&&ce.has(t)?void 0:G;return n===void 0?m(e,t):n(e,t,m)};G=g,globalThis.fetch=_;let v=XMLHttpRequest.prototype,y=v.open,b=v.send,x=v.setRequestHeader,C=/* @__PURE__ */ new WeakMap,w=/* @__PURE__ */ new WeakMap,T=function(e,t,n,r,i){h||(w.get(this)?.(),C.set(this,{method:e,url:String(t),headers:new Headers})),y.call(this,e,t,n??!0,r??null,i??null)},E=function(t,n){if(x.call(this,t,n),!h)try{C.get(this)?.headers.append(t,n)}catch(t){e.fail(`XMLHttpRequest header capture`,t)}},D=function(t){let n=h?void 0:C.get(this),r;if(n!==void 0)try{r=O(this,n,t)}catch(t){e.fail(`XMLHttpRequest capture`,t)}try{b.call(this,t)}catch(e){throw r?.(e),e}};v.open=T,v.setRequestHeader=E,v.send=D;function O(t,n,r){let i=o(`xhr`,n.method,n.url,n.headers,!0);i.entry.traceparent!==void 0&&x.call(t,`traceparent`,i.entry.traceparent),s(i,r,n.headers.get(`content-type`));let a=new AbortController,c=()=>{t.readyState<XMLHttpRequest.HEADERS_RECEIVED||(t.removeEventListener(`readystatechange`,c),l(i,t.status,Se(t),t.responseType||`text`),e.changed())},u=()=>p(`abort`);function f(){a.abort(),w.get(t)===u&&w.delete(t)}function p(n){f();try{k(t,i,n)}catch(t){e.fail(`XMLHttpRequest response capture`,t)}}let m=e=>p(e.type);w.set(t,u),t.addEventListener(`readystatechange`,c,{signal:a.signal});for(let e of[`load`,`error`,`abort`,`timeout`])t.addEventListener(e,m,{signal:a.signal});return e=>{a.signal.aborted||(f(),d(i,e))}}function k(e,t,n){if(n===`abort`)return u(t,`aborted`);if(n!==`load`)return u(t,`failed`,n);t.entry.status===void 0&&l(t,e.status,Se(e),e.responseType||`text`);let r=t.entry.contentType??``;if(t.bodyAllowed&&H.test(r)&&(t.entry.responseSize??0)<=65536){let n=Ce(e);n!==void 0&&n.length<=65536&&(t.entry.responseSize??=J(n),c(t,`responseBody`,ge(n)))}u(t,`done`)}function A(){if(a(r.takeRecords()),!t.some(e=>e.timingUntil!==void 0))return!1;let i=/* @__PURE__ */ new Map;for(let e of t){if(e.timed)continue;let t=i.get(e.entry.url);t===void 0?i.set(e.entry.url,[e]):t.push(e)}let o=!1,s=0;for(;s<n.length;){let e=n[s];if(e===void 0)throw Error(`No resource timing at index ${s}`);let{name:t,timing:r}=e,a=(i.get(t)??[]).filter(e=>!e.timed&&e.start<=r.startTime+1),c;for(let e of a){let t=Math.abs(r.startTime-e.start);(c===void 0||t<Math.abs(r.startTime-c.start))&&(c=e)}if(c!==void 0&&a.some(e=>e!==c&&Math.abs(e.start-c.start)<=1)){n.splice(s,1);continue}if(c?.timingUntil===void 0){s+=1;continue}n.splice(s,1),xe(c,r),o=!0}let c=performance.now();for(let e of t)e.timingUntil===void 0||c<=e.timingUntil||(e.timingUntil=void 0,e.timed=!0);return o&&e.changed(),o}return{list:()=>t.map(e=>({...e.entry})),resolveTimings:A,untracked:(e,t)=>pe(m,e,t),restore(){h=!0,r.disconnect(),G===g&&(G=void 0),globalThis.fetch===_&&(globalThis.fetch=m),v.open===T&&(v.open=y),v.send===D&&(v.send=b),v.setRequestHeader===E&&(v.setRequestHeader=x)}}}function xe(e,t){let{entry:n}=e;e.timingUntil=void 0,e.timed=!0,t.responseEnd>0&&(n.durationMs=Math.round(t.duration)),t.transferSize>0&&(n.transferSize=t.transferSize),n.responseSize===void 0&&t.decodedBodySize>0&&(n.responseSize=t.decodedBodySize),t.serverTiming.length>0&&(n.serverTiming=t.serverTiming.map(({name:e,duration:t,description:n})=>({name:e,duration:t,description:n}))),n.state===`open`&&(n.state=`done`)}function Se(e){let t=new Headers;for(let n of e.getAllResponseHeaders().split(/\r?\n/)){let e=n.indexOf(`:`);e>0&&t.append(n.slice(0,e).trim(),n.slice(e+1).trim())}return t}function Ce(e){if(e.responseType===``||e.responseType===`text`)return e.responseText;if(e.responseType===`json`)return JSON.stringify(e.response)}const we=`pk-annotator`,Y=16e3,Te=[`log`,`info`,`warn`,`error`,`debug`],Ee=[`click`,`input`,`change`,`submit`,`keydown`];function De(e,t){let n=e.stack??``;return t===void 0?{stack:n}:{stack:n,topFrame:t}}const Oe={console:[],errors:[],groups:[],requests:[],actions:[]};function ke(){return{subscribe:()=>()=>{},snapshot:()=>Oe,clear:()=>{},markSent:()=>{},markResolved:()=>{},huntContext:e=>{throw Error(`No error group ${e}: capture is off under navigator.webdriver`)},applySymbolicated:()=>{},tap:()=>()=>{},fetch:globalThis.fetch.bind(globalThis),reactRootOptions:{},stop:()=>{}}}function Ae(e,t){e.push(t),e.length>500&&e.shift()}function je(e,t){return e instanceof Error?{type:e.name,message:k(e.message),stack:k(e.stack??``,Y)}:{type:t,message:ee([e]),stack:``}}function Me(e){let t=(e.stack??``).split(`
3
3
  `),n=t.findIndex(e=>/:\d+:\d+\)?\s*$/.test(e));return k(t.slice(n+1).join(`
4
- `),J)}function Pe(e){let t=document.createTreeWalker(e,NodeFilter.SHOW_TEXT),n=``;for(;n.length<80&&t.nextNode()!==null;)n+=` ${(t.currentNode.nodeValue??``).slice(0,80)}`;let r=n.replace(/\s+/g,` `).trim().slice(0,40);return r===``?void 0:O(r)}function Fe(e){return e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement||e instanceof HTMLFormElement||e instanceof HTMLElement&&e.isContentEditable}function Ie(e){let t=e.getAttribute(`aria-labelledby`),n=e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement?e.labels:null,r=(e.getAttribute(`aria-label`)??n?.[0]?.textContent??(t===null?null:document.getElementById(t)?.textContent)??e.getAttribute(`name`)??e.getAttribute(`placeholder`))?.replace(/\s+/g,` `).trim().slice(0,40);return r===void 0||r===``?void 0:O(r)}function Le(e){let t={tag:e.localName};e.id!==``&&(t.id=e.id);let n=e.getAttribute(`data-testid`);n!==null&&(t.testId=n);let r=e.getAttribute(`data-pka-src`);r!==null&&(t.src=r);let i=e.getAttribute(`role`);i!==null&&(t.role=i);let a=Fe(e)?Ie(e):Pe(e);return a!==void 0&&(t[Fe(e)?`label`:`text`]=a),t}function Re(e,t){return e.tag===t.tag&&e.id===t.id&&e.testId===t.testId&&e.src===t.src&&e.label===t.label}function ze(e){return e instanceof HTMLMediaElement?e.currentSrc||e.src:e instanceof HTMLLinkElement?e.href:e.getAttribute(`src`)??``}function Be(e){if(navigator.webdriver)return Ae();let t=0,n=0,r,i=!1,a=[],o=[],s=[],c=/* @__PURE__ */ new Map,l=/* @__PURE__ */ new WeakSet,p={console:0,network:0,errors:0},m=/* @__PURE__ */ new Set,h=/* @__PURE__ */ new Set,g=!1,_=/* @__PURE__ */ new Set,v,y=-1/0,b=[],x={log:console.log,info:console.info,warn:console.warn,error:console.error,debug:console.debug},S=x.error,C=()=>t+=1,w=()=>(/* @__PURE__ */ new Date()).toISOString();function T(e,t){S.call(console,`pk-annotator: ${e} failed`,t)}function E(e){for(let t of h)try{t(e)}catch(e){T(`recording tap`,e)}}function D(e,t){je(e,t),E(t)}function O(){n+=1,!(m.size===0||g)&&(g=!0,queueMicrotask(()=>{g=!1;for(let e of m)e()}))}function A(){if(v!==void 0||_.size===0||i)return;let e=Math.max(0,y+1e3-performance.now());v=setTimeout(j,e)}function j(){v=void 0,y=performance.now();let t=[];for(let e of _){if(t.length===50)break;_.delete(e);let n=c.get(e);if(n===void 0)continue;let{stack:r,topFrame:i,...a}=n.group;t.push({...a,...n.raw})}if(t.length>0)try{e.send(`pka:errors`,{groups:t})}catch(e){T(`sending error groups`,e)}A()}function M(e){_.add(e),A()}function N(){let e;for(let t of c.values())(e===void 0||t.group.lastSeq<e.group.lastSeq)&&(e=t);e!==void 0&&c.delete(e.group.fingerprint)}function P(e,t){D(o,e);let n=c.get(e.fingerprint);if(n===void 0){c.size>=200&&N();let n=Oe(e,t),r={fingerprint:e.fingerprint,message:e.message,type:e.type,count:1,firstSeen:e.at,lastSeen:e.at,lastSeq:e.seq,status:`open`,...n};c.set(e.fingerprint,{group:r,raw:n,opened:e,latest:{entry:e,topFrame:t}})}else{let{group:r}=n;r.count+=1,r.lastSeen=e.at,r.lastSeq=e.seq,n.latest={entry:e,topFrame:t},r.status===`cleared`&&e.seq>p.errors&&re(n)}M(e.fingerprint),O()}function re(e){let{group:t}=e,{entry:n,topFrame:r}=e.latest;t.status=`open`,t.message=n.message,e.raw=Oe(n,r),t.stack=e.raw.stack,r===void 0?delete t.topFrame:t.topFrame=r,e.opened=n}function F(e,t,n){if(d(t.stack))return;let{fingerprint:r,topFrame:i}=u(t.type,t.message,t.stack),a={kind:`error`,seq:C(),at:w(),source:e,fingerprint:r,type:t.type,message:t.message,...n};t.stack!==``&&(a.stack=t.stack),P(a,i)}function ie(e,t,n){if(t instanceof Error){if(l.has(t))return;l.add(t)}F(e,Me(t,n),{})}function ae(e,t,n){if(D(a,{kind:`console`,seq:C(),at:w(),level:e,args:ee(t)}),O(),n===void 0)return;let r=Ne(n);if(d(r))return;let i=t.find(e=>e instanceof Error);if(i!==void 0){if(l.has(i))return;l.add(i)}let o=te(t.map(e=>e instanceof Error?e.message:e));F(`console`,{type:i?.name??`ConsoleError`,message:o,stack:i===void 0?r:ne(i)},{})}let I=!1,L={...x};for(let e of Ee){let t=x[e];L[e]=function(...n){if(t.apply(console,n),!(I||i)){I=!0;try{ae(e,n,e===`error`?/* @__PURE__ */ Error():void 0)}catch(e){T(`console capture`,e)}finally{I=!1}}},console[e]=L[e]}b.push(()=>{for(let e of Ee)console[e]===L[e]&&(console[e]=x[e])});function oe(e){if(e instanceof ErrorEvent){let t=e.error;if(t instanceof Error)return ie(`window`,t,`Error`);let n=e.filename===``?``:` at ${k(e.filename,se)}:${e.lineno}:${e.colno}`;return F(`window`,{type:`Error`,message:k(e.message),stack:n},{})}let t=e.target;if(!(t instanceof Element)||t.closest(Te)!==null)return;let n=t.localName,r=K(ze(t));P({kind:`error`,seq:C(),at:w(),source:`resource`,fingerprint:f(n,r),type:`ResourceError`,message:`<${n}> failed to load ${r}`,resource:{tag:n,url:r}},void 0)}function R(e){ie(`rejection`,e.reason,`UnhandledRejection`)}addEventListener(`error`,oe,!0),addEventListener(`unhandledrejection`,R),b.push(()=>{removeEventListener(`error`,oe,!0),removeEventListener(`unhandledrejection`,R)});function z(t,n){return(r,a)=>{let o=i?null:e.captureOwnerStack?.()??null;if(S.call(console,`${n}:`,r,a.componentStack??``),i)return;if(r instanceof Error){if(l.has(r))return;l.add(r)}let s={};a.componentStack!==void 0&&(s.componentStack=k(a.componentStack,J)),o!==null&&(s.ownerStack=k(o,J)),F(t,Me(r,`Error`),s)}}let ce={onCaughtError:z(`react-caught`,`React caught an error`),onUncaughtError:z(`react-uncaught`,`Uncaught error in React`),onRecoverableError:z(`react-recoverable`,`React recovered from an error`)},B=xe({bodies:e.bodies,nextSeq:C,changed:O,added:E,settled:E,fail:T});b.push(B.restore);function V(e){let t=e.target;if(!(t instanceof Element)||t.closest(Te)!==null)return;let n;if(e.type===`keydown`){if(!(e instanceof KeyboardEvent)||e.key!==`Enter`&&e.key!==`Escape`)return;n=e.key}let r=e.type===`click`?t.closest(`a,button,input,select,textarea,summary,label,[role],[data-testid]`)??t:t,i=De.find(t=>t===e.type);if(i===void 0)return;let a=Le(r),o=e.timeStamp,c=s.at(-1);if(i===`input`&&c?.kind===`action`&&c.type===`input`&&Re(c.target,a)){let e=c.performanceMs??o;c.durationMs=Math.max(c.durationMs??0,o-e);return}let l={kind:`action`,seq:C(),at:w(),performanceMs:o,type:i,target:a};i===`input`&&(l.durationMs=0),n!==void 0&&(l.key=n),D(s,l),O()}for(let e of De)document.addEventListener(e,V,{capture:!0,passive:!0});b.push(()=>{for(let e of De)document.removeEventListener(e,V,!0)});let H;function U(e,t){let n=K(t),r={kind:`navigation`,seq:C(),at:w(),type:e,to:n};H!==void 0&&(r.from=H),H=n,D(s,r),O()}if(U(`load`,location.href),`navigation`in globalThis){let e=e=>{U(e.navigationType,e.destination.url)};navigation.addEventListener(`navigate`,e),b.push(()=>navigation.removeEventListener(`navigate`,e))}else{let{pushState:e,replaceState:t}=history,n=function(...t){e.apply(history,t),i||U(`push`,location.href)},r=function(...e){t.apply(history,e),i||U(`replace`,location.href)};history.pushState=n,history.replaceState=r;let a=()=>U(`traverse`,location.href);addEventListener(`popstate`,a),b.push(()=>{history.pushState===n&&(history.pushState=e),history.replaceState===r&&(history.replaceState=t),removeEventListener(`popstate`,a)})}function W(e,t){e.group.status!==t&&(e.group.status=t,M(e.group.fingerprint))}return{subscribe(e){return m.add(e),()=>m.delete(e)},snapshot(){if(B.resolveTimings(),r?.version===n)return r.value;let e={console:a.filter(e=>e.seq>p.console),errors:o.filter(e=>e.seq>p.errors),groups:[...c.values()].map(e=>({...e.group})),requests:B.list().filter(e=>e.seq>p.network),actions:[...s]};return r={version:n,value:e},e},clear(e){if(p[e]=t,e===`errors`)for(let e of c.values())W(e,`cleared`);O()},markSent(e){for(let t of e){let e=c.get(t);e!==void 0&&e.group.status===`open`&&W(e,`sent`)}O()},markResolved(e,t){for(let n of e){let e=c.get(n);if(e!==void 0&&e.group.status===`sent`){if(Date.parse(e.group.lastSeen)<t){W(e,`cleared`);continue}re(e),M(n)}}O()},huntContext(e,t=2e4){let n=c.get(e);if(n===void 0)throw Error(`No error group ${e}; it was never seen or has been evicted`);B.resolveTimings();let r=n.opened,i=Date.parse(r.at),a=e=>e.seq<=r.seq&&Date.parse(e.at)>=i-t;return{group:{...n.group},error:r,actions:s.filter(a),requests:B.list().filter(a)}},applySymbolicated(e){for(let t of e.groups){let e=c.get(t.fingerprint);e!==void 0&&(e.group.stack=t.stack,t.topFrame!==void 0&&(e.group.topFrame=t.topFrame))}O()},tap(e){return h.add(e),()=>h.delete(e)},fetch:B.untracked,reactRootOptions:ce,stop(){if(!i){i=!0;for(let e of b.splice(0))e();v!==void 0&&clearTimeout(v),v=void 0,_.clear(),m.clear(),h.clear()}}}}let Ve=!1;const Y=/* @__PURE__ */ new Set;function He(e){if(Ve!==e){Ve=e;for(let e of Y)e()}}function Ue(){return Ve}function We(e){return Y.add(e),()=>{Y.delete(e)}}function Ge(){return globalThis.__PKA_ACTIVE__}function Ke(e){globalThis.__PKA_ACTIVE__=e}function qe(){let e=Ge();if(e?.capture===void 0)throw Error(`pk-annotator: getCapture() called before mount() or after Exit`);return e.capture}function Je(e,t,n,r){let i=e=>{let i=n.safeParse(e);i.success?r(i.data):console.error(`[pk-annotator] dropped an invalid ${t} message`,i.error)};return e.on(t,i),()=>e.off(t,i)}function Ye(e,t,n){e.send(t,n)}let Xe=!1;const X=/* @__PURE__ */ new Set;function Ze(e){if(e!==Xe){Xe=e;for(let e of X)e(`working`)}}function Qe(){return Xe}function $e(){for(let e of X)e(`reacted`)}function et(e){return X.add(e),()=>X.delete(e)}const tt=`capture/summary.md`;function nt(){let e=[],t=/* @__PURE__ */ new Set,n=()=>{for(let e of t)e()};return{get:()=>e,subscribe(e){return t.add(e),()=>t.delete(e)},add(t){return e=[...e.filter(e=>e.id!==t.id),t],n(),()=>{e=e.filter(e=>e!==t),n()}},remove(t){e=e.filter(e=>e.id!==t),n()},clear(){e=[],n()}}}const rt=nt(),it=nt();function at(e){return rt.add(e)}function ot(e){return it.add(e)}let st=0;const ct=/* @__PURE__ */ new Set;function lt(e){if(!Number.isInteger(e)||e<0)throw Error(`setBadge expects a non-negative integer, got ${e}`);st=e;for(let e of ct)e()}function ut(){return st}function dt(e){return ct.add(e),()=>ct.delete(e)}let ft=null;const pt=/* @__PURE__ */ new Set,mt={get:()=>ft,set(e){if(e!==ft){ft=e;for(let e of pt)e()}},subscribe(e){return pt.add(e),()=>pt.delete(e)}};function Z(e,t,...n){let r=document.createElementNS(`http://www.w3.org/2000/svg`,e);for(let[e,n]of Object.entries(t))r.setAttribute(e,String(n));return r.append(...n),r}const ht=`pk-annotator`,gt=`Alt+Shift+A`,_t=`pka:corner`,vt=`pka:sent`,yt=`pka:agent`;function Q(){let e=localStorage.getItem(_t);return e===`top-left`||e===`top-right`||e===`bottom-left`||e===`bottom-right`?e:`bottom-right`}function bt(e,t){return`${t<window.innerHeight/2?`top`:`bottom`}-${e<window.innerWidth/2?`left`:`right`}`}const xt=/* @__PURE__ */ new Map([[`ArrowLeft`,e=>e.startsWith(`top`)?`top-left`:`bottom-left`],[`ArrowRight`,e=>e.startsWith(`top`)?`top-right`:`bottom-right`],[`ArrowUp`,e=>e.endsWith(`left`)?`top-left`:`top-right`],[`ArrowDown`,e=>e.endsWith(`left`)?`bottom-left`:`bottom-right`]]),St=()=>Z(`svg`,{class:`pka-glyph`,viewBox:`0 0 24 24`,"aria-hidden":`true`},Z(`g`,{"data-part":`orbit`},Z(`path`,{d:`M16.2 6.7A9.5 9.5 0 0 0 6.7 16.2`,fill:`none`,stroke:`currentColor`,"stroke-width":1.25,opacity:.3}),Z(`circle`,{cx:16.2,cy:6.7,r:2.1,opacity:.45}),Z(`circle`,{cx:9.48,cy:9.48,r:2.1,opacity:.75}),Z(`circle`,{cx:6.7,cy:16.2,r:2.1})),Z(`circle`,{"data-part":`core`,cx:16.2,cy:16.2,r:3.25}),Z(`path`,{"data-part":`close`,d:`M7.5 7.5l9 9M16.5 7.5l-9 9`})),$=`cubic-bezier(0.22, 1, 0.36, 1)`,Ct=`
4
+ `),Y)}function Ne(e){let t=document.createTreeWalker(e,NodeFilter.SHOW_TEXT),n=``;for(;n.length<80&&t.nextNode()!==null;)n+=` ${(t.currentNode.nodeValue??``).slice(0,80)}`;let r=n.replace(/\s+/g,` `).trim().slice(0,40);return r===``?void 0:O(r)}function Pe(e){return e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement||e instanceof HTMLFormElement||e instanceof HTMLElement&&e.isContentEditable}function Fe(e){let t=e.getAttribute(`aria-labelledby`),n=e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement?e.labels:null,r=(e.getAttribute(`aria-label`)??n?.[0]?.textContent??(t===null?null:document.getElementById(t)?.textContent)??e.getAttribute(`name`)??e.getAttribute(`placeholder`))?.replace(/\s+/g,` `).trim().slice(0,40);return r===void 0||r===``?void 0:O(r)}function Ie(e){let t={tag:e.localName};e.id!==``&&(t.id=e.id);let n=e.getAttribute(`data-testid`);n!==null&&(t.testId=n);let r=e.getAttribute(`data-pka-src`);r!==null&&(t.src=r);let i=e.getAttribute(`role`);i!==null&&(t.role=i);let a=Pe(e)?Fe(e):Ne(e);return a!==void 0&&(t[Pe(e)?`label`:`text`]=a),t}function Le(e,t){return e.tag===t.tag&&e.id===t.id&&e.testId===t.testId&&e.src===t.src&&e.label===t.label}function Re(e){return e instanceof HTMLMediaElement?e.currentSrc||e.src:e instanceof HTMLLinkElement?e.href:e.getAttribute(`src`)??``}function ze(e){if(navigator.webdriver)return ke();let t=0,n=0,r,i=!1,a=[],o=[],s=[],c=/* @__PURE__ */ new Map,l=/* @__PURE__ */ new WeakSet,p={console:0,network:0,errors:0},m=/* @__PURE__ */ new Set,h=/* @__PURE__ */ new Set,g=!1,_=/* @__PURE__ */ new Set,v,y=-1/0,b=[],x={log:console.log,info:console.info,warn:console.warn,error:console.error,debug:console.debug},S=x.error,C=()=>t+=1,w=()=>(/* @__PURE__ */ new Date()).toISOString();function T(e,t){S.call(console,`pk-annotator: ${e} failed`,t)}function E(e){for(let t of h)try{t(e)}catch(e){T(`recording tap`,e)}}function D(e,t){Ae(e,t),E(t)}function O(){n+=1,!(m.size===0||g)&&(g=!0,queueMicrotask(()=>{g=!1;for(let e of m)e()}))}function j(){if(v!==void 0||_.size===0||i)return;let e=Math.max(0,y+1e3-performance.now());v=setTimeout(M,e)}function M(){v=void 0,y=performance.now();let t=[];for(let e of _){if(t.length===50)break;_.delete(e);let n=c.get(e);if(n===void 0)continue;let{stack:r,topFrame:i,...a}=n.group;t.push({...a,...n.raw})}if(t.length>0)try{e.send(`pka:errors`,{groups:t})}catch(e){T(`sending error groups`,e)}j()}function N(e){_.add(e),j()}function P(){let e;for(let t of c.values())(e===void 0||t.group.lastSeq<e.group.lastSeq)&&(e=t);e!==void 0&&(c.delete(e.group.fingerprint),_.delete(e.group.fingerprint))}function F(e,t){D(o,e);let n=c.get(e.fingerprint);if(n===void 0){c.size>=200&&P();let n=De(e,t),r={fingerprint:e.fingerprint,message:e.message,type:e.type,count:1,firstSeen:e.at,lastSeen:e.at,lastSeq:e.seq,status:`open`,...n};c.set(e.fingerprint,{group:r,raw:n,opened:e,latest:{entry:e,topFrame:t}})}else{let{group:r}=n;r.count+=1,r.lastSeen=e.at,r.lastSeq=e.seq,n.latest={entry:e,topFrame:t},r.status===`cleared`&&e.seq>p.errors&&ne(n)}N(e.fingerprint),O()}function ne(e){let{group:t}=e,{entry:n,topFrame:r}=e.latest;t.status=`open`,t.message=n.message,e.raw=De(n,r),t.stack=e.raw.stack,r===void 0?delete t.topFrame:t.topFrame=r,e.opened=n}function I(e,t,n){if(d(t.stack))return;let{fingerprint:r,topFrame:i}=u(t.type,t.message,t.stack),a={kind:`error`,seq:C(),at:w(),source:e,fingerprint:r,type:t.type,message:t.message,...n};t.stack!==``&&(a.stack=t.stack),F(a,i)}function re(e,t,n){if(t instanceof Error){if(l.has(t))return;l.add(t)}I(e,je(t,n),{})}function ie(e,t,n){if(D(a,{kind:`console`,seq:C(),at:w(),level:e,args:A(t)}),O(),n===void 0)return;let r=Me(n);if(d(r))return;let i=t.find(e=>e instanceof Error);if(i!==void 0){if(l.has(i))return;l.add(i)}let o=ee(t.map(e=>e instanceof Error?e.message:e));I(`console`,{type:i?.name??`ConsoleError`,message:o,stack:i===void 0?r:te(i)},{})}let L=!1,R={...x};for(let e of Te){let t=x[e];R[e]=function(...n){if(t.apply(console,n),!(L||i)){L=!0;try{ie(e,n,e===`error`?/* @__PURE__ */ Error():void 0)}catch(e){T(`console capture`,e)}finally{L=!1}}},console[e]=R[e]}b.push(()=>{for(let e of Te)console[e]===R[e]&&(console[e]=x[e])});function ae(e){if(e instanceof ErrorEvent){let t=e.error;if(t instanceof Error)return re(`window`,t,`Error`);let n=e.filename===``?``:` at ${k(e.filename,oe)}:${e.lineno}:${e.colno}`;return I(`window`,{type:`Error`,message:k(e.message),stack:n},{})}let t=e.target;if(!(t instanceof Element)||t.closest(we)!==null)return;let n=t.localName,r=q(Re(t));F({kind:`error`,seq:C(),at:w(),source:`resource`,fingerprint:f(n,r),type:`ResourceError`,message:`<${n}> failed to load ${r}`,resource:{tag:n,url:r}},void 0)}function z(e){re(`rejection`,e.reason,`UnhandledRejection`)}addEventListener(`error`,ae,!0),addEventListener(`unhandledrejection`,z),b.push(()=>{removeEventListener(`error`,ae,!0),removeEventListener(`unhandledrejection`,z)});function B(t,n){return(r,a)=>{let o=i?null:e.captureOwnerStack?.()??null;if(S.call(console,`${n}:`,r,a.componentStack??``),i)return;if(r instanceof Error){if(l.has(r))return;l.add(r)}let s={};a.componentStack!==void 0&&(s.componentStack=k(a.componentStack,Y)),o!==null&&(s.ownerStack=k(o,Y)),I(t,je(r,`Error`),s)}}let se={onCaughtError:B(`react-caught`,`React caught an error`),onUncaughtError:B(`react-uncaught`,`Uncaught error in React`),onRecoverableError:B(`react-recoverable`,`React recovered from an error`)},V=be({bodies:e.bodies,nextSeq:C,changed:O,added:E,settled:E,fail:T});b.push(V.restore);function H(e){let t=e.target;if(!(t instanceof Element)||t.closest(we)!==null)return;let n;if(e.type===`keydown`){if(!(e instanceof KeyboardEvent)||e.key!==`Enter`&&e.key!==`Escape`)return;n=e.key}let r=e.type===`click`?t.closest(`a,button,input,select,textarea,summary,label,[role],[data-testid]`)??t:t,i=Ee.find(t=>t===e.type);if(i===void 0)return;let a=Ie(r),o=e.timeStamp,c=s.at(-1);if(i===`input`&&c?.kind===`action`&&c.type===`input`&&Le(c.target,a)){let e=c.performanceMs??o;c.durationMs=Math.max(c.durationMs??0,o-e);return}let l={kind:`action`,seq:C(),at:w(),performanceMs:o,type:i,target:a};i===`input`&&(l.durationMs=0),n!==void 0&&(l.key=n),D(s,l),O()}for(let e of Ee)document.addEventListener(e,H,{capture:!0,passive:!0});b.push(()=>{for(let e of Ee)document.removeEventListener(e,H,!0)});let U;function W(e,t){let n=q(t),r={kind:`navigation`,seq:C(),at:w(),type:e,to:n};U!==void 0&&(r.from=U),U=n,D(s,r),O()}if(W(`load`,location.href),`navigation`in globalThis){let e=e=>{W(e.navigationType,e.destination.url)};navigation.addEventListener(`navigate`,e),b.push(()=>navigation.removeEventListener(`navigate`,e))}else{let{pushState:e,replaceState:t}=history,n=function(...t){e.apply(history,t),i||W(`push`,location.href)},r=function(...e){t.apply(history,e),i||W(`replace`,location.href)};history.pushState=n,history.replaceState=r;let a=()=>W(`traverse`,location.href);addEventListener(`popstate`,a),b.push(()=>{history.pushState===n&&(history.pushState=e),history.replaceState===r&&(history.replaceState=t),removeEventListener(`popstate`,a)})}function G(e,t){e.group.status!==t&&(e.group.status=t,N(e.group.fingerprint))}return{subscribe(e){return m.add(e),()=>m.delete(e)},snapshot(){if(V.resolveTimings(),r?.version===n)return r.value;let e={console:a.filter(e=>e.seq>p.console),errors:o.filter(e=>e.seq>p.errors),groups:[...c.values()].map(e=>({...e.group})),requests:V.list().filter(e=>e.seq>p.network),actions:[...s]};return r={version:n,value:e},e},clear(e){if(p[e]=t,e===`errors`)for(let e of c.values())G(e,`cleared`);O()},markSent(e){for(let t of e){let e=c.get(t);e!==void 0&&e.group.status===`open`&&G(e,`sent`)}O()},markResolved(e,t){for(let n of e){let e=c.get(n);if(e!==void 0&&e.group.status===`sent`){if(Date.parse(e.group.lastSeen)<t){G(e,`cleared`);continue}ne(e),N(n)}}O()},huntContext(e,t=2e4){let n=c.get(e);if(n===void 0)throw Error(`No error group ${e}; it was never seen or has been evicted`);V.resolveTimings();let r=n.opened,i=Date.parse(r.at),a=e=>e.seq<=r.seq&&Date.parse(e.at)>=i-t;return{group:{...n.group},error:r,actions:s.filter(a),requests:V.list().filter(a)}},applySymbolicated(e){for(let t of e.groups){let e=c.get(t.fingerprint);e!==void 0&&(e.group.stack=t.stack,t.topFrame!==void 0&&(e.group.topFrame=t.topFrame))}O()},tap(e){return h.add(e),()=>h.delete(e)},fetch:V.untracked,reactRootOptions:se,stop(){if(!i){i=!0;for(let e of b.splice(0))e();v!==void 0&&clearTimeout(v),v=void 0,_.clear(),m.clear(),h.clear()}}}}let Be=!1;const Ve=/* @__PURE__ */ new Set;function He(e){if(Be!==e){Be=e;for(let e of Ve)e()}}function Ue(){return Be}function We(e){return Ve.add(e),()=>{Ve.delete(e)}}function Ge(){return globalThis.__PKA_ACTIVE__}function Ke(e){globalThis.__PKA_ACTIVE__=e}function qe(){let e=Ge();if(e?.capture===void 0)throw Error(`pk-annotator: getCapture() called before mount() or after Exit`);return e.capture}function Je(e,t,n,r){let i=e=>{let i=n.safeParse(e);i.success?r(i.data):console.error(`[pk-annotator] dropped an invalid ${t} message`,i.error)};return e.on(t,i),()=>e.off(t,i)}function Ye(e,t,n){e.send(t,n)}let Xe=!1;const X=/* @__PURE__ */ new Set;function Ze(e){if(e!==Xe){Xe=e;for(let e of X)e(`working`)}}function Qe(){return Xe}function $e(){for(let e of X)e(`reacted`)}function et(e){return X.add(e),()=>X.delete(e)}const tt=`capture/summary.md`;function nt(){let e=[],t=/* @__PURE__ */ new Set,n=()=>{for(let e of t)e()};return{get:()=>e,subscribe(e){return t.add(e),()=>t.delete(e)},add(t){return e=[...e.filter(e=>e.id!==t.id),t],n(),()=>{e=e.filter(e=>e!==t),n()}},remove(t){e=e.filter(e=>e.id!==t),n()},clear(){e=[],n()}}}const rt=nt(),it=nt();function at(e){return rt.add(e)}function ot(e){return it.add(e)}let st=0;const ct=/* @__PURE__ */ new Set;function lt(e){if(!Number.isInteger(e)||e<0)throw Error(`setBadge expects a non-negative integer, got ${e}`);st=e;for(let e of ct)e()}function ut(){return st}function dt(e){return ct.add(e),()=>ct.delete(e)}let ft=null;const pt=/* @__PURE__ */ new Set,mt={get:()=>ft,set(e){if(e!==ft){ft=e;for(let e of pt)e()}},subscribe(e){return pt.add(e),()=>pt.delete(e)}};function Z(e,t,...n){let r=document.createElementNS(`http://www.w3.org/2000/svg`,e);for(let[e,n]of Object.entries(t))r.setAttribute(e,String(n));return r.append(...n),r}let ht=null;const gt=/* @__PURE__ */ new Set;function _t(e){ht=e;for(let e of gt)e()}function vt(){return ht}function yt(e){return gt.add(e),()=>{gt.delete(e)}}const bt=`pk-annotator`,xt=`Alt+Shift+A`,St=`pka:corner`,Ct=`pka:sent`,wt=`pka:agent`,Tt=`pka:update`;function Q(){let e=localStorage.getItem(St);return e===`top-left`||e===`top-right`||e===`bottom-left`||e===`bottom-right`?e:`bottom-right`}function Et(e,t){return`${t<window.innerHeight/2?`top`:`bottom`}-${e<window.innerWidth/2?`left`:`right`}`}const Dt=/* @__PURE__ */ new Map([[`ArrowLeft`,e=>e.startsWith(`top`)?`top-left`:`bottom-left`],[`ArrowRight`,e=>e.startsWith(`top`)?`top-right`:`bottom-right`],[`ArrowUp`,e=>e.endsWith(`left`)?`top-left`:`top-right`],[`ArrowDown`,e=>e.endsWith(`left`)?`bottom-left`:`bottom-right`]]),Ot=()=>Z(`svg`,{class:`pka-glyph`,viewBox:`0 0 24 24`,"aria-hidden":`true`},Z(`g`,{"data-part":`orbit`},Z(`path`,{d:`M16.2 6.7A9.5 9.5 0 0 0 6.7 16.2`,fill:`none`,stroke:`currentColor`,"stroke-width":1.25,opacity:.3}),Z(`circle`,{cx:16.2,cy:6.7,r:2.1,opacity:.45}),Z(`circle`,{cx:9.48,cy:9.48,r:2.1,opacity:.75}),Z(`circle`,{cx:6.7,cy:16.2,r:2.1})),Z(`circle`,{"data-part":`core`,cx:16.2,cy:16.2,r:3.25}),Z(`path`,{"data-part":`close`,d:`M7.5 7.5l9 9M16.5 7.5l-9 9`})),kt=()=>Z(`svg`,{class:`pka-pending`,viewBox:`0 0 44 44`,"aria-hidden":`true`},Z(`circle`,{cx:22,cy:22,r:18.75,pathLength:12})),$=`cubic-bezier(0.22, 1, 0.36, 1)`,At=`
5
5
  :host {
6
6
  all: initial !important;
7
7
  position: fixed !important;
@@ -97,7 +97,10 @@ import{captureOwnerStack as e}from"react";const t=/((?:[a-z][a-z\d+.-]*:\/\/|\/)
97
97
  transform: rotate(90deg) scale(0.4);
98
98
  transition: transform 300ms ${$}, opacity 160ms ${$};
99
99
  }
100
- .pka-launcher:hover .pka-glyph [data-part="orbit"] { transform: rotate(-16deg); }
100
+ @media (prefers-reduced-motion: no-preference) {
101
+ .pka-launcher:hover .pka-glyph [data-part="orbit"] { transform: rotate(-16deg); }
102
+ .pka-launcher[data-count]:not([aria-expanded="true"]):hover .pka-pending { rotate: -30deg; }
103
+ }
101
104
  .pka-launcher[aria-expanded="true"] .pka-glyph [data-part="orbit"] {
102
105
  transform: rotate(-90deg) scale(0.2);
103
106
  opacity: 0;
@@ -145,6 +148,35 @@ import{captureOwnerStack as e}from"react";const t=/((?:[a-z][a-z\d+.-]*:\/\/|\/)
145
148
  }
146
149
  .pka-launcher[data-count]:not([aria-expanded="true"]) .pka-count { opacity: 1; scale: 1; }
147
150
  .pka-launcher[data-count]:not([aria-expanded="true"]) .pka-glyph { opacity: 0; scale: 0.5; }
151
+ .pka-pending {
152
+ position: absolute;
153
+ inset: 0;
154
+ width: 100%;
155
+ height: 100%;
156
+ overflow: visible;
157
+ pointer-events: none;
158
+ color: var(--pka-hub-accent);
159
+ opacity: 0;
160
+ rotate: 90deg;
161
+ scale: 0.8;
162
+ transition:
163
+ opacity 160ms ${$},
164
+ rotate 480ms ${$},
165
+ scale 260ms cubic-bezier(0.34, 1.56, 0.64, 1);
166
+ }
167
+ .pka-pending circle {
168
+ fill: none;
169
+ stroke: currentColor;
170
+ stroke-width: 2;
171
+ stroke-linecap: round;
172
+ stroke-dasharray: 0.45 0.55;
173
+ }
174
+ .pka-launcher[data-count]:not([aria-expanded="true"]) .pka-pending { opacity: 1; rotate: 0deg; scale: 1; }
175
+ /* Another mark saved: the number drops onto the stack and the ring ticks one dash. */
176
+ .pka-launcher[data-stack] .pka-count { animation: pka-hub-stack 360ms cubic-bezier(0.3, 0.7, 0.4, 1); }
177
+ .pka-launcher[data-stack] .pka-pending { animation: pka-hub-tick 480ms ${$}; }
178
+ @keyframes pka-hub-stack { from { translate: 0 -6px; scale: 0.7; } }
179
+ @keyframes pka-hub-tick { from { rotate: 30deg; } }
148
180
  .pka-badge {
149
181
  position: absolute;
150
182
  top: -3px;
@@ -162,6 +194,18 @@ import{captureOwnerStack as e}from"react";const t=/((?:[a-z][a-z\d+.-]*:\/\/|\/)
162
194
  text-align: center;
163
195
  }
164
196
  .pka-badge[hidden] { display: none; }
197
+ /* A newer release: Settings offers it. */
198
+ .pka-update {
199
+ position: absolute;
200
+ right: 0;
201
+ bottom: 0;
202
+ width: 10px;
203
+ height: 10px;
204
+ border-radius: 9999px;
205
+ background: var(--pka-connect);
206
+ box-shadow: 0 0 0 2px var(--pka-surface);
207
+ }
208
+ .pka-update[hidden] { display: none; }
165
209
  @media (prefers-reduced-motion: reduce) {
166
210
  .pka-launcher, .pka-launcher *, .pka-launcher::before {
167
211
  transition: none !important;
@@ -173,4 +217,4 @@ import{captureOwnerStack as e}from"react";const t=/((?:[a-z][a-z\d+.-]*:\/\/|\/)
173
217
  0 12px 28px -10px rgb(0 0 0 / 0.4);
174
218
  }
175
219
  }
176
- `;function wt(e,t){let n=/* @__PURE__ */ new Set,r=matchMedia(`(prefers-color-scheme: dark)`),i=t,a=()=>i===`system`?r.matches?`dark`:`light`:i,o=a();e.setAttribute(`data-theme`,o);let s=()=>{let t=a();if(t!==o){o=t,e.setAttribute(`data-theme`,t);for(let e of n)e()}};return r.addEventListener(`change`,s),{get:()=>o,subscribe(e){return n.add(e),()=>n.delete(e)},set(e){if(e!==`light`&&e!==`dark`&&e!==`system`)throw Error(`setTheme expects "light", "dark", or "system", got ${String(e)}`);i=e,s()},stop:()=>r.removeEventListener(`change`,s)}}function Tt(e,t,n){if(document.querySelector(`pk-annotator`)!==null)throw Error(`<${ht}> is already mounted; call unmount() before mounting again`);let r=document.createElement(ht),i=r.attachShadow({mode:`open`}),a=new CSSStyleSheet;a.replaceSync(Ct),i.adoptedStyleSheets=[a];let o=wt(r,t),s=document.createElement(`button`);s.type=`button`,s.className=`pka-launcher`,s.dataset.corner=Q(),s.title=`Annotator (${gt} picks) · drag to move`,s.setAttribute(`aria-haspopup`,`menu`),s.setAttribute(`aria-expanded`,`false`);let c=document.createElement(`span`);c.className=`pka-count`,c.setAttribute(`aria-hidden`,`true`);let l=document.createElement(`span`);l.className=`pka-badge`,l.setAttribute(`aria-hidden`,`true`),s.append(St(),c,l),i.append(s),document.documentElement.append(r);let u=0,d=null,f=()=>{let e=ut(),t=[`Annotator`];d!==null&&t.push(`${d} connected`),u>0&&t.push(`${u} unsent ${u===1?`mark`:`marks`}`),e>0&&t.push(`${e} open errors`),s.setAttribute(`aria-label`,t.join(`, `))},p=()=>{let e=ut();l.hidden=e===0,l.textContent=e>99?`99+`:String(e),f()};p();let m=dt(p),h=e=>{if(!Number.isInteger(e)||e<0)throw Error(`setMarkCount expects a non-negative integer, got ${e}`);u=e,e===0?delete s.dataset.count:s.dataset.count=``,e>0&&(c.textContent=e>99?`99+`:String(e)),f()},g=()=>{Qe()?s.dataset.working=``:delete s.dataset.working};g();let _=et(e=>{if(e===`working`){g();return}delete s.dataset.react,s.offsetWidth,s.dataset.react=``});s.addEventListener(`animationend`,e=>{e.target===s&&e.animationName===`pka-hub-react`&&delete s.dataset.react});let v,y=e=>{v??=import(`./pka-overlay-agent-theme-CfCyg5Gv.mjs`),v.then(({AgentMessage:t,showAgent:n})=>{let a=t.safeParse(e);if(!a.success){console.error(`[pk-annotator] dropped an invalid ${yt} message`,a.error);return}d=n({host:r,shadow:i,hub:s},a.data),f()})};e.on(yt,y),Ye(e,`pka:presence`,{});let b,x=()=>b??=import(`./pka-overlay-thread-store-DOxLXsAv.mjs`).then(({connectThread:t})=>t(e),e=>{throw b=void 0,e}),S,C=async t=>{S??=Promise.all([import(`./pka-overlay-app-CsIxnRqJ.mjs`).then(e=>e.t),x()]).then(([{open:t},a])=>t({host:r,shadow:i,hot:e,theme:o,hub:s,thread:a,exit:n,setMarkCount:h}),e=>{throw S=void 0,e});try{t(await S)}catch(e){console.error(`[pk-annotator] the overlay UI failed to open`,e)}},w=e=>{let t=s.getBoundingClientRect();if(s.style.left=``,s.style.top=``,delete s.dataset.dragging,localStorage.setItem(_t,e),s.dataset.corner=e,S?.then(t=>t.setCorner(e)),matchMedia(`(prefers-reduced-motion: reduce)`).matches)return;let n=s.getBoundingClientRect();s.animate([{translate:`${t.left-n.left}px ${t.top-n.top}px`},{translate:`0 0`}],{duration:260,easing:$})},T,E=!1;s.addEventListener(`pointerdown`,e=>{e.button===0&&(E=!1,T={id:e.pointerId,x:e.clientX,y:e.clientY,dragging:!1},s.setPointerCapture(e.pointerId))}),s.addEventListener(`pointermove`,e=>{if(T?.id===e.pointerId){if(!T.dragging){if(Math.hypot(e.clientX-T.x,e.clientY-T.y)<6)return;T.dragging=!0,s.dataset.dragging=``,S?.then(e=>e.closeMenu())}s.style.left=`${e.clientX-22}px`,s.style.top=`${e.clientY-22}px`}}),s.addEventListener(`pointerup`,e=>{T?.id===e.pointerId&&(E=T.dragging,T=void 0,E&&w(bt(e.clientX,e.clientY)))}),s.addEventListener(`pointercancel`,()=>{T?.dragging&&w(Q()),T=void 0}),s.addEventListener(`click`,e=>{if(E){E=!1;return}C(t=>t.toggleMenu(e.detail===0))}),s.addEventListener(`keydown`,e=>{let t=xt.get(e.key)?.(Q());t!==void 0&&(e.preventDefault(),t!==Q()&&w(t))});let D=e=>{e.code===`KeyA`&&e.altKey&&e.shiftKey&&(e.ctrlKey||e.metaKey||(e.preventDefault(),e.stopPropagation(),C(e=>e.togglePick())))};window.addEventListener(`keydown`,D,{capture:!0});let O=sessionStorage.getItem(vt);return O!==null&&O!==`[]`&&x().catch(e=>{console.error(`[pk-annotator] following this tab's sent annotations failed`,e)}),{setTheme:o.set,unmount(){window.removeEventListener(`keydown`,D,{capture:!0}),e.off(yt,y),m(),_(),o.stop(),mt.set(null),S?.then(e=>e.unmount()),b?.then(e=>e.disconnect()),r.remove()}}}const Et=`pka:errors-ack`,Dt=`pka:agent`,Ot=`pka:exited`;function kt(e){return e.code===`KeyA`&&e.altKey&&e.shiftKey&&!e.ctrlKey&&!e.metaKey}function At(t){if(navigator.webdriver)return{reactRootOptions:{},setTheme(){},unmount(){}};let n=Ge();if(n!==void 0)return n.mounted;let r=t.theme??`system`,i,a=()=>{let n=Be({send:(e,n)=>Ye(t.hot,e,n),bodies:globalThis.__PKA_BODIES__??[],captureOwnerStack:e}),a=e=>{import(`./pka-overlay-channel-D5Ghnvgb.mjs`).then(e=>e.f).then(({ErrorsAckMessage:t})=>{let r=t.safeParse(e);r.success?n.applySymbolicated(r.data):console.error(`[pk-annotator] dropped an invalid ${Et} message`,r.error)})};t.hot.on(Et,a);let o=e=>{import(`./pka-overlay-channel-D5Ghnvgb.mjs`).then(e=>e.f).then(({AgentMessage:t})=>{let n=t.safeParse(e);n.success?He(n.data.agent!==null):console.error(`[pk-annotator] dropped an invalid ${Dt} message`,n.error)})};t.hot.on(Dt,o);let s=0,u=n.subscribe(()=>{let e=n.snapshot().groups.filter(e=>e.status===`open`).length;e!==s&&(s=e,lt(e))}),d=Tt(t.hot,r,c);i={capture:n,launcher:d,stop(){u(),t.hot.off(Et,a),t.hot.off(Dt,o),He(!1),n.stop(),d.unmount(),lt(0)}},Ke({mounted:l,capture:n})},o=e=>{kt(e)&&(e.preventDefault(),e.stopPropagation(),window.removeEventListener(`keydown`,o,{capture:!0}),sessionStorage.removeItem(Ot),a())},s=()=>{window.addEventListener(`keydown`,o,{capture:!0}),Ke({mounted:l,capture:void 0})};function c(){i?.stop(),i=void 0,sessionStorage.setItem(Ot,`1`),s()}let l={reactRootOptions:{onCaughtError(e,t){let n=i?.capture.reactRootOptions.onCaughtError;n===void 0?console.error(`React caught an error:`,e,t.componentStack??``):n(e,t)},onUncaughtError(e,t){let n=i?.capture.reactRootOptions.onUncaughtError;n===void 0?console.error(`Uncaught error in React:`,e,t.componentStack??``):n(e,t)},onRecoverableError(e,t){let n=i?.capture.reactRootOptions.onRecoverableError;n===void 0?console.error(`React recovered from an error:`,e,t.componentStack??``):n(e,t)}},setTheme(e){if(e!==`light`&&e!==`dark`&&e!==`system`)throw Error(`setTheme expects "light", "dark", or "system", got ${String(e)}`);r=e,i?.launcher.setTheme(e)},unmount(){i?.stop(),i=void 0,window.removeEventListener(`keydown`,o,{capture:!0}),Ke(void 0)}};return sessionStorage.getItem(Ot)===`1`?s():a(),l}export{S as C,T as E,te as S,w as T,Ue as _,Z as a,K as b,mt as c,at as d,$e as f,qe as g,Ye as h,Q as i,it as l,Je as m,At as mount,vt as n,tt as o,Ze as p,gt as r,ot as s,ht as t,rt as u,We as v,C as w,q as x,oe as y};
220
+ `;function jt(e,t){let n=/* @__PURE__ */ new Set,r=matchMedia(`(prefers-color-scheme: dark)`),i=t,a=()=>i===`system`?r.matches?`dark`:`light`:i,o=a();e.setAttribute(`data-theme`,o);let s=()=>{let t=a();if(t!==o){o=t,e.setAttribute(`data-theme`,t);for(let e of n)e()}};return r.addEventListener(`change`,s),{get:()=>o,subscribe(e){return n.add(e),()=>n.delete(e)},set(e){if(e!==`light`&&e!==`dark`&&e!==`system`)throw Error(`setTheme expects "light", "dark", or "system", got ${String(e)}`);i=e,s()},stop:()=>r.removeEventListener(`change`,s)}}function Mt(e,t,n){if(document.querySelector(`pk-annotator`)!==null)throw Error(`<${bt}> is already mounted; call unmount() before mounting again`);let r=document.createElement(bt),i=r.attachShadow({mode:`open`}),a=new CSSStyleSheet;a.replaceSync(At),i.adoptedStyleSheets=[a];let o=jt(r,t),s=document.createElement(`button`);s.type=`button`,s.className=`pka-launcher`,s.dataset.corner=Q(),s.title=`Annotator (${xt} picks) · drag to move`,s.setAttribute(`aria-haspopup`,`menu`),s.setAttribute(`aria-expanded`,`false`);let c=document.createElement(`span`);c.className=`pka-count`,c.setAttribute(`aria-hidden`,`true`);let l=document.createElement(`span`);l.className=`pka-badge`,l.setAttribute(`aria-hidden`,`true`);let u=document.createElement(`span`);u.className=`pka-update`,u.setAttribute(`aria-hidden`,`true`),s.append(Ot(),kt(),c,l,u),i.append(s),document.documentElement.append(r);let d=0,f=null,p=()=>{let e=ut(),t=[`Annotator`];f!==null&&t.push(`${f} connected`),d>0&&t.push(`${d} ${d===1?`mark`:`marks`} waiting to send`),e>0&&t.push(`${e} open errors`);let n=vt();n!==null&&t.push(`update ${n.latest} available`),s.setAttribute(`aria-label`,t.join(`, `))},m=()=>{let e=ut();l.hidden=e===0,l.textContent=e>99?`99+`:String(e),p()};m();let h=dt(m),g=e=>{if(!Number.isInteger(e)||e<0)throw Error(`setMarkCount expects a non-negative integer, got ${e}`);d>0&&e>d&&(delete s.dataset.stack,s.offsetWidth,s.dataset.stack=``),d=e,e===0?delete s.dataset.count:s.dataset.count=``,e>0&&(c.textContent=e>99?`99+`:String(e)),p()},_=()=>{Qe()?s.dataset.working=``:delete s.dataset.working};_();let v=et(e=>{if(e===`working`){_();return}delete s.dataset.react,s.offsetWidth,s.dataset.react=``});s.addEventListener(`animationend`,e=>{e.target===s&&e.animationName===`pka-hub-react`&&delete s.dataset.react,e.target===c&&e.animationName===`pka-hub-stack`&&delete s.dataset.stack});let y,b=e=>{y??=import(`./pka-overlay-agent-theme-BiWi6_IJ.mjs`),y.then(({AgentMessage:t,showAgent:n})=>{let a=t.safeParse(e);if(!a.success){console.error(`[pk-annotator] dropped an invalid ${wt} message`,a.error);return}f=n({host:r,shadow:i,hub:s},a.data),p()})};e.on(wt,b);let x=()=>{u.hidden=vt()===null,p()};x();let S=yt(x),C=e=>{import(`./pka-overlay-channel-BZI-qbPH.mjs`).then(e=>e.m).then(({UpdateMessage:t})=>{let n=t.safeParse(e);if(!n.success){console.error(`[pk-annotator] dropped an invalid ${Tt} message`,n.error);return}vt()?.status!==`installing`&&_t({...n.data,status:`available`})})};e.on(Tt,C),Ye(e,`pka:presence`,{});let w,T=()=>w??=import(`./pka-overlay-thread-store-C55iLxND.mjs`).then(({connectThread:t})=>t(e),e=>{throw w=void 0,e}),E,D=async t=>{E??=Promise.all([import(`./pka-overlay-app-DjGKtS7t.mjs`).then(e=>e.t),T()]).then(([{open:t},a])=>t({host:r,shadow:i,hot:e,theme:o,hub:s,thread:a,exit:n,setMarkCount:g}),e=>{throw E=void 0,e});try{t(await E)}catch(e){console.error(`[pk-annotator] the overlay UI failed to open`,e)}},O=e=>{let t=s.getBoundingClientRect();if(s.style.left=``,s.style.top=``,delete s.dataset.dragging,localStorage.setItem(St,e),s.dataset.corner=e,E?.then(t=>t.setCorner(e)),matchMedia(`(prefers-reduced-motion: reduce)`).matches)return;let n=s.getBoundingClientRect();s.animate([{translate:`${t.left-n.left}px ${t.top-n.top}px`},{translate:`0 0`}],{duration:260,easing:$})},k,A=!1;s.addEventListener(`pointerdown`,e=>{e.button===0&&(A=!1,k={id:e.pointerId,x:e.clientX,y:e.clientY,dragging:!1},s.setPointerCapture(e.pointerId))}),s.addEventListener(`pointermove`,e=>{if(k?.id===e.pointerId){if(!k.dragging){if(Math.hypot(e.clientX-k.x,e.clientY-k.y)<6)return;k.dragging=!0,s.dataset.dragging=``,E?.then(e=>e.closeMenu())}s.style.left=`${e.clientX-22}px`,s.style.top=`${e.clientY-22}px`}}),s.addEventListener(`pointerup`,e=>{k?.id===e.pointerId&&(A=k.dragging,k=void 0,A&&O(Et(e.clientX,e.clientY)))}),s.addEventListener(`pointercancel`,()=>{k?.dragging&&O(Q()),k=void 0}),s.addEventListener(`click`,e=>{if(A){A=!1;return}D(t=>t.toggleMenu(e.detail===0))}),s.addEventListener(`keydown`,e=>{let t=Dt.get(e.key)?.(Q());t!==void 0&&(e.preventDefault(),t!==Q()&&O(t))});let j=e=>{e.code===`KeyA`&&e.altKey&&e.shiftKey&&(e.ctrlKey||e.metaKey||(e.preventDefault(),e.stopPropagation(),D(e=>e.togglePick())))};window.addEventListener(`keydown`,j,{capture:!0});let M=sessionStorage.getItem(Ct);return M!==null&&M!==`[]`&&T().catch(e=>{console.error(`[pk-annotator] following this tab's sent annotations failed`,e)}),{setTheme:o.set,unmount(){window.removeEventListener(`keydown`,j,{capture:!0}),e.off(wt,b),e.off(Tt,C),S(),_t(null),h(),v(),o.stop(),mt.set(null),E?.then(e=>e.unmount()),w?.then(e=>e.disconnect()),r.remove()}}}const Nt=`pka:errors-ack`,Pt=`pka:agent`,Ft=`pka:exited`;function It(e){return e.code===`KeyA`&&e.altKey&&e.shiftKey&&!e.ctrlKey&&!e.metaKey}function Lt(t){if(navigator.webdriver)return{reactRootOptions:{},setTheme(){},unmount(){}};let n=Ge();if(n!==void 0)return n.mounted;let r=t.theme??`system`,i,a=()=>{let n=ze({send:(e,n)=>Ye(t.hot,e,n),bodies:globalThis.__PKA_BODIES__??[],captureOwnerStack:e}),a=e=>{import(`./pka-overlay-channel-BZI-qbPH.mjs`).then(e=>e.m).then(({ErrorsAckMessage:t})=>{let r=t.safeParse(e);r.success?n.applySymbolicated(r.data):console.error(`[pk-annotator] dropped an invalid ${Nt} message`,r.error)})};t.hot.on(Nt,a);let o=e=>{import(`./pka-overlay-channel-BZI-qbPH.mjs`).then(e=>e.m).then(({AgentMessage:t})=>{let n=t.safeParse(e);n.success?He(n.data.agent!==null):console.error(`[pk-annotator] dropped an invalid ${Pt} message`,n.error)})};t.hot.on(Pt,o);let s=0,u=n.subscribe(()=>{let e=n.snapshot().groups.filter(e=>e.status===`open`).length;e!==s&&(s=e,lt(e))}),d=Mt(t.hot,r,c);i={capture:n,launcher:d,stop(){u(),t.hot.off(Nt,a),t.hot.off(Pt,o),He(!1),n.stop(),d.unmount(),lt(0)}},Ke({mounted:l,capture:n})},o=e=>{It(e)&&(e.preventDefault(),e.stopPropagation(),window.removeEventListener(`keydown`,o,{capture:!0}),sessionStorage.removeItem(Ft),a())},s=()=>{window.addEventListener(`keydown`,o,{capture:!0}),Ke({mounted:l,capture:void 0})};function c(){i?.stop(),i=void 0,sessionStorage.setItem(Ft,`1`),s()}let l={reactRootOptions:{onCaughtError(e,t){let n=i?.capture.reactRootOptions.onCaughtError;n===void 0?console.error(`React caught an error:`,e,t.componentStack??``):n(e,t)},onUncaughtError(e,t){let n=i?.capture.reactRootOptions.onUncaughtError;n===void 0?console.error(`Uncaught error in React:`,e,t.componentStack??``):n(e,t)},onRecoverableError(e,t){let n=i?.capture.reactRootOptions.onRecoverableError;n===void 0?console.error(`React recovered from an error:`,e,t.componentStack??``):n(e,t)}},setTheme(e){if(e!==`light`&&e!==`dark`&&e!==`system`)throw Error(`setTheme expects "light", "dark", or "system", got ${String(e)}`);r=e,i?.launcher.setTheme(e)},unmount(){i?.stop(),i=void 0,window.removeEventListener(`keydown`,o,{capture:!0}),Ke(void 0)}};return sessionStorage.getItem(Ft)===`1`?s():a(),l}export{q as C,C as D,S as E,w as O,ae as S,ee as T,Je as _,vt as a,Ue as b,Z as c,mt as d,it as f,Ze as g,$e as h,Q as i,T as k,tt as l,at as m,Lt as mount,Ct as n,_t as o,rt as p,xt as r,yt as s,bt as t,ot as u,Ye as v,J as w,We as x,qe as y};