pi-webapp 0.1.8 → 0.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/npm-command.d.mts +2 -0
- package/bin/npm-command.mjs +36 -0
- package/bin/pi-webapp.mjs +5 -2
- package/dist/extension.js +22 -17
- package/docs/sentry.md +60 -1
- package/package.json +5 -3
- package/web/dist/assets/app-B2Ac56ic.js +0 -2
- package/web/dist/assets/app.js +6 -8
- package/web/dist/assets/asciidoc-fDuF7HNn.js +0 -2
- package/web/dist/assets/bat-CIKKTCO7.js +0 -2
- package/web/dist/assets/bibtex-D13O2Wvh.js +0 -2
- package/web/dist/assets/c-BxgHfdNM.js +0 -2
- package/web/dist/assets/clojure-CiHGeAtp.js +0 -2
- package/web/dist/assets/cmake-DmzJtVCe.js +0 -2
- package/web/dist/assets/cpp-WTsyTmWk.js +0 -2
- package/web/dist/assets/csharp-BusYHIEz.js +0 -2
- package/web/dist/assets/css-D-q0lhfR.js +0 -2
- package/web/dist/assets/csv-DFLln536.js +0 -2
- package/web/dist/assets/dart-CafiI-9_.js +0 -2
- package/web/dist/assets/diff-Br1ISN9_.js +0 -2
- package/web/dist/assets/dotenv-CIz2XDph.js +0 -2
- package/web/dist/assets/elixir-DRaGIFOe.js +0 -2
- package/web/dist/assets/erlang-NGps-vi9.js +0 -2
- package/web/dist/assets/fish-ByHW6pZw.js +0 -2
- package/web/dist/assets/fsharp-BOBx9XdV.js +0 -2
- package/web/dist/assets/go-BeHf35-M.js +0 -2
- package/web/dist/assets/graphql-DvPK7yuL.js +0 -2
- package/web/dist/assets/groovy-zjY2ZfG0.js +0 -2
- package/web/dist/assets/haskell-CMvfT32Y.js +0 -2
- package/web/dist/assets/hcl-RKiXyu-a.js +0 -2
- package/web/dist/assets/html-DsaiN7Ee.js +0 -2
- package/web/dist/assets/html-derivative-CADUTaWI.js +0 -2
- package/web/dist/assets/http-B5WHvjtS.js +0 -2
- package/web/dist/assets/ini-DuzuNcum.js +0 -2
- package/web/dist/assets/java-K8yEFi64.js +0 -2
- package/web/dist/assets/javascript-D_ijBMSX.js +0 -2
- package/web/dist/assets/julia-BCSipsbD.js +0 -2
- package/web/dist/assets/kotlin-BSbocnsc.js +0 -2
- package/web/dist/assets/latex-B2rh6wcV.js +0 -2
- package/web/dist/assets/less-DrDudO82.js +0 -2
- package/web/dist/assets/log-ljR8DmTe.js +0 -2
- package/web/dist/assets/lua-DyIUvKwX.js +0 -2
- package/web/dist/assets/make-D75dUjYA.js +0 -2
- package/web/dist/assets/markdown-CW047eNb.js +0 -2
- package/web/dist/assets/mdx-XsqTTZB4.js +0 -2
- package/web/dist/assets/nix-CipIrdNI.js +0 -2
- package/web/dist/assets/perl-D7RI67n_.js +0 -2
- package/web/dist/assets/php-s52DiJil.js +0 -2
- package/web/dist/assets/powershell-jgDnaG9I.js +0 -2
- package/web/dist/assets/proto-BIjSd36w.js +0 -2
- package/web/dist/assets/python-D7_Ztkaq.js +0 -2
- package/web/dist/assets/r-CJzV5ecV.js +0 -2
- package/web/dist/assets/rst-CN3AX0Wt.js +0 -2
- package/web/dist/assets/ruby-TeaxAh4o.js +0 -2
- package/web/dist/assets/rust-DSBpfBj6.js +0 -2
- package/web/dist/assets/scala-C5J7wQ_u.js +0 -2
- package/web/dist/assets/scss-Ce0Xtdy1.js +0 -2
- package/web/dist/assets/sql-B8q9hRYB.js +0 -2
- package/web/dist/assets/svelte-D-qO2kbs.js +0 -2
- package/web/dist/assets/swift-BYyWkiAC.js +0 -2
- package/web/dist/assets/system-verilog-DeQRavVp.js +0 -2
- package/web/dist/assets/telemetry-client-BUyFe34_.js +0 -2
- package/web/dist/assets/toml-D4Tpftfr.js +0 -2
- package/web/dist/assets/vb-CT8kYl35.js +0 -2
- package/web/dist/assets/verilog-CRrcH6Pt.js +0 -2
- package/web/dist/assets/vue-xQhdtb6A.js +0 -2
- package/web/dist/assets/xml-DCBoxqhY.js +0 -2
- package/web/dist/assets/yaml-jmrW97Mk.js +0 -2
- package/web/src/ui/README.md +15 -0
- package/web/src/ui/shared/README.md +25 -0
- package/THIRD_PARTY_LICENSE.txt +0 -24
package/docs/sentry.md
CHANGED
|
@@ -20,10 +20,37 @@ Replace the example with your project's public DSN. `PI_WEB_SENTRY_BROWSER_DSN`
|
|
|
20
20
|
- Extension request/workspace/configuration failures, asynchronous Agent and tool failures, and provider-login failures. Fatal exceptions attributable to this extension are best effort; process exit can prevent delivery.
|
|
21
21
|
- Sanitized stack locations and causes, build/release versions, runtime/platform, model and session-state summaries, anonymous session identifiers, request/operation IDs and up to 100 semantic breadcrumbs (64 KiB total).
|
|
22
22
|
|
|
23
|
-
User cancellation, stopping an Agent, normal shutdown, known validation failures and stale-session conflicts are excluded. No conversation, source contents, attachments, login values, request/response bodies, console output or DOM recordings are deliberately collected. Agent/provider error messages are replaced with generic diagnostic labels. Other exception text is scrubbed for credentials, URLs, quoted values, email addresses and
|
|
23
|
+
User cancellation, stopping an Agent, normal shutdown, known request validation failures and stale-session conflicts are excluded. Recognized tool validation failures remain as warning events. No conversation, source contents, attachments, login values, request/response bodies, console output or DOM recordings are deliberately collected. Agent/provider error messages are replaced with generic diagnostic labels. Other exception text is scrubbed for credentials, URLs, quoted values (including multiple lines), email addresses and paths. Arbitrary free-form exception messages cannot be classified perfectly; do not put private data in exceptions.
|
|
24
24
|
|
|
25
25
|
Browser events go directly to the configured Sentry host with no Pi authorization header, cookies or referrer. The authenticated configuration endpoint returns only the public DSN and build metadata. Node reporting uses a private client and explicit scopes without initializing a global SDK or changing Pi's uncaught-error/async-context handling; inherited SDK attachments are discarded before sending.
|
|
26
26
|
|
|
27
|
+
## Diagnosing a tool failure
|
|
28
|
+
|
|
29
|
+
Both TUI and SDK workspace sessions observe `tool_execution_start/end`. A failed `message_end` is a fallback only: the same tool call is not reported twice. Tool execution behavior and visible results are unchanged.
|
|
30
|
+
|
|
31
|
+
| Diagnostic field | Meaning |
|
|
32
|
+
| --- | --- |
|
|
33
|
+
| `toolName`, `toolId` | Standard built-in name, or `custom` with a stable 16-character SHA-256 identifier; private custom tool names are not uploaded. |
|
|
34
|
+
| `toolCallId`, `session` | Salted anonymous identities for correlation within the running process. |
|
|
35
|
+
| `requestId`, `operationId` | Correlation copied at tool start; `/api/resume` receives a new operation ID. |
|
|
36
|
+
| `failureKind`, `errorCode` | Classified reason and recognized code, including `ENOENT`, `EACCES`, or `nonzero_exit`. |
|
|
37
|
+
| `exitCode`, `durationMs`, `timeoutMs` | Known process status, monotonic elapsed time, and timeout. Missing evidence stays absent. |
|
|
38
|
+
| `diagnosticSource` | `tool_execution_end` or `message_end`. |
|
|
39
|
+
| `originalStackAvailable` | Whether the captured failure includes an original exception stack. |
|
|
40
|
+
| `errorSummary`, `summaryOmitted`, `summaryOmittedReason` | At most two diagnostic lines / 512 characters, or an explicit explanation of unavailable text. |
|
|
41
|
+
|
|
42
|
+
`cancelled` and explicit `blocked` results produce breadcrumbs without error events. Recognized `validation`, `not_found`, `permission`, `timeout`, and `process_exit` tool results are warnings. `unknown` failures and actual program exceptions remain errors. Cancellation requires a marked in-progress call or an exact SDK cancellation format; merely clearing a session does not classify its failures as cancelled. A cancellation request does not suppress an independent program exception.
|
|
43
|
+
|
|
44
|
+
Summaries are reconstructed from recognized diagnostic formats rather than uploading redacted stdout/stderr. For example, `bash: process_exit (nonzero_exit)` carries `Command exited with code 127`; a file failure carries `ENOENT: no such file or directory` and a recognized filesystem operation when available. Paths, arbitrary output, arguments, and error details objects are not uploaded. Unrecognized free text is omitted. Actual tool exception types, stack frames and Error cause chains are retained, but arbitrary exception messages are replaced with a safe diagnostic label.
|
|
45
|
+
|
|
46
|
+
Pi can convert an exception to a tool-result string before pi-webapp sees it. These events have `originalStackAvailable=false` and **no synthetic observer stack**. Source maps cannot recover a stack that the SDK discarded. The local tool card remains the source of full output; this release adds no diagnostic export or SDK changes.
|
|
47
|
+
|
|
48
|
+
Result-only errors group by tool identity, failure kind and stable error code; request IDs, release versions, summaries and timestamps do not fragment the issue. Actual exceptions use Sentry's stack-based grouping. The same key controls local rate limiting, so `repeats` counts suppressed events of the same diagnostic class, not necessarily retries of the same call. Unknown causes within the same tool remain grouped because their missing text cannot safely distinguish them.
|
|
49
|
+
|
|
50
|
+
Breadcrumbs include `agent_start`, `agent_end`, `tool_start`, `tool_end`, `tool_failed`, `tool_cancelled`, `tool_blocked`, `cancel` and `resume`. Do not infer a retry relationship from separate calls. Each runtime retains at most 256 pending snapshots and 256 completion markers, with oldest-first eviction and cleanup at settle, switch, shutdown and reload. Evicted calls can still report failures, but may lack timing or deduplication evidence. Disabled reporting does not retain diagnostic snapshots or inspect results.
|
|
51
|
+
|
|
52
|
+
Filter Sentry by `side:node`, `toolName`, `failureKind` and `errorCode`, then inspect the diagnostic context and the correlated breadcrumbs. Reproduce the recognized condition with a regression test; after publishing, compare events across releases and check whether the same condition still occurs. Configure urgent error alerts for `level:error`, excluding `environment:sentry-verification`. Retain warning issues for diagnosis and trends rather than urgent paging. Updating the alert rules is a Sentry administration step, independent of the code changes.
|
|
53
|
+
|
|
27
54
|
## Performance and reliability
|
|
28
55
|
|
|
29
56
|
Each side sends at most 20 events/minute and one event per fingerprint/minute. Repetition counts appear on the next retained event. Startup and transport queues are bounded to 20 events. Transport requests time out after 3 seconds, do not persist offline, and do not retry indefinitely. Rate-limited/dropped events are intentionally lossy. Browser configuration has a 1-second timeout and never gates rendering; SDKs load only when reporting is enabled. No tracing, profiling, automatic console/DOM instrumentation or token-by-token logging is enabled.
|
|
@@ -45,6 +72,38 @@ npm run build:sentry
|
|
|
45
72
|
|
|
46
73
|
Use `SENTRY_BROWSER_PROJECT` / `SENTRY_NODE_PROJECT` for separate projects. The upload-required command fails on missing credentials or upload failure, and still removes maps from public output. Do not publish after a failed command. Auth tokens are never part of runtime configuration. The ordinary npm `prepack` rebuilds locally without uploading; use `npm pack --ignore-scripts` or `npm publish --ignore-scripts` only after checks and a successful `build:sentry` to package the exact uploaded artifacts.
|
|
47
74
|
|
|
75
|
+
### Required Actions configuration
|
|
76
|
+
|
|
77
|
+
The publishing workflow now fails closed until both credentials exist:
|
|
78
|
+
|
|
79
|
+
- Repository secret `SENTRY_AUTH_TOKEN`: source-map upload and release permissions.
|
|
80
|
+
- Repository secret `SENTRY_VERIFY_AUTH_TOKEN`: event/project read permission (`project:read` or equivalent).
|
|
81
|
+
- Optional repository variables `SENTRY_ORG` (default `soft`), `SENTRY_PROJECT` (default `pi-webapp`), `SENTRY_NODE_PROJECT`, `SENTRY_BROWSER_PROJECT`, and `SENTRY_URL` (default `https://us.sentry.io/`).
|
|
82
|
+
- Optional public DSN variables `PI_WEB_SENTRY_NODE_DSN` and `PI_WEB_SENTRY_BROWSER_DSN`. Both default to the built-in project; when using separate projects, configure each matching DSN as well.
|
|
83
|
+
|
|
84
|
+
Setting repository secrets requires an existing credential from the Sentry administrator. The code does not generate credentials or grant Sentry access. Do not put tokens in Actions variables or runtime configuration.
|
|
85
|
+
|
|
86
|
+
### Verify and publish the exact package
|
|
87
|
+
|
|
88
|
+
After the uploaded build, run:
|
|
89
|
+
|
|
90
|
+
```sh
|
|
91
|
+
mkdir -p .ci/release
|
|
92
|
+
npm pack --ignore-scripts --json --pack-destination .ci/release > .ci/release/pack.json
|
|
93
|
+
npm run verify:package -- --pack-manifest .ci/release/pack.json
|
|
94
|
+
# Requires SENTRY_VERIFY_AUTH_TOKEN, SENTRY_ORG and the destination project(s).
|
|
95
|
+
npm run verify:sentry -- --pack-manifest .ci/release/pack.json
|
|
96
|
+
node scripts/publish-verified-release.mjs
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
`verify:package` checks every packaged Node/browser asset against `.sentry-artifacts/<buildId>/`, confirms matching release literals and JS/map Debug IDs, rejects extra or missing assets, and checks that private maps are excluded. To inspect an older archive explicitly, pass `--archive PATH`. Both verification commands also accept `--tarball FILE`.
|
|
100
|
+
|
|
101
|
+
`verify:sentry` first checks credentials and the package, then invokes the packaged Node verification entry and serves the packaged browser assets on loopback with synthetic configuration. It sends only synthetic events to the configured Sentry DSNs with `environment=sentry-verification`; normal imports and normal browser environments do not run these probes. The Node entry requires `PI_WEB_SENTRY_VERIFY_RELEASE=true` and the verification environment; the browser requires a verification-configured server and the explicit `sentry_release_probe=1` URL flag. The CLI sets up these guards itself.
|
|
102
|
+
|
|
103
|
+
The verifier waits at most 120 seconds for the real events, checks release/build/side/Debug IDs, and requires original application frames to resolve to TypeScript. The synthetic exception must resolve to the exact source file and line recorded in the archived map. Browser maps give application sources stable `app:///web/src/` and `app:///shared/` paths before upload. Unmapped external SDK dependencies do not invalidate resolved application frames. A successful run writes `.ci/release/verified.json` with event IDs and the tarball SHA-256. The publisher verifies that receipt and hash before publishing that tarball with lifecycle scripts disabled. Missing credentials, failed uploads, mismatched package assets, unmapped application frames, missing receipts, or changed tarballs block publication. Version synchronization to main occurs only after these checks succeed.
|
|
104
|
+
|
|
105
|
+
For mapping failures, use Sentry's event source-map debugger or its `source-map-debug` API, and inspect matching Debug IDs for application bundles. Old tool-result events without original stacks remain limited even after source maps are uploaded.
|
|
106
|
+
|
|
48
107
|
## Verification and finding an error
|
|
49
108
|
|
|
50
109
|
Run `npm run check`, `npm run test`, `npm run build`, then `npm run test:browser`. Install test Chromium with `npx playwright install chromium`; on a machine with Chrome use `PI_WEB_TEST_CHROME=true npm run test:browser`. Browser tests intercept a synthetic Sentry destination and do not send to a real project. Optional performance comparison: `PI_WEB_TEST_CHROME=true PI_WEB_BENCHMARK=true npm run test:browser -- --grep 'streaming frame budget'`.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-webapp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.10",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A browser interface for Pi with live chat, workspaces, models, and attachments",
|
|
6
6
|
"repository": {
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"pi-webapp": "./bin/pi-webapp.mjs"
|
|
16
16
|
},
|
|
17
17
|
"pi": {
|
|
18
|
-
"image": "https://cdn.jsdelivr.net/npm/pi-webapp@0.1.
|
|
18
|
+
"image": "https://cdn.jsdelivr.net/npm/pi-webapp@0.1.10/assets/cover-webapp.png",
|
|
19
19
|
"extensions": [
|
|
20
20
|
"./dist/extension.js"
|
|
21
21
|
]
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"README.md",
|
|
29
29
|
"README.zh-CN.md",
|
|
30
30
|
"LICENSE",
|
|
31
|
-
"
|
|
31
|
+
"web/src/ui/shared/LICENSE.txt",
|
|
32
32
|
"docs/sentry.md"
|
|
33
33
|
],
|
|
34
34
|
"scripts": {
|
|
@@ -43,6 +43,8 @@
|
|
|
43
43
|
"prepack": "npm run build",
|
|
44
44
|
"prepublishOnly": "npm run check && npm run build && npm run test",
|
|
45
45
|
"build:sentry": "node scripts/build.mjs all --sentry",
|
|
46
|
+
"verify:package": "node scripts/verify-sentry-release.mjs --package-only",
|
|
47
|
+
"verify:sentry": "node scripts/verify-sentry-release.mjs --live",
|
|
46
48
|
"test:browser": "playwright test"
|
|
47
49
|
},
|
|
48
50
|
"publishConfig": {
|
|
@@ -540,5 +540,3 @@ XID_Start XIDS`.split(/\s/).map(t=>[Wf(t),t])),yre=new Map([["s",qn(383)],[qn(38
|
|
|
540
540
|
`),c.push(h);const d=t$(l);return d!==null&&c.push(`
|
|
541
541
|
`,d),this.lastText=e,this.lastRendered=c,this.lastRendered}}const boe=j.memo(function({text:e,streaming:n=!1,labels:r,fileMentions:i,pathImages:s,variant:o="body"}){const l=j.useRef(null),c=j.useRef(r),d=j.useMemo(()=>n?((l.current===null||c.current!==r)&&(l.current=new voe(r),c.current=r),l.current.render(e)):(l.current=null,yoe(e,r,i,s)),[e,n,r,i,s]);return m.jsx("div",{className:ht(Lr.markdown,o==="compact"&&Lr.compact),"data-markdown-variant":o==="compact"?o:void 0,children:d})});function Y6(t,e){throw new Error(`${e}: unhandled ${JSON.stringify(t)}`)}function Cc(t,e){const n=t.nodes[e];if(n===void 0)throw new Error(`layout: unknown node ${e}`);return n}function tn(t,e){const n=Cc(t,e);if(n.kind!=="pane")throw new Error(`layout: ${e} is not a pane`);return n}function Q6(t,e){const n=Cc(t,e);if(n.kind!=="split")throw new Error(`layout: ${e} is not a split`);return n}function Pc(t,e){const n=t.tabs[e];if(n===void 0)throw new Error(`layout: unknown tab ${e}`);return n}function U0(t){if(t.host!=="float"||t.rect===void 0)throw new Error(`layout: ${t.id} is not floating`);return t.rect}function J6(t,e){const n=t.floats.indexOf(e);if(n<0)throw new Error(`layout: floating pane ${e} is not in the z order`);return n}function xoe(t){const e=t.tabs[0];if(e===void 0||t.tabs.length!==1)throw new Error(`layout: ${t.id} does not hold exactly one tab`);return e}function eg(t,e){for(const n of Object.values(t.nodes))if(n.kind==="split"&&n.children.includes(e))return n}function ws(t,e){for(const n of Object.values(t.nodes))if(n.kind==="pane"&&n.tabs.includes(e))return n;throw new Error(`layout: tab ${e} has no pane`)}function tg(t){const e=[],n=r=>{const i=Cc(t,r);if(i.kind==="pane"){e.push(i.id);return}for(const s of i.children)n(s)};return n(t.rootId),e}function n$(t){const e=t.reduce((n,r)=>n+r,0);if(!(e>0))throw new Error("layout: sizes must sum above zero");return Math.abs(e-1)<1e-12?[...t]:t.map(n=>n/e)}function E0(t){return Object.entries(t)}function _oe(t){return Object.keys(t)}function En(t,e){const n={};for(const[r,i]of E0(t.nodes))r in e||(n[r]=i);for(const[r,i]of E0(e))i!==null&&(n[r]=i);return{...t,nodes:n}}function nl(t,e){const n={};for(const[r,i]of E0(t.tabs))r in e||(n[r]=i);for(const[r,i]of E0(e))i!==null&&(n[r]=i);return{...t,tabs:n}}function da(t,e,n){const r=Math.max(0,Math.min(e,t.length));return[...t.slice(0,r),n,...t.slice(r)]}function xs(t,e){return[...t.slice(0,e),...t.slice(e+1)]}function ng(t,e){const n=xs(t,e);if(n.length!==0)return n[Math.max(0,e-1)]}function gl(t,e,n){return{...t,tabs:e,activeTabId:n}}function rg(t,e,n){const r=eg(t,e);if(r===void 0){if(t.rootId!==e)throw new Error(`layout: ${e} is neither rooted nor parented`);return{...t,rootId:n}}const i=r.children.map(s=>s===e?n:s);return En(t,{[r.id]:{...r,children:i}})}function r$(t,e){let n=Cc(t,t.rootId);for(;n.kind==="split";){const r=e(n);if(r===void 0)throw new Error(`layout: split ${n.id} has no children`);n=Cc(t,r)}return n.id}function i$(t){return r$(t,e=>e.children[0])}function woe(t){return r$(t,e=>e.axis==="row"?e.children.at(-1):e.children[0])}function ui(t,e){const n={};for(const r of e)n[r]=tn(t,r).activeTabId;return{type:"restoreFocus",activePaneId:t.activePaneId,floats:t.floats,paneActiveTabs:n}}function ig(t,e){return[...t.filter(n=>n!==e),e]}function nh(t,e){return t.activePaneId!==e?t:{...t,activePaneId:i$(t)}}function koe(t){return{kind:"pane",id:t,host:"dock",tabs:[],activeTabId:void 0,rect:void 0}}function rf(t,e){if(t.nodes[e]!==void 0)throw new Error(`layout: node ${e} already exists`)}function sg(t,e){if(t.tabs[e]!==void 0)throw new Error(`layout: tab ${e} already exists`)}function Coe(t,e){if(tn(t,e.paneId).host!=="dock")throw new Error("layout: split requires a docked pane");rf(t,e.newPaneId);const r=koe(e.newPaneId),i=eg(t,e.paneId);if(i!==void 0&&i.axis===e.axis){const l=i.children.indexOf(e.paneId),c=e.direction==="after"?l+1:l,d=da(i.children,c,e.newPaneId),h=i.sizes.flatMap((f,g)=>g===l?[f/2,f/2]:[f]);return{state:En(t,{[e.newPaneId]:r,[i.id]:{...i,children:d,sizes:h}}),inverse:[{type:"merge",paneId:e.newPaneId},{type:"resize",splitId:i.id,sizes:i.sizes}]}}rf(t,e.newSplitId);const s=rg(t,e.paneId,e.newSplitId),o=e.direction==="after"?[e.paneId,e.newPaneId]:[e.newPaneId,e.paneId];return{state:En(s,{[e.newPaneId]:r,[e.newSplitId]:{kind:"split",id:e.newSplitId,axis:e.axis,children:o,sizes:[.5,.5]}}),inverse:[{type:"merge",paneId:e.newPaneId}]}}function Soe(t,e){const n=tn(t,e.paneId);if(n.tabs.length>0)throw new Error("layout: merge requires an empty pane");const r=ui(t,[]);if(n.host==="float"){const c=J6(t,e.paneId),d=En({...t,floats:xs(t.floats,c)},{[e.paneId]:null});return{state:nh(d,e.paneId),inverse:[{type:"insertPane",pane:n,tabs:[],attach:{mode:"float",index:c}},r]}}const i=eg(t,e.paneId);if(i===void 0)throw new Error("layout: the docked root pane cannot be merged");const s=i.children.indexOf(e.paneId);if(i.children.length>2){const c=xs(i.children,s),d=n$(xs(i.sizes,s)),h=En(t,{[e.paneId]:null,[i.id]:{...i,children:c,sizes:d}});return{state:nh(h,e.paneId),inverse:[{type:"insertPane",pane:n,tabs:[],attach:{mode:"child",parentId:i.id,index:s,sizes:i.sizes}},r]}}const o=i.children[1-s];if(o===void 0)throw new Error("layout: merge found a split without a sibling");const l=En(rg(t,i.id,o),{[e.paneId]:null,[i.id]:null});return{state:nh(l,e.paneId),inverse:[{type:"insertPane",pane:n,tabs:[],attach:{mode:"wrap",targetId:o,split:i}},r]}}function Eoe(t,e){const n=tn(t,e.paneId);if(n.host!=="dock")throw new Error("layout: openTab requires a docked pane");sg(t,e.tab.id);const r=ui(t,[n.id]);return{state:{...En(nl(t,{[e.tab.id]:e.tab}),{[n.id]:gl(n,da(n.tabs,e.index,e.tab.id),e.tab.id)}),activePaneId:n.id},inverse:[{type:"closeTab",tabId:e.tab.id},r]}}function $oe(t,e){const n=tn(t,e.paneId);if(n.host!=="dock")throw new Error("layout: insertTab requires a docked pane");sg(t,e.tab.id);const r=ui(t,[n.id]),i=da(n.tabs,e.index,e.tab.id);return{state:En(nl(t,{[e.tab.id]:e.tab}),{[n.id]:gl(n,i,n.activeTabId??e.tab.id)}),inverse:[{type:"closeTab",tabId:e.tab.id},r]}}function Toe(t,e){const n=Pc(t,e.tabId),r=ws(t,e.tabId),i=r.tabs.indexOf(e.tabId),s=ui(t,[r.id]);if(r.host==="float"){const l=J6(t,r.id),c=nl(En({...t,floats:xs(t.floats,l)},{[r.id]:null}),{[e.tabId]:null});return{state:nh(c,r.id),inverse:[{type:"insertPane",pane:r,tabs:[n],attach:{mode:"float",index:l}},s]}}const o=r.activeTabId===e.tabId?ng(r.tabs,i):r.activeTabId;return{state:nl(En(t,{[r.id]:gl(r,xs(r.tabs,i),o)}),{[e.tabId]:null}),inverse:[{type:"insertTab",paneId:r.id,tab:n,index:i},s]}}function Noe(t,e){if(rf(t,e.pane.id),e.pane.tabs.length!==e.tabs.length)throw new Error("layout: insertPane tab records do not match the pane");if(e.pane.host==="dock"&&e.tabs.length>0)throw new Error("layout: insertPane returns a docked pane empty");const n={};for(const o of e.tabs)sg(t,o.id),n[o.id]=o;const r=e.tabs[0],i=r===void 0?[{type:"merge",paneId:e.pane.id}]:[{type:"closeTab",tabId:r.id},ui(t,[])],s=e.attach;switch(s.mode){case"child":{const o=Q6(t,s.parentId),l=da(o.children,s.index,e.pane.id);if(s.sizes.length!==l.length)throw new Error("layout: insertPane sizes do not match the split");return i.push({type:"resize",splitId:o.id,sizes:o.sizes}),{state:En(nl(t,n),{[e.pane.id]:e.pane,[o.id]:{...o,children:l,sizes:s.sizes}}),inverse:i}}case"wrap":{if(!s.split.children.includes(e.pane.id))throw new Error("layout: insertPane wrap split does not list the pane");const o=rg(t,s.targetId,s.split.id);return{state:En(nl(o,n),{[e.pane.id]:e.pane,[s.split.id]:s.split}),inverse:i}}case"float":{if(e.pane.host!=="float")throw new Error("layout: float attachment requires a floating pane");const o=da(t.floats,s.index,e.pane.id);return{state:En(nl({...t,floats:o},n),{[e.pane.id]:e.pane}),inverse:i}}default:return Y6(s,"layout: insertPane attachment")}}function Ioe(t,e){const n=ws(t,e.tabId);if(n.host!=="dock")throw new Error("layout: moveTab source must be docked; use unfloat");const r=tn(t,e.toPaneId);if(r.host!=="dock")throw new Error("layout: moveTab target must be docked");if(r.id===n.id)throw new Error("layout: moveTab across one pane; use reorderTab");const i=n.tabs.indexOf(e.tabId),s=ui(t,[n.id,r.id]),o=n.activeTabId===e.tabId?ng(n.tabs,i):n.activeTabId;return{state:{...En(t,{[n.id]:gl(n,xs(n.tabs,i),o),[r.id]:gl(r,da(r.tabs,e.index,e.tabId),e.tabId)}),activePaneId:r.id},inverse:[{type:"moveTab",tabId:e.tabId,toPaneId:n.id,index:i},s]}}function Moe(t,e){const n=ws(t,e.tabId),r=n.tabs.indexOf(e.tabId),i=da(xs(n.tabs,r),e.index,e.tabId);return{state:En(t,{[n.id]:{...n,tabs:i}}),inverse:[{type:"reorderTab",tabId:e.tabId,index:r}]}}function Aoe(t,e){const n=ws(t,e.tabId),r=ui(t,[n.id]),i=En(t,{[n.id]:{...n,activeTabId:e.tabId}}),s=n.host==="float"?ig(i.floats,n.id):i.floats;return{state:{...i,activePaneId:n.id,floats:s},inverse:[r]}}function Loe(t,e){const n=tn(t,e.paneId),r=ui(t,[]),i=n.host==="float"?ig(t.floats,n.id):t.floats;return{state:{...t,activePaneId:n.id,floats:i},inverse:[r]}}function joe(t,e){const n=Q6(t,e.splitId);if(e.sizes.length!==n.children.length)throw new Error("layout: resize sizes do not match the split");if(e.sizes.some(r=>!(r>0)))throw new Error("layout: resize sizes must all be above zero");return{state:En(t,{[n.id]:{...n,sizes:n$(e.sizes)}}),inverse:[{type:"resize",splitId:n.id,sizes:n.sizes}]}}function zoe(t,e){Pc(t,e.tabId);const n=ws(t,e.tabId);if(n.host!=="dock")throw new Error("layout: float requires a docked tab");rf(t,e.newPaneId);const r=n.tabs.indexOf(e.tabId),i=ui(t,[n.id]),s=n.activeTabId===e.tabId?ng(n.tabs,r):n.activeTabId,o=En(t,{[n.id]:gl(n,xs(n.tabs,r),s),[e.newPaneId]:{kind:"pane",id:e.newPaneId,host:"float",tabs:[e.tabId],activeTabId:e.tabId,rect:e.rect}});return{state:{...o,floats:[...o.floats,e.newPaneId],activePaneId:e.newPaneId},inverse:[{type:"unfloat",paneId:e.newPaneId,toPaneId:n.id,index:r},i]}}function Poe(t,e){const n=tn(t,e.paneId),r=U0(n),i=xoe(n),s=tn(t,e.toPaneId);if(s.host!=="dock")throw new Error("layout: unfloat target must be docked");const o=ui(t,[s.id]);return{state:{...En({...t,floats:xs(t.floats,J6(t,e.paneId))},{[e.paneId]:null,[s.id]:gl(s,da(s.tabs,e.index,i),i)}),activePaneId:s.id},inverse:[{type:"float",tabId:i,newPaneId:e.paneId,rect:r},o]}}function s$(t,e,n){const r=En(t,{[e.id]:{...e,rect:n}});return{...r,activePaneId:e.id,floats:ig(r.floats,e.id)}}function Roe(t,e){const n=tn(t,e.paneId),r=U0(n);return{state:s$(t,n,{...r,x:e.x,y:e.y}),inverse:[{type:"moveFloat",paneId:e.paneId,x:r.x,y:r.y},ui(t,[])]}}function Doe(t,e){const n=tn(t,e.paneId),r=U0(n);if(!(e.rect.width>0)||!(e.rect.height>0))throw new Error("layout: float size must be above zero");return{state:s$(t,n,e.rect),inverse:[{type:"resizeFloat",paneId:e.paneId,rect:r},ui(t,[])]}}function Ooe(t,e){const n=ui(t,_oe(e.paneActiveTabs));for(const i of e.floats)if(tn(t,i).host!=="float")throw new Error(`layout: restoreFocus lists docked pane ${i} as floating`);let r=t;for(const[i,s]of E0(e.paneActiveTabs)){const o=tn(r,i);r=En(r,{[i]:{...o,activeTabId:s}})}return tn(r,e.activePaneId),{state:{...r,activePaneId:e.activePaneId,floats:e.floats},inverse:[n]}}function og(t,e){switch(e.type){case"split":return Coe(t,e);case"merge":return Soe(t,e);case"openTab":return Eoe(t,e);case"insertTab":return $oe(t,e);case"closeTab":return Toe(t,e);case"insertPane":return Noe(t,e);case"moveTab":return Ioe(t,e);case"reorderTab":return Moe(t,e);case"focusTab":return Aoe(t,e);case"focusPane":return Loe(t,e);case"resize":return joe(t,e);case"float":return zoe(t,e);case"unfloat":return Poe(t,e);case"moveFloat":return Roe(t,e);case"resizeFloat":return Doe(t,e);case"setExpanded":return{state:{...t,expanded:e.expanded},inverse:[{type:"setExpanded",expanded:t.expanded}]};case"setMode":return{state:{...t,mode:e.mode},inverse:[{type:"setMode",mode:t.mode}]};case"restoreFocus":return Ooe(t,e);default:return Y6(e,"layout: operation")}}const Foe={entries:[],cursor:0},Boe=new Set(["focusTab","focusPane","restoreFocus"]);function Hoe(t){return Boe.has(t.type)}function sf(t,e){const n=t.entries[e];return n!==void 0&&n.ops.every(Hoe)}function o$(t){return t.cursor>0}function a$(t){return t.cursor<t.entries.length}function qoe(t){return t.entries.flatMap(e=>e.ops)}function Voe(t,e,n){if(n.length===0)return{history:t,state:e};let r=e;const i=[];for(const o of n){const l=og(r,o);r=l.state,i.unshift(...l.inverse)}return{history:{entries:[...t.cursor===t.entries.length?t.entries:t.entries.slice(0,t.cursor),{ops:n,inverse:i}],cursor:t.cursor+1},state:r}}function Woe(t,e){if(!o$(t))return;let n=1;if(sf(t,t.cursor-1))for(;sf(t,t.cursor-1-n);)n+=1;let r=e;for(const i of t.entries.slice(t.cursor-n,t.cursor).reverse())for(const s of i.inverse)r=og(r,s).state;return{history:{entries:t.entries,cursor:t.cursor-n},state:r}}function Uoe(t,e){if(!a$(t))return;let n=1;if(sf(t,t.cursor))for(;sf(t,t.cursor+n);)n+=1;let r=e;for(const i of t.entries.slice(t.cursor,t.cursor+n))for(const s of i.ops)r=og(r,s).state;return{history:{entries:t.entries,cursor:t.cursor+n},state:r}}class Goe{constructor(e){W(this,"current");W(this,"recorded",Foe);this.current=e}get state(){return this.current}get history(){return this.recorded}get ops(){return qoe(this.recorded)}get cursor(){return this.recorded.cursor}get canUndo(){return o$(this.recorded)}get canRedo(){return a$(this.recorded)}dispatch(e){return this.dispatchAll([e])}dispatchAll(e){const n=Voe(this.recorded,this.current,e);return this.recorded=n.history,this.current=n.state,this.current}undo(){const e=Woe(this.recorded,this.current);return e===void 0?!1:(this.recorded=e.history,this.current=e.state,!0)}redo(){const e=Uoe(this.recorded,this.current);return e===void 0?!1:(this.recorded=e.history,this.current=e.state,!0)}}const Koe=4,l$=.12,e5={width:380,height:300},Zoe={width:220,height:140},c$=.25;function Xoe(t){return tg(t).length}function ag(t){return Xoe(t)<Koe}function Yoe(t,e,n=c$){let r="left",i=t;return 1-t<i&&(r="right",i=1-t),e<i&&(r="top",i=e),1-e<i&&(r="bottom",i=1-e),i<n?r:"center"}function Qoe(t){switch(t){case"center":return;case"left":return{axis:"row",direction:"before"};case"right":return{axis:"row",direction:"after"};case"top":return{axis:"column",direction:"before"};case"bottom":return{axis:"column",direction:"after"};default:return Y6(t,"layout: dock zone")}}function u$(t,e=l$){if(t.length===0)return[];const n=Math.min(e,1/t.length),r=t.map(l=>l>0?l:0),i=r.reduce((l,c)=>l+c,0);let s=i>0?r.map(l=>l/i):r.map(()=>1/t.length);const o=new Set;for(;;){const l=s.flatMap((h,f)=>!o.has(f)&&h<n?[f]:[]);if(l.length===0)return s;for(const h of l)o.add(h);const c=1-o.size*n,d=s.reduce((h,f,g)=>o.has(g)?h:h+f,0);s=s.map((h,f)=>o.has(f)?n:h/d*c)}}function t5(t,e,n){return e>=t.x&&e<=t.x+t.width&&n>=t.y&&n<=t.y+t.height}function Joe(t,e,n,r=c$){return!(t.width>0)||!(t.height>0)?"center":Yoe((e-t.x)/t.width,(n-t.y)/t.height,r)}function eae(t,e){let n=0;for(const r of t){if(e<r.x+r.width/2)break;n+=1}return n}const Sc={divider:0,chip:100,body:48};function tae(t,e=Sc){const{pane:n,strip:r}=t;if(!(n.width>0)||!(n.height>0)||!(r.width>0))return{row:!0,column:!0};const i=Math.max(0,n.width-r.width),s=Math.max(0,r.width-t.chipsWidth-t.fillWidth-(t.splitControlWidth??0)),o=(n.width-e.divider)/2-i,l=(n.height-e.divider)/2-i;return{row:o>=s+e.chip,column:l>=r.height+e.body}}const Mx=4;function nae(t,e,n,r){return Math.abs(n-t)>=Mx||Math.abs(r-e)>=Mx}function rae(t,e,n){const r=t[e],i=t[e+1];if(r===void 0||i===void 0)return[...t];const s=[...t];return s[e]=r+n,s[e+1]=i-n,s}function iae(t,e,n){return{...t,x:t.x+e,y:t.y+n}}function sae(t,e,n,r){return{...t,width:Math.max(r.width,t.width+e),height:Math.max(r.height,t.height+n)}}function oae(t,e,n){return{x:Math.max(0,t-Ax.x),y:Math.max(0,e-Ax.y),...n}}const Ax={x:60,y:14},aae=24,Lx={x:160,y:120},Si=[];function lae(t,e,n,r){for(const i of tn(t,e).tabs){const s=t.tabs[i];if((s==null?void 0:s.contentId)===n&&(r===void 0||s.kind===r))return i}}function cae(t,e,n){for(const r of[...tg(t),...t.floats]){const i=lae(t,r,e,n);if(i!==void 0)return i}}function G0(t){const e=tn(t,t.activePaneId);return e.host==="dock"?e.id:i$(t)}function n5(t,e,n,r){return t.host==="float"?{type:"unfloat",paneId:t.id,toPaneId:n,index:r}:{type:"moveTab",tabId:e,toPaneId:n,index:r}}function uae(t,e){return t.expanded===e?Si:[{type:"setExpanded",expanded:e}]}function dae(t,e){return t.mode===e?Si:[{type:"setMode",mode:e}]}function hae(t,e,n,r){if(!ag(t))return Si;const i=n??G0(t);if(tn(t,i).host!=="dock")return Si;const s=e("pane"),o=[{type:"split",paneId:i,axis:"row",direction:"after",newPaneId:s,newSplitId:e("split")}],l=r==null?void 0:r(e("tab"));return l!==void 0&&o.push({type:"openTab",paneId:s,tab:l,index:0}),o}function fae(t,e,n,r){if(r===void 0)return Si;const i=tn(t,n);return i.host!=="dock"?Si:[{type:"openTab",paneId:n,tab:r(e("tab")),index:i.tabs.length}]}function pae(t,e,n){const r=n.revealIfOpened===!1?void 0:cae(t,n.contentId,n.kind);if(r!==void 0)return{ops:[{type:"focusTab",tabId:r}],tabId:r};const i=n.paneId??G0(t),s={id:e("tab"),kind:n.kind,contentId:n.contentId,title:n.title};return{ops:[{type:"openTab",paneId:i,tab:s,index:n.index??tn(t,i).tabs.length}],tabId:s.id}}function mae(t,e,n){const r=Pc(t,n),i=ws(t,n),s=i.host==="dock"?i.id:G0(t),o=i.host==="dock"?i.tabs.indexOf(n)+1:tn(t,s).tabs.length,l={...r,id:e("tab")};return{ops:[{type:"openTab",paneId:s,tab:l,index:o}],tabId:l.id}}function gae(t,e,n,r){const i=ws(t,e);if(tn(t,n).host!=="dock")return Si;if(i.id===n){const s=i.tabs.indexOf(e),o=r>s?r-1:r;return o===s?Si:[{type:"reorderTab",tabId:e,index:o}]}return[n5(i,e,n,r)]}function yae(t,e,n,r,i,s){const o=ws(t,n),l=tn(t,r);if(l.host!=="dock")return Si;const c=Qoe(i);if(c===void 0)return o.id===r?Si:[n5(o,n,r,l.tabs.length)];if(o.id===r&&o.tabs.length===1&&s===void 0||!ag(t))return Si;const h=e("pane"),f=[{type:"split",paneId:r,axis:c.axis,direction:c.direction,newPaneId:h,newSplitId:e("split")}];return f.push(n5(o,n,h,0)),f}function vae(t,e,n,r){const i=t.floats.length*aae,s=e("float");return{ops:[{type:"float",tabId:n,newPaneId:s,rect:r??{x:Lx.x+i,y:Lx.y+i,width:e5.width,height:e5.height}}],paneId:s}}function bae(t,e,n){const r=n??G0(t);return[{type:"unfloat",paneId:e,toPaneId:r,index:tn(t,r).tabs.length}]}function xae(t,e,n){return[{type:"resize",splitId:t,sizes:u$(e,n)}]}function _ae(t=0){let e=t;return{next:(r=>(e+=1,`${r}${e}`))}}function wae(t,e,n="push"){const r=t.next("pane"),i=e==null?void 0:e(t.next("tab"));return{nodes:{[r]:{kind:"pane",id:r,host:"dock",tabs:i===void 0?[]:[i.id],activeTabId:i==null?void 0:i.id,rect:void 0}},tabs:i===void 0?{}:{[i.id]:i},rootId:r,floats:[],activePaneId:r,expanded:!1,mode:n}}class kae{constructor(e={}){W(this,"minter");W(this,"sequencer");W(this,"listeners",new Set);W(this,"makePaneTab");W(this,"snapshot");W(this,"subscribe",e=>(this.listeners.add(e),()=>{this.listeners.delete(e)}));W(this,"getSnapshot",()=>this.snapshot);this.minter=_ae(),this.makePaneTab=e.makePaneTab,this.sequencer=new Goe(wae(this.minter,e.makeInitialTab,e.mode)),this.snapshot=this.buildSnapshot()}get ops(){return this.sequencer.ops}buildSnapshot(){const e=this.sequencer.state;return{state:e,canUndo:this.sequencer.canUndo,canRedo:this.sequencer.canRedo,canSplit:ag(e),opCount:this.sequencer.ops.length,cursor:this.sequencer.cursor}}commit(){this.snapshot=this.buildSnapshot();for(const e of[...this.listeners])e()}get state(){return this.sequencer.state}get mint(){return this.minter.next}run(e){return e.length===0?!1:(this.sequencer.dispatchAll(e),this.commit(),!0)}setExpanded(e){this.run(uae(this.state,e))}toggleExpanded(){this.setExpanded(!this.state.expanded)}setMode(e){this.run(dae(this.state,e))}splitPane(e){return this.run(hae(this.state,this.mint,e,this.makePaneTab))}addTab(e){return this.run(fae(this.state,this.mint,e,this.makePaneTab))}openContent(e){const n=pae(this.state,this.mint,e);return this.run(n.ops),n.tabId}duplicateTab(e){const n=mae(this.state,this.mint,e);return this.run(n.ops),n.tabId}closeTab(e){this.run([{type:"closeTab",tabId:e}])}focusTab(e){this.run([{type:"focusTab",tabId:e}])}focusPane(e){this.run([{type:"focusPane",paneId:e}])}reorderTab(e,n){this.run([{type:"reorderTab",tabId:e,index:n}])}placeTab(e,n,r){return this.run(gae(this.state,e,n,r))}dropTab(e,n,r){return this.run(yae(this.state,this.mint,e,n,r))}floatTab(e,n){const r=vae(this.state,this.mint,e,n);return this.run(r.ops),r.paneId}unfloatPane(e,n){this.run(bae(this.state,e,n))}moveFloat(e,n,r){this.run([{type:"moveFloat",paneId:e,x:n,y:r}])}resizeFloat(e,n){this.run([{type:"resizeFloat",paneId:e,rect:n}])}resizeSplit(e,n){this.run(xae(e,n))}undo(){return this.sequencer.undo()?(this.commit(),!0):!1}redo(){return this.sequencer.redo()?(this.commit(),!0):!1}activeDockPaneId(){return G0(this.state)}}const Cae={x:0,y:0,width:0,height:0},Sae={row:!0,column:!0};function Pd(t){return t===null?Cae:t.getBoundingClientRect()}function sc(t){const e=Number.parseFloat(t);return Number.isFinite(e)?e:0}function d$(t){const e=[];for(const n of t.querySelectorAll("[data-dockkit-pane]")){const r=n.dataset.dockkitPane;r!==void 0&&e.push([r,n])}return e}function Eae(t){const e=t.querySelector("[data-dockkit-tab]");if(e===null)return Sc.chip;const n=getComputedStyle(e),r=sc(n.minWidth);return r<=0?Sc.chip:n.boxSizing==="border-box"?r:r+sc(n.paddingLeft)+sc(n.paddingRight)+sc(n.borderLeftWidth)+sc(n.borderRightWidth)}function $ae(t){const e=t.querySelector("[data-dockkit-divider]");if(e===null)return Sc.divider;const{width:n,height:r}=e.getBoundingClientRect(),i=Math.min(n,r);return i>0?i:Sc.divider}function Tae(t){const e=t.querySelector("[data-dockkit-split-button]");if(e===null)return 0;const n=e.getBoundingClientRect().width;if(!(n>0))return 0;const r=t.querySelector("[data-dockkit-strip]");return n+(r===null?0:sc(getComputedStyle(r).columnGap))}function Nae(t,e=!1){const n={divider:$ae(t),chip:Eae(t),body:Sc.body},r=new Map;for(const[i,s]of d$(t))r.set(i,tae({pane:Pd(s),strip:Pd(s.querySelector("[data-dockkit-strip]")),chipsWidth:Pd(s.querySelector("[data-dockkit-strip-tabs]")).width,fillWidth:Pd(s.querySelector("[data-dockkit-strip-fill]")).width,splitControlWidth:e?Tae(s):0},n));return r}function r5(t,e){return t.get(e)??Sae}function Iae(t,e){if(t.size!==e.size)return!1;for(const[n,r]of t){const i=e.get(n);if(i===void 0||i.row!==r.row||i.column!==r.column)return!1}return!0}function Mae(t,e){typeof t.setPointerCapture=="function"&&t.setPointerCapture(e)}function Aae(t,e,n){Mae(t,e);const r=new AbortController,{signal:i}=r;t.dataset.dockkitPointer=String(e),i.addEventListener("abort",()=>{t.dataset.dockkitPointer===String(e)&&delete t.dataset.dockkitPointer},{once:!0});const s=o=>o.pointerId===e;return window.addEventListener("pointermove",o=>{s(o)&&n.move(o)},{signal:i}),window.addEventListener("pointerup",o=>{s(o)&&(r.abort(),n.up(o))},{signal:i}),window.addEventListener("pointercancel",o=>{s(o)&&(r.abort(),n.cancel())},{signal:i}),()=>{r.abort()}}function h$(t){const e=j.useRef(void 0);return j.useEffect(()=>()=>{var n;(n=e.current)==null||n.stop()},[]),(n,r,i)=>{var l;(l=e.current)==null||l.end();const s=()=>{e.current=void 0,t()},o=Aae(n,r,{move:i.move,up:c=>{s(),i.up(c)},cancel:s});e.current={stop:o,end:()=>{o(),s()}}}}const c3=new WeakMap,Lae=new Set(["Tab","ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End"]);function jae(t,e){var i;(i=c3.get(t))==null||i();const n=()=>{t.removeAttribute("data-dsh-automatic-focus"),t.removeEventListener("blur",n),t.removeEventListener("keydown",r,!0),c3.delete(t)},r=s=>{!s.isComposing&&!s.ctrlKey&&!s.altKey&&!s.metaKey&&Lae.has(s.key)&&n()};c3.set(t,n),t.setAttribute("data-dsh-automatic-focus",""),t.addEventListener("blur",n),t.addEventListener("keydown",r,!0),t.focus(e),t.matches(":focus")||n()}function zae(t){var l;let e=!1,n=!1;const r=()=>{e=!0},i=()=>{e=!1,n=!0},s=()=>{n=!1},o=()=>{e=!1,n=!1};return t.addEventListener("compositionstart",r,!0),t.addEventListener("compositionend",i,!0),t.addEventListener("keyup",s,!0),(l=t.defaultView)==null||l.addEventListener("blur",o),{guards:c=>{const d=e||n||c.isComposing||c.keyCode===229;return n=!1,d},dispose:()=>{var c;t.removeEventListener("compositionstart",r,!0),t.removeEventListener("compositionend",i,!0),t.removeEventListener("keyup",s,!0),(c=t.defaultView)==null||c.removeEventListener("blur",o)}}}const Pae='[role="dialog"][aria-modal="true"], [role="menu"]',Rae="_divider_1s7ij_39",Dae="_surface_1s7ij_125",Oae="_tabLayout_1s7ij_134",Fae="_tabCell_1s7ij_142",Bae="_emptyTabHost_1s7ij_143",Hae="_floatingCell_1s7ij_156",qae="_tabHost_1s7ij_162",Vae="_float_1s7ij_156",Wae="_tabHostHeader_1s7ij_177",Uae="_tabHostBody_1s7ij_181",Gae="_tabLayoutDivider_1s7ij_186",Kae="_pane_1s7ij_209",Zae="_tabStrip_1s7ij_237",Xae="_stripTabs_1s7ij_257",Yae="_stripFill_1s7ij_288",Qae="_stripChrome_1s7ij_296",Jae="_paneBody_1s7ij_318",ele="_slot_1s7ij_327",tle="_tabActive_1s7ij_346",nle="_slotCaret_1s7ij_346",rle="_tab_1s7ij_134",ile="_tabTitle_1s7ij_389",sle="_floatTitle_1s7ij_409",ole="_tabClose_1s7ij_417",ale="_addTab_1s7ij_449",lle="_tabQuiet_1s7ij_488",cle="_tabDragging_1s7ij_505",ule="_iconButton_1s7ij_511",dle="_menu_1s7ij_547",hle="_menuItem_1s7ij_561",fle="_empty_1s7ij_143",ple="_dockScrim_1s7ij_599",mle="_dockHint_1s7ij_601",gle="_dockHintCard_1s7ij_606",yle="_dockHintLabel_1s7ij_694",vle="_floatHeader_1s7ij_765",ble="_dockGlyph_1s7ij_782",xle="_floatBody_1s7ij_787",_le="_floatResize_1s7ij_797",nt={divider:Rae,surface:Dae,tabLayout:Oae,tabCell:Fae,emptyTabHost:Bae,floatingCell:Hae,tabHost:qae,float:Vae,tabHostHeader:Wae,tabHostBody:Uae,tabLayoutDivider:Gae,pane:Kae,tabStrip:Zae,stripTabs:Xae,stripFill:Yae,stripChrome:Qae,paneBody:Jae,slot:ele,tabActive:tle,slotCaret:nle,tab:rle,tabTitle:ile,floatTitle:sle,tabClose:ole,addTab:ale,tabQuiet:lle,tabDragging:cle,iconButton:ule,menu:dle,menuItem:hle,empty:fle,dockScrim:ple,dockHint:mle,dockHintCard:gle,dockHintLabel:yle,floatHeader:vle,dockGlyph:ble,floatBody:xle,floatResize:_le},u3=4;function wle(t,e){const n=t.getBoundingClientRect(),r=e.offsetWidth,i=n.left+r+u3>window.innerWidth?Math.max(u3,n.right-r):n.left;return{top:n.bottom+u3,left:i}}function kle({labels:t,anchor:e,onClose:n,onDismiss:r,extras:i}){const s=j.useRef(null),[o,l]=j.useState(void 0),c=n!==void 0||j.Children.toArray(i).some(d=>d!=="");return j.useLayoutEffect(()=>{s.current!==null&&l(wle(e,s.current))},[e,c]),j.useEffect(()=>{const d=s.current;if(d===null)return;const h=d.ownerDocument,f=zae(h),g=b=>{if(f.guards(b)||b.defaultPrevented||b.key!=="Escape"||b.ctrlKey||b.altKey||b.metaKey||b.shiftKey||[...h.querySelectorAll(Pae)].at(-1)!==d||(b.preventDefault(),b.repeat))return;const C=d.contains(h.activeElement);r(),C&&jae(e)};h.addEventListener("keydown",g,!0);const y=b=>{b.target instanceof Node&&d.contains(b.target)||r()};return window.addEventListener("pointerdown",y,!0),()=>{f.dispose(),h.removeEventListener("keydown",g,!0),window.removeEventListener("pointerdown",y,!0)}},[e,r,c]),c?Cs.createPortal(m.jsxs(A5,{className:nt.menu,ref:s,role:"menu","data-dockkit-tab-menu":!0,style:o??{visibility:"hidden",top:0,left:0},onPointerDown:d=>{d.stopPropagation()},onClick:d=>{d.stopPropagation()},children:[n!==void 0&&m.jsx("button",{type:"button",role:"menuitem",className:nt.menuItem,"data-dockkit-menu-close":!0,onClick:n,children:t.closeTab}),i]}),document.body):null}function jx(t){t.scrollWidth>t.clientWidth+1?t.dataset.dockkitTabClipped="":delete t.dataset.dockkitTabClipped}function f$({children:t}){const e=j.useRef(null);return j.useLayoutEffect(()=>{e.current!==null&&jx(e.current)}),j.useLayoutEffect(()=>{const n=e.current;if(n===null||typeof ResizeObserver>"u")return;const r=new ResizeObserver(()=>{jx(n)});return r.observe(n),()=>{r.disconnect()}},[]),m.jsx("span",{ref:e,className:nt.tabTitle,"data-dockkit-tab-title":!0,children:t})}const Cle="M9.67272 0.522841C10.8339 0.522841 11.76 0.522714 12.4963 0.602493C13.2453 0.683657 13.8789 0.854248 14.4264 1.25197C14.7504 1.48739 15.0355 1.77247 15.2709 2.0965C15.6686 2.64394 15.8392 3.27758 15.9204 4.02655C16.0002 4.7629 16 5.68895 16 6.85014V9.14986C16 10.3111 16.0002 11.2371 15.9204 11.9735C15.8392 12.7224 15.6686 13.3561 15.2709 13.9035C15.0355 14.2275 14.7504 14.5126 14.4264 14.748C13.8789 15.1458 13.2453 15.3163 12.4963 15.3975C11.76 15.4773 10.8339 15.4772 9.67272 15.4772H6.3273C5.16611 15.4772 4.24006 15.4773 3.50371 15.3975C2.75474 15.3163 2.1211 15.1458 1.57366 14.748C1.24963 14.5126 0.964549 14.2275 0.729131 13.9035C0.331407 13.3561 0.160817 12.7224 0.0796529 11.9735C-0.000126137 11.2371 1.25338e-09 10.3111 1.25338e-09 9.14986V6.85014C1.25329e-09 5.68895 -0.000126137 4.7629 0.0796529 4.02655C0.160817 3.27758 0.331407 2.64394 0.729131 2.0965C0.964549 1.77247 1.24963 1.48739 1.57366 1.25197C2.1211 0.854248 2.75474 0.683657 3.50371 0.602493C4.24006 0.522714 5.16611 0.522841 6.3273 0.522841H9.67272ZM4.1828 14.0873L5.54303 14.1118C5.78636 14.1128 6.04709 14.1169 6.3273 14.1169H9.67272C10.8639 14.1169 11.7032 14.1164 12.3493 14.0465C12.9824 13.9779 13.3497 13.8494 13.6268 13.6482C13.8354 13.4966 14.0195 13.3125 14.1711 13.1039C14.3723 12.8268 14.5007 12.4595 14.5693 11.8264C14.6393 11.1803 14.6398 10.341 14.6398 9.14986V6.85014C14.6398 5.65896 14.6393 4.81967 14.5693 4.1736C14.5007 3.54048 14.3723 3.17318 14.1711 2.89609C14.0195 2.68747 13.8354 2.50337 13.6268 2.35179C13.3497 2.1506 12.9824 2.02212 12.3493 1.95353C11.7032 1.88358 10.8639 1.88307 9.67272 1.88307H6.3273C6.04709 1.88307 5.78636 1.8862 5.54303 1.88715L4.1828 1.91166C3.99125 1.9216 3.8148 1.93577 3.65076 1.95353C3.01764 2.02212 2.65034 2.1506 2.37325 2.35179C2.16463 2.50337 1.98052 2.68747 1.82895 2.89609C1.62776 3.17318 1.49928 3.54048 1.43069 4.1736C1.36074 4.81967 1.36023 5.65896 1.36023 6.85014V9.14986C1.36023 10.341 1.36074 11.1803 1.43069 11.8264C1.49928 12.4595 1.62776 12.8268 1.82895 13.1039C1.98052 13.3125 2.16463 13.4966 2.37325 13.6482C2.65034 13.8494 3.01764 13.9779 3.65076 14.0465C3.81478 14.0642 3.99127 14.0774 4.1828 14.0873Z";function Sle(){return m.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:[m.jsx("path",{d:"M13.5 1.5H2.5C1.94772 1.5 1.5 1.94772 1.5 2.5V13.5C1.5 14.0523 1.94772 14.5 2.5 14.5H13.5C14.0523 14.5 14.5 14.0523 14.5 13.5V2.5C14.5 1.94772 14.0523 1.5 13.5 1.5Z",stroke:"currentColor"}),m.jsx("path",{d:"M8 1.5V14.5",stroke:"currentColor"})]})}const Ele={center:"M4.56 3.48H11.44A1.6 1.6 0 0 1 13.04 5.08V10.92A1.6 1.6 0 0 1 11.44 12.52H4.56A1.6 1.6 0 0 1 2.96 10.92V5.08A1.6 1.6 0 0 1 4.56 3.48Z",left:"M4 0.523H8V15.477H4A4 4 0 0 1 0 11.477V4.523A4 4 0 0 1 4 0.523Z",right:"M8 0.523H12A4 4 0 0 1 16 4.523V11.477A4 4 0 0 1 12 15.477H8Z",top:"M0 8V4.523A4 4 0 0 1 4 0.523H12A4 4 0 0 1 16 4.523V8Z",bottom:"M0 8H16V11.477A4 4 0 0 1 12 15.477H4A4 4 0 0 1 0 11.477Z"};function $le({zone:t}){return m.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:[m.jsx("path",{fillRule:"evenodd",clipRule:"evenodd",d:Cle,fill:"currentColor"}),m.jsx("path",{d:Ele[t],fill:"currentColor"})]})}function d3({zone:t,active:e,labels:n}){return m.jsx("div",{className:nt.dockHint,"data-dockkit-dock-zone":t,"data-dockkit-drop-active":e||void 0,children:m.jsxs("div",{className:nt.dockHintCard,children:[m.jsx($le,{zone:t}),m.jsx("span",{className:nt.dockHintLabel,children:n.dropZone[t]})]})})}function Tle(t,e,n){const r=e.length,i=e.indexOf(n);switch(t){case"ArrowLeft":return e[(i-1+r)%r];case"ArrowRight":return e[(i+1)%r];case"Home":return e[0];case"End":return e.at(-1);default:return}}function Nle(t){return t==="Enter"||t===" "}function Ile(t){const e=t.scrollLeft>1,n=t.scrollLeft+t.clientWidth<t.scrollWidth-1;if(e&&n)return"start end";if(e)return"start";if(n)return"end"}function Mle(t,e){j.useLayoutEffect(()=>{const n=t.current;if(n===null)return;const r=()=>{const s=Ile(n);s===void 0?delete n.dataset.dockkitStripScroll:n.dataset.dockkitStripScroll=s};r(),n.addEventListener("scroll",r,{passive:!0});const i=typeof ResizeObserver>"u"?void 0:new ResizeObserver(r);return i==null||i.observe(n),()=>{n.removeEventListener("scroll",r),i==null||i.disconnect()}},[t,e])}function Ale(t,e,n,r){j.useLayoutEffect(()=>{const i=t.current,s=r===void 0?void 0:e.get(r);if(i===null||s===void 0)return;const o=i.getBoundingClientRect(),l=s.getBoundingClientRect();l.left<o.left?i.scrollLeft+=l.left-o.left-zx:l.right>o.right&&(i.scrollLeft+=l.right-o.right+zx)},[t,e,n,r])}const zx=24;function Px(t,e){switch(e){case"budget":return t.splitPaneDisabled;case"width":return t.splitPaneNarrow}}function p$({state:t,pane:e,callbacks:n}){const[r,i]=j.useState(void 0),[s]=j.useState(()=>new Map),o=j.useRef(null);Mle(o,e.tabs),Ale(o,s,e.tabs,e.activeTabId);const l=n.splitBlock(e.id),c=n.dropTarget,d=c!==void 0&&c.kind==="strip"&&c.paneId===e.id?c.index:void 0,h=g=>{t.activePaneId===e.id&&e.activeTabId===g||n.onFocusTab(g)},f=g=>{const y=s.get(g);y!==void 0&&y.focus()};return m.jsxs("div",{className:nt.tabStrip,role:"tablist","data-dockkit-strip":e.id,"data-window-drag":t.floats.length===0?!0:void 0,children:[m.jsxs("div",{ref:o,className:nt.stripTabs,role:"presentation","data-dockkit-strip-tabs":e.id,children:[e.tabs.map((g,y)=>{var $,k;const b=Pc(t,g),_=g===e.activeTabId,C=n.canCloseTab(g),S=!C&&e.tabs.length===1;return m.jsxs(j.Fragment,{children:[(y>0||d===y)&&m.jsx("div",{className:ht(nt.slot,d===y&&nt.slotCaret),"data-dockkit-caret":d===y?y:void 0}),m.jsxs("div",{role:"tab","aria-selected":_,tabIndex:_?0:-1,className:ht(nt.tab,_&&nt.tabActive,S&&nt.tabQuiet,n.draggingTabId===g&&nt.tabDragging),"data-dockkit-tab":g,"data-dockkit-tab-quiet":S||void 0,ref:N=>{N===null?s.delete(g):s.set(g,N)},onPointerDown:N=>{N.button!==2&&n.onTabPressed(g,N)},onClick:N=>{N.stopPropagation(),h(g)},onKeyDown:N=>{if(N.target!==N.currentTarget||N.altKey||N.ctrlKey||N.metaKey||N.shiftKey||N.nativeEvent.isComposing)return;const A=Tle(N.key,e.tabs,g);if(A!==void 0){N.preventDefault(),f(A);return}Nle(N.key)&&(N.preventDefault(),h(g))},onContextMenu:N=>{N.preventDefault();const A=N.currentTarget;i(I=>(I==null?void 0:I.tabId)===g?void 0:{tabId:g,anchor:A})},children:[m.jsx(f$,{children:(($=n.renderTabTitle)==null?void 0:$.call(n,b))??b.title}),C&&m.jsx(bs,{disabled:r!==void 0,label:n.labels.closeTab,shortcutKeys:n.labels.closeTabKeys,side:"bottom",delayMs:500,children:m.jsx("button",{type:"button",className:nt.tabClose,"aria-label":n.labels.closeTab,"aria-keyshortcuts":n.labels.closeTabShortcut,"data-dockkit-tab-close":g,onPointerDown:N=>{N.stopPropagation()},onClick:N=>{N.stopPropagation(),n.onCloseTab(g)},children:m.jsx(aG,{size:14})})}),(r==null?void 0:r.tabId)===g&&m.jsx(kle,{labels:n.labels,anchor:r.anchor,onClose:C?()=>{i(void 0),n.onCloseTab(g)}:void 0,onDismiss:()=>{i(void 0)},extras:(k=n.renderTabMenuItems)==null?void 0:k.call(n,b,()=>{i(void 0)})})]})]},g)}),d===e.tabs.length&&m.jsx("div",{className:ht(nt.slot,nt.slotCaret),"data-dockkit-caret":d})]}),n.canAddTab(e.id)&&m.jsx(bs,{label:n.labels.addTab,side:"bottom",delayMs:500,children:m.jsx("button",{type:"button",className:nt.addTab,"aria-label":n.labels.addTab,"data-dockkit-add-tab":e.id,onClick:g=>{g.stopPropagation(),n.onAddTab(e.id)},children:m.jsx(nG,{size:14})})}),m.jsx("div",{className:nt.stripFill,"data-dockkit-strip-fill":!0}),!(n.hideSplitWhenBlocked&&l!==void 0)&&m.jsx(bs,{label:l===void 0?n.labels.splitPane:Px(n.labels,l),shortcutKeys:n.labels.splitPaneKeys,side:"bottom",delayMs:500,children:m.jsx("span",{tabIndex:l===void 0?void 0:0,"aria-label":l===void 0?void 0:Px(n.labels,l),children:m.jsx("button",{type:"button",className:nt.iconButton,"aria-label":n.labels.splitPane,"aria-keyshortcuts":n.labels.splitPaneShortcut,disabled:l!==void 0,"data-dockkit-split-button":e.id,"data-dockkit-split-blocked":l,onClick:g=>{g.stopPropagation(),n.onSplitPane(e.id)},children:m.jsx(Sle,{})})})}),e.id===n.chromePaneId&&n.chrome!==void 0&&m.jsx("div",{className:nt.stripChrome,"data-dockkit-strip-chrome":!0,onClick:g=>{g.stopPropagation()},children:n.chrome})]})}function m$({pane:t,callbacks:e}){const n=e.dropTarget,r=(n==null?void 0:n.kind)==="zone"&&n.paneId===t.id?n.zone:void 0;return r===void 0?null:m.jsxs(m.Fragment,{children:[m.jsx("div",{className:nt.dockScrim,"data-dockkit-dock-scrim":!0}),e.horizontalDrops&&r!=="center"?m.jsxs(m.Fragment,{children:[m.jsx(d3,{zone:"left",active:r==="left",labels:e.labels}),m.jsx(d3,{zone:"right",active:r==="right",labels:e.labels})]}):m.jsx(d3,{zone:r,active:!0,labels:e.labels})]})}function Lle({state:t,pane:e,callbacks:n}){const r=e.activeTabId===void 0?void 0:Pc(t,e.activeTabId);return m.jsxs("section",{className:nt.pane,"data-dockkit-pane":e.id,tabIndex:-1,"data-dockkit-pane-active":t.activePaneId===e.id||void 0,onClick:()=>{t.activePaneId!==e.id&&n.onFocusPane(e.id)},children:[m.jsx(p$,{state:t,pane:e,callbacks:n}),m.jsxs("div",{className:nt.paneBody,children:[r===void 0?m.jsx("p",{className:nt.empty,children:n.labels.emptyPane}):n.renderTab(r),m.jsx(m$,{pane:e,callbacks:n})]})]})}function Rx(t,e,n){const r=e-t.originX,i=n-t.originY;return t.mode==="move"?iae(t.rect,r,i):sae(t.rect,r,i,Zoe)}function jle(t,e){return t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height}function zle(t,e){return t.activePaneId===e&&t.floats.at(-1)===e}function Ple(t,e){const[n,r]=j.useState(void 0),i=h$(()=>{r(void 0)}),s=l=>{zle(t,l)||e.focusPane(l)};return{preview:n,raise:s,drag:(l,c,d)=>{d.stopPropagation();const h={mode:l,originX:d.clientX,originY:d.clientY,rect:U0(tn(t,c))};i(d.currentTarget,d.pointerId,{move:f=>{r({paneId:c,rect:Rx(h,f.clientX,f.clientY)})},up:f=>{const g=Rx(h,f.clientX,f.clientY);jle(g,h.rect)?s(c):l==="move"?e.moveFloat(c,g.x,g.y):e.resizeFloat(c,g)}})}}}function Rle({paneId:t,tab:e,labels:n,intents:r,renderTabTitle:i,canCloseTab:s,drag:o}){return m.jsxs("header",{className:ht(nt.tabStrip,nt.floatHeader),"data-dockkit-float-grip":t,onPointerDown:l=>{o("move",t,l)},children:[m.jsx("div",{className:ht(nt.tab,nt.floatTitle),"data-dockkit-float-title":!0,children:m.jsx(f$,{children:(i==null?void 0:i(e))??e.title})}),m.jsx("div",{className:nt.stripFill}),m.jsx(bs,{label:n.dockFloat,side:"bottom",delayMs:500,children:m.jsx("button",{type:"button",className:nt.iconButton,"aria-label":n.dockFloat,"data-dockkit-float-dock":t,onPointerDown:l=>{l.stopPropagation()},onClick:()=>{r.unfloatPane(t)},children:m.jsx(x6,{className:nt.dockGlyph})})}),((s==null?void 0:s(e.id))??!0)&&m.jsx(bs,{label:n.closeTab,shortcutKeys:n.closeTabKeys,side:"bottom",delayMs:500,children:m.jsx("button",{type:"button",className:nt.iconButton,"aria-label":n.closeTab,"data-dockkit-float-close":t,onPointerDown:l=>{l.stopPropagation()},onClick:()=>{r.closeTab(e.id)},children:m.jsx(AC,{})})})]})}function Dle({state:t,callbacks:e,intents:n,tab:r,pane:i,column:s,floats:o,focusRequest:l,keepMounted:c,active:d=!0}){var A;const h=i.host==="float",f=h||i.activeTabId===r.id,g=d&&f&&(h||t.expanded),y=(c==null?void 0:c(r))??!1,[b,_]=j.useState(g);g&&!b&&_(!0);const C=j.useRef(null),S=j.useRef(null);j.useLayoutEffect(()=>{const I=C.current;I.inert=!g;const B=document.activeElement;!g&&B instanceof HTMLElement&&I.contains(B)&&B.blur();const V=l.current;if(!g||(V==null?void 0:V.tabId)!==r.id||(l.current=void 0,B!==null&&B!==document.body&&B!==document.documentElement&&B!==V.origin))return;const z=I.querySelector("[data-dockkit-strip]"),L=[...(z==null?void 0:z.querySelectorAll("[data-dockkit-tab]"))??[]].find(M=>M.dataset.dockkitTab===r.id);L==null||L.focus({preventScroll:!0})},[g,r.id,l]),j.useEffect(()=>{const I=S.current,B=()=>{g&&(h?o.raise(i.id):t.activePaneId!==i.id&&e.onFocusPane(i.id))};return I.addEventListener("focus",B,!0),()=>{I.removeEventListener("focus",B,!0)}},[g,h,o,i.id,t.activePaneId,e]);const $=h&&((A=o.preview)==null?void 0:A.paneId)===i.id?o.preview.rect:void 0,k=h?$??U0(i):void 0,N=$===void 0?t.floats.indexOf(i.id)+1:t.floats.length+1;return m.jsx("div",{className:ht(nt.tabCell,h&&nt.floatingCell),hidden:!f,"data-dockkit-host":h?"float":"dock","data-dockkit-column":h?void 0:s,style:{gridColumn:h?1:s*2+1,gridRow:1,order:h?N:0},children:m.jsxs("section",{ref:C,tabIndex:-1,className:ht(nt.tabHost,h?nt.float:nt.pane),"aria-hidden":!g||void 0,"data-dockkit-content":r.id,"data-dockkit-pane":!h&&f?i.id:void 0,"data-dockkit-pane-active":!h&&t.activePaneId===i.id||void 0,"data-dockkit-float":h?i.id:void 0,"data-dockkit-float-active":h&&t.activePaneId===i.id||void 0,"data-dockkit-column":h?void 0:s,style:k===void 0?void 0:{left:k.x,top:k.y,width:k.width,height:k.height},onPointerDown:()=>{h&&o.raise(i.id)},onClick:()=>{!h&&t.activePaneId!==i.id&&e.onFocusPane(i.id)},children:[m.jsx("div",{className:nt.tabHostHeader,children:f&&(h?m.jsx(Rle,{paneId:i.id,tab:r,labels:e.labels,intents:n,renderTabTitle:e.renderTabTitle,canCloseTab:e.canCloseTab,drag:o.drag}):m.jsx(p$,{state:t,pane:i,callbacks:e}))}),m.jsxs("div",{ref:S,className:ht(nt.tabHostBody,h?nt.floatBody:nt.paneBody),children:[b&&(y||d&&f)?e.renderTab(r):null,!h&&m.jsx(m$,{pane:i,callbacks:e})]}),h&&m.jsx("div",{className:nt.floatResize,"data-dockkit-float-resize":i.id,onPointerDown:I=>{o.drag("resize",i.id,I)}})]})})}function Ole(t){const{state:e,callbacks:n,preview:r}=t,i=j.useRef(),s={...n,onFocusTab:f=>{i.current=ws(e,f).activeTabId===f?void 0:{tabId:f,origin:document.activeElement},n.onFocusTab(f)}},o=Cc(e,e.rootId);if(o.kind==="split"&&(o.axis!=="row"||o.children.length!==2))throw new Error("DockLayout requires one pane or two horizontally split panes");const l=o.kind==="pane"?[o]:o.children.map(f=>tn(e,f)),c=o.kind==="split"?(r==null?void 0:r.splitId)===o.id?r.sizes:o.sizes:[1],d=Ple(e,t.intents),h=c.map(f=>`minmax(0, ${f}fr)`).join(" 0px ");return m.jsxs("div",{className:nt.tabLayout,"data-dockkit-split":o.kind==="split"?o.id:void 0,style:{gridTemplateColumns:h},children:[Object.values(e.tabs).sort((f,g)=>f.id.localeCompare(g.id)).map(f=>{const g=ws(e,f.id);return m.jsx(Dle,{...t,callbacks:s,tab:f,pane:g,column:l.findIndex(y=>y.id===g.id),floats:d,focusRequest:i},f.id)}),l.filter(f=>f.tabs.length===0).map(f=>m.jsx("div",{className:nt.emptyTabHost,"data-dockkit-empty":!0,style:{gridColumn:l.indexOf(f)*2+1,gridRow:1},children:m.jsx(Lle,{state:e,pane:f,callbacks:n})},f.id)),o.kind==="split"&&m.jsx("div",{className:ht(nt.divider,nt.tabLayoutDivider),"data-dockkit-divider":`${o.id}:0`,style:{gridColumn:2,gridRow:1},onPointerDown:f=>{n.onDividerPressed(o.id,0,f)}})]})}const Rd={draggingTabId:void 0,dropTarget:void 0,sizes:void 0},Fle=new Map,Dx=()=>!0;function Ox(t,e,n,r,i,s){for(const[o,l]of d$(t)){const c=l.getBoundingClientRect();if(!t5(c,e,n))continue;const d=l.querySelector("[data-dockkit-strip]");if(d!==null&&t5(d.getBoundingClientRect(),e,n)){const f=[...d.querySelectorAll("[data-dockkit-tab]")];return{kind:"strip",paneId:o,index:eae(f.map(g=>g.getBoundingClientRect()),e)}}const h=s==="horizontal"?r&&r5(i,o).row?e<c.x+c.width/2?"left":"right":"center":Joe(c,e,n);if(h!=="center"){const f=r5(i,o),g=h==="left"||h==="right"?f.row:f.column;if(!r||!g)return}return{kind:"zone",paneId:o,zone:h}}}function Fx(t,e,n,r){const i=(t.axis==="row"?e:n)-t.origin,s=t.extent>0?i/t.extent:0;return u$(rae(t.sizes,t.index,s),r)}const Ble=1e-9;function Hle(t,e){return t.length===e.length&&t.every((n,r)=>{const i=e[r];return i!==void 0&&Math.abs(n-i)<Ble})}function qle({state:t,canSplit:e,canAddTab:n,canCloseTab:r,intents:i,labels:s,renderTab:o,renderTabTitle:l,renderTabMenuItems:c,chrome:d,onRoom:h,draw:f,dropZones:g="edges",minPaneFraction:y=l$,hideSplitWhenBlocked:b=!1}){const _=j.useRef(null),[C,S]=j.useState(Rd),[$,k]=j.useState(Fle),N=h$(()=>{S(Rd)}),A=j.useCallback(z=>{const L=_.current;L!==null&&z(L)},[]),I=j.useCallback(()=>{A(z=>{const L=Nae(z,b);k(M=>Iae(M,L)?M:L)})},[A,b]);j.useLayoutEffect(()=>{I()}),j.useEffect(()=>{h==null||h($)},[$,h]),j.useEffect(()=>{const z=_.current;if(z===null||typeof ResizeObserver>"u")return;const L=new ResizeObserver(()=>{I()});return L.observe(z),()=>{L.disconnect()}},[I]);const B=z=>e?r5($,z).row?void 0:"width":"budget",V={onFocusTab:i.focusTab.bind(i),onFocusPane:i.focusPane.bind(i),onSplitPane:i.splitPane.bind(i),onAddTab:i.addTab.bind(i),onCloseTab:i.closeTab.bind(i),onTabPressed:(z,L)=>{A(M=>{const K=L.clientX,ee=L.clientY;let X=!1;N(L.currentTarget,L.pointerId,{move:O=>{if(!X){if(!nae(K,ee,O.clientX,O.clientY))return;X=!0}S({...Rd,draggingTabId:z,dropTarget:Ox(M,O.clientX,O.clientY,e,$,g)})},up:O=>{if(!X)return;const D=Ox(M,O.clientX,O.clientY,e,$,g);if(D===void 0){if(t5(M.getBoundingClientRect(),O.clientX,O.clientY))return;i.floatTab(z,oae(O.clientX,O.clientY,e5));return}D.kind==="strip"?i.placeTab(z,D.paneId,D.index):i.dropTab(z,D.paneId,D.zone)}})})},onDividerPressed:(z,L,M)=>{const K=M.currentTarget.parentElement;if(K===null)return;const ee=Q6(t,z),X=K.getBoundingClientRect(),O={index:L,axis:ee.axis,origin:ee.axis==="row"?M.clientX:M.clientY,extent:ee.axis==="row"?X.width:X.height,sizes:ee.sizes};N(M.currentTarget,M.pointerId,{move:D=>{S({...Rd,sizes:{splitId:z,sizes:Fx(O,D.clientX,D.clientY,y)}})},up:D=>{const te=Fx(O,D.clientX,D.clientY,y);Hle(te,O.sizes)||i.resizeSplit(z,te)}})},splitBlock:B,hideSplitWhenBlocked:b,canAddTab:n??Dx,canCloseTab:r??Dx,dropTarget:C.dropTarget,horizontalDrops:g==="horizontal",draggingTabId:C.draggingTabId,labels:s,renderTab:o,renderTabTitle:l,renderTabMenuItems:c,chromePaneId:woe(t),chrome:d};return m.jsx("div",{className:nt.surface,ref:_,"data-dockkit-surface":!0,"data-dockkit-drop-zones":g,children:f(V,C.sizes)})}function Vle(t){return m.jsx(qle,{...t,draw:(e,n)=>m.jsx(Ole,{...t,callbacks:e,preview:n})})}const Wle="_panel_18rku_31",Ule="_iconButton_18rku_114",Gle="_collapseGlyph_18rku_140",Kle="_panelBody_18rku_144",Zle="_unavailable_18rku_150",gc={panel:Wle,iconButton:Ule,collapseGlyph:Gle,panelBody:Kle,unavailable:Zle};function Xle(){return m.jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:m.jsx("path",{d:"M2.33203 10.4054V13.1681C2.33229 13.444 2.55605 13.6681 2.83203 13.6681H5.49512V14.6681H2.83203C2.00376 14.6681 1.33229 13.9963 1.33203 13.1681V10.4054H2.33203ZM14.6689 13.1681C14.6687 13.996 13.9968 14.6676 13.1689 14.6681H10.4951V13.6681H13.1689C13.4445 13.6676 13.6687 13.4437 13.6689 13.1681V10.4054H14.6689V13.1681ZM13.1689 1.33118C13.9969 1.33163 14.6688 2.00315 14.6689 2.83118V5.4054H13.6689V2.83118C13.6688 2.55544 13.4446 2.33162 13.1689 2.33118H10.4951V1.33118H13.1689ZM5.49512 2.33118H2.83203C2.55598 2.33118 2.33218 2.55516 2.33203 2.83118V5.4054H1.33203V2.83118C1.33218 2.00288 2.00369 1.33118 2.83203 1.33118H5.49512V2.33118Z",fill:"currentColor"})})}function Yle(){return m.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:[m.jsx("path",{d:"M9 2.5V6C9 6.26522 9.10536 6.51957 9.29289 6.70711C9.48043 6.89464 9.73478 7 10 7H13.5",stroke:"currentColor"}),m.jsx("path",{d:"M7 13.5V10C7 9.73478 6.89464 9.48043 6.70711 9.29289C6.51957 9.10536 6.26522 9 6 9H2.5",stroke:"currentColor"})]})}function Qle({sessionId:t,fullscreen:e,actions:n,t:r,shortcuts:i,toggleFullscreen:s}){const o=e?"push":"fullscreen",l=r(e?"chrome.exitFullscreen":"chrome.toFullscreen"),c=i.find(h=>h.id==="pane.fullscreen.toggle"),d=i.find(h=>h.id==="sidebar.right.toggle");return m.jsxs(m.Fragment,{children:[m.jsx(bs,{label:l,shortcutKeys:c==null?void 0:c.keys,side:"bottom",delayMs:500,children:m.jsx("button",{type:"button",className:gc.iconButton,"aria-label":l,"aria-keyshortcuts":c==null?void 0:c.aria,"data-sidebar-right-mode":o,onClick:s,children:e?m.jsx(Yle,{}):m.jsx(Xle,{})})}),m.jsx(bs,{label:r("chrome.collapse"),shortcutKeys:d==null?void 0:d.keys,side:"bottom",delayMs:500,children:m.jsx("button",{type:"button",className:gc.iconButton,"aria-label":r("chrome.collapseAria"),"aria-keyshortcuts":d==null?void 0:d.aria,"data-sidebar-right-toggle":!0,onClick:()=>{n.toggleExpanded(t)},children:m.jsx(x6,{className:gc.collapseGlyph})})})]})}function Jle(t,e,n){return{emptyPane:t("dock.emptyPane"),splitPane:t("dock.splitPane"),splitPaneShortcut:e==null?void 0:e.aria,splitPaneKeys:e==null?void 0:e.keys,splitPaneDisabled:t("dock.splitPaneDisabled"),splitPaneNarrow:t("dock.splitPaneNarrow"),closeTab:t("dock.closeTab"),closeTabShortcut:n==null?void 0:n.aria,closeTabKeys:n==null?void 0:n.keys,addTab:t("dock.addTab"),dockFloat:t("dock.dockFloat"),closeFloat:t("dock.closeFloat"),dropZone:{center:t("dock.drop.center"),left:t("dock.drop.left"),right:t("dock.drop.right"),top:t("dock.drop.top"),bottom:t("dock.drop.bottom")}}}const g$={"command.close":"关闭当前页面/窗口","command.refresh":"刷新当前页面","command.noRefresh":"当前页面不支持刷新","command.toggle":"展开/收起右侧栏","command.fullscreen":"面板全屏/退出全屏","command.noSession":"请先选择会话","command.noFocus":"请先聚焦右侧面板","command.stale":"页面已切换,请重新聚焦","command.collapsed":"请先展开右侧栏","command.float":"浮动面板不支持此操作","command.empty":"请先打开页面","command.budget":"已达两格上限","command.width":"栏宽不足,拖宽侧边栏后再分栏","chrome.expand":"打开侧边栏","chrome.expandAria":"打开右侧边栏","chrome.collapse":"收起侧边栏","chrome.collapseAria":"收起右侧边栏","chrome.toFullscreen":"全屏","chrome.exitFullscreen":"退出全屏","dock.emptyPane":"空面板","dock.splitPane":"分栏","dock.splitPaneDisabled":"已达两格上限","dock.splitPaneNarrow":"栏宽不足,拖宽侧边栏后再分栏","dock.closeTab":"关闭","dock.addTab":"新标签页","dock.dockFloat":"收回到侧边栏","dock.closeFloat":"关闭","dock.drop.center":"移到这里","dock.drop.left":"左分栏","dock.drop.right":"右分栏","dock.drop.top":"上分栏","dock.drop.bottom":"下分栏","tab.guide.title":"开始","tab.unavailable":"这类内容还没有可用的查看方式。"},y$={"command.close":"Close current page or window","command.refresh":"Refresh current page","command.noRefresh":"This page cannot be refreshed","command.toggle":"Toggle right sidebar","command.fullscreen":"Toggle panel fullscreen","command.noSession":"Select a session first","command.noFocus":"Focus a right sidebar pane first","command.stale":"The page changed; focus it again","command.collapsed":"Expand the right sidebar first","command.float":"This action is unavailable in a floating panel","command.empty":"Open a page first","command.budget":"Two panes is the limit","command.width":"Not enough width to split, widen the sidebar","chrome.expand":"Open sidebar","chrome.expandAria":"Open right sidebar","chrome.collapse":"Collapse sidebar","chrome.collapseAria":"Collapse right sidebar","chrome.toFullscreen":"Fullscreen","chrome.exitFullscreen":"Exit fullscreen","dock.emptyPane":"Empty pane","dock.splitPane":"Split","dock.splitPaneDisabled":"Two panes is the limit","dock.splitPaneNarrow":"Not enough width to split, widen the sidebar","dock.closeTab":"Close","dock.addTab":"New tab","dock.dockFloat":"Send back to the sidebar","dock.closeFloat":"Close","dock.drop.center":"Move here","dock.drop.left":"Add left split","dock.drop.right":"Add right split","dock.drop.top":"Add top split","dock.drop.bottom":"Add bottom split","tab.guide.title":"Start","tab.unavailable":"Nothing here can view this kind of content yet."},ece="_button_1rv3m_2",tce="_md_1rv3m_23",nce="_sm_1rv3m_28",rce="_primary_1rv3m_36",ice="_ghost_1rv3m_45",sce="_outline_1rv3m_54",oce="_toolbar_1rv3m_63",ace="_icon_1rv3m_71",Dd={button:ece,md:tce,sm:nce,primary:rce,ghost:ice,outline:sce,toolbar:oce,icon:ace},lce=j.forwardRef(function({variant:e="ghost",size:n="md",icon:r,className:i,children:s,...o},l){return m.jsxs("button",{ref:l,type:"button",className:ht(Dd.button,Dd[e],Dd[n],i),...o,children:[r!=null&&m.jsx("span",{className:Dd.icon,children:r}),s]})}),cce="_button_11lrx_2",uce="_icon_11lrx_15",Bx={button:cce,icon:uce};function Od(t){if(typeof t=="string")return t.length>0;if(!t||typeof t!="object")return!1;const e=t;return typeof e.zh=="string"&&e.zh.length>0&&typeof e.en=="string"&&e.en.length>0}function dce(t){if(!t||typeof t!="object")return!1;const e=t;if(typeof e.id!="string"||!e.id||typeof e.title!="string"||!e.title||typeof e.action!="string"||!e.action||e.description!==void 0&&typeof e.description!="string"||e.args!==void 0&&(!Array.isArray(e.args)||e.args.some(n=>typeof n!="string")))return!1;if(e.presentation!==void 0){const n=e.presentation;if(!n||!Od(n.label)||n.description!==void 0&&!Od(n.description)||n.icon!==void 0&&typeof n.icon!="function"||n.section!==void 0&&!["add","commands"].includes(n.section))return!1}if(e.input!==void 0){const n=e.input;if(!n||!Od(n.hint)||n.attachments!==void 0&&typeof n.attachments!="boolean"||n.token!==void 0&&(!Od(n.token)||(typeof n.token=="string"?[n.token]:[n.token.zh,n.token.en]).some(i=>/[\s/]/.test(i))))return!1}return!0}function hce(t,e){var s;if(!t||typeof t!="object")throw new Error("Module must default export a plugin definition");const n=t;if(n.id!==e||n.apiVersion!==1)throw new Error("Plugin id or apiVersion does not match the catalog");if(typeof n.activate!="function")throw new Error("Plugin must declare synchronous activate(context)");for(const o of["slots","commands","menuItems","interactions","artifactTools"])if(n[o]!==void 0&&!Array.isArray(n[o]))throw new Error(`${o} must be an array`);const r=new Set;for(const o of n.slots??[]){if(!o||!["composer.controls","turn.tail","rightbar.panel","rightbar.title"].includes(o.slot)||typeof o.id!="string"||typeof o.component!="function"||r.has(o.id))throw new Error("Invalid or duplicate slot");r.add(o.id)}for(const o of[...n.commands??[],...n.menuItems??[]]){if(!o||typeof o.id!="string"||typeof o.action!="string"||r.has(o.id))throw new Error("Invalid or duplicate command/menu contribution");r.add(o.id)}if((n.commands??[]).some(o=>!dce(o)))throw new Error("Invalid command");const i=new Set;for(const o of n.interactions??[]){if(!o||typeof o.kind!="string"||!o.kind||i.has(o.kind)||typeof o.component!="function")throw new Error("Invalid or duplicate interaction");i.add(o.kind)}if(n.composerPlaceholder!==void 0&&typeof n.composerPlaceholder!="function")throw new Error("Invalid composer placeholder");if(n.composerAction!==void 0&&typeof n.composerAction!="function")throw new Error("Invalid composer action");if((s=n.artifactTools)!=null&&s.some(o=>typeof o!="string"))throw new Error("Invalid artifact tools");return n}function h3(t,e,n){return new Promise((r,i)=>{let s;const o=()=>l(new Error("Plugin load aborted")),l=(c,d)=>{clearTimeout(s),e.removeEventListener("abort",o),c?i(c):r(d)};e.addEventListener("abort",o,{once:!0}),n!==void 0&&(s=setTimeout(()=>l(new Error("Plugin load timed out")),n)),t.then(c=>l(null,c),c=>l(c)),e.aborted&&o()})}class fce{constructor(e){W(this,"controller",new AbortController);W(this,"cleanups",[]);W(this,"disposed",!1);W(this,"report");this.report=e}context(e){return{sessionId:e,signal:this.controller.signal,onDispose:n=>{if(typeof n!="function")throw new Error("onDispose expects a cleanup function");this.disposed?this.clean(n):this.cleanups.push(n)}}}clean(e){try{e()}catch(n){this.report(n)}}dispose(){if(!this.disposed){this.disposed=!0,this.controller.abort();for(const e of this.cleanups.splice(0).reverse())this.clean(e)}}}const f3=(t,e=null)=>({sessionId:e,generation:t,plugins:[],errors:[]});class pce{constructor(e){W(this,"environment");W(this,"run",null);W(this,"snapshot",f3(0));W(this,"generation",0);W(this,"listeners",new Set);W(this,"getSnapshot",()=>this.snapshot);W(this,"subscribe",e=>(this.listeners.add(e),()=>{this.listeners.delete(e)}));this.environment=e}update(e){this.snapshot=e;for(const n of this.listeners)n()}error(e,n,r,i){const s=`plugin=${n} session=${e.sessionId} generation=${e.generation} stage=${r}: ${i instanceof Error?i.message:String(i)}`;(this.environment.report??console.error)(s),this.run===e&&this.update({...this.snapshot,errors:[...this.snapshot.errors,s]})}async start(e,n){this.dispose();const r={sessionId:e,generation:++this.generation,controller:new AbortController,scopes:[]};this.run=r,this.update(f3(r.generation,e));try{const i=await h3(Promise.resolve().then(n),r.controller.signal);if(this.run!==r)return;for(const s of i.errors)this.error(r,"catalog","discover",s);for(const s of i.plugins){if(this.run!==r)break;const o=new fce(d=>this.error(r,s.id,"dispose",d));r.scopes.push(o);const l=o.context(e);let c="load";try{const d=await h3(this.environment.loadModule(s.client),r.controller.signal,this.environment.loadTimeoutMs??1e4);if(this.run!==r)break;c="validate";const h=hce(d==null?void 0:d.default,s.id);if(s.style&&(c="style",await h3(this.environment.loadStyle(s.style,l.signal).then(g=>{l.onDispose(g)}),r.controller.signal,this.environment.loadTimeoutMs??1e4)),this.run!==r)break;c="activate";const f=h.activate(l);if(f!==void 0)throw Promise.resolve(f).catch(g=>this.error(r,s.id,"activate",g)),new Error("activate must be synchronous and return void");if(this.run!==r){o.dispose();break}this.update({...this.snapshot,plugins:[...this.snapshot.plugins,{id:s.id,definition:h,instanceId:`${r.generation}/${s.id}`}]})}catch(d){this.run===r&&this.error(r,s.id,c,d),o.dispose()}}}catch(i){this.run===r&&this.error(r,"catalog","discover",i)}}dispose(){const e=this.run;if(e){this.run=null,e.controller.abort();for(const n of e.scopes.reverse())n.dispose();this.update(f3(this.generation))}}}function mce(t,e){return new Promise((n,r)=>{const i=document.createElement("link");i.rel="stylesheet",i.href=t;const s=()=>{e.removeEventListener("abort",o),i.onload=i.onerror=null,i.remove()},o=()=>{s(),r(new Error("Plugin stylesheet aborted"))};e.addEventListener("abort",o,{once:!0}),i.onload=()=>{e.removeEventListener("abort",o),i.onload=i.onerror=null,n(s)},i.onerror=()=>{s(),r(new Error("Plugin stylesheet failed to load"))},e.aborted?o():document.head.append(i)})}function gce(t,e,n){const[r]=j.useState(()=>new pce({loadModule:o=>import(o),loadStyle:mce})),i=j.useSyncExternalStore(r.subscribe,r.getSnapshot);j.useEffect(()=>{if(!(!t||!e))return globalThis.__PI_WEBAPP_REACT__=SN,r.start(e,n),()=>r.dispose()},[r,t,e]);const s=t&&i.sessionId===e;return{plugins:s?i.plugins:[],errors:s?i.errors:[]}}class v$ extends j.Component{constructor(){super(...arguments);W(this,"state",{failed:!1})}static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(n){console.error(`pi-webapp plugin ${this.props.id}:`,n)}render(){return this.state.failed?null:this.props.children}}function b$(t,e){return{...t,invokeAction:(n,r)=>t.invokePluginAction(e,n,r),resolveInteraction:n=>!t.interaction||t.interaction.pluginId!==e?Promise.reject(new Error("No pending interaction")):t.resolvePluginInteraction(e,t.interaction.requestId,n)}}function yce({plugins:t,props:e}){var s,o,l,c;const n=(o=(s=e.session)==null?void 0:s.interactions)==null?void 0:o.find(d=>t.some(h=>{var f;return h.id===d.pluginId&&((f=h.definition.interactions)==null?void 0:f.some(g=>g.kind===d.kind))})),r=t.find(d=>d.id===(n==null?void 0:n.pluginId)),i=(c=(l=r==null?void 0:r.definition.interactions)==null?void 0:l.find(d=>d.kind===(n==null?void 0:n.kind)))==null?void 0:c.component;return!n||!r||!i?null:m.jsx(v$,{id:r.id,children:m.jsx(i,{...b$({...e,interaction:n},r.id)})},`${r.instanceId??r.id}/${n.requestId}`)}function i5({plugins:t,slot:e,props:n}){const r=t.flatMap(i=>(i.definition.slots??[]).filter(s=>s.slot===e).map(s=>({plugin:i,item:s})));return r.sort((i,s)=>(i.item.order??0)-(s.item.order??0)||i.plugin.id.localeCompare(s.plugin.id)||i.item.id.localeCompare(s.item.id)),m.jsx(m.Fragment,{children:r.map(({plugin:i,item:s})=>{const o=s.component;return m.jsx(v$,{id:i.id,children:m.jsx(o,{...b$(n,i.id)})},`${i.instanceId??i.id}/${s.id}`)})})}function vce(t){const e=j.useRef(new Map),n=j.useMemo(()=>{const l=t??"";let c=e.current.get(l);return c||(c=new kae({makePaneTab:d=>({id:d,kind:"guide",contentId:"guide",title:"开始"})}),e.current.set(l,c)),c},[t]),r=j.useSyncExternalStore(n.subscribe,n.getSnapshot),{state:i}=r,s=tn(i,i.activePaneId).activeTabId,o=s?Pc(i,s).contentId:null;return{controller:n,snapshot:r,panelId:o,shown:i.expanded&&Object.keys(i.tabs).length>0}}function bce({panel:t,width:e,narrow:n,plugins:r,props:i}){var f,g;const{controller:s,snapshot:o}=t,{state:l}=o,c=n||l.mode==="fullscreen",d=i.locale==="zh"?g$:y$,h=y=>d[y]??y;return m.jsx("div",{className:gc.panel,style:{width:c?"100vw":e,"--dsh-sidebar-width":c?"100vw":`${e}px`},"data-sidebar-right-session":(f=i.session)==null?void 0:f.sessionId,"data-sidebar-right-panel":c?"fullscreen":"push","data-sidebar-right-open":t.shown||void 0,"aria-hidden":!t.shown||void 0,children:m.jsx("div",{className:gc.panelBody,children:m.jsx(Vle,{state:l,canSplit:o.canSplit&&tg(l).length<2,dropZones:"horizontal",minPaneFraction:.2,intents:s,labels:Jle(h),active:!0,keepMounted:()=>!0,renderTab:y=>y.kind==="guide"?m.jsx("p",{className:gc.unavailable,children:i.locale==="zh"?"从对话中打开扩展文档。":"Open an extension document from the conversation."}):m.jsx(i5,{plugins:r,slot:"rightbar.panel",props:{...i,panelId:y.contentId}}),renderTabTitle:y=>y.kind==="guide"?h("tab.guide.title"):m.jsx(i5,{plugins:r,slot:"rightbar.title",props:{...i,panelId:y.contentId}}),chrome:m.jsx(Qle,{sessionId:((g=i.session)==null?void 0:g.sessionId)??"",fullscreen:c,shortcuts:[],t:h,actions:{toggleExpanded:()=>s.toggleExpanded()},toggleFullscreen:()=>n?s.setExpanded(!1):s.setMode(c?"push":"fullscreen")})})})})}function xce({panel:t,locale:e}){if(t.shown||Object.keys(t.snapshot.state.tabs).length===0)return null;const n=e==="zh"?g$:y$;return m.jsx(bs,{label:n["chrome.expand"],side:"bottom",delayMs:500,children:m.jsx(lce,{size:"sm",className:Bx.button,"aria-label":n["chrome.expandAria"],"data-sidebar-right-expand":!0,onClick:()=>t.controller.setExpanded(!0),children:m.jsx(x6,{className:Bx.icon})})})}function _ce(){var V,z;const t=ao(),e={"session.new.label":F("新会话","New session"),"session.new":F("新会话","New session"),"toggle.open":F("展开侧栏","Expand sidebar"),"toggle.collapse":F("收起侧栏","Collapse sidebar"),"panels.label":F("面板","Panels"),"brand.localBuild":"pi-webapp"},n=IX(),{plugins:r,errors:i}=gce(n.connection==="connected",(V=n.session)==null?void 0:V.sessionId,n.plugins),s=vce((z=n.session)==null?void 0:z.sessionId),o=s.panelId,[l,c]=j.useState(!1),d=n.connection==="connected"&&n.session!==null&&n.modelsStatus==="ready"&&n.models.length===0;j.useEffect(()=>{d&&c(!0)},[d]);const h=j.useCallback(()=>{c(!1),requestAnimationFrame(()=>{var L;return(L=document.querySelector(".pi-settings-sidebar"))==null?void 0:L.focus()})},[]),[f,g]=j.useState(()=>({sidebar:280,viewportWidth:window.innerWidth,narrowExpanded:!1,rightbar:null,rightbarShown:!1,rightbarTrack:!1,rightbarFullscreen:!1,rightbarInstant:!1})),y=j.useMemo(()=>({setViewportWidth(L){g(M=>M.viewportWidth===L?M:{...M,viewportWidth:L,narrowExpanded:M.viewportWidth<1024!=L<1024?!1:M.narrowExpanded})},setSidebar(L){g(M=>({...M,sidebar:Math.min(420,Math.max(264,Math.round(L)))}))},setRightbar(L){g(M=>({...M,rightbar:Math.max(300,Math.min(720,Math.round(L)))}))}}),[]),b=L=>{s.controller.openContent({kind:"plugin",contentId:L,title:F("预览","Preview")}),s.controller.setExpanded(!0),g(M=>({...M,narrowExpanded:!1}))},_=()=>s.controller.setExpanded(!1);j.useEffect(()=>{const L=f.viewportWidth<767||s.snapshot.state.mode==="fullscreen";g(M=>({...M,rightbarShown:s.shown,rightbarTrack:s.shown,rightbarFullscreen:L}))},[s.shown,s.snapshot.state.mode,f.viewportWidth]);const C={session:n.session,locale:t,openPanel:b,closePanel:_,panelId:o,invokePluginAction:n.invokePluginAction,resolvePluginInteraction:n.resolvePluginInteraction,sendMessage:L=>n.send(L,[]),renderMarkdown:L=>m.jsx(boe,{text:L,labels:{code:{copyLabel:F("复制","Copy"),copiedLabel:F("已复制","Copied"),toolbarLabels:{codeLabel:F("代码块","Code block"),wrapLabel:F("自动换行","Wrap"),unwrapLabel:F("取消换行","Unwrap")}},footnotes:F("脚注","Footnotes")}})},S=(L,M)=>m.jsx(i5,{plugins:r,slot:L,props:{...C,turn:M}}),$=()=>g(L=>L.viewportWidth<1024?{...L,narrowExpanded:!L.narrowExpanded}:{...L,sidebar:L.sidebar===0?280:0}),k=L=>L({layoutInfo:f}),N=L=>L({activePanelId:null}),A=L=>L([]),I=(L,M,K)=>L==="sidebar.brand.mark"?m.jsx(rh,{size:24}):L==="sidebar.brand.name"?m.jsx("span",{children:"pi-webapp"}):L==="sidebar.settings"?m.jsx("div",{className:`pi-settings-trigger-row ${M.wide?"":"pi-settings-trigger-rail"}`,children:m.jsxs("button",{className:"pi-settings-sidebar","data-wide":M.wide,type:"button","aria-label":F("Pi 设置","Pi Settings"),"aria-haspopup":"dialog","aria-expanded":l,onClick:()=>c(!0),children:[M.wide?m.jsx(Zx,{size:16}):m.jsx(uI,{size:18}),M.wide&&m.jsx("span",{children:F("Pi 设置","Pi Settings")})]})}):L==="sidebar.workspaces"?m.jsx(PZ,{wide:M.wide,expandSidebar:M.expandSidebar,session:n.session,workspaces:n.workspaces,onAdd:n.addWorkspace,directoryPickerKind:n.directoryPickerKind,pickDirectory:n.pickDirectory,listDirectory:n.listDirectory,createDirectory:n.createDirectory,onRemove:n.removeWorkspace,onSelectSession:n.selectSession,onNewSession:n.newSessionInWorkspace}):(K==null?void 0:K.fallback)??null,B=(L,M)=>{var K,ee;return L==="sidebar"?m.jsx(eM,{collapsed:M.collapsed,width:M.width,startSession:()=>{n.newSession().catch(()=>{})},toggleSidebar:$,selectPanel:()=>{},usePanels:A,usePanelInfo:N,t:X=>e[X]??X,renderSlot:I}):L==="main"?m.jsx(UG,{rightbarControl:m.jsx(xce,{panel:s,locale:t}),session:n.session,streaming:n.streaming,connection:n.connection,error:n.error,onSend:n.send,onLoadImage:n.loadMessageImage,onUpload:n.upload,onDiscardAttachment:n.discardAttachment,onStop:n.stop,onResume:n.resume,onCompact:n.compact,onNewSession:n.newSession,commands:n.commands,models:n.models,modelsStatus:n.modelsStatus,onConfigureModels:()=>c(!0),onSetModel:n.setModel,onSetThinkingLevel:n.setThinkingLevel,composerInteraction:(ee=(K=n.session)==null?void 0:K.interactions)!=null&&ee.some(X=>r.some(O=>{var D;return O.id===X.pluginId&&((D=O.definition.interactions)==null?void 0:D.some(te=>te.kind===X.kind))}))?m.jsx(yce,{plugins:r,props:C}):void 0,renderPluginSlot:S,plugins:r,onPluginAction:n.invokePluginAction}):L==="rightbar"&&Object.keys(s.snapshot.state.tabs).length>0?m.jsx(bce,{panel:s,width:M.width,narrow:f.viewportWidth<767,plugins:r,props:C}):null};return m.jsxs(m.Fragment,{children:[m.jsx(tI,{useStore:k,usePanelInfo:N,actions:y,renderSlot:B,t:L=>e[L]??L}),i.length>0&&m.jsxs("div",{className:"pi-plugin-errors",role:"status",title:i.join(`
|
|
542
542
|
`),children:[F("插件加载失败","Plugin load failed"),": ",i.length]}),l&&m.jsx(NX,{onBack:h,setupMode:d,getConfig:n.getConfig,updateConfig:n.updateConfig,getUpdate:n.getUpdate,getRunningVersion:n.getRunningVersion,update:n.update,getProviders:n.getProviders,getProviderModels:n.getProviderModels,updateProviderModel:n.updateProviderModel,logoutProvider:n.logoutProvider,addCustomProvider:n.addCustomProvider,startProviderLogin:n.startProviderLogin,getProviderLogin:n.getProviderLogin,getActiveProviderLogin:n.getActiveProviderLogin,respondProviderLogin:n.respondProviderLogin,cancelProviderLogin:n.cancelProviderLogin,refreshModels:n.refreshModels})]})}FZ();jN();const x$=document.getElementById("root");if(!x$)throw new Error("Missing #root");AN.createRoot(x$).render(m.jsx(PN,{children:m.jsx(_ce,{})}));const $ce=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));export{$ce as a,nie as j,eie as s,Qre as t};
|
|
543
|
-
|
|
544
|
-
//# debugId=131621a8-a23e-48ad-939a-c1aaaa3dca87
|
package/web/dist/assets/app.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
var
|
|
2
|
-
`).slice(1,31).map(
|
|
3
|
-
${
|
|
4
|
-
`)}`}return t<3&&
|
|
1
|
+
var O=Object.defineProperty;var B=(e,t,i)=>t in e?O(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i;var d=(e,t,i)=>B(e,typeof t!="symbol"?t+"":t,i);(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="e25d41bf-1c3b-4ceb-b2a6-8d1bf90d9a66",e._sentryDebugIdIdentifier="sentry-dbid-e25d41bf-1c3b-4ceb-b2a6-8d1bf90d9a66")}catch{}})();(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))r(s);new MutationObserver(s=>{for(const n of s)if(n.type==="childList")for(const a of n.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&r(a)}).observe(document,{childList:!0,subtree:!0});function i(s){const n={};return s.integrity&&(n.integrity=s.integrity),s.referrerPolicy&&(n.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?n.credentials="include":s.crossOrigin==="anonymous"?n.credentials="omit":n.credentials="same-origin",n}function r(s){if(s.ep)return;s.ep=!0;const n=i(s);fetch(s.href,n)}})();const x="modulepreload",j=function(e){return"/"+e},I={},A=function(t,i,r){let s=Promise.resolve();if(i&&i.length>0){let a=function(o){return Promise.all(o.map(c=>Promise.resolve(c).then(g=>({status:"fulfilled",value:g}),g=>({status:"rejected",reason:g}))))};document.getElementsByTagName("link");const l=document.querySelector("meta[property=csp-nonce]"),m=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));s=a(i.map(o=>{if(o=j(o),o in I)return;I[o]=!0;const c=o.endsWith(".css"),g=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${o}"]${g}`))return;const f=document.createElement("link");if(f.rel=c?"stylesheet":x,c||(f.as="script"),f.crossOrigin="",f.href=o,m&&f.setAttribute("nonce",m),document.head.appendChild(f),c)return new Promise((T,N)=>{f.addEventListener("load",T),f.addEventListener("error",()=>N(new Error(`Unable to preload CSS for ${o}`)))})}))}function n(a){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=a,window.dispatchEvent(l),!l.defaultPrevented)throw a}return s.then(a=>{for(const l of a||[])l.status==="rejected"&&n(l.reason);return t().catch(n)})},D=new Set(["bash","powershell","read","write","edit","grep","find","ls"]),q=new Set(["cancelled","blocked","validation","not_found","permission","timeout","process_exit","unknown"]),Y={userInfo:!1,cookies:!1,httpHeaders:!1,httpBodies:[],urlQueryParams:!1,genAI:{inputs:!1,outputs:!1},graphQL:{document:!1,variables:!1},databaseQueryData:!1,queues:!1,stackFrameVariables:!1,frameContextLines:0},F=new Set(["stage","route","method","status","durationMs","connection","idle","model","thinkingLevel","messageCount","attachmentCount","session","requestId","operationId","errorId","repeats","dropped","componentStack","eventType","sequence","nodeVersion","piVersion","platform","browser","buildId","code","toolName","toolId","toolCallId","failureKind","errorCode","exitCode","timeoutMs","diagnosticSource","originalStackAvailable","errorSummary","summaryOmitted","summaryOmittedReason","level"]),R=new Set(["/api/plugins","/api/plugin-action","/api/plugin-interaction","/api/resume","/api/update","/api/update/version","/api/provider/models","/api/provider/logout","/api/provider/login/active","/api/telemetry/config","/api/image","/api/attachment","/api/attachment/remove","/api/session","/api/providers","/api/models","/api/config","/api/workspaces","/api/commands","/api/events","/api/message","/api/abort","/api/compact","/api/new-session","/api/model","/api/thinking-level","/api/provider/login","/api/provider/login/respond","/api/provider/login/cancel","/api/provider/custom","/api/workspace/add","/api/workspace/select","/api/workspace/new-session","/api/workspace/remove","/api/session/select","/api/directory/capability","/api/directory/list","/api/directory/create","/api/directory/pick"]);function ee(e){return e==="/api/message"||e.startsWith("/api/provider/")||["/api/plugin-action","/api/plugin-interaction","/api/resume","/api/compact"].includes(e)}function p(e){return e.slice(0,8192).replace(/-----BEGIN [^-\n]+-----[\s\S]*?(?:-----END [^-\n]+-----|$)/g,"[redacted]").replace(/(["'`])[\s\S]*?\1/g,"[quoted]").replace(/(?:Bearer\s+\S+|(?:api[_-]?key|token|password|secret|authorization)\s*[=:]\s*\S+)/gi,"[redacted]").replace(/\b(?:sk-|sntrys_|eyJ)[A-Za-z0-9_.-]+/g,"[redacted]").replace(/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g,"[email]").replace(/https?:\/\/[^\s)]+/gi,"[url]").replace(/(?:file:\/\/)?(?:\/[\w.~-]+){2,}(?::\d+(?::\d+)?)?/g,"[path]").replace(/[A-Za-z]:\\[^\s)]+/g,"[path]").replace(/(?:^|\s)(?:\.\.?[\\/]|~[\\/])[^\s)]+/g," [path]").replace(/\b(?:[\w.-]+[\\/])+[\w.-]+/g,"[path]").replace(/\{[^\n]*\}/g,"[object]").replace(/\b[A-Za-z0-9_-]{24,}\b/g,"[redacted]").slice(0,1024)}function h(e){const t={};for(const i of F){const r=e[i];i==="toolName"?typeof r=="string"&&(D.has(r)||r==="custom")&&(t[i]=r):i==="failureKind"?q.has(r)&&(t[i]=r):i==="level"?(r==="warning"||r==="error")&&(t[i]=r):i==="diagnosticSource"?(r==="tool_execution_end"||r==="message_end")&&(t[i]=r):i==="errorCode"?typeof r=="string"&&/^(?:E[A-Z0-9]{1,20}|nonzero_exit|timeout|cancelled|blocked|invalid_arguments|tool_not_found|unknown)$/.test(r)&&(t[i]=r):i==="toolId"?typeof r=="string"&&/^[a-f0-9]{16}$/.test(r)&&(t[i]=r):i==="route"&&typeof r=="string"?t[i]=R.has(r.split("?")[0])?r.split("?")[0]:"[route]":i==="model"&&typeof r=="string"&&/^[\w.-]+\/[\w.-]+$/.test(r)?t[i]=r.split("/").map(p).join("/"):typeof r=="string"?t[i]=["requestId","operationId","errorId","session","buildId","toolId","toolCallId"].includes(i)&&/^[\w-]{1,80}$/.test(r)?r:p(r).slice(0,i==="errorSummary"?512:1024):(typeof r=="boolean"||typeof r=="number"&&Number.isFinite(r)||r===null)&&(t[i]=r)}return t}function E(e){var r;const t=e.replace(/\\/g,"/").split(/[?#]/)[0];return t.startsWith("node:")?t.slice(0,150):`app:///${(((r=t.match(/(?:^|\/)((?:web\/src|extension|shared|dist|assets)\/[^\s:)]+)$/))==null?void 0:r[1])??t.split("/").pop()??"unknown").replace(/[^\w./-]/g,"_").slice(-200)}`}function S(e,t=0){const i=e instanceof Error?e:new Error(typeof e=="string"?e:"Non-Error rejection"),r=new Error(p(i.message));if(r.name=p(i.name).slice(0,100),i.stack){const s=i.stack.split(`
|
|
2
|
+
`).slice(1,31).map(n=>{const a=n.match(/((?:file:\/\/|https?:\/\/|\/|[A-Za-z]:\\)[^\s()]+):(\d+):(\d+)(\)?)$/);return a?`${p(n.slice(0,a.index))}${a[1]}:${a[2]}:${a[3]}${a[4]}`:p(n)});r.stack=`${r.name}: ${r.message}
|
|
3
|
+
${s.join(`
|
|
4
|
+
`)}`}else r.stack=void 0;return t<3&&i.cause!==void 0&&(r.cause=S(i.cause,t+1)),r}function te(e,t){const i=new Error(t);return e instanceof Error&&(i.name=e.name,e.stack&&(i.stack=`${i.name}: ${t}
|
|
5
5
|
${e.stack.split(`
|
|
6
6
|
`).slice(1).join(`
|
|
7
|
-
`)}`)),
|
|
8
|
-
`)[1])??""}:${
|
|
9
|
-
|
|
10
|
-
//# debugId=24924569-10a6-4646-9ec7-d6a3314160ba
|
|
7
|
+
`)}`)),i}function K(e){return{...e.filename?{filename:E(e.filename)}:{},...e.abs_path?{abs_path:E(e.abs_path)}:{},...e.function?{function:p(e.function)}:{},lineno:e.lineno,colno:e.colno,in_app:e.in_app}}function Z(e){var r,s,n,a,l,m;const t=h(((r=e.contexts)==null?void 0:r.diagnostic)??{}),i=C(t);return{event_id:e.event_id,timestamp:e.timestamp,platform:e.platform,level:e.level,release:e.release,dist:e.dist,environment:p(e.environment??"production"),...e.message?{message:p(e.message)}:{},exception:e.exception?{values:(s=e.exception.values)==null?void 0:s.slice(0,4).map(o=>{var c;return{type:p(o.type??"Error"),value:p(o.value??""),...o.stacktrace?{stacktrace:{frames:(c=o.stacktrace.frames)==null?void 0:c.slice(-30).map(K)}}:{},...o.mechanism?{mechanism:{type:o.mechanism.type,handled:o.mechanism.handled}}:{}}})}:void 0,tags:{side:(n=e.tags)==null?void 0:n.side,buildId:(a=e.tags)==null?void 0:a.buildId,...t.toolName?{toolName:t.toolName}:{},...t.failureKind?{failureKind:t.failureKind}:{},...t.errorCode?{errorCode:t.errorCode}:{}},...i?{fingerprint:i}:{},contexts:{diagnostic:t},breadcrumbs:(l=e.breadcrumbs)==null?void 0:l.slice(-100).map(o=>({timestamp:o.timestamp,category:p(o.category??"app"),data:h(o.data??{})})),debug_meta:e.debug_meta?{images:(m=e.debug_meta.images)==null?void 0:m.slice(0,10).map(o=>({type:o.type,debug_id:o.debug_id,...o.code_file?{code_file:E(o.code_file)}:{}}))}:void 0}}function C(e){if(!(e.stage!=="tool"||e.originalStackAvailable!==!1||!e.toolName||!e.failureKind))return["pi-webapp-tool-result",String(e.toolName),String(e.toolId??"builtin"),String(e.failureKind),String(e.errorCode??"unknown")]}function re(e,t){return t.attachments=[],Z(e)}class M{constructor(){d(this,"items",[]);d(this,"bytes",0);d(this,"encoder",new TextEncoder)}add(t,i={}){const r={timestamp:Date.now()/1e3,category:p(t),data:h(i)},s=this.encoder.encode(JSON.stringify(r)).byteLength+1;for(this.items.push({item:r,size:s}),this.bytes+=s;this.items.length>100||this.bytes>64*1024-2;)this.bytes-=this.items.shift().size}snapshot(){return this.items.map(({item:t})=>t)}}class U{constructor(){d(this,"windowAt",-1);d(this,"total",0);d(this,"seen",new Map)}take(t,i=Date.now()){(this.windowAt<0||i-this.windowAt>=6e4)&&(this.windowAt=i,this.total=0);const r=this.seen.get(t);if(r&&i-r.at<6e4){r.repeats++;return}if(!(this.total>=20))return this.total++,this.seen.size>=64&&!r&&this.seen.delete(this.seen.keys().next().value),this.seen.set(t,{at:i,repeats:0}),{repeats:(r==null?void 0:r.repeats)??0}}}const V=new Set(["会话已切换","Pi 正在运行,请等待当前回复结束","请等待当前回复结束","请等待当前回复结束再切换工作区","请等待当前回复结束再切换会话","请先切换到其他工作区","新会话已取消","已有登录正在进行","模型不可用","模型提供方未配置认证","当前模型不支持此推理强度","其他提供方的登录正在进行,请先完成或取消当前登录","当前会话没有暂停的任务","请先完成当前交互或审批","请先选择模型","请先连接当前模型","插件未启用","会话运行实例已切换","提供方已存在","文件超过 20 MB","请求内容过大","会话不属于该工作区","推理强度无效"]);function L(e){return e instanceof Error&&(e.name==="AbortError"||V.has(e.message))}class ie{constructor(t,i,r,s,n=new M){d(this,"budget",new U);d(this,"breadcrumbs");d(this,"scopeClass");d(this,"seen",new WeakSet);d(this,"state",{});d(this,"client");d(this,"side");d(this,"buildId");this.client=t,this.side=i,this.buildId=r,this.scopeClass=s.Scope,this.breadcrumbs=n,t.addIntegration(s.linkedErrorsIntegration({limit:4}))}setState(t){this.state=h(t)}capture(t,i={},r){var s;try{if(L(t))return;if(typeof t=="object"&&t!==null){if(this.seen.has(t))return;this.seen.add(t)}const n=S(t),a=h({...this.state,...i}),l=C(a),m=l?JSON.stringify(l):`${n.name}:${n.message}:${((s=n.stack)==null?void 0:s.split(`
|
|
8
|
+
`)[1])??""}:${i.stage??""}`,o=this.budget.take(m);if(!o)return;const c=new this.scopeClass;c.setClient(this.client),c.setTags({side:this.side,buildId:this.buildId}),a.level==="warning"&&c.setLevel("warning"),l&&c.setFingerprint(l),c.setContext("diagnostic",{...a,repeats:o.repeats});for(const g of this.breadcrumbs.snapshot())c.addBreadcrumb(g,100);return c.captureException(n,r?{event_id:r}:void 0)}catch{return}}ignore(t){this.seen.add(t)}}function se(e,t){return e({...t,bufferSize:20},async({body:i})=>{const r=await fetch(t.url,{method:"POST",body:i,signal:AbortSignal.timeout(3e3),credentials:"omit",referrerPolicy:"no-referrer",redirect:"error",headers:{"Content-Type":"application/x-sentry-envelope"}});return{statusCode:r.status,headers:{"x-sentry-rate-limits":r.headers.get("x-sentry-rate-limits"),"retry-after":r.headers.get("retry-after")}}})}let w;function W(){if(w!==void 0)return w;const e=location.hash.slice(1);try{w=e||sessionStorage.getItem("pi-web-token"),e&&sessionStorage.setItem("pi-web-token",e)}catch{w=e||null}return e&&history.replaceState(null,"",location.pathname),w}const H="pi-webapp@0.1.10+80b795ac3839fc1723fb",J="80b795ac3839fc1723fb";let u,z=!0,$=!1,P=!1,v=[];const k=new WeakSet,b=new Map;let y={};function _(e,t={}){try{if(L(e))return;if(typeof e=="object"&&e!==null){if(k.has(e))return;k.add(e)}if(u)return u.capture(e,t);z&&v.length<20&&v.push({error:S(e),context:h(t)})}catch{}}function ne(e){k.add(e)}function oe(e,t={}){u==null||u.breadcrumbs.add(e,t)}function ae(e){e.sessionId&&(b.has(e.sessionId)||(b.size>=32&&b.delete(b.keys().next().value),b.set(e.sessionId,crypto.randomUUID())),e={...e,session:b.get(e.sessionId)}),y=h({...y,...e}),u==null||u.setState(y)}function Q(){$||($=!0,P=new URL(location.href).searchParams.get("sentry_release_probe")==="1",window.addEventListener("error",e=>{e instanceof ErrorEvent?_(e.error??new Error(e.message),{stage:"global"}):(e.target instanceof HTMLScriptElement||e.target instanceof HTMLLinkElement)&&_(new Error("Application resource failed to load"),{stage:"resource"})},!0),window.addEventListener("unhandledrejection",e=>_(e.reason,{stage:"unhandled_rejection"})),G())}async function G(){var e;try{const t=W();if(!t)return;const i=await fetch("/api/telemetry/config",{headers:{Authorization:`Bearer ${t}`},signal:AbortSignal.timeout(1e3)});if(!i.ok)return;const r=await i.json();if(!r.enabled||!r.dsn)return;const{createBrowserReporter:s}=await A(async()=>{const{createBrowserReporter:a}=await import("./telemetry-client-BUyFe34_.js");return{createBrowserReporter:a}},[]);u=s({...r,buildId:J,release:H});const n=((e=navigator.userAgent.match(/(?:Firefox|Edg|Chrome|Version)\/[\d.]+/))==null?void 0:e[0])??"unknown";u.setState({...y,browser:n,platform:navigator.platform}),y={...y,browser:n,platform:navigator.platform};for(const a of v)u.capture(a.error,a.context);r.environment==="sentry-verification"&&P&&u.capture(new Error("Sentry browser release verification"),{stage:"release_verification",code:"sentry_release_probe"})}catch{}finally{v=[],z=!1}}Q();A(()=>import("./app-B2Ac56ic.js").then(e=>e.a),[]).catch(e=>_(e,{stage:"startup"}));export{ie as E,A as _,ee as a,oe as b,W as c,re as d,se as e,ne as i,te as o,Y as p,_ as r,ae as s};
|