diff --git a/.agents/skills/dsh-dev/SKILL.md b/.agents/skills/dsh-dev/SKILL.md index 8dcf0b25c..7e05da1ac 100644 --- a/.agents/skills/dsh-dev/SKILL.md +++ b/.agents/skills/dsh-dev/SKILL.md @@ -364,3 +364,15 @@ lock, disables scripts and preserves the native `ui-theme` row and preference Pa app closed until setup returns. Refuse other owners, a busy Profile, an unsupported app version or a running target; do not edit ASARs, silently replay uncertain writes or relabel failed native-manager attempts as installation proof. Reopen the same Profile/user-data for acceptance. + +### Desktop plugin-event stream churn (#2269) + +On the actual 0.2.1-rc.2 Desktop, a passive Network observer recorded `/plugins/events` +returning HTTP 200 plus a graph frame, failing with `net::ERR_FAILED` after about 301 seconds, +and reconnecting three seconds later with HTTP 200 and a fresh graph. The shipped Desktop +forwards this scheme route through Node fetch; the shipped HMR Client uses EventSource. +This identifies native plugin-event transport churn and observed recovery, not the exact +underlying timeout source. Do not report that cohort as console-error-free, infer webview +painting from the stream, or add guest reload/recreation to conceal it. Preserve the full +request/failure/reconnect sequence without auth data and distinguish a page exception or +failed reconnection from this measured sequence. diff --git a/.agents/skills/dsh-ui/SKILL.md b/.agents/skills/dsh-ui/SKILL.md index 66fff0b16..3efcf6fe2 100644 --- a/.agents/skills/dsh-ui/SKILL.md +++ b/.agents/skills/dsh-ui/SKILL.md @@ -26,7 +26,7 @@ The in-harness UI is part of the shell, not a standalone app (ADR-0028): style w - **Baseline externals only** in the client bundle; adding one updates the bundle contract test in the same commit. - **Modes unwind**: shadows and listeners reconcile from a single store and dispose cleanly. -- **Pointer menus have one positioning owner**: use `ds/PointerMenu` for every application right-click menu. Pass unmodified `clientX/clientY`; never add feature-local offsets or construct a coordinate proxy anchor. See the coordinate contract in `references/native-contract.md`. Native anchored dropdowns continue to use `Menu`, except the qualified compact Settings picker under whole-window zoom; its owning-Modal container contract is recorded in the native-contract reference. +- **Pointer menus have one positioning owner**: use `ds/PointerMenu` for every application right-click menu. Pass unmodified `clientX/clientY`; never add feature-local offsets or construct a coordinate proxy anchor. See the coordinate contract in `references/native-contract.md`. Native anchored dropdowns continue to use `Menu`, except the measured compact Settings picker and shared `ds/Select` under whole-window zoom; its owning-Modal container contract is recorded in the native-contract reference. ## Reference diff --git a/.agents/skills/dsh-ui/references/native-contract.md b/.agents/skills/dsh-ui/references/native-contract.md index 631dfc5bc..658c82898 100644 --- a/.agents/skills/dsh-ui/references/native-contract.md +++ b/.agents/skills/dsh-ui/references/native-contract.md @@ -62,7 +62,7 @@ Use the Puppeteer install from `node_modules/.pnpm/puppeteer@*/node_modules/pupp ## Pointer-anchored context menus -Application-defined context menus use `packages/client/src/client/ds/pointer-menu.tsx`. A mouse caller supplies raw viewport `clientX/clientY`; a keyboard caller supplies the trigger's `getBoundingClientRect()` left/bottom. Do not use page/offset coordinates, feature-local nudges, or a transformed panel as a positioning container. Ordinary button-anchored dropdowns keep the native `Menu`. +Application-defined context menus use `packages/client/src/client/ds/pointer-menu.tsx`. A mouse caller supplies raw viewport `clientX/clientY`; a keyboard caller supplies the trigger's `getBoundingClientRect()` left/bottom. Do not use page/offset coordinates, feature-local nudges, or a transformed panel as a positioning container. Ordinary button-anchored dropdowns keep the native `Menu`, except the measured shared `ds/Select` contract below. `PointerMenu` portals to `document.body`, measures its rendered coordinate scale and the actual native menu rectangle, and positions the menu at the requested viewport point. It alone owns window-edge clamping, native traffic-light clearance, available menu size and resize/scroll repositioning. A menu moves away from the pointer only to remain inside the safe viewport; native scrolling and submenu behavior remain intact. This keeps panel transforms, clipping ancestors and CSS zoom out of feature code. @@ -85,3 +85,44 @@ Only the shared Panel title button (`data-panel-hide`, icon + label) is a Panel Verified against Dockview 8.4.1 and the shipped DSH 0.2.1-rc.2 frontend: Dockview adds a draggable, focusable `role=tab` wrapper outside our React header. A drag starting on that wrapper never traverses the inner header's capture handler. Reject non-title header drag starts at the outer Dock capture boundary, before Dockview's native listener. Regression tests must dispatch on the real `.dv-tab` and `.dv-tabs-and-actions-container` as well as the inner header, and separately prove title drags remain allowed. DSH marks `[tabindex]` and `[role=tab]` as native `no-drag` regions. On macOS, explicitly restore `drag` on these Dock header wrappers while keeping title, context, tabs and actions `no-drag`. A passing DOM drag test does not prove native window movement: check both blank-header window displacement and title-only Panel drops in a non-fullscreen Desktop. + +### Shared Select under whole-window zoom + +The shared `ds/Select` also uses `PointerMenu` after the native body-portaled menu was measured +outside the viewport at 144% and 430%, and detached from its trigger below 100%. Its trigger +supplies the measured left/bottom or right/bottom anchor, and the menu owner applies start/end +alignment, native frame clearance and viewport clamping. The owning dialog is the portal +container so native Modal keyboard ownership still applies. Zoom/style, resize and scroll +changes update the anchor; closing restores focus only if the next action did not move it. +Native Menu still owns option rendering, composition guards and keyboard traversal. Other +button-anchored native Menu callers are unchanged and require their own qualification. + +The coordinate owner uses CSSOM `currentCSSZoom` when available, with its existing rendered +probe fallback. A 1px probe is quantized at small zoom factors and cannot reliably convert a +long viewport distance in one placement. The qualified Desktop exposes `currentCSSZoom`; +[CSSOM View](https://www.w3.org/TR/cssom-view/#dom-element-currentcsszoom) defines it as the +effective CSS zoom. Available width also caps the native minimum so a choice menu can fit a +small viewport. This changes popup geometry, not the owning Panel's minimum constraints. + +Run `node scripts/check-select-zoom.mjs --output ` for the real production +Select/SettingsDialog/PointerMenu and unmodified reachable native Menu/Modal code and CSS. +The isolated source fixture covers all 17 levels, start/end alignment, page/dialog placement, +two viewport sizes, keyboard selection, menu-only Escape, focus return, outside clicks and +zoom changes while open. `--baseline ` runs the old Select and must fail on the reported +coordinate bug. It does not qualify a running DSH Host, native window controls or guest painting; +macOS acceptance remains a separate #2269 check. + +### Native Tooltip under qualified desktop zoom + +The 0.2.1-rc.2 native Tooltip also writes viewport anchor coordinates into a zoomed fixed +position element. At 144%, the Home name tooltip was measured around x907 while its button +was at x659–705. The downstream zoom lease owns the conversion for the pinned +`role=tooltip` / `data-side` / `data-align` contract. It records the focus/hover trigger, +measures the actual bubble, fits its screen rectangle and converts only the corrective +translation through `currentCSSZoom`; native visibility, delays, keycaps, dismissal and +composition remain native. It restores its translation/width lease on disposal and does not +run in ordinary browsers or unsupported desktop compositions. An existing independent +translation is not taken over. Source checks include all 17 levels, three sides, two alignments, +two viewport sizes and retained pinned bubbles while zoom changes. Native window +pixels remain a separate acceptance check; programmatic/unmapped third-party tooltip +triggers are not qualified by these representative button paths. diff --git a/.agents/skills/verify-deepseekbot/features/desktop-window-zoom.md b/.agents/skills/verify-deepseekbot/features/desktop-window-zoom.md index a621535ea..d3c4eb280 100644 --- a/.agents/skills/verify-deepseekbot/features/desktop-window-zoom.md +++ b/.agents/skills/verify-deepseekbot/features/desktop-window-zoom.md @@ -110,3 +110,16 @@ The opt-in installer therefore uses the explicitly selected app's bundled pnpm w is closed, under the native Profile writer lock. Verify refusal while running, then closed-app enable, native cold boot, closed-app disable and unchanged `ui-theme` values. Do not replace this qualification with a headless Profile or the failed native installation attempt. + + +## Native Tooltip placement + +At144%, focus the Home name button through Tab/Shift+Tab: its tooltip must be adjacent to +the button and remain within the viewport. Repeat after a zoom action and retain the original +composer draft. `node scripts/check-select-zoom.mjs --output ` covers the shipped +Tooltip code and CSS through all17 levels, three sides, two alignments and two viewport sizes, +plus pinned bubbles during live zoom changes. `--tooltip-baseline 1` excludes the downstream +adapter and must fail the coordinate regression. Source fixtures are separate from actual +native pixels and never qualify guest painting. The adapter is owned by the qualified zoom +lease and restores its styles/listeners on disposal; ordinary browsers and unknown Desktop +versions do not acquire it. diff --git a/.github/pr-screenshots/2269-choice-menus/README.md b/.github/pr-screenshots/2269-choice-menus/README.md new file mode 100644 index 000000000..ac7ac5fd1 --- /dev/null +++ b/.github/pr-screenshots/2269-choice-menus/README.md @@ -0,0 +1,109 @@ +# Shared Select zoom regression + +Source commit: `f12c5e658a79655090d9e0d3b08fc880b4a86012`. Both images use the same 1261×820 viewport, 144% CSS zoom and synthetic fixture state. They show the production Select/SettingsDialog/PointerMenu and unmodified reachable DSH Menu/Modal code and CSS. This is an isolated source-component fixture, not a running DSH/native-window screenshot. + +- Before: the native body-portaled choice menu is outside the viewport. +- After: the menu is aligned with the trigger inside its owning Settings Modal. +- Baseline: 132/136 cases fail across 17 levels, two viewport sizes, start/end alignment and page/dialog containers. +- Fix: 136/136 pass with no page errors. Keyboard selection, menu-only Escape, focus return, toggle/outside dismissal, retained draft/menu identity and open-menu zoom changes are also asserted. +- 2035 Client tests pass (one existing skipped test); 29 related tests, lint, formatting, root/mobile types and a production Client build to a separate temporary output pass. + +Run `node scripts/check-select-zoom.mjs --output `; add `--baseline e17154081` to reproduce the failure and `--screenshots ` for the matched images. The fixture blocks requests outside its own loopback origin and uses no Host, credentials, user wallpaper, messages or guest browser. + +## Native follow-up — 2026-10-19 + +The [native menu probe](native-menu-probe.json) records actual installed Desktop checks at +144%, 23% and 430%. At maximum zoom, keyboard focus scrolls the recovery button into view; +the default picker stays inside the viewport and can select the minimum level. These three +captures are actual Desktop output from the .12 artifact, with its version stated explicitly. +They are additional evidence, not a relabeling of the source fixture before/after pair. + +![Native Settings at 144%](native-settings-144.png) +![Native recovery reachable at 430%](native-settings-430-recovery.png) +![Native default menu at 430%](native-settings-430-menu.png) + +The final .14 artifact passed closed-app enable/restart, original font preservation, A→B→A +local Host switch and exact-target CLI read/set/reset. The Human accepted final wallpaper, +header/corner, panels and zoom Settings in native windowed/fullscreen modes. Real IME was +explicitly accepted earlier in this task. Current full Client regression passes 2035 tests +with one existing skip; Browser 407/8skip and Computer/selected workspace 234/3skip passed. + +The first .14 embedded automation attempt did not establish guest focus: a nested AX click left the real +parent focus on Bot Settings, so its root zoom event is excluded from webview proof. The +fixture was disposed, and prior Human guest foreground/once-only records retain their own +scope. The later foreground follow-up below supersedes that guest-focus gap. #2269 remains open for its other required gates. +No new PR has been merged or released. + +## Final-package focused embedded and popup follow-up + +The Human foregrounded the same existing Desktop. The [final native embedding record](final-native-embedding.json) +now establishes real guest input focus, same guest identity/navigation/input, one minus and +one plus whole-window action, and unchanged guest-native zoom. Focused same-origin and +cross-origin iframes plus the main input were also driven through CUA native keys, with +per-document readback. Equal delivery may include Shift; it is not relabeled physical plain Equal. + +The earlier failed nested-AX attempt is retained above. The new accepted guest rows explicitly +have parent WEBVIEW focus and guest `hasFocus=true`. The task fixture was removed through its +owned release, leaving the same formal window at144%. No production guest recovery hack exists. + +Final .14 Browser/Computer target menus and Home context-menu screenshots additionally show +correct viewport placement and native Escape/focus return. No target, permission or message was changed. + +![Final installed Desktop embedded rulers](final-embedded-focus.png) +![Final Browser settings menu](final-browser-menu-144.png) +![Final Computer settings menu](final-computer-menu-144.png) +![Final Panel context menu](final-panel-menu-144.png) + +Further .14 follow-up established native Cmd+H hide/restore at unchanged geometry, guest identity, URL, input and internal zoom. The complete-window capture is linked below. Native Minimize actions still did not establish hidden state. +Tool Minimize actions did not establish hidden state, so they are not counted as a pass. The +late console cohort has native `/plugins/events` network failures; no whole-cohort +error-free claim is made. #2269 remains open, and prior Human webview-restoration proof keeps +its original scope. Windows/Linux remain deferred. + +![Final .14 fixed-geometry hide/restore](final-hide-restore-144.png) + +A passive native Network observer captured `/plugins/events` HTTP200 + graph, failure after +301.1s, and automatic HTTP200 + full-graph recovery three seconds later. This attributes the +route and observes recovery; the underlying timeout source is not confirmed. No guest reload +or renderer restart was used. + +The native Tooltip check found a distinct geometry regression: at144%, the Home-name tooltip +was nearx907 while its trigger was atx659–705. The downstream pinned zoom lease now fits native +bubble geometry without replacing its visibility, delay, keycap or dismissal owner. The +expanded source fixture passes136 Select cases and204 Tooltip cases;36 additional zoom +changes preserve an already-pinned bubble. Final updated-package Tooltip pixels remain a +separate acceptance gate. Earlier .14 native proof remains versioned as .14. + +## Final updated package — .16 + +The [versioned final record](final-native-16.json) adds actual corrected Tooltip pixels at144% +and120%, plus Human/native hidden-created, hidden-resized webview recovery after ordinary +minimize/restore. The recorded hidden and restored viewport is1261×820 at144%. Both initial +navigation-ready events occurred while hidden; the full-window native image after restore +shows the guest ruler and input. The fixture was released afterward. The .14 id-preserving +hide/restore and focus rows above remain separate evidence, not relabeled .16 results. + +![Actual native Tooltip after the fix](native-tooltip-after-144.png) +![Final .16 hidden-created webview restored](final-hidden-created-restored-16.png) + +Current source:2037 Client tests pass,1 existing skip. The earlier avatar-editor timeout is +retained and the full rerun passed. Select136/136, Tooltip204/204 and36 retained pinned-bubble +zoom changes pass; unadapted native Tooltip fails192/204 cases. The complete +[source Tooltip matrix](tooltip-source-matrix.json) is separate from native pixels. + +The original broad native/input, installer and Host-switch records retain their version and +scope. macOS Human/native behavior qualification covers these representative supported paths. +Default reset and numberpad bindings have not shipped: the pinned native protocol rejects +numberpad codes, and reset remains Settings/CLI/custom-bindable without a default. This +outstanding original requirement is tracked explicitly in #2318; it has not been waived or +counted as passing S2 acceptance. #2299 closes only the bounded #2269 delivery after review +and merge. The separate mobile Expo-doctor failure is fixed on main by merged #2319, +which superseded the closed dependency PR #2317 for #2314. Fresh CI for the updated stack +remains a separate gate. +Unknown app versions, arbitrary third-party pages and Windows/Linux remain outside this +qualification. + +The review follow-up restores the native tooltip's original `data-side` together with its +translation and maximum width on disposal. A source regression forces a bottom-to-top flip +and verifies restoration plus observer shutdown. Existing .16 native screenshots predate +this cleanup-only change and are not relabeled as a new native run. diff --git a/.github/pr-screenshots/2269-choice-menus/after.png b/.github/pr-screenshots/2269-choice-menus/after.png new file mode 100644 index 000000000..ec07f0e19 Binary files /dev/null and b/.github/pr-screenshots/2269-choice-menus/after.png differ diff --git a/.github/pr-screenshots/2269-choice-menus/baseline-matrix.json b/.github/pr-screenshots/2269-choice-menus/baseline-matrix.json new file mode 100644 index 000000000..2155fa2fc --- /dev/null +++ b/.github/pr-screenshots/2269-choice-menus/baseline-matrix.json @@ -0,0 +1,4646 @@ +{ + "scope": "Isolated Chromium source-component regression using the production Select/SettingsDialog/PointerMenu and unmodified reachable native Menu/Modal code and CSS. No production Host, native OS chrome or embedded guest is exercised.", + "baseline": "e17154081", + "nativeSha256": "333ea89e7518ec1f1d33111bb9c65d382454bcc3638ebac7116253c92fe5d566", + "rows": [ + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": -8, + "anchor": { + "x": 1240.859375, + "y": 18.671875, + "width": 14.5625, + "height": 6.5, + "top": 18.671875, + "right": 1255.421875, + "bottom": 25.171875, + "left": 1240.859375 + }, + "menu": { + "x": 256.984375, + "y": 13.953125, + "width": 33.484375, + "height": 25.5625, + "top": 13.953125, + "right": 290.46875, + "bottom": 39.515625, + "left": 256.984375 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": -7, + "anchor": { + "x": 1236.84375, + "y": 22.3125, + "width": 17.46875, + "height": 7.8125, + "top": 22.3125, + "right": 1254.3125, + "bottom": 30.125, + "left": 1236.84375 + }, + "menu": { + "x": 308.375, + "y": 16.734375, + "width": 40.1875, + "height": 30.671875, + "top": 16.734375, + "right": 348.5625, + "bottom": 47.40625, + "left": 308.375 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": -6, + "anchor": { + "x": 1231.984375, + "y": 26.78125, + "width": 20.984375, + "height": 9.375, + "top": 26.78125, + "right": 1252.96875, + "bottom": 36.15625, + "left": 1231.984375 + }, + "menu": { + "x": 370.046875, + "y": 20.09375, + "width": 48.21875, + "height": 36.78125, + "top": 20.09375, + "right": 418.265625, + "bottom": 56.875, + "left": 370.046875 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": -5, + "anchor": { + "x": 1226.1875, + "y": 32.140625, + "width": 25.171875, + "height": 11.25, + "top": 32.140625, + "right": 1251.359375, + "bottom": 43.390625, + "left": 1226.1875 + }, + "menu": { + "x": 444.0625, + "y": 24.109375, + "width": 57.859375, + "height": 44.15625, + "top": 24.109375, + "right": 501.921875, + "bottom": 68.265625, + "left": 444.0625 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": -4, + "anchor": { + "x": 1219.21875, + "y": 38.578125, + "width": 30.21875, + "height": 13.5, + "top": 38.578125, + "right": 1249.4375, + "bottom": 52.078125, + "left": 1219.21875 + }, + "menu": { + "x": 532.875, + "y": 28.921875, + "width": 69.4375, + "height": 53.015625, + "top": 28.921875, + "right": 602.3125, + "bottom": 81.9375, + "left": 532.875 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": -3, + "anchor": { + "x": 1210.828125, + "y": 46.28125, + "width": 36.296875, + "height": 16.203125, + "top": 46.28125, + "right": 1247.125, + "bottom": 62.484375, + "left": 1210.828125 + }, + "menu": { + "x": 639.453125, + "y": 38.46875, + "width": 83.328125, + "height": 63.640625, + "top": 38.46875, + "right": 722.78125, + "bottom": 102.109375, + "left": 639.453125 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": -2, + "anchor": { + "x": 1200.796875, + "y": 55.546875, + "width": 43.546875, + "height": 19.4375, + "top": 55.546875, + "right": 1244.34375, + "bottom": 74.984375, + "left": 1200.796875 + }, + "menu": { + "x": 767.359375, + "y": 54.84375, + "width": 100, + "height": 76.359375, + "top": 54.84375, + "right": 867.359375, + "bottom": 131.203125, + "left": 767.359375 + }, + "within": true, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": -1, + "anchor": { + "x": 1188.71875, + "y": 66.65625, + "width": 52.28125, + "height": 23.328125, + "top": 66.65625, + "right": 1241, + "bottom": 89.984375, + "left": 1188.71875 + }, + "menu": { + "x": 920.828125, + "y": 78.3125, + "width": 120, + "height": 91.640625, + "top": 78.3125, + "right": 1040.828125, + "bottom": 169.953125, + "left": 920.828125 + }, + "within": true, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": 0, + "anchor": { + "x": 1174.234375, + "y": 80, + "width": 62.765625, + "height": 28, + "top": 80, + "right": 1237, + "bottom": 108, + "left": 1174.234375 + }, + "menu": { + "x": 1105, + "y": 112, + "width": 144, + "height": 110, + "top": 112, + "right": 1249, + "bottom": 222, + "left": 1105 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": 1, + "anchor": { + "x": 1156.921875, + "y": 96, + "width": 75.28125, + "height": 33.59375, + "top": 96, + "right": 1232.203125, + "bottom": 129.59375, + "left": 1156.921875 + }, + "menu": { + "x": 1326, + "y": 160.3125, + "width": 172.796875, + "height": 131.984375, + "top": 160.3125, + "right": 1498.796875, + "bottom": 292.296875, + "left": 1326 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": 2, + "anchor": { + "x": 1136.125, + "y": 115.1875, + "width": 90.328125, + "height": 40.3125, + "top": 115.1875, + "right": 1226.453125, + "bottom": 155.5, + "left": 1136.125 + }, + "menu": { + "x": 1591.1875, + "y": 229.671875, + "width": 207.359375, + "height": 158.359375, + "top": 229.671875, + "right": 1798.546875, + "bottom": 388.03125, + "left": 1591.1875 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": 3, + "anchor": { + "x": 1111.109375, + "y": 138.234375, + "width": 108.421875, + "height": 48.375, + "top": 138.234375, + "right": 1219.53125, + "bottom": 186.609375, + "left": 1111.109375 + }, + "menu": { + "x": 1909.4375, + "y": 329.359375, + "width": 248.828125, + "height": 190.0625, + "top": 329.359375, + "right": 2158.265625, + "bottom": 519.421875, + "left": 1909.4375 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": 4, + "anchor": { + "x": 1081.15625, + "y": 165.875, + "width": 130.078125, + "height": 58.046875, + "top": 165.875, + "right": 1211.234375, + "bottom": 223.921875, + "left": 1081.15625 + }, + "menu": { + "x": 2241.875, + "y": 472.609375, + "width": 298.59375, + "height": 228.0625, + "top": 472.609375, + "right": 2540.46875, + "bottom": 700.671875, + "left": 2241.875 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": 5, + "anchor": { + "x": 1045.140625, + "y": 199.0625, + "width": 156.140625, + "height": 69.671875, + "top": 199.0625, + "right": 1201.28125, + "bottom": 268.734375, + "left": 1045.140625 + }, + "menu": { + "x": 2600.640625, + "y": 678.640625, + "width": 358.3125, + "height": 273.6875, + "top": 678.640625, + "right": 2958.953125, + "bottom": 952.328125, + "left": 2600.640625 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": 6, + "anchor": { + "x": 1002, + "y": 238.875, + "width": 187.34375, + "height": 83.59375, + "top": 238.875, + "right": 1189.34375, + "bottom": 322.46875, + "left": 1002 + }, + "menu": { + "x": 2991.953125, + "y": 974.828125, + "width": 429.96875, + "height": 328.421875, + "top": 974.828125, + "right": 3421.921875, + "bottom": 1303.25, + "left": 2991.953125 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": 7, + "anchor": { + "x": 950.1875, + "y": 286.640625, + "width": 224.828125, + "height": 100.328125, + "top": 286.640625, + "right": 1175.015625, + "bottom": 386.96875, + "left": 950.1875 + }, + "menu": { + "x": 3404.6875, + "y": 1400.90625, + "width": 515.96875, + "height": 394.140625, + "top": 1400.90625, + "right": 3920.65625, + "bottom": 1795.046875, + "left": 3404.6875 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": 8, + "anchor": { + "x": 888.015625, + "y": 343.984375, + "width": 269.796875, + "height": 120.390625, + "top": 343.984375, + "right": 1157.8125, + "bottom": 464.375, + "left": 888.015625 + }, + "menu": { + "x": 3818.296875, + "y": 2013.921875, + "width": 619.171875, + "height": 472.9375, + "top": 2013.921875, + "right": 4437.46875, + "bottom": 2486.859375, + "left": 3818.296875 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": -8, + "anchor": { + "x": 1240.859375, + "y": 18.671875, + "width": 14.5625, + "height": 6.5, + "top": 18.671875, + "right": 1255.421875, + "bottom": 25.171875, + "left": 1240.859375 + }, + "menu": { + "x": 256.984375, + "y": 13.953125, + "width": 33.484375, + "height": 25.5625, + "top": 13.953125, + "right": 290.46875, + "bottom": 39.515625, + "left": 256.984375 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": -7, + "anchor": { + "x": 1236.84375, + "y": 22.3125, + "width": 17.46875, + "height": 7.8125, + "top": 22.3125, + "right": 1254.3125, + "bottom": 30.125, + "left": 1236.84375 + }, + "menu": { + "x": 308.375, + "y": 16.734375, + "width": 40.1875, + "height": 30.671875, + "top": 16.734375, + "right": 348.5625, + "bottom": 47.40625, + "left": 308.375 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": -6, + "anchor": { + "x": 1231.984375, + "y": 26.78125, + "width": 20.984375, + "height": 9.375, + "top": 26.78125, + "right": 1252.96875, + "bottom": 36.15625, + "left": 1231.984375 + }, + "menu": { + "x": 370.046875, + "y": 20.09375, + "width": 48.21875, + "height": 36.78125, + "top": 20.09375, + "right": 418.265625, + "bottom": 56.875, + "left": 370.046875 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": -5, + "anchor": { + "x": 1226.1875, + "y": 32.140625, + "width": 25.171875, + "height": 11.25, + "top": 32.140625, + "right": 1251.359375, + "bottom": 43.390625, + "left": 1226.1875 + }, + "menu": { + "x": 444.0625, + "y": 24.109375, + "width": 57.859375, + "height": 44.15625, + "top": 24.109375, + "right": 501.921875, + "bottom": 68.265625, + "left": 444.0625 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": -4, + "anchor": { + "x": 1219.21875, + "y": 38.578125, + "width": 30.21875, + "height": 13.5, + "top": 38.578125, + "right": 1249.4375, + "bottom": 52.078125, + "left": 1219.21875 + }, + "menu": { + "x": 532.875, + "y": 28.921875, + "width": 69.4375, + "height": 53.015625, + "top": 28.921875, + "right": 602.3125, + "bottom": 81.9375, + "left": 532.875 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": -3, + "anchor": { + "x": 1210.828125, + "y": 46.28125, + "width": 36.296875, + "height": 16.203125, + "top": 46.28125, + "right": 1247.125, + "bottom": 62.484375, + "left": 1210.828125 + }, + "menu": { + "x": 638.375, + "y": 38.46875, + "width": 83.328125, + "height": 63.640625, + "top": 38.46875, + "right": 721.703125, + "bottom": 102.109375, + "left": 638.375 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": -2, + "anchor": { + "x": 1200.796875, + "y": 55.546875, + "width": 43.546875, + "height": 19.4375, + "top": 55.546875, + "right": 1244.34375, + "bottom": 74.984375, + "left": 1200.796875 + }, + "menu": { + "x": 764.125, + "y": 54.84375, + "width": 100, + "height": 76.359375, + "top": 54.84375, + "right": 864.125, + "bottom": 131.203125, + "left": 764.125 + }, + "within": true, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": -1, + "anchor": { + "x": 1188.71875, + "y": 66.65625, + "width": 52.28125, + "height": 23.328125, + "top": 66.65625, + "right": 1241, + "bottom": 89.984375, + "left": 1188.71875 + }, + "menu": { + "x": 914.15625, + "y": 78.3125, + "width": 120, + "height": 91.640625, + "top": 78.3125, + "right": 1034.15625, + "bottom": 169.953125, + "left": 914.15625 + }, + "within": true, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": 0, + "anchor": { + "x": 1174.234375, + "y": 80, + "width": 62.765625, + "height": 28, + "top": 80, + "right": 1237, + "bottom": 108, + "left": 1174.234375 + }, + "menu": { + "x": 1093, + "y": 112, + "width": 144, + "height": 110, + "top": 112, + "right": 1237, + "bottom": 222, + "left": 1093 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": 1, + "anchor": { + "x": 1156.921875, + "y": 96, + "width": 75.28125, + "height": 33.59375, + "top": 96, + "right": 1232.203125, + "bottom": 129.59375, + "left": 1156.921875 + }, + "menu": { + "x": 1305.84375, + "y": 160.3125, + "width": 172.796875, + "height": 131.984375, + "top": 160.3125, + "right": 1478.640625, + "bottom": 292.296875, + "left": 1305.84375 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": 2, + "anchor": { + "x": 1136.125, + "y": 115.1875, + "width": 90.328125, + "height": 40.3125, + "top": 115.1875, + "right": 1226.453125, + "bottom": 155.5, + "left": 1136.125 + }, + "menu": { + "x": 1558.71875, + "y": 229.671875, + "width": 207.359375, + "height": 158.359375, + "top": 229.671875, + "right": 1766.078125, + "bottom": 388.03125, + "left": 1558.71875 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": 3, + "anchor": { + "x": 1111.109375, + "y": 138.234375, + "width": 108.421875, + "height": 48.375, + "top": 138.234375, + "right": 1219.53125, + "bottom": 186.609375, + "left": 1111.109375 + }, + "menu": { + "x": 1858.515625, + "y": 329.359375, + "width": 248.828125, + "height": 190.0625, + "top": 329.359375, + "right": 2107.34375, + "bottom": 519.421875, + "left": 1858.515625 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": 4, + "anchor": { + "x": 1081.15625, + "y": 165.875, + "width": 130.078125, + "height": 58.046875, + "top": 165.875, + "right": 1211.234375, + "bottom": 223.921875, + "left": 1081.15625 + }, + "menu": { + "x": 2213.015625, + "y": 472.609375, + "width": 298.59375, + "height": 228.0625, + "top": 472.609375, + "right": 2511.609375, + "bottom": 700.671875, + "left": 2213.015625 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": 5, + "anchor": { + "x": 1045.140625, + "y": 199.0625, + "width": 156.140625, + "height": 69.671875, + "top": 199.0625, + "right": 1201.28125, + "bottom": 268.734375, + "left": 1045.140625 + }, + "menu": { + "x": 2630.84375, + "y": 678.640625, + "width": 358.3125, + "height": 273.6875, + "top": 678.640625, + "right": 2989.15625, + "bottom": 952.328125, + "left": 2630.84375 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": 6, + "anchor": { + "x": 1002, + "y": 238.875, + "width": 187.34375, + "height": 83.59375, + "top": 238.875, + "right": 1189.34375, + "bottom": 322.46875, + "left": 1002 + }, + "menu": { + "x": 3121.375, + "y": 974.828125, + "width": 429.96875, + "height": 328.421875, + "top": 974.828125, + "right": 3551.34375, + "bottom": 1303.25, + "left": 3121.375 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": 7, + "anchor": { + "x": 950.1875, + "y": 286.640625, + "width": 224.828125, + "height": 100.328125, + "top": 286.640625, + "right": 1175.015625, + "bottom": 386.96875, + "left": 950.1875 + }, + "menu": { + "x": 3694.3125, + "y": 1400.90625, + "width": 515.96875, + "height": 394.140625, + "top": 1400.90625, + "right": 4210.28125, + "bottom": 1795.046875, + "left": 3694.3125 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": 8, + "anchor": { + "x": 888.015625, + "y": 343.984375, + "width": 269.796875, + "height": 120.390625, + "top": 343.984375, + "right": 1157.8125, + "bottom": 464.375, + "left": 888.015625 + }, + "menu": { + "x": 4359.203125, + "y": 2013.921875, + "width": 619.171875, + "height": 472.9375, + "top": 2013.921875, + "right": 4978.375, + "bottom": 2486.859375, + "left": 4359.203125 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": -8, + "anchor": { + "x": 698.734375, + "y": 359.65625, + "width": 14.5625, + "height": 6.5, + "top": 359.65625, + "right": 713.296875, + "bottom": 366.15625, + "left": 698.734375 + }, + "menu": { + "x": 162.5, + "y": 86.078125, + "width": 33.484375, + "height": 25.5625, + "top": 86.078125, + "right": 195.984375, + "bottom": 111.640625, + "left": 162.5 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": -7, + "anchor": { + "x": 712.390625, + "y": 349.125, + "width": 17.46875, + "height": 7.8125, + "top": 349.125, + "right": 729.859375, + "bottom": 356.9375, + "left": 712.390625 + }, + "menu": { + "x": 198.8125, + "y": 100.71875, + "width": 40.1875, + "height": 30.671875, + "top": 100.71875, + "right": 239, + "bottom": 131.390625, + "left": 198.8125 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": -6, + "anchor": { + "x": 728.734375, + "y": 336.546875, + "width": 20.984375, + "height": 9.375, + "top": 336.546875, + "right": 749.71875, + "bottom": 345.921875, + "left": 728.734375 + }, + "menu": { + "x": 244.046875, + "y": 117.1875, + "width": 48.21875, + "height": 36.78125, + "top": 117.1875, + "right": 292.265625, + "bottom": 153.96875, + "left": 244.046875 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": -5, + "anchor": { + "x": 748.390625, + "y": 321.296875, + "width": 25.171875, + "height": 11.25, + "top": 321.296875, + "right": 773.5625, + "bottom": 332.546875, + "left": 748.390625 + }, + "menu": { + "x": 300.75, + "y": 135.25, + "width": 57.859375, + "height": 44.15625, + "top": 135.25, + "right": 358.609375, + "bottom": 179.40625, + "left": 300.75 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": -4, + "anchor": { + "x": 771.96875, + "y": 303.28125, + "width": 30.21875, + "height": 13.5, + "top": 303.28125, + "right": 802.1875, + "bottom": 316.78125, + "left": 771.96875 + }, + "menu": { + "x": 372.28125, + "y": 154.6875, + "width": 69.4375, + "height": 53.015625, + "top": 154.6875, + "right": 441.71875, + "bottom": 207.703125, + "left": 372.28125 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": -3, + "anchor": { + "x": 800.234375, + "y": 282.34375, + "width": 36.296875, + "height": 16.203125, + "top": 282.34375, + "right": 836.53125, + "bottom": 298.546875, + "left": 800.234375 + }, + "menu": { + "x": 463.09375, + "y": 175.078125, + "width": 83.328125, + "height": 63.640625, + "top": 175.078125, + "right": 546.421875, + "bottom": 238.71875, + "left": 463.09375 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": -2, + "anchor": { + "x": 834.171875, + "y": 256.515625, + "width": 43.546875, + "height": 19.4375, + "top": 256.515625, + "right": 877.71875, + "bottom": 275.953125, + "left": 834.171875 + }, + "menu": { + "x": 579.28125, + "y": 194.40625, + "width": 100, + "height": 76.359375, + "top": 194.40625, + "right": 679.28125, + "bottom": 270.765625, + "left": 579.28125 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": -1, + "anchor": { + "x": 874.875, + "y": 225.625, + "width": 52.28125, + "height": 23.328125, + "top": 225.625, + "right": 927.15625, + "bottom": 248.953125, + "left": 874.875 + }, + "menu": { + "x": 729.0625, + "y": 210.78125, + "width": 120, + "height": 91.640625, + "top": 210.78125, + "right": 849.0625, + "bottom": 302.421875, + "left": 729.0625 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": 0, + "anchor": { + "x": 923.734375, + "y": 189, + "width": 62.765625, + "height": 28, + "top": 189, + "right": 986.5, + "bottom": 217, + "left": 923.734375 + }, + "menu": { + "x": 923.734375, + "y": 221, + "width": 144, + "height": 110, + "top": 221, + "right": 1067.734375, + "bottom": 331, + "left": 923.734375 + }, + "within": true, + "aligned": true, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": 1, + "anchor": { + "x": 982.421875, + "y": 158.359375, + "width": 75.28125, + "height": 33.59375, + "top": 158.359375, + "right": 1057.703125, + "bottom": 191.953125, + "left": 982.421875 + }, + "menu": { + "x": 1178.90625, + "y": 235.140625, + "width": 172.796875, + "height": 131.984375, + "top": 235.140625, + "right": 1351.703125, + "bottom": 367.125, + "left": 1178.90625 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": 2, + "anchor": { + "x": 1052.8125, + "y": 181.84375, + "width": 90.328125, + "height": 40.3125, + "top": 181.84375, + "right": 1143.140625, + "bottom": 222.15625, + "left": 1052.8125 + }, + "menu": { + "x": 1516.046875, + "y": 325.65625, + "width": 207.359375, + "height": 158.359375, + "top": 325.65625, + "right": 1723.40625, + "bottom": 484.015625, + "left": 1516.046875 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": 3, + "anchor": { + "x": 1087.109375, + "y": 211, + "width": 108.421875, + "height": 48.375, + "top": 211, + "right": 1195.53125, + "bottom": 259.375, + "left": 1087.109375 + }, + "menu": { + "x": 1878.515625, + "y": 455.109375, + "width": 248.828125, + "height": 190.0625, + "top": 455.109375, + "right": 2127.34375, + "bottom": 645.171875, + "left": 1878.515625 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": 4, + "anchor": { + "x": 1073.75, + "y": 245.609375, + "width": 130.078125, + "height": 58.046875, + "top": 245.609375, + "right": 1203.828125, + "bottom": 303.65625, + "left": 1073.75 + }, + "menu": { + "x": 2226.515625, + "y": 637.953125, + "width": 298.59375, + "height": 228.0625, + "top": 637.953125, + "right": 2525.109375, + "bottom": 866.015625, + "left": 2226.515625 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": 5, + "anchor": { + "x": 1041.046875, + "y": 285.59375, + "width": 156.140625, + "height": 69.671875, + "top": 285.59375, + "right": 1197.1875, + "bottom": 355.265625, + "left": 1041.046875 + }, + "menu": { + "x": 2590.453125, + "y": 893.953125, + "width": 358.3125, + "height": 273.6875, + "top": 893.953125, + "right": 2948.765625, + "bottom": 1167.640625, + "left": 2590.453125 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": 6, + "anchor": { + "x": 1001.890625, + "y": 334.890625, + "width": 187.34375, + "height": 83.59375, + "top": 334.890625, + "right": 1189.234375, + "bottom": 418.484375, + "left": 1001.890625 + }, + "menu": { + "x": 2991.625, + "y": 1261.53125, + "width": 429.96875, + "height": 328.421875, + "top": 1261.53125, + "right": 3421.59375, + "bottom": 1589.953125, + "left": 2991.625 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": 7, + "anchor": { + "x": 954.84375, + "y": 394.875, + "width": 224.828125, + "height": 100.328125, + "top": 394.875, + "right": 1179.671875, + "bottom": 495.203125, + "left": 954.84375 + }, + "menu": { + "x": 3421.375, + "y": 1788.734375, + "width": 515.96875, + "height": 394.140625, + "top": 1788.734375, + "right": 3937.34375, + "bottom": 2182.875, + "left": 3421.375 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": 8, + "anchor": { + "x": 898.40625, + "y": 465.046875, + "width": 269.796875, + "height": 120.390625, + "top": 465.046875, + "right": 1168.203125, + "bottom": 585.4375, + "left": 898.40625 + }, + "menu": { + "x": 3862.96875, + "y": 2534.46875, + "width": 619.171875, + "height": 472.9375, + "top": 2534.46875, + "right": 4482.140625, + "bottom": 3007.40625, + "left": 3862.96875 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": -8, + "anchor": { + "x": 698.734375, + "y": 359.65625, + "width": 14.5625, + "height": 6.5, + "top": 359.65625, + "right": 713.296875, + "bottom": 366.15625, + "left": 698.734375 + }, + "menu": { + "x": 132.390625, + "y": 86.078125, + "width": 33.484375, + "height": 25.5625, + "top": 86.078125, + "right": 165.875, + "bottom": 111.640625, + "left": 132.390625 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": -7, + "anchor": { + "x": 712.390625, + "y": 349.125, + "width": 17.46875, + "height": 7.8125, + "top": 349.125, + "right": 729.859375, + "bottom": 356.9375, + "left": 712.390625 + }, + "menu": { + "x": 163.5, + "y": 100.71875, + "width": 40.1875, + "height": 30.671875, + "top": 100.71875, + "right": 203.6875, + "bottom": 131.390625, + "left": 163.5 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": -6, + "anchor": { + "x": 728.734375, + "y": 336.546875, + "width": 20.984375, + "height": 9.375, + "top": 336.546875, + "right": 749.71875, + "bottom": 345.921875, + "left": 728.734375 + }, + "menu": { + "x": 202.84375, + "y": 117.1875, + "width": 48.21875, + "height": 36.78125, + "top": 117.1875, + "right": 251.0625, + "bottom": 153.96875, + "left": 202.84375 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": -5, + "anchor": { + "x": 748.390625, + "y": 321.296875, + "width": 25.171875, + "height": 11.25, + "top": 321.296875, + "right": 773.5625, + "bottom": 332.546875, + "left": 748.390625 + }, + "menu": { + "x": 253, + "y": 135.25, + "width": 57.859375, + "height": 44.15625, + "top": 135.25, + "right": 310.859375, + "bottom": 179.40625, + "left": 253 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": -4, + "anchor": { + "x": 771.96875, + "y": 303.28125, + "width": 30.21875, + "height": 13.5, + "top": 303.28125, + "right": 802.1875, + "bottom": 316.78125, + "left": 771.96875 + }, + "menu": { + "x": 317.40625, + "y": 154.6875, + "width": 69.4375, + "height": 53.015625, + "top": 154.6875, + "right": 386.84375, + "bottom": 207.703125, + "left": 317.40625 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": -3, + "anchor": { + "x": 800.234375, + "y": 282.34375, + "width": 36.296875, + "height": 16.203125, + "top": 282.34375, + "right": 836.53125, + "bottom": 298.546875, + "left": 800.234375 + }, + "menu": { + "x": 400.765625, + "y": 175.078125, + "width": 83.328125, + "height": 63.640625, + "top": 175.078125, + "right": 484.09375, + "bottom": 238.71875, + "left": 400.765625 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": -2, + "anchor": { + "x": 834.171875, + "y": 256.515625, + "width": 43.546875, + "height": 19.4375, + "top": 256.515625, + "right": 877.71875, + "bottom": 275.953125, + "left": 834.171875 + }, + "menu": { + "x": 509.515625, + "y": 194.40625, + "width": 100, + "height": 76.359375, + "top": 194.40625, + "right": 609.515625, + "bottom": 270.765625, + "left": 509.515625 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": -1, + "anchor": { + "x": 874.875, + "y": 225.625, + "width": 52.28125, + "height": 23.328125, + "top": 225.625, + "right": 927.15625, + "bottom": 248.953125, + "left": 874.875 + }, + "menu": { + "x": 652.625, + "y": 210.78125, + "width": 120, + "height": 91.640625, + "top": 210.78125, + "right": 772.625, + "bottom": 302.421875, + "left": 652.625 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": 0, + "anchor": { + "x": 923.734375, + "y": 189, + "width": 62.765625, + "height": 28, + "top": 189, + "right": 986.5, + "bottom": 217, + "left": 923.734375 + }, + "menu": { + "x": 842.5, + "y": 221, + "width": 144, + "height": 110, + "top": 221, + "right": 986.5, + "bottom": 331, + "left": 842.5 + }, + "within": true, + "aligned": true, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": 1, + "anchor": { + "x": 982.421875, + "y": 158.359375, + "width": 75.28125, + "height": 33.59375, + "top": 158.359375, + "right": 1057.703125, + "bottom": 191.953125, + "left": 982.421875 + }, + "menu": { + "x": 1096.4375, + "y": 235.140625, + "width": 172.796875, + "height": 131.984375, + "top": 235.140625, + "right": 1269.234375, + "bottom": 367.125, + "left": 1096.4375 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": 2, + "anchor": { + "x": 1052.8125, + "y": 181.84375, + "width": 90.328125, + "height": 40.3125, + "top": 181.84375, + "right": 1143.140625, + "bottom": 222.15625, + "left": 1052.8125 + }, + "menu": { + "x": 1438.75, + "y": 325.65625, + "width": 207.359375, + "height": 158.359375, + "top": 325.65625, + "right": 1646.109375, + "bottom": 484.015625, + "left": 1438.75 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": 3, + "anchor": { + "x": 1087.109375, + "y": 211, + "width": 108.421875, + "height": 48.375, + "top": 211, + "right": 1195.53125, + "bottom": 259.375, + "left": 1087.109375 + }, + "menu": { + "x": 1817.03125, + "y": 455.109375, + "width": 248.828125, + "height": 190.0625, + "top": 455.109375, + "right": 2065.859375, + "bottom": 645.171875, + "left": 1817.03125 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": 4, + "anchor": { + "x": 1073.75, + "y": 245.609375, + "width": 130.078125, + "height": 58.046875, + "top": 245.609375, + "right": 1203.828125, + "bottom": 303.65625, + "left": 1073.75 + }, + "menu": { + "x": 2197.65625, + "y": 637.953125, + "width": 298.59375, + "height": 228.0625, + "top": 637.953125, + "right": 2496.25, + "bottom": 866.015625, + "left": 2197.65625 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": 5, + "anchor": { + "x": 1041.046875, + "y": 285.59375, + "width": 156.140625, + "height": 69.671875, + "top": 285.59375, + "right": 1197.1875, + "bottom": 355.265625, + "left": 1041.046875 + }, + "menu": { + "x": 2620.65625, + "y": 893.953125, + "width": 358.3125, + "height": 273.6875, + "top": 893.953125, + "right": 2978.96875, + "bottom": 1167.640625, + "left": 2620.65625 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": 6, + "anchor": { + "x": 1001.890625, + "y": 334.890625, + "width": 187.34375, + "height": 83.59375, + "top": 334.890625, + "right": 1189.234375, + "bottom": 418.484375, + "left": 1001.890625 + }, + "menu": { + "x": 3121.046875, + "y": 1261.53125, + "width": 429.96875, + "height": 328.421875, + "top": 1261.53125, + "right": 3551.015625, + "bottom": 1589.953125, + "left": 3121.046875 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": 7, + "anchor": { + "x": 954.84375, + "y": 394.875, + "width": 224.828125, + "height": 100.328125, + "top": 394.875, + "right": 1179.671875, + "bottom": 495.203125, + "left": 954.84375 + }, + "menu": { + "x": 3710.984375, + "y": 1788.734375, + "width": 515.96875, + "height": 394.140625, + "top": 1788.734375, + "right": 4226.953125, + "bottom": 2182.875, + "left": 3710.984375 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": 8, + "anchor": { + "x": 898.40625, + "y": 465.046875, + "width": 269.796875, + "height": 120.390625, + "top": 465.046875, + "right": 1168.203125, + "bottom": 585.4375, + "left": 898.40625 + }, + "menu": { + "x": 4403.875, + "y": 2534.46875, + "width": 619.171875, + "height": 472.9375, + "top": 2534.46875, + "right": 5023.046875, + "bottom": 3007.40625, + "left": 4403.875 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": -8, + "anchor": { + "x": 779.859375, + "y": 18.671875, + "width": 14.5625, + "height": 6.5, + "top": 18.671875, + "right": 794.421875, + "bottom": 25.171875, + "left": 779.859375 + }, + "menu": { + "x": 149.765625, + "y": 13.953125, + "width": 33.484375, + "height": 25.5625, + "top": 13.953125, + "right": 183.25, + "bottom": 39.515625, + "left": 149.765625 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": -7, + "anchor": { + "x": 775.84375, + "y": 22.3125, + "width": 17.46875, + "height": 7.8125, + "top": 22.3125, + "right": 793.3125, + "bottom": 30.125, + "left": 775.84375 + }, + "menu": { + "x": 179.71875, + "y": 16.734375, + "width": 40.1875, + "height": 30.671875, + "top": 16.734375, + "right": 219.90625, + "bottom": 47.40625, + "left": 179.71875 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": -6, + "anchor": { + "x": 770.984375, + "y": 26.78125, + "width": 20.984375, + "height": 9.375, + "top": 26.78125, + "right": 791.96875, + "bottom": 36.15625, + "left": 770.984375 + }, + "menu": { + "x": 215.671875, + "y": 20.09375, + "width": 48.21875, + "height": 36.78125, + "top": 20.09375, + "right": 263.890625, + "bottom": 56.875, + "left": 215.671875 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": -5, + "anchor": { + "x": 765.1875, + "y": 32.140625, + "width": 25.171875, + "height": 11.25, + "top": 32.140625, + "right": 790.359375, + "bottom": 43.390625, + "left": 765.1875 + }, + "menu": { + "x": 258.796875, + "y": 24.109375, + "width": 57.859375, + "height": 44.15625, + "top": 24.109375, + "right": 316.65625, + "bottom": 68.265625, + "left": 258.796875 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": -4, + "anchor": { + "x": 758.21875, + "y": 38.578125, + "width": 30.21875, + "height": 13.5, + "top": 38.578125, + "right": 788.4375, + "bottom": 52.078125, + "left": 758.21875 + }, + "menu": { + "x": 310.5625, + "y": 28.921875, + "width": 69.4375, + "height": 53.015625, + "top": 28.921875, + "right": 380, + "bottom": 81.9375, + "left": 310.5625 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": -3, + "anchor": { + "x": 749.828125, + "y": 46.28125, + "width": 36.296875, + "height": 16.203125, + "top": 46.28125, + "right": 786.125, + "bottom": 62.484375, + "left": 749.828125 + }, + "menu": { + "x": 372.671875, + "y": 38.46875, + "width": 83.328125, + "height": 63.640625, + "top": 38.46875, + "right": 456, + "bottom": 102.109375, + "left": 372.671875 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": -2, + "anchor": { + "x": 739.796875, + "y": 55.546875, + "width": 43.546875, + "height": 19.4375, + "top": 55.546875, + "right": 783.34375, + "bottom": 74.984375, + "left": 739.796875 + }, + "menu": { + "x": 447.21875, + "y": 54.84375, + "width": 100, + "height": 76.359375, + "top": 54.84375, + "right": 547.21875, + "bottom": 131.203125, + "left": 447.21875 + }, + "within": true, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": -1, + "anchor": { + "x": 727.71875, + "y": 66.65625, + "width": 52.28125, + "height": 23.328125, + "top": 66.65625, + "right": 780, + "bottom": 89.984375, + "left": 727.71875 + }, + "menu": { + "x": 536.65625, + "y": 78.3125, + "width": 120, + "height": 91.640625, + "top": 78.3125, + "right": 656.65625, + "bottom": 169.953125, + "left": 536.65625 + }, + "within": true, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": 0, + "anchor": { + "x": 713.234375, + "y": 80, + "width": 62.765625, + "height": 28, + "top": 80, + "right": 776, + "bottom": 108, + "left": 713.234375 + }, + "menu": { + "x": 644, + "y": 112, + "width": 144, + "height": 110, + "top": 112, + "right": 788, + "bottom": 222, + "left": 644 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": 1, + "anchor": { + "x": 695.921875, + "y": 96, + "width": 75.28125, + "height": 33.59375, + "top": 96, + "right": 771.203125, + "bottom": 129.59375, + "left": 695.921875 + }, + "menu": { + "x": 772.796875, + "y": 160.3125, + "width": 172.796875, + "height": 131.984375, + "top": 160.3125, + "right": 945.59375, + "bottom": 292.296875, + "left": 772.796875 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": 2, + "anchor": { + "x": 675.125, + "y": 115.1875, + "width": 90.328125, + "height": 40.3125, + "top": 115.1875, + "right": 765.453125, + "bottom": 155.5, + "left": 675.125 + }, + "menu": { + "x": 927.359375, + "y": 229.671875, + "width": 207.359375, + "height": 158.359375, + "top": 229.671875, + "right": 1134.71875, + "bottom": 388.03125, + "left": 927.359375 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": 3, + "anchor": { + "x": 650.109375, + "y": 138.234375, + "width": 108.421875, + "height": 48.375, + "top": 138.234375, + "right": 758.53125, + "bottom": 186.609375, + "left": 650.109375 + }, + "menu": { + "x": 1112.828125, + "y": 329.359375, + "width": 248.828125, + "height": 190.0625, + "top": 329.359375, + "right": 1361.65625, + "bottom": 519.421875, + "left": 1112.828125 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": 4, + "anchor": { + "x": 620.15625, + "y": 165.875, + "width": 130.078125, + "height": 58.046875, + "top": 165.875, + "right": 750.234375, + "bottom": 223.921875, + "left": 620.15625 + }, + "menu": { + "x": 1285.953125, + "y": 472.609375, + "width": 298.59375, + "height": 228.0625, + "top": 472.609375, + "right": 1584.546875, + "bottom": 700.671875, + "left": 1285.953125 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": 5, + "anchor": { + "x": 584.140625, + "y": 199.0625, + "width": 156.140625, + "height": 69.671875, + "top": 199.0625, + "right": 740.28125, + "bottom": 268.734375, + "left": 584.140625 + }, + "menu": { + "x": 1453.515625, + "y": 678.640625, + "width": 358.3125, + "height": 273.6875, + "top": 678.640625, + "right": 1811.828125, + "bottom": 952.328125, + "left": 1453.515625 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": 6, + "anchor": { + "x": 541, + "y": 238.875, + "width": 187.34375, + "height": 83.59375, + "top": 238.875, + "right": 728.34375, + "bottom": 322.46875, + "left": 541 + }, + "menu": { + "x": 1615.40625, + "y": 974.828125, + "width": 429.96875, + "height": 328.421875, + "top": 974.828125, + "right": 2045.375, + "bottom": 1303.25, + "left": 1615.40625 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": 7, + "anchor": { + "x": 489.1875, + "y": 286.640625, + "width": 224.828125, + "height": 100.328125, + "top": 286.640625, + "right": 714.015625, + "bottom": 386.96875, + "left": 489.1875 + }, + "menu": { + "x": 1752.84375, + "y": 1400.90625, + "width": 515.96875, + "height": 394.140625, + "top": 1400.90625, + "right": 2268.8125, + "bottom": 1795.046875, + "left": 1752.84375 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": 8, + "anchor": { + "x": 427.015625, + "y": 343.984375, + "width": 269.796875, + "height": 120.390625, + "top": 343.984375, + "right": 696.8125, + "bottom": 464.375, + "left": 427.015625 + }, + "menu": { + "x": 1836.078125, + "y": 2013.921875, + "width": 619.171875, + "height": 472.9375, + "top": 2013.921875, + "right": 2455.25, + "bottom": 2486.859375, + "left": 1836.078125 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": -8, + "anchor": { + "x": 779.859375, + "y": 18.671875, + "width": 14.5625, + "height": 6.5, + "top": 18.671875, + "right": 794.421875, + "bottom": 25.171875, + "left": 779.859375 + }, + "menu": { + "x": 149.765625, + "y": 13.953125, + "width": 33.484375, + "height": 25.5625, + "top": 13.953125, + "right": 183.25, + "bottom": 39.515625, + "left": 149.765625 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": -7, + "anchor": { + "x": 775.84375, + "y": 22.3125, + "width": 17.46875, + "height": 7.8125, + "top": 22.3125, + "right": 793.3125, + "bottom": 30.125, + "left": 775.84375 + }, + "menu": { + "x": 179.71875, + "y": 16.734375, + "width": 40.1875, + "height": 30.671875, + "top": 16.734375, + "right": 219.90625, + "bottom": 47.40625, + "left": 179.71875 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": -6, + "anchor": { + "x": 770.984375, + "y": 26.78125, + "width": 20.984375, + "height": 9.375, + "top": 26.78125, + "right": 791.96875, + "bottom": 36.15625, + "left": 770.984375 + }, + "menu": { + "x": 215.671875, + "y": 20.09375, + "width": 48.21875, + "height": 36.78125, + "top": 20.09375, + "right": 263.890625, + "bottom": 56.875, + "left": 215.671875 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": -5, + "anchor": { + "x": 765.1875, + "y": 32.140625, + "width": 25.171875, + "height": 11.25, + "top": 32.140625, + "right": 790.359375, + "bottom": 43.390625, + "left": 765.1875 + }, + "menu": { + "x": 258.796875, + "y": 24.109375, + "width": 57.859375, + "height": 44.15625, + "top": 24.109375, + "right": 316.65625, + "bottom": 68.265625, + "left": 258.796875 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": -4, + "anchor": { + "x": 758.21875, + "y": 38.578125, + "width": 30.21875, + "height": 13.5, + "top": 38.578125, + "right": 788.4375, + "bottom": 52.078125, + "left": 758.21875 + }, + "menu": { + "x": 310.5625, + "y": 28.921875, + "width": 69.4375, + "height": 53.015625, + "top": 28.921875, + "right": 380, + "bottom": 81.9375, + "left": 310.5625 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": -3, + "anchor": { + "x": 749.828125, + "y": 46.28125, + "width": 36.296875, + "height": 16.203125, + "top": 46.28125, + "right": 786.125, + "bottom": 62.484375, + "left": 749.828125 + }, + "menu": { + "x": 371.59375, + "y": 38.46875, + "width": 83.328125, + "height": 63.640625, + "top": 38.46875, + "right": 454.921875, + "bottom": 102.109375, + "left": 371.59375 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": -2, + "anchor": { + "x": 739.796875, + "y": 55.546875, + "width": 43.546875, + "height": 19.4375, + "top": 55.546875, + "right": 783.34375, + "bottom": 74.984375, + "left": 739.796875 + }, + "menu": { + "x": 443.984375, + "y": 54.84375, + "width": 100, + "height": 76.359375, + "top": 54.84375, + "right": 543.984375, + "bottom": 131.203125, + "left": 443.984375 + }, + "within": true, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": -1, + "anchor": { + "x": 727.71875, + "y": 66.65625, + "width": 52.28125, + "height": 23.328125, + "top": 66.65625, + "right": 780, + "bottom": 89.984375, + "left": 727.71875 + }, + "menu": { + "x": 530, + "y": 78.3125, + "width": 120, + "height": 91.640625, + "top": 78.3125, + "right": 650, + "bottom": 169.953125, + "left": 530 + }, + "within": true, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": 0, + "anchor": { + "x": 713.234375, + "y": 80, + "width": 62.765625, + "height": 28, + "top": 80, + "right": 776, + "bottom": 108, + "left": 713.234375 + }, + "menu": { + "x": 632, + "y": 112, + "width": 144, + "height": 110, + "top": 112, + "right": 776, + "bottom": 222, + "left": 632 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": 1, + "anchor": { + "x": 695.921875, + "y": 96, + "width": 75.28125, + "height": 33.59375, + "top": 96, + "right": 771.203125, + "bottom": 129.59375, + "left": 695.921875 + }, + "menu": { + "x": 752.640625, + "y": 160.3125, + "width": 172.796875, + "height": 131.984375, + "top": 160.3125, + "right": 925.4375, + "bottom": 292.296875, + "left": 752.640625 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": 2, + "anchor": { + "x": 675.125, + "y": 115.1875, + "width": 90.328125, + "height": 40.3125, + "top": 115.1875, + "right": 765.453125, + "bottom": 155.5, + "left": 675.125 + }, + "menu": { + "x": 894.890625, + "y": 229.671875, + "width": 207.359375, + "height": 158.359375, + "top": 229.671875, + "right": 1102.25, + "bottom": 388.03125, + "left": 894.890625 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": 3, + "anchor": { + "x": 650.109375, + "y": 138.234375, + "width": 108.421875, + "height": 48.375, + "top": 138.234375, + "right": 758.53125, + "bottom": 186.609375, + "left": 650.109375 + }, + "menu": { + "x": 1061.90625, + "y": 329.359375, + "width": 248.828125, + "height": 190.0625, + "top": 329.359375, + "right": 1310.734375, + "bottom": 519.421875, + "left": 1061.90625 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": 4, + "anchor": { + "x": 620.15625, + "y": 165.875, + "width": 130.078125, + "height": 58.046875, + "top": 165.875, + "right": 750.234375, + "bottom": 223.921875, + "left": 620.15625 + }, + "menu": { + "x": 1257.078125, + "y": 472.609375, + "width": 298.59375, + "height": 228.0625, + "top": 472.609375, + "right": 1555.671875, + "bottom": 700.671875, + "left": 1257.078125 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": 5, + "anchor": { + "x": 584.140625, + "y": 199.0625, + "width": 156.140625, + "height": 69.671875, + "top": 199.0625, + "right": 740.28125, + "bottom": 268.734375, + "left": 584.140625 + }, + "menu": { + "x": 1483.734375, + "y": 678.640625, + "width": 358.3125, + "height": 273.6875, + "top": 678.640625, + "right": 1842.046875, + "bottom": 952.328125, + "left": 1483.734375 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": 6, + "anchor": { + "x": 541, + "y": 238.875, + "width": 187.34375, + "height": 83.59375, + "top": 238.875, + "right": 728.34375, + "bottom": 322.46875, + "left": 541 + }, + "menu": { + "x": 1744.828125, + "y": 974.828125, + "width": 429.96875, + "height": 328.421875, + "top": 974.828125, + "right": 2174.796875, + "bottom": 1303.25, + "left": 1744.828125 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": 7, + "anchor": { + "x": 489.1875, + "y": 286.640625, + "width": 224.828125, + "height": 100.328125, + "top": 286.640625, + "right": 714.015625, + "bottom": 386.96875, + "left": 489.1875 + }, + "menu": { + "x": 2042.46875, + "y": 1400.90625, + "width": 515.96875, + "height": 394.140625, + "top": 1400.90625, + "right": 2558.4375, + "bottom": 1795.046875, + "left": 2042.46875 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": 8, + "anchor": { + "x": 427.015625, + "y": 343.984375, + "width": 269.796875, + "height": 120.390625, + "top": 343.984375, + "right": 696.8125, + "bottom": 464.375, + "left": 427.015625 + }, + "menu": { + "x": 2376.984375, + "y": 2013.921875, + "width": 619.171875, + "height": 472.9375, + "top": 2013.921875, + "right": 2996.15625, + "bottom": 2486.859375, + "left": 2376.984375 + }, + "within": false, + "aligned": false, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": -8, + "anchor": { + "x": 468.234375, + "y": 249.65625, + "width": 14.5625, + "height": 6.5, + "top": 249.65625, + "right": 482.796875, + "bottom": 256.15625, + "left": 468.234375 + }, + "menu": { + "x": 108.890625, + "y": 60.5, + "width": 33.484375, + "height": 25.5625, + "top": 60.5, + "right": 142.375, + "bottom": 86.0625, + "left": 108.890625 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": -7, + "anchor": { + "x": 481.890625, + "y": 239.125, + "width": 17.46875, + "height": 7.8125, + "top": 239.125, + "right": 499.359375, + "bottom": 246.9375, + "left": 481.890625 + }, + "menu": { + "x": 134.484375, + "y": 70.03125, + "width": 40.1875, + "height": 30.671875, + "top": 70.03125, + "right": 174.671875, + "bottom": 100.703125, + "left": 134.484375 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": -6, + "anchor": { + "x": 498.234375, + "y": 226.546875, + "width": 20.984375, + "height": 9.375, + "top": 226.546875, + "right": 519.21875, + "bottom": 235.921875, + "left": 498.234375 + }, + "menu": { + "x": 166.84375, + "y": 80.34375, + "width": 48.21875, + "height": 36.78125, + "top": 80.34375, + "right": 215.0625, + "bottom": 117.125, + "left": 166.84375 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": -5, + "anchor": { + "x": 517.890625, + "y": 211.296875, + "width": 25.171875, + "height": 11.25, + "top": 211.296875, + "right": 543.0625, + "bottom": 222.546875, + "left": 517.890625 + }, + "menu": { + "x": 208.125, + "y": 91.03125, + "width": 57.859375, + "height": 44.15625, + "top": 91.03125, + "right": 265.984375, + "bottom": 135.1875, + "left": 208.125 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": -4, + "anchor": { + "x": 541.46875, + "y": 193.28125, + "width": 30.21875, + "height": 13.5, + "top": 193.28125, + "right": 571.6875, + "bottom": 206.78125, + "left": 541.46875 + }, + "menu": { + "x": 261.109375, + "y": 101.640625, + "width": 69.4375, + "height": 53.015625, + "top": 101.640625, + "right": 330.546875, + "bottom": 154.65625, + "left": 261.109375 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": -3, + "anchor": { + "x": 569.734375, + "y": 172.34375, + "width": 36.296875, + "height": 16.203125, + "top": 172.34375, + "right": 606.03125, + "bottom": 188.546875, + "left": 569.734375 + }, + "menu": { + "x": 329.703125, + "y": 111.421875, + "width": 83.328125, + "height": 63.640625, + "top": 111.421875, + "right": 413.03125, + "bottom": 175.0625, + "left": 329.703125 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": -2, + "anchor": { + "x": 603.671875, + "y": 146.515625, + "width": 43.546875, + "height": 19.4375, + "top": 146.515625, + "right": 647.21875, + "bottom": 165.953125, + "left": 603.671875 + }, + "menu": { + "x": 419.203125, + "y": 118.015625, + "width": 100, + "height": 76.359375, + "top": 118.015625, + "right": 519.203125, + "bottom": 194.375, + "left": 419.203125 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": -1, + "anchor": { + "x": 644.375, + "y": 122.296875, + "width": 52.28125, + "height": 23.328125, + "top": 122.296875, + "right": 696.65625, + "bottom": 145.625, + "left": 644.375 + }, + "menu": { + "x": 536.65625, + "y": 124.6875, + "width": 120, + "height": 91.640625, + "top": 124.6875, + "right": 656.65625, + "bottom": 216.328125, + "left": 536.65625 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": 0, + "anchor": { + "x": 689.234375, + "y": 139, + "width": 62.765625, + "height": 28, + "top": 139, + "right": 752, + "bottom": 167, + "left": 689.234375 + }, + "menu": { + "x": 644, + "y": 171, + "width": 144, + "height": 110, + "top": 171, + "right": 788, + "bottom": 281, + "left": 644 + }, + "within": true, + "aligned": true, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": 1, + "anchor": { + "x": 671.921875, + "y": 158.359375, + "width": 75.28125, + "height": 33.59375, + "top": 158.359375, + "right": 747.203125, + "bottom": 191.953125, + "left": 671.921875 + }, + "menu": { + "x": 772.796875, + "y": 235.140625, + "width": 172.796875, + "height": 131.984375, + "top": 235.140625, + "right": 945.59375, + "bottom": 367.125, + "left": 772.796875 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": 2, + "anchor": { + "x": 662.640625, + "y": 181.84375, + "width": 90.328125, + "height": 40.3125, + "top": 181.84375, + "right": 752.96875, + "bottom": 222.15625, + "left": 662.640625 + }, + "menu": { + "x": 927.359375, + "y": 325.65625, + "width": 207.359375, + "height": 158.359375, + "top": 325.65625, + "right": 1134.71875, + "bottom": 484.015625, + "left": 927.359375 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": 3, + "anchor": { + "x": 639.9375, + "y": 211, + "width": 108.421875, + "height": 48.375, + "top": 211, + "right": 748.359375, + "bottom": 259.375, + "left": 639.9375 + }, + "menu": { + "x": 1105.796875, + "y": 455.109375, + "width": 248.828125, + "height": 190.0625, + "top": 455.109375, + "right": 1354.625, + "bottom": 645.171875, + "left": 1105.796875 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": 4, + "anchor": { + "x": 612.75, + "y": 245.609375, + "width": 130.078125, + "height": 58.046875, + "top": 245.609375, + "right": 742.828125, + "bottom": 303.65625, + "left": 612.75 + }, + "menu": { + "x": 1270.59375, + "y": 637.953125, + "width": 298.59375, + "height": 228.0625, + "top": 637.953125, + "right": 1569.1875, + "bottom": 866.015625, + "left": 1270.59375 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": 5, + "anchor": { + "x": 580.046875, + "y": 285.59375, + "width": 156.140625, + "height": 69.671875, + "top": 285.59375, + "right": 736.1875, + "bottom": 355.265625, + "left": 580.046875 + }, + "menu": { + "x": 1443.328125, + "y": 893.953125, + "width": 358.3125, + "height": 273.6875, + "top": 893.953125, + "right": 1801.640625, + "bottom": 1167.640625, + "left": 1443.328125 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": 6, + "anchor": { + "x": 540.890625, + "y": 334.890625, + "width": 187.34375, + "height": 83.59375, + "top": 334.890625, + "right": 728.234375, + "bottom": 418.484375, + "left": 540.890625 + }, + "menu": { + "x": 1615.078125, + "y": 1261.53125, + "width": 429.96875, + "height": 328.421875, + "top": 1261.53125, + "right": 2045.046875, + "bottom": 1589.953125, + "left": 1615.078125 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": 7, + "anchor": { + "x": 493.84375, + "y": 394.875, + "width": 224.828125, + "height": 100.328125, + "top": 394.875, + "right": 718.671875, + "bottom": 495.203125, + "left": 493.84375 + }, + "menu": { + "x": 1769.53125, + "y": 1712.75, + "width": 515.96875, + "height": 394.140625, + "top": 1712.75, + "right": 2285.5, + "bottom": 2106.890625, + "left": 1769.53125 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": 8, + "anchor": { + "x": 437.40625, + "y": 440.046875, + "width": 269.796875, + "height": 120.390625, + "top": 440.046875, + "right": 707.203125, + "bottom": 560.4375, + "left": 437.40625 + }, + "menu": { + "x": 1880.765625, + "y": 2055.3125, + "width": 619.171875, + "height": 472.9375, + "top": 2055.3125, + "right": 2499.9375, + "bottom": 2528.25, + "left": 1880.765625 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": -8, + "anchor": { + "x": 468.234375, + "y": 249.65625, + "width": 14.5625, + "height": 6.5, + "top": 249.65625, + "right": 482.796875, + "bottom": 256.15625, + "left": 468.234375 + }, + "menu": { + "x": 78.78125, + "y": 60.5, + "width": 33.484375, + "height": 25.5625, + "top": 60.5, + "right": 112.265625, + "bottom": 86.0625, + "left": 78.78125 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": -7, + "anchor": { + "x": 481.890625, + "y": 239.125, + "width": 17.46875, + "height": 7.8125, + "top": 239.125, + "right": 499.359375, + "bottom": 246.9375, + "left": 481.890625 + }, + "menu": { + "x": 99.171875, + "y": 70.03125, + "width": 40.1875, + "height": 30.671875, + "top": 70.03125, + "right": 139.359375, + "bottom": 100.703125, + "left": 99.171875 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": -6, + "anchor": { + "x": 498.234375, + "y": 226.546875, + "width": 20.984375, + "height": 9.375, + "top": 226.546875, + "right": 519.21875, + "bottom": 235.921875, + "left": 498.234375 + }, + "menu": { + "x": 125.65625, + "y": 80.34375, + "width": 48.21875, + "height": 36.78125, + "top": 80.34375, + "right": 173.875, + "bottom": 117.125, + "left": 125.65625 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": -5, + "anchor": { + "x": 517.890625, + "y": 211.296875, + "width": 25.171875, + "height": 11.25, + "top": 211.296875, + "right": 543.0625, + "bottom": 222.546875, + "left": 517.890625 + }, + "menu": { + "x": 160.359375, + "y": 91.03125, + "width": 57.859375, + "height": 44.15625, + "top": 91.03125, + "right": 218.21875, + "bottom": 135.1875, + "left": 160.359375 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": -4, + "anchor": { + "x": 541.46875, + "y": 193.28125, + "width": 30.21875, + "height": 13.5, + "top": 193.28125, + "right": 571.6875, + "bottom": 206.78125, + "left": 541.46875 + }, + "menu": { + "x": 206.25, + "y": 101.640625, + "width": 69.4375, + "height": 53.015625, + "top": 101.640625, + "right": 275.6875, + "bottom": 154.65625, + "left": 206.25 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": -3, + "anchor": { + "x": 569.734375, + "y": 172.34375, + "width": 36.296875, + "height": 16.203125, + "top": 172.34375, + "right": 606.03125, + "bottom": 188.546875, + "left": 569.734375 + }, + "menu": { + "x": 267.375, + "y": 111.421875, + "width": 83.328125, + "height": 63.640625, + "top": 111.421875, + "right": 350.703125, + "bottom": 175.0625, + "left": 267.375 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": -2, + "anchor": { + "x": 603.671875, + "y": 146.515625, + "width": 43.546875, + "height": 19.4375, + "top": 146.515625, + "right": 647.21875, + "bottom": 165.953125, + "left": 603.671875 + }, + "menu": { + "x": 349.453125, + "y": 118.015625, + "width": 100, + "height": 76.359375, + "top": 118.015625, + "right": 449.453125, + "bottom": 194.375, + "left": 349.453125 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": -1, + "anchor": { + "x": 644.375, + "y": 122.296875, + "width": 52.28125, + "height": 23.328125, + "top": 122.296875, + "right": 696.65625, + "bottom": 145.625, + "left": 644.375 + }, + "menu": { + "x": 460.546875, + "y": 124.6875, + "width": 120, + "height": 91.640625, + "top": 124.6875, + "right": 580.546875, + "bottom": 216.328125, + "left": 460.546875 + }, + "within": true, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": 0, + "anchor": { + "x": 689.234375, + "y": 139, + "width": 62.765625, + "height": 28, + "top": 139, + "right": 752, + "bottom": 167, + "left": 689.234375 + }, + "menu": { + "x": 608, + "y": 171, + "width": 144, + "height": 110, + "top": 171, + "right": 752, + "bottom": 281, + "left": 608 + }, + "within": true, + "aligned": true, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": 1, + "anchor": { + "x": 671.921875, + "y": 158.359375, + "width": 75.28125, + "height": 33.59375, + "top": 158.359375, + "right": 747.203125, + "bottom": 191.953125, + "left": 671.921875 + }, + "menu": { + "x": 723.84375, + "y": 235.140625, + "width": 172.796875, + "height": 131.984375, + "top": 235.140625, + "right": 896.640625, + "bottom": 367.125, + "left": 723.84375 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": 2, + "anchor": { + "x": 662.640625, + "y": 181.84375, + "width": 90.328125, + "height": 40.3125, + "top": 181.84375, + "right": 752.96875, + "bottom": 222.15625, + "left": 662.640625 + }, + "menu": { + "x": 876.90625, + "y": 325.65625, + "width": 207.359375, + "height": 158.359375, + "top": 325.65625, + "right": 1084.265625, + "bottom": 484.015625, + "left": 876.90625 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": 3, + "anchor": { + "x": 639.9375, + "y": 211, + "width": 108.421875, + "height": 48.375, + "top": 211, + "right": 748.359375, + "bottom": 259.375, + "left": 639.9375 + }, + "menu": { + "x": 1044.328125, + "y": 455.109375, + "width": 248.828125, + "height": 190.0625, + "top": 455.109375, + "right": 1293.15625, + "bottom": 645.171875, + "left": 1044.328125 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": 4, + "anchor": { + "x": 612.75, + "y": 245.609375, + "width": 130.078125, + "height": 58.046875, + "top": 245.609375, + "right": 742.828125, + "bottom": 303.65625, + "left": 612.75 + }, + "menu": { + "x": 1241.71875, + "y": 637.953125, + "width": 298.59375, + "height": 228.0625, + "top": 637.953125, + "right": 1540.3125, + "bottom": 866.015625, + "left": 1241.71875 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": 5, + "anchor": { + "x": 580.046875, + "y": 285.59375, + "width": 156.140625, + "height": 69.671875, + "top": 285.59375, + "right": 736.1875, + "bottom": 355.265625, + "left": 580.046875 + }, + "menu": { + "x": 1473.546875, + "y": 893.953125, + "width": 358.3125, + "height": 273.6875, + "top": 893.953125, + "right": 1831.859375, + "bottom": 1167.640625, + "left": 1473.546875 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": 6, + "anchor": { + "x": 540.890625, + "y": 334.890625, + "width": 187.34375, + "height": 83.59375, + "top": 334.890625, + "right": 728.234375, + "bottom": 418.484375, + "left": 540.890625 + }, + "menu": { + "x": 1744.5, + "y": 1261.53125, + "width": 429.96875, + "height": 328.421875, + "top": 1261.53125, + "right": 2174.46875, + "bottom": 1589.953125, + "left": 1744.5 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": 7, + "anchor": { + "x": 493.84375, + "y": 394.875, + "width": 224.828125, + "height": 100.328125, + "top": 394.875, + "right": 718.671875, + "bottom": 495.203125, + "left": 493.84375 + }, + "menu": { + "x": 2059.140625, + "y": 1712.75, + "width": 515.96875, + "height": 394.140625, + "top": 1712.75, + "right": 2575.109375, + "bottom": 2106.890625, + "left": 2059.140625 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": 8, + "anchor": { + "x": 437.40625, + "y": 440.046875, + "width": 269.796875, + "height": 120.390625, + "top": 440.046875, + "right": 707.203125, + "bottom": 560.4375, + "left": 437.40625 + }, + "menu": { + "x": 2421.65625, + "y": 2055.3125, + "width": 619.171875, + "height": 472.9375, + "top": 2055.3125, + "right": 3040.828125, + "bottom": 2528.25, + "left": 2421.65625 + }, + "within": false, + "aligned": false, + "inDialog": false, + "focusReturned": true, + "ownerClosed": 0 + } + ], + "interactions": { + "keyboard": { + "selected": "First", + "draft": "keep this draft", + "menuClosed": true, + "focus": "Fixture selector", + "ownerClosed": 0 + }, + "toggleClosed": true, + "outside": { + "closed": true, + "focus": "Retained draft" + } + }, + "errors": [] +} diff --git a/.github/pr-screenshots/2269-choice-menus/before.png b/.github/pr-screenshots/2269-choice-menus/before.png new file mode 100644 index 000000000..a4f6849da Binary files /dev/null and b/.github/pr-screenshots/2269-choice-menus/before.png differ diff --git a/.github/pr-screenshots/2269-choice-menus/final-browser-menu-144.png b/.github/pr-screenshots/2269-choice-menus/final-browser-menu-144.png new file mode 100644 index 000000000..828995ffb Binary files /dev/null and b/.github/pr-screenshots/2269-choice-menus/final-browser-menu-144.png differ diff --git a/.github/pr-screenshots/2269-choice-menus/final-computer-menu-144.png b/.github/pr-screenshots/2269-choice-menus/final-computer-menu-144.png new file mode 100644 index 000000000..24c8e2f10 Binary files /dev/null and b/.github/pr-screenshots/2269-choice-menus/final-computer-menu-144.png differ diff --git a/.github/pr-screenshots/2269-choice-menus/final-embedded-focus.png b/.github/pr-screenshots/2269-choice-menus/final-embedded-focus.png new file mode 100644 index 000000000..7cd2fda1d Binary files /dev/null and b/.github/pr-screenshots/2269-choice-menus/final-embedded-focus.png differ diff --git a/.github/pr-screenshots/2269-choice-menus/final-hidden-created-restored-16.png b/.github/pr-screenshots/2269-choice-menus/final-hidden-created-restored-16.png new file mode 100644 index 000000000..4385217ee Binary files /dev/null and b/.github/pr-screenshots/2269-choice-menus/final-hidden-created-restored-16.png differ diff --git a/.github/pr-screenshots/2269-choice-menus/final-hide-restore-144.png b/.github/pr-screenshots/2269-choice-menus/final-hide-restore-144.png new file mode 100644 index 000000000..22f8c22ed Binary files /dev/null and b/.github/pr-screenshots/2269-choice-menus/final-hide-restore-144.png differ diff --git a/.github/pr-screenshots/2269-choice-menus/final-native-16.json b/.github/pr-screenshots/2269-choice-menus/final-native-16.json new file mode 100644 index 000000000..ba8adaf53 --- /dev/null +++ b/.github/pr-screenshots/2269-choice-menus/final-native-16.json @@ -0,0 +1,186 @@ +{ + "date": "2026-10-19", + "artifact": "0.0.0-zoom.2268.16", + "desktop": "0.2.1-rc.2", + "implementationCommit": "b6275fc3af28f6b20dae34d9c7a35bc958303316", + "clientSha256": "ad8ab96aab325d093c8d4c0fcfa82e8f4c46d81f046a5d2879b2ac2e21bd2848", + "install": "Closed-app package transaction in the same retained native Profile/user-data; preference Patch bytes unchanged. Staged Client and tarball Client bytes both match the completed source build.", + "discardedLocalPackage": ".15 was staged while a build cleaned Client output; missing Client bytes were caught before installation. It was never installed. Fresh .16 was packed only after build completion and checked byte-for-byte.", + "tooltipBefore": { + "artifact": "0.0.0-zoom.2268.14", + "zoom": 1.44, + "trigger": { + "left": 659.0078125, + "right": 705.078125, + "bottom": 149.734375 + }, + "bubble": { + "left": 906.5390625, + "right": 1057.7421875, + "top": 227.1328125 + }, + "screenshot": "native-tooltip-before-144.png" + }, + "tooltipAfter144": { + "bounds": { + "w": 1261, + "h": 820 + }, + "zoom": "1.44", + "active": "", + "triggerRect": { + "x": 659.0078125, + "y": 97.8984375, + "width": 46.0703125, + "height": 51.8359375, + "top": 97.8984375, + "right": 705.078125, + "bottom": 149.734375, + "left": 659.0078125 + }, + "tooltips": [ + { + "text": "修改全局用户名", + "rect": { + "x": 606.44140625, + "y": 157.7340087890625, + "width": 151.203125, + "height": 37.421875, + "top": 157.7340087890625, + "right": 757.64453125, + "bottom": 195.1558837890625, + "left": 606.44140625 + }, + "position": "fixed", + "visibility": "visible" + } + ] + }, + "tooltipAfter120": { + "bounds": { + "w": 1261, + "h": 820 + }, + "zoom": "1.2", + "active": "", + "triggerRect": { + "x": 618.7890625, + "y": 81.5859375, + "width": 38.3984375, + "height": 43.1953125, + "top": 81.5859375, + "right": 657.1875, + "bottom": 124.78125, + "left": 618.7890625 + }, + "tooltips": [ + { + "text": "修改全局用户名", + "rect": { + "x": 574.98828125, + "y": 132.781005859375, + "width": 126, + "height": 31.1875, + "top": 132.781005859375, + "right": 700.98828125, + "bottom": 163.968505859375, + "left": 574.98828125 + }, + "position": "fixed", + "visibility": "visible" + } + ] + }, + "tooltipNativeInteraction": "Native keyboard focus opens the corrected bubble at144%; Cmd+- changes to120%, retains the named trigger focus and dismisses the transient bubble. Tab/Shift+Tab reopens it correctly at120%. Returned to144% without changing the draft. Native retention of the transient bubble across the shortcut is not claimed; retained pinned-bubble zoom is a separate source-primitive check.", + "tooltipScreenshot": "native-tooltip-after-144.png", + "hiddenCreate": { + "before": { + "visibility": "hidden", + "w": 1261, + "h": 820, + "zoom": "1.44" + }, + "created": { + "createdVisibility": "hidden" + }, + "hidden": { + "visibility": "hidden", + "w": 1261, + "h": 820, + "zoom": "1.44", + "created": "hidden" + } + }, + "restored": { + "visibility": "hidden", + "zoom": "1.44", + "trace": [ + { + "event": "dom-ready", + "visibility": "hidden" + }, + { + "event": "dom-ready", + "visibility": "hidden" + } + ], + "main": "保 asd留 A", + "sameOrigin": "保留 Basd", + "guest": { + "id": 2, + "url": "http://127.0.0.1:39458/zoom-fixture.html", + "zoom": 1, + "rect": { + "x": 807.859375, + "y": 641.5546875, + "width": 374.3984375, + "height": 144, + "top": 641.5546875, + "right": 1182.2578125, + "bottom": 785.5546875, + "left": 807.859375 + }, + "state": { + "value": "保留输入 asd", + "focus": "INPUT", + "hasFocus": false, + "visibility": "visible" + } + } + }, + "human": "Human performed yellow-button minimize/restore and answered 可以 to whether the RGB ruler and input displayed normally; actual native pixels independently show both.", + "rendering": "Two initial dom-ready events were observed, both while hidden. Full-window screenshot after ordinary restore shows native guest RGB ruler/input, root144%, guest zoom1 and loaded fixture URL. No reload, fullscreen or replacement recovery was used. A pre-restoration guest-id measurement was not captured; no stronger before/after id claim is made for this row.", + "screenshot": "final-hidden-created-restored-16.png", + "cleanup": "Task fixture disposed using its owned release; same formal native Profile remains at144%; original unsent draft and ui-theme font15 retained.", + "sourceChecks": { + "client": { + "passed": 2037, + "skipped": 1, + "failed": 0 + }, + "selectCases": 136, + "tooltipCases": 204, + "retainedPinnedZoomChanges": 36, + "baselineTooltipFailures": 192, + "baselineTooltipCases": 204, + "focused": 4, + "types": "passed", + "build": "passed", + "format": "passed" + }, + "retainedFailures": [ + "An initial full Client run had one avatar-editor timeout under concurrent build load; the failed file passed17 tests alone and the full rerun passed2037/1skip. No test was disabled.", + "The final .16 cached native Log contains a native /plugins/events network failure; the .14 passive sequence records automatic recovery. Neither complete cohort is labeled console-error-free." + ], + "ciBlocker": { + "run": 39262480596, + "job": 118093522485, + "reason": "Mobile Expo doctor: @expo/ui58.0.20 expects~58.0.21, expo58.0.14 expects~58.0.15, expo-image58.0.15 expects~58.0.16, expo-router58.0.23 expects~58.0.24. No mobile dependencies changed in this PR; no check skipped." + }, + "limits": [ + "Earlier physical plain Equal and IME records retain their tested composition scope; no synthesized Equal is relabeled physical plain Equal.", + "Earlier .14 actual main/iframe/webview once-only focus evidence and font/Host/installer lifecycle are retained; only Tooltip geometry/observer ownership changed for .16.", + "Representative native guest/tooltip/button paths do not qualify arbitrary third-party pages/programmatic tooltip triggers or other versions.", + "Windows/Linux remain #2270; all new PRs remain Draft/unmerged." + ] +} diff --git a/.github/pr-screenshots/2269-choice-menus/final-native-embedding.json b/.github/pr-screenshots/2269-choice-menus/final-native-embedding.json new file mode 100644 index 000000000..9a635bf2b --- /dev/null +++ b/.github/pr-screenshots/2269-choice-menus/final-native-embedding.json @@ -0,0 +1,384 @@ +{ + "date": "2026-10-19", + "artifact": "0.0.0-zoom.2268.14", + "desktop": "0.2.1-rc.2", + "scope": "Actual final installed Desktop. Temporary task-only main/same-origin/cross-origin/native-webview rulers use the real native browser acquire/release and input bridge. Native CUA sends keys; CDP only supplies fixtures/readback, never focus or synthetic input.", + "foregroundPrecondition": "First AX attempt left parent focus on Bot Settings and was excluded. Human foregrounded the same existing window. Accepted webview before/minus/plus all had parent active WEBVIEW and guest input hasFocus true.", + "rows": [ + { + "stage": "guest-before", + "visibility": "visible", + "level": 2, + "activeParentElement": "s1-guest", + "guestId": 3, + "guestZoom": 1, + "guestInput": "保留输入", + "guestHasFocus": true, + "frameFocus": [], + "mainFixtureInput": "保留 A", + "sameOriginFixtureInput": "保留 B" + }, + { + "stage": "guest-minus", + "visibility": "visible", + "level": 1, + "activeParentElement": "s1-guest", + "guestId": 3, + "guestZoom": 1, + "guestInput": "保留输入", + "guestHasFocus": true, + "frameFocus": [], + "mainFixtureInput": "保留 A", + "sameOriginFixtureInput": "保留 B" + }, + { + "stage": "guest-plus", + "visibility": "visible", + "level": 2, + "activeParentElement": "s1-guest", + "guestId": 3, + "guestZoom": 1, + "guestInput": "保留输入", + "guestHasFocus": true, + "frameFocus": [], + "mainFixtureInput": "保留 A", + "sameOriginFixtureInput": "保留 B" + }, + { + "stage": "cross-minus", + "visibility": "hidden", + "level": 1, + "activeParentElement": "s1-cross", + "guestId": 3, + "guestZoom": 1, + "guestInput": "保留输入", + "guestHasFocus": false, + "frameFocus": [ + { + "kind": "main", + "hasFocus": false, + "firstDocumentInput": "" + }, + { + "kind": "same-origin", + "hasFocus": false, + "firstDocumentInput": "保留 B" + }, + { + "kind": "cross-origin", + "hasFocus": false, + "firstDocumentInput": "保留输入" + } + ], + "mainFixtureInput": "保留 A", + "sameOriginFixtureInput": "保留 B" + }, + { + "stage": "cross-plus", + "visibility": "visible", + "level": 2, + "activeParentElement": "s1-cross", + "guestId": 3, + "guestZoom": 1, + "guestInput": "保留输入", + "guestHasFocus": false, + "frameFocus": [ + { + "kind": "main", + "hasFocus": true, + "firstDocumentInput": "" + }, + { + "kind": "same-origin", + "hasFocus": false, + "firstDocumentInput": "保留 B" + }, + { + "kind": "cross-origin", + "hasFocus": true, + "firstDocumentInput": "保留输入" + } + ], + "mainFixtureInput": "保留 A", + "sameOriginFixtureInput": "保留 B" + }, + { + "stage": "same-minus", + "visibility": "visible", + "level": 1, + "activeParentElement": "s1-local", + "guestId": 3, + "guestZoom": 1, + "guestInput": "保留输入", + "guestHasFocus": false, + "frameFocus": [ + { + "kind": "main", + "hasFocus": true, + "firstDocumentInput": "" + }, + { + "kind": "same-origin", + "hasFocus": true, + "firstDocumentInput": "保留 B" + }, + { + "kind": "cross-origin", + "hasFocus": false, + "firstDocumentInput": "保留输入" + } + ], + "mainFixtureInput": "保留 A", + "sameOriginFixtureInput": "保留 B" + }, + { + "stage": "main-plus", + "visibility": "visible", + "level": 2, + "activeParentElement": "s1-main", + "guestId": 3, + "guestZoom": 1, + "guestInput": "保留输入", + "guestHasFocus": false, + "frameFocus": [ + { + "kind": "main", + "hasFocus": true, + "firstDocumentInput": "" + }, + { + "kind": "same-origin", + "hasFocus": false, + "firstDocumentInput": "保留 B" + }, + { + "kind": "cross-origin", + "hasFocus": false, + "firstDocumentInput": "保留输入" + } + ], + "mainFixtureInput": "保留 A", + "sameOriginFixtureInput": "保留 B" + } + ], + "accepted": [ + "WEBVIEW:144% ->120% ->144% on one native key delivery each; same guestId3 and input, guest zoom1 unchanged", + "Cross-origin iframe: active iframe, focused frame readback and a single increase120% ->144%; the earlier decrease was read after window occlusion and has narrower evidence", + "Same-origin iframe: focused frame, one decrease144% ->120%, retained input", + "Main input: focused main document, one increase120% ->144%, retained input", + "Real window screenshot contains same-origin/cross-origin/native guest rulers and retained test inputs", + "Browser/Computer target menus and Panel context menu at144% stay inside the viewport; menu Escape retains the owning dialog or returns Panel-header focus" + ], + "nativeMenuCurrent": { + "productVersion": "0.0.0-zoom.2268.14", + "browser": "opened target choices; Escape retained Bot Settings and returned to target trigger; no target or permission changed", + "computer": "opened target choices; Escape retained Bot Settings and returned to target trigger; permission switch stayed off", + "panel": "opened Home context menu; Escape returned to same header" + }, + "preservedLimits": [ + "CUA Equal can include Shift: prior physical plain Cmd+= remains the ordinary-key proof", + "Native Minimize button and menu actions did not establish document-hidden precondition in this attempt; no new minimize/restore pass is claimed", + "Earlier Human hidden-created webview ordinary foreground recovery remains its original tested-tuple proof, not newly measured here", + "No guest reload/recreation/fullscreen paint workaround was added; fixture was disposed through its owned release after the probe", + "The console cohort contains native /plugins/events net::ERR_FAILED entries; no page exception was observed, but the complete probe is not labeled error-free", + "Arbitrary remote sites, every native tooltip and Windows/Linux are not qualified by these representative fixtures" + ], + "remainingMacOS": [ + "Fixed-geometry native minimize/occlusion and hidden-created guest matrix on the final artifact; tool Minimize actions did not establish hidden state", + "Native tooltip positioning regression found and being corrected in #2299; new tooltip artifact acceptance required" + ], + "screenshots": [ + "final-embedded-focus.png", + "final-browser-menu-144.png", + "final-computer-menu-144.png", + "final-panel-menu-144.png", + "final-hide-restore-144.png" + ], + "nativeHideRestore": { + "artifact": "0.0.0-zoom.2268.14", + "action": "Native Cmd+H, then native AX Raise of the same window after about 8 seconds", + "before": { + "visibility": "visible", + "zoom": "1.44", + "dialogs": 0, + "active": { + "id": "", + "tag": "DIV", + "aria": null + }, + "trace": [ + { + "event": "dom-ready", + "visibility": "visible" + }, + { + "event": "dom-ready", + "visibility": "visible" + } + ], + "main": "保留 A", + "sameOrigin": "保留 B", + "guest": { + "id": 4, + "url": "http://127.0.0.1:39458/zoom-fixture.html", + "zoom": 1, + "rect": { + "x": 807.859375, + "y": 641.5546875, + "width": 388.796875, + "height": 144, + "top": 641.5546875, + "right": 1196.65625, + "bottom": 785.5546875, + "left": 807.859375 + }, + "state": { + "value": "保留输入", + "focus": "BODY", + "hasFocus": false, + "visibility": "visible" + } + } + }, + "hidden": { + "visibility": "hidden", + "zoom": "1.44", + "dialogs": 0, + "active": { + "id": "", + "tag": "DIV", + "aria": null + }, + "trace": [ + { + "event": "dom-ready", + "visibility": "visible" + }, + { + "event": "dom-ready", + "visibility": "visible" + } + ], + "main": "保留 A", + "sameOrigin": "保留 B", + "guest": { + "id": 4, + "url": "http://127.0.0.1:39458/zoom-fixture.html", + "zoom": 1, + "rect": { + "x": 807.859375, + "y": 641.5546875, + "width": 388.796875, + "height": 144, + "top": 641.5546875, + "right": 1196.65625, + "bottom": 785.5546875, + "left": 807.859375 + }, + "state": { + "value": "保留输入", + "focus": "BODY", + "hasFocus": false, + "visibility": "hidden" + } + } + }, + "after": { + "visibility": "visible", + "zoom": "1.44", + "dialogs": 0, + "active": { + "id": "", + "tag": "DIV", + "aria": null + }, + "trace": [ + { + "event": "dom-ready", + "visibility": "visible" + }, + { + "event": "dom-ready", + "visibility": "visible" + } + ], + "main": "保留 A", + "sameOrigin": "保留 B", + "guest": { + "id": 4, + "url": "http://127.0.0.1:39458/zoom-fixture.html", + "zoom": 1, + "rect": { + "x": 807.859375, + "y": 641.5546875, + "width": 388.796875, + "height": 144, + "top": 641.5546875, + "right": 1196.65625, + "bottom": 785.5546875, + "left": 807.859375 + }, + "state": { + "value": "保留输入", + "focus": "BODY", + "hasFocus": false, + "visibility": "visible" + } + } + }, + "result": "Visible -> hidden -> visible, unchanged guest id4, URL, two original dom-ready events, input, zoom1 and exact guest screen geometry; complete-window screenshot shows RGB ruler and input after restoration. No reload/recreation.", + "screenshot": "final-hide-restore-144.png" + }, + "nativePluginEvents": { + "route": "native dsh-app /plugins/events", + "sequence": [ + { + "at": "2026-10-19T13:24:36.548Z", + "kind": "request", + "id": "46122.632" + }, + { + "at": "2026-10-19T13:24:36.555Z", + "kind": "response", + "id": "46122.632", + "status": 200, + "mime": "text/event-stream" + }, + { + "at": "2026-10-19T13:24:36.555Z", + "kind": "sse", + "id": "46122.632", + "type": "graph", + "bytes": 31670 + }, + { + "at": "2026-10-19T13:29:37.688Z", + "kind": "failed", + "id": "46122.632", + "error": "net::ERR_FAILED", + "canceled": false + }, + { + "at": "2026-10-19T13:29:40.690Z", + "kind": "request", + "id": "46122.750" + }, + { + "at": "2026-10-19T13:29:40.695Z", + "kind": "response", + "id": "46122.750", + "status": 200, + "mime": "text/event-stream" + }, + { + "at": "2026-10-19T13:29:40.695Z", + "kind": "sse", + "id": "46122.750", + "type": "graph", + "bytes": 31670 + } + ], + "observation": "HTTP200 + graph, net::ERR_FAILED after301.1s, automatic EventSource retry3s later, HTTP200 + same-size full graph; no renderer reload. Exact underlying timeout source remains unconfirmed.", + "upstreamSource": "Shipped Desktop forwardWebRequest uses Node fetch; shipped dsh-client-hmr uses EventSource with native reconnect. No upstream changes." + } +} diff --git a/.github/pr-screenshots/2269-choice-menus/final-panel-menu-144.png b/.github/pr-screenshots/2269-choice-menus/final-panel-menu-144.png new file mode 100644 index 000000000..6b4f5ebe0 Binary files /dev/null and b/.github/pr-screenshots/2269-choice-menus/final-panel-menu-144.png differ diff --git a/.github/pr-screenshots/2269-choice-menus/native-menu-probe.json b/.github/pr-screenshots/2269-choice-menus/native-menu-probe.json new file mode 100644 index 000000000..1ea43c67b --- /dev/null +++ b/.github/pr-screenshots/2269-choice-menus/native-menu-probe.json @@ -0,0 +1,37 @@ +{ + "date": "2026-10-19", + "scope": "Actual native installed 0.0.0-zoom.2268.12; shared Select/Settings modal, not the isolated source fixture", + "desktop": "0.2.1-rc.2", + "observed": [ + "144% default Select opens all choices and selection applies", + "430% compact section navigation replaces the sidebar", + "Shift+Tab scrolls the recovery button into view at430%", + "Tab/Return opens the default picker at430%; menu is clamped and scrollable", + "Selecting23% applies the lower bound; selecting100% restores normal layout" + ], + "finalProduct": "0.0.0-zoom.2268.14 lifecycle, Host switch and window/fullscreen Human acceptance recorded in sibling S1 proof", + "tests": { + "fullCurrentClient": { + "passed": 2035, + "skipped": 1 + }, + "browser": { + "passed": 407, + "skipped": 8 + }, + "computerAndSelectedWorkspace": { + "passed": 234, + "skipped": 3 + }, + "sourceMenuMatrix": { + "passed": 136, + "total": 136, + "baselineFailed": 132 + } + }, + "freshEmbeddedAttempt": "Final-product QA fixture loaded, but CUA nested AX click did not transfer actual focus from Bot Settings; the root zoom event is excluded as webview proof. No guest reload/recreation was used as a remedy. Fixture disposed after preserving diagnostics. Prior Human embedded foreground/once-only acceptance is retained only for its tested tuple.", + "remaining": [ + "Fresh final-package embedded focus readback while foreground and wider native popup matrix; no all-macOS completion claim yet", + "Windows/Linux deferred to #2270" + ] +} diff --git a/.github/pr-screenshots/2269-choice-menus/native-settings-144.png b/.github/pr-screenshots/2269-choice-menus/native-settings-144.png new file mode 100644 index 000000000..118fa23dc Binary files /dev/null and b/.github/pr-screenshots/2269-choice-menus/native-settings-144.png differ diff --git a/.github/pr-screenshots/2269-choice-menus/native-settings-430-menu.png b/.github/pr-screenshots/2269-choice-menus/native-settings-430-menu.png new file mode 100644 index 000000000..063f1e4f6 Binary files /dev/null and b/.github/pr-screenshots/2269-choice-menus/native-settings-430-menu.png differ diff --git a/.github/pr-screenshots/2269-choice-menus/native-settings-430-recovery.png b/.github/pr-screenshots/2269-choice-menus/native-settings-430-recovery.png new file mode 100644 index 000000000..e228ae5fe Binary files /dev/null and b/.github/pr-screenshots/2269-choice-menus/native-settings-430-recovery.png differ diff --git a/.github/pr-screenshots/2269-choice-menus/native-tooltip-after-144.png b/.github/pr-screenshots/2269-choice-menus/native-tooltip-after-144.png new file mode 100644 index 000000000..63030d1ae Binary files /dev/null and b/.github/pr-screenshots/2269-choice-menus/native-tooltip-after-144.png differ diff --git a/.github/pr-screenshots/2269-choice-menus/native-tooltip-before-144.png b/.github/pr-screenshots/2269-choice-menus/native-tooltip-before-144.png new file mode 100644 index 000000000..198f2da0b Binary files /dev/null and b/.github/pr-screenshots/2269-choice-menus/native-tooltip-before-144.png differ diff --git a/.github/pr-screenshots/2269-choice-menus/source-matrix.json b/.github/pr-screenshots/2269-choice-menus/source-matrix.json new file mode 100644 index 000000000..1574266f2 --- /dev/null +++ b/.github/pr-screenshots/2269-choice-menus/source-matrix.json @@ -0,0 +1,4646 @@ +{ + "scope": "Isolated Chromium source-component regression using the production Select/SettingsDialog/PointerMenu and unmodified reachable native Menu/Modal code and CSS. No production Host, native OS chrome or embedded guest is exercised.", + "baseline": null, + "nativeSha256": "333ea89e7518ec1f1d33111bb9c65d382454bcc3638ebac7116253c92fe5d566", + "rows": [ + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": -8, + "anchor": { + "x": 1240.859375, + "y": 18.671875, + "width": 14.5625, + "height": 6.5, + "top": 18.671875, + "right": 1255.421875, + "bottom": 25.171875, + "left": 1240.859375 + }, + "menu": { + "x": 1215.5, + "y": 40, + "width": 33.484375, + "height": 25.5625, + "top": 40, + "right": 1248.984375, + "bottom": 65.5625, + "left": 1215.5 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": -7, + "anchor": { + "x": 1236.84375, + "y": 22.3125, + "width": 17.46875, + "height": 7.8125, + "top": 22.3125, + "right": 1254.3125, + "bottom": 30.125, + "left": 1236.84375 + }, + "menu": { + "x": 1208.796875, + "y": 39.984375, + "width": 40.1875, + "height": 30.671875, + "top": 39.984375, + "right": 1248.984375, + "bottom": 70.65625, + "left": 1208.796875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": -6, + "anchor": { + "x": 1231.984375, + "y": 26.78125, + "width": 20.984375, + "height": 9.375, + "top": 26.78125, + "right": 1252.96875, + "bottom": 36.15625, + "left": 1231.984375 + }, + "menu": { + "x": 1200.765625, + "y": 40, + "width": 48.21875, + "height": 36.78125, + "top": 40, + "right": 1248.984375, + "bottom": 76.78125, + "left": 1200.765625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": -5, + "anchor": { + "x": 1226.1875, + "y": 32.140625, + "width": 25.171875, + "height": 11.25, + "top": 32.140625, + "right": 1251.359375, + "bottom": 43.390625, + "left": 1226.1875 + }, + "menu": { + "x": 1191.140625, + "y": 45, + "width": 57.859375, + "height": 44.15625, + "top": 45, + "right": 1249, + "bottom": 89.15625, + "left": 1191.140625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": -4, + "anchor": { + "x": 1219.21875, + "y": 38.578125, + "width": 30.21875, + "height": 13.5, + "top": 38.578125, + "right": 1249.4375, + "bottom": 52.078125, + "left": 1219.21875 + }, + "menu": { + "x": 1179.546875, + "y": 54, + "width": 69.4375, + "height": 53.015625, + "top": 54, + "right": 1248.984375, + "bottom": 107.015625, + "left": 1179.546875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": -3, + "anchor": { + "x": 1210.828125, + "y": 46.28125, + "width": 36.296875, + "height": 16.203125, + "top": 46.28125, + "right": 1247.125, + "bottom": 62.484375, + "left": 1210.828125 + }, + "menu": { + "x": 1165.65625, + "y": 64.796875, + "width": 83.328125, + "height": 63.640625, + "top": 64.796875, + "right": 1248.984375, + "bottom": 128.4375, + "left": 1165.65625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": -2, + "anchor": { + "x": 1200.796875, + "y": 55.546875, + "width": 43.546875, + "height": 19.4375, + "top": 55.546875, + "right": 1244.34375, + "bottom": 74.984375, + "left": 1200.796875 + }, + "menu": { + "x": 1149, + "y": 77.765625, + "width": 100, + "height": 76.359375, + "top": 77.765625, + "right": 1249, + "bottom": 154.125, + "left": 1149 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": -1, + "anchor": { + "x": 1188.71875, + "y": 66.65625, + "width": 52.28125, + "height": 23.328125, + "top": 66.65625, + "right": 1241, + "bottom": 89.984375, + "left": 1188.71875 + }, + "menu": { + "x": 1129, + "y": 93.3125, + "width": 120, + "height": 91.640625, + "top": 93.3125, + "right": 1249, + "bottom": 184.953125, + "left": 1129 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": 0, + "anchor": { + "x": 1174.234375, + "y": 80, + "width": 62.765625, + "height": 28, + "top": 80, + "right": 1237, + "bottom": 108, + "left": 1174.234375 + }, + "menu": { + "x": 1105, + "y": 112, + "width": 144, + "height": 110, + "top": 112, + "right": 1249, + "bottom": 222, + "left": 1105 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": 1, + "anchor": { + "x": 1156.921875, + "y": 96, + "width": 75.28125, + "height": 33.59375, + "top": 96, + "right": 1232.203125, + "bottom": 129.59375, + "left": 1156.921875 + }, + "menu": { + "x": 1076.203125, + "y": 134.390625, + "width": 172.796875, + "height": 131.984375, + "top": 134.390625, + "right": 1249, + "bottom": 266.375, + "left": 1076.203125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": 2, + "anchor": { + "x": 1136.125, + "y": 115.1875, + "width": 90.328125, + "height": 40.3125, + "top": 115.1875, + "right": 1226.453125, + "bottom": 155.5, + "left": 1136.125 + }, + "menu": { + "x": 1041.640625, + "y": 161.265625, + "width": 207.359375, + "height": 158.359375, + "top": 161.265625, + "right": 1249, + "bottom": 319.625, + "left": 1041.640625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": 3, + "anchor": { + "x": 1111.109375, + "y": 138.234375, + "width": 108.421875, + "height": 48.375, + "top": 138.234375, + "right": 1219.53125, + "bottom": 186.609375, + "left": 1111.109375 + }, + "menu": { + "x": 1000.15625, + "y": 193.515625, + "width": 248.828125, + "height": 190.0625, + "top": 193.515625, + "right": 1248.984375, + "bottom": 383.578125, + "left": 1000.15625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": 4, + "anchor": { + "x": 1081.15625, + "y": 165.875, + "width": 130.078125, + "height": 58.046875, + "top": 165.875, + "right": 1211.234375, + "bottom": 223.921875, + "left": 1081.15625 + }, + "menu": { + "x": 950.390625, + "y": 232.21875, + "width": 298.59375, + "height": 228.0625, + "top": 232.21875, + "right": 1248.984375, + "bottom": 460.28125, + "left": 950.390625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": 5, + "anchor": { + "x": 1045.140625, + "y": 199.0625, + "width": 156.140625, + "height": 69.671875, + "top": 199.0625, + "right": 1201.28125, + "bottom": 268.734375, + "left": 1045.140625 + }, + "menu": { + "x": 890.671875, + "y": 278.6875, + "width": 358.3125, + "height": 273.6875, + "top": 278.6875, + "right": 1248.984375, + "bottom": 552.375, + "left": 890.671875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": 6, + "anchor": { + "x": 1002, + "y": 238.875, + "width": 187.34375, + "height": 83.59375, + "top": 238.875, + "right": 1189.34375, + "bottom": 322.46875, + "left": 1002 + }, + "menu": { + "x": 819.03125, + "y": 334.40625, + "width": 429.96875, + "height": 328.421875, + "top": 334.40625, + "right": 1249, + "bottom": 662.828125, + "left": 819.03125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": 7, + "anchor": { + "x": 950.1875, + "y": 286.640625, + "width": 224.828125, + "height": 100.328125, + "top": 286.640625, + "right": 1175.015625, + "bottom": 386.96875, + "left": 950.1875 + }, + "menu": { + "x": 733.03125, + "y": 401.296875, + "width": 515.96875, + "height": 394.140625, + "top": 401.296875, + "right": 1249, + "bottom": 795.4375, + "left": 733.03125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "start", + "level": 8, + "anchor": { + "x": 888.015625, + "y": 343.984375, + "width": 269.796875, + "height": 120.390625, + "top": 343.984375, + "right": 1157.8125, + "bottom": 464.375, + "left": 888.015625 + }, + "menu": { + "x": 629.828125, + "y": 335.0625, + "width": 619.171875, + "height": 472.9375, + "top": 335.0625, + "right": 1249, + "bottom": 808, + "left": 629.828125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": -8, + "anchor": { + "x": 1240.859375, + "y": 18.671875, + "width": 14.5625, + "height": 6.5, + "top": 18.671875, + "right": 1255.421875, + "bottom": 25.171875, + "left": 1240.859375 + }, + "menu": { + "x": 1215.5, + "y": 40, + "width": 33.484375, + "height": 25.5625, + "top": 40, + "right": 1248.984375, + "bottom": 65.5625, + "left": 1215.5 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": -7, + "anchor": { + "x": 1236.84375, + "y": 22.3125, + "width": 17.46875, + "height": 7.8125, + "top": 22.3125, + "right": 1254.3125, + "bottom": 30.125, + "left": 1236.84375 + }, + "menu": { + "x": 1208.796875, + "y": 39.984375, + "width": 40.1875, + "height": 30.671875, + "top": 39.984375, + "right": 1248.984375, + "bottom": 70.65625, + "left": 1208.796875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": -6, + "anchor": { + "x": 1231.984375, + "y": 26.78125, + "width": 20.984375, + "height": 9.375, + "top": 26.78125, + "right": 1252.96875, + "bottom": 36.15625, + "left": 1231.984375 + }, + "menu": { + "x": 1200.765625, + "y": 40, + "width": 48.21875, + "height": 36.78125, + "top": 40, + "right": 1248.984375, + "bottom": 76.78125, + "left": 1200.765625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": -5, + "anchor": { + "x": 1226.1875, + "y": 32.140625, + "width": 25.171875, + "height": 11.25, + "top": 32.140625, + "right": 1251.359375, + "bottom": 43.390625, + "left": 1226.1875 + }, + "menu": { + "x": 1191.140625, + "y": 45, + "width": 57.859375, + "height": 44.15625, + "top": 45, + "right": 1249, + "bottom": 89.15625, + "left": 1191.140625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": -4, + "anchor": { + "x": 1219.21875, + "y": 38.578125, + "width": 30.21875, + "height": 13.5, + "top": 38.578125, + "right": 1249.4375, + "bottom": 52.078125, + "left": 1219.21875 + }, + "menu": { + "x": 1179.546875, + "y": 54, + "width": 69.4375, + "height": 53.015625, + "top": 54, + "right": 1248.984375, + "bottom": 107.015625, + "left": 1179.546875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": -3, + "anchor": { + "x": 1210.828125, + "y": 46.28125, + "width": 36.296875, + "height": 16.203125, + "top": 46.28125, + "right": 1247.125, + "bottom": 62.484375, + "left": 1210.828125 + }, + "menu": { + "x": 1163.78125, + "y": 64.796875, + "width": 83.328125, + "height": 63.640625, + "top": 64.796875, + "right": 1247.109375, + "bottom": 128.4375, + "left": 1163.78125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": -2, + "anchor": { + "x": 1200.796875, + "y": 55.546875, + "width": 43.546875, + "height": 19.4375, + "top": 55.546875, + "right": 1244.34375, + "bottom": 74.984375, + "left": 1200.796875 + }, + "menu": { + "x": 1144.34375, + "y": 77.765625, + "width": 100, + "height": 76.359375, + "top": 77.765625, + "right": 1244.34375, + "bottom": 154.125, + "left": 1144.34375 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": -1, + "anchor": { + "x": 1188.71875, + "y": 66.65625, + "width": 52.28125, + "height": 23.328125, + "top": 66.65625, + "right": 1241, + "bottom": 89.984375, + "left": 1188.71875 + }, + "menu": { + "x": 1121, + "y": 93.3125, + "width": 120, + "height": 91.640625, + "top": 93.3125, + "right": 1241, + "bottom": 184.953125, + "left": 1121 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": 0, + "anchor": { + "x": 1174.234375, + "y": 80, + "width": 62.765625, + "height": 28, + "top": 80, + "right": 1237, + "bottom": 108, + "left": 1174.234375 + }, + "menu": { + "x": 1093, + "y": 112, + "width": 144, + "height": 110, + "top": 112, + "right": 1237, + "bottom": 222, + "left": 1093 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": 1, + "anchor": { + "x": 1156.921875, + "y": 96, + "width": 75.28125, + "height": 33.59375, + "top": 96, + "right": 1232.203125, + "bottom": 129.59375, + "left": 1156.921875 + }, + "menu": { + "x": 1059.40625, + "y": 134.390625, + "width": 172.796875, + "height": 131.984375, + "top": 134.390625, + "right": 1232.203125, + "bottom": 266.375, + "left": 1059.40625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": 2, + "anchor": { + "x": 1136.125, + "y": 115.1875, + "width": 90.328125, + "height": 40.3125, + "top": 115.1875, + "right": 1226.453125, + "bottom": 155.5, + "left": 1136.125 + }, + "menu": { + "x": 1019.09375, + "y": 161.265625, + "width": 207.359375, + "height": 158.359375, + "top": 161.265625, + "right": 1226.453125, + "bottom": 319.625, + "left": 1019.09375 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": 3, + "anchor": { + "x": 1111.109375, + "y": 138.234375, + "width": 108.421875, + "height": 48.375, + "top": 138.234375, + "right": 1219.53125, + "bottom": 186.609375, + "left": 1111.109375 + }, + "menu": { + "x": 970.6875, + "y": 193.515625, + "width": 248.828125, + "height": 190.0625, + "top": 193.515625, + "right": 1219.515625, + "bottom": 383.578125, + "left": 970.6875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": 4, + "anchor": { + "x": 1081.15625, + "y": 165.875, + "width": 130.078125, + "height": 58.046875, + "top": 165.875, + "right": 1211.234375, + "bottom": 223.921875, + "left": 1081.15625 + }, + "menu": { + "x": 912.640625, + "y": 232.21875, + "width": 298.59375, + "height": 228.0625, + "top": 232.21875, + "right": 1211.234375, + "bottom": 460.28125, + "left": 912.640625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": 5, + "anchor": { + "x": 1045.140625, + "y": 199.0625, + "width": 156.140625, + "height": 69.671875, + "top": 199.0625, + "right": 1201.28125, + "bottom": 268.734375, + "left": 1045.140625 + }, + "menu": { + "x": 842.953125, + "y": 278.6875, + "width": 358.3125, + "height": 273.6875, + "top": 278.6875, + "right": 1201.265625, + "bottom": 552.375, + "left": 842.953125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": 6, + "anchor": { + "x": 1002, + "y": 238.875, + "width": 187.34375, + "height": 83.59375, + "top": 238.875, + "right": 1189.34375, + "bottom": 322.46875, + "left": 1002 + }, + "menu": { + "x": 759.359375, + "y": 334.40625, + "width": 429.96875, + "height": 328.421875, + "top": 334.40625, + "right": 1189.328125, + "bottom": 662.828125, + "left": 759.359375 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": 7, + "anchor": { + "x": 950.1875, + "y": 286.640625, + "width": 224.828125, + "height": 100.328125, + "top": 286.640625, + "right": 1175.015625, + "bottom": 386.96875, + "left": 950.1875 + }, + "menu": { + "x": 659.046875, + "y": 401.296875, + "width": 515.96875, + "height": 394.140625, + "top": 401.296875, + "right": 1175.015625, + "bottom": 795.4375, + "left": 659.046875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": false, + "align": "end", + "level": 8, + "anchor": { + "x": 888.015625, + "y": 343.984375, + "width": 269.796875, + "height": 120.390625, + "top": 343.984375, + "right": 1157.8125, + "bottom": 464.375, + "left": 888.015625 + }, + "menu": { + "x": 538.640625, + "y": 335.0625, + "width": 619.171875, + "height": 472.9375, + "top": 335.0625, + "right": 1157.8125, + "bottom": 808, + "left": 538.640625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": -8, + "anchor": { + "x": 698.734375, + "y": 359.65625, + "width": 14.5625, + "height": 6.5, + "top": 359.65625, + "right": 713.296875, + "bottom": 366.15625, + "left": 698.734375 + }, + "menu": { + "x": 698.734375, + "y": 367.078125, + "width": 33.484375, + "height": 25.5625, + "top": 367.078125, + "right": 732.21875, + "bottom": 392.640625, + "left": 698.734375 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": -7, + "anchor": { + "x": 712.390625, + "y": 349.125, + "width": 17.46875, + "height": 7.8125, + "top": 349.125, + "right": 729.859375, + "bottom": 356.9375, + "left": 712.390625 + }, + "menu": { + "x": 712.375, + "y": 358.046875, + "width": 40.1875, + "height": 30.671875, + "top": 358.046875, + "right": 752.5625, + "bottom": 388.71875, + "left": 712.375 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": -6, + "anchor": { + "x": 728.734375, + "y": 336.546875, + "width": 20.984375, + "height": 9.375, + "top": 336.546875, + "right": 749.71875, + "bottom": 345.921875, + "left": 728.734375 + }, + "menu": { + "x": 728.734375, + "y": 347.265625, + "width": 48.21875, + "height": 36.78125, + "top": 347.265625, + "right": 776.953125, + "bottom": 384.046875, + "left": 728.734375 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": -5, + "anchor": { + "x": 748.390625, + "y": 321.296875, + "width": 25.171875, + "height": 11.25, + "top": 321.296875, + "right": 773.5625, + "bottom": 332.546875, + "left": 748.390625 + }, + "menu": { + "x": 748.390625, + "y": 334.15625, + "width": 57.859375, + "height": 44.15625, + "top": 334.15625, + "right": 806.25, + "bottom": 378.3125, + "left": 748.390625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": -4, + "anchor": { + "x": 771.96875, + "y": 303.28125, + "width": 30.21875, + "height": 13.5, + "top": 303.28125, + "right": 802.1875, + "bottom": 316.78125, + "left": 771.96875 + }, + "menu": { + "x": 771.953125, + "y": 318.703125, + "width": 69.4375, + "height": 53.015625, + "top": 318.703125, + "right": 841.390625, + "bottom": 371.71875, + "left": 771.953125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": -3, + "anchor": { + "x": 800.234375, + "y": 282.34375, + "width": 36.296875, + "height": 16.203125, + "top": 282.34375, + "right": 836.53125, + "bottom": 298.546875, + "left": 800.234375 + }, + "menu": { + "x": 800.234375, + "y": 300.859375, + "width": 83.328125, + "height": 63.640625, + "top": 300.859375, + "right": 883.5625, + "bottom": 364.5, + "left": 800.234375 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": -2, + "anchor": { + "x": 834.171875, + "y": 256.515625, + "width": 43.546875, + "height": 19.4375, + "top": 256.515625, + "right": 877.71875, + "bottom": 275.953125, + "left": 834.171875 + }, + "menu": { + "x": 834.171875, + "y": 278.734375, + "width": 100, + "height": 76.359375, + "top": 278.734375, + "right": 934.171875, + "bottom": 355.09375, + "left": 834.171875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": -1, + "anchor": { + "x": 874.875, + "y": 225.625, + "width": 52.28125, + "height": 23.328125, + "top": 225.625, + "right": 927.15625, + "bottom": 248.953125, + "left": 874.875 + }, + "menu": { + "x": 874.875, + "y": 252.28125, + "width": 120, + "height": 91.640625, + "top": 252.28125, + "right": 994.875, + "bottom": 343.921875, + "left": 874.875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": 0, + "anchor": { + "x": 923.734375, + "y": 189, + "width": 62.765625, + "height": 28, + "top": 189, + "right": 986.5, + "bottom": 217, + "left": 923.734375 + }, + "menu": { + "x": 923.71875, + "y": 221, + "width": 144, + "height": 110, + "top": 221, + "right": 1067.71875, + "bottom": 331, + "left": 923.71875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": 1, + "anchor": { + "x": 982.421875, + "y": 158.359375, + "width": 75.28125, + "height": 33.59375, + "top": 158.359375, + "right": 1057.703125, + "bottom": 191.953125, + "left": 982.421875 + }, + "menu": { + "x": 982.421875, + "y": 196.75, + "width": 172.796875, + "height": 131.984375, + "top": 196.75, + "right": 1155.21875, + "bottom": 328.734375, + "left": 982.421875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": 2, + "anchor": { + "x": 1052.8125, + "y": 181.84375, + "width": 90.328125, + "height": 40.3125, + "top": 181.84375, + "right": 1143.140625, + "bottom": 222.15625, + "left": 1052.8125 + }, + "menu": { + "x": 1041.640625, + "y": 227.921875, + "width": 207.359375, + "height": 158.359375, + "top": 227.921875, + "right": 1249, + "bottom": 386.28125, + "left": 1041.640625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": 3, + "anchor": { + "x": 1087.109375, + "y": 211, + "width": 108.421875, + "height": 48.375, + "top": 211, + "right": 1195.53125, + "bottom": 259.375, + "left": 1087.109375 + }, + "menu": { + "x": 1000.15625, + "y": 266.28125, + "width": 248.828125, + "height": 190.0625, + "top": 266.28125, + "right": 1248.984375, + "bottom": 456.34375, + "left": 1000.15625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": 4, + "anchor": { + "x": 1073.75, + "y": 245.609375, + "width": 130.078125, + "height": 58.046875, + "top": 245.609375, + "right": 1203.828125, + "bottom": 303.65625, + "left": 1073.75 + }, + "menu": { + "x": 950.390625, + "y": 311.953125, + "width": 298.59375, + "height": 228.0625, + "top": 311.953125, + "right": 1248.984375, + "bottom": 540.015625, + "left": 950.390625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": 5, + "anchor": { + "x": 1041.046875, + "y": 285.59375, + "width": 156.140625, + "height": 69.671875, + "top": 285.59375, + "right": 1197.1875, + "bottom": 355.265625, + "left": 1041.046875 + }, + "menu": { + "x": 890.671875, + "y": 365.203125, + "width": 358.3125, + "height": 273.6875, + "top": 365.203125, + "right": 1248.984375, + "bottom": 638.890625, + "left": 890.671875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": 6, + "anchor": { + "x": 1001.890625, + "y": 334.890625, + "width": 187.34375, + "height": 83.59375, + "top": 334.890625, + "right": 1189.234375, + "bottom": 418.484375, + "left": 1001.890625 + }, + "menu": { + "x": 819.03125, + "y": 430.421875, + "width": 429.96875, + "height": 328.421875, + "top": 430.421875, + "right": 1249, + "bottom": 758.84375, + "left": 819.03125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": 7, + "anchor": { + "x": 954.84375, + "y": 394.875, + "width": 224.828125, + "height": 100.328125, + "top": 394.875, + "right": 1179.671875, + "bottom": 495.203125, + "left": 954.84375 + }, + "menu": { + "x": 733.03125, + "y": 413.859375, + "width": 515.96875, + "height": 394.140625, + "top": 413.859375, + "right": 1249, + "bottom": 808, + "left": 733.03125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "start", + "level": 8, + "anchor": { + "x": 898.40625, + "y": 465.046875, + "width": 269.796875, + "height": 120.390625, + "top": 465.046875, + "right": 1168.203125, + "bottom": 585.4375, + "left": 898.40625 + }, + "menu": { + "x": 629.828125, + "y": 335.0625, + "width": 619.171875, + "height": 472.9375, + "top": 335.0625, + "right": 1249, + "bottom": 808, + "left": 629.828125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": -8, + "anchor": { + "x": 698.734375, + "y": 359.65625, + "width": 14.5625, + "height": 6.5, + "top": 359.65625, + "right": 713.296875, + "bottom": 366.15625, + "left": 698.734375 + }, + "menu": { + "x": 679.8125, + "y": 367.078125, + "width": 33.484375, + "height": 25.5625, + "top": 367.078125, + "right": 713.296875, + "bottom": 392.640625, + "left": 679.8125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": -7, + "anchor": { + "x": 712.390625, + "y": 349.125, + "width": 17.46875, + "height": 7.8125, + "top": 349.125, + "right": 729.859375, + "bottom": 356.9375, + "left": 712.390625 + }, + "menu": { + "x": 689.671875, + "y": 358.046875, + "width": 40.1875, + "height": 30.671875, + "top": 358.046875, + "right": 729.859375, + "bottom": 388.71875, + "left": 689.671875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": -6, + "anchor": { + "x": 728.734375, + "y": 336.546875, + "width": 20.984375, + "height": 9.375, + "top": 336.546875, + "right": 749.71875, + "bottom": 345.921875, + "left": 728.734375 + }, + "menu": { + "x": 701.5, + "y": 347.265625, + "width": 48.21875, + "height": 36.78125, + "top": 347.265625, + "right": 749.71875, + "bottom": 384.046875, + "left": 701.5 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": -5, + "anchor": { + "x": 748.390625, + "y": 321.296875, + "width": 25.171875, + "height": 11.25, + "top": 321.296875, + "right": 773.5625, + "bottom": 332.546875, + "left": 748.390625 + }, + "menu": { + "x": 715.703125, + "y": 334.15625, + "width": 57.859375, + "height": 44.15625, + "top": 334.15625, + "right": 773.5625, + "bottom": 378.3125, + "left": 715.703125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": -4, + "anchor": { + "x": 771.96875, + "y": 303.28125, + "width": 30.21875, + "height": 13.5, + "top": 303.28125, + "right": 802.1875, + "bottom": 316.78125, + "left": 771.96875 + }, + "menu": { + "x": 732.734375, + "y": 318.703125, + "width": 69.4375, + "height": 53.015625, + "top": 318.703125, + "right": 802.171875, + "bottom": 371.71875, + "left": 732.734375 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": -3, + "anchor": { + "x": 800.234375, + "y": 282.34375, + "width": 36.296875, + "height": 16.203125, + "top": 282.34375, + "right": 836.53125, + "bottom": 298.546875, + "left": 800.234375 + }, + "menu": { + "x": 753.203125, + "y": 300.859375, + "width": 83.328125, + "height": 63.640625, + "top": 300.859375, + "right": 836.53125, + "bottom": 364.5, + "left": 753.203125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": -2, + "anchor": { + "x": 834.171875, + "y": 256.515625, + "width": 43.546875, + "height": 19.4375, + "top": 256.515625, + "right": 877.71875, + "bottom": 275.953125, + "left": 834.171875 + }, + "menu": { + "x": 777.71875, + "y": 278.734375, + "width": 100, + "height": 76.359375, + "top": 278.734375, + "right": 877.71875, + "bottom": 355.09375, + "left": 777.71875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": -1, + "anchor": { + "x": 874.875, + "y": 225.625, + "width": 52.28125, + "height": 23.328125, + "top": 225.625, + "right": 927.15625, + "bottom": 248.953125, + "left": 874.875 + }, + "menu": { + "x": 807.15625, + "y": 252.28125, + "width": 120, + "height": 91.640625, + "top": 252.28125, + "right": 927.15625, + "bottom": 343.921875, + "left": 807.15625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": 0, + "anchor": { + "x": 923.734375, + "y": 189, + "width": 62.765625, + "height": 28, + "top": 189, + "right": 986.5, + "bottom": 217, + "left": 923.734375 + }, + "menu": { + "x": 842.5, + "y": 221, + "width": 144, + "height": 110, + "top": 221, + "right": 986.5, + "bottom": 331, + "left": 842.5 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": 1, + "anchor": { + "x": 982.421875, + "y": 158.359375, + "width": 75.28125, + "height": 33.59375, + "top": 158.359375, + "right": 1057.703125, + "bottom": 191.953125, + "left": 982.421875 + }, + "menu": { + "x": 884.90625, + "y": 196.75, + "width": 172.796875, + "height": 131.984375, + "top": 196.75, + "right": 1057.703125, + "bottom": 328.734375, + "left": 884.90625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": 2, + "anchor": { + "x": 1052.8125, + "y": 181.84375, + "width": 90.328125, + "height": 40.3125, + "top": 181.84375, + "right": 1143.140625, + "bottom": 222.15625, + "left": 1052.8125 + }, + "menu": { + "x": 935.765625, + "y": 227.921875, + "width": 207.359375, + "height": 158.359375, + "top": 227.921875, + "right": 1143.125, + "bottom": 386.28125, + "left": 935.765625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": 3, + "anchor": { + "x": 1087.109375, + "y": 211, + "width": 108.421875, + "height": 48.375, + "top": 211, + "right": 1195.53125, + "bottom": 259.375, + "left": 1087.109375 + }, + "menu": { + "x": 946.703125, + "y": 266.28125, + "width": 248.828125, + "height": 190.0625, + "top": 266.28125, + "right": 1195.53125, + "bottom": 456.34375, + "left": 946.703125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": 4, + "anchor": { + "x": 1073.75, + "y": 245.609375, + "width": 130.078125, + "height": 58.046875, + "top": 245.609375, + "right": 1203.828125, + "bottom": 303.65625, + "left": 1073.75 + }, + "menu": { + "x": 905.21875, + "y": 311.953125, + "width": 298.59375, + "height": 228.0625, + "top": 311.953125, + "right": 1203.8125, + "bottom": 540.015625, + "left": 905.21875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": 5, + "anchor": { + "x": 1041.046875, + "y": 285.59375, + "width": 156.140625, + "height": 69.671875, + "top": 285.59375, + "right": 1197.1875, + "bottom": 355.265625, + "left": 1041.046875 + }, + "menu": { + "x": 838.859375, + "y": 365.203125, + "width": 358.3125, + "height": 273.6875, + "top": 365.203125, + "right": 1197.171875, + "bottom": 638.890625, + "left": 838.859375 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": 6, + "anchor": { + "x": 1001.890625, + "y": 334.890625, + "width": 187.34375, + "height": 83.59375, + "top": 334.890625, + "right": 1189.234375, + "bottom": 418.484375, + "left": 1001.890625 + }, + "menu": { + "x": 759.265625, + "y": 430.421875, + "width": 429.96875, + "height": 328.421875, + "top": 430.421875, + "right": 1189.234375, + "bottom": 758.84375, + "left": 759.265625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": 7, + "anchor": { + "x": 954.84375, + "y": 394.875, + "width": 224.828125, + "height": 100.328125, + "top": 394.875, + "right": 1179.671875, + "bottom": 495.203125, + "left": 954.84375 + }, + "menu": { + "x": 663.6875, + "y": 413.859375, + "width": 515.96875, + "height": 394.140625, + "top": 413.859375, + "right": 1179.65625, + "bottom": 808, + "left": 663.6875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "dialog": true, + "align": "end", + "level": 8, + "anchor": { + "x": 898.40625, + "y": 465.046875, + "width": 269.796875, + "height": 120.390625, + "top": 465.046875, + "right": 1168.203125, + "bottom": 585.4375, + "left": 898.40625 + }, + "menu": { + "x": 549.015625, + "y": 335.0625, + "width": 619.171875, + "height": 472.9375, + "top": 335.0625, + "right": 1168.1875, + "bottom": 808, + "left": 549.015625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": -8, + "anchor": { + "x": 779.859375, + "y": 18.671875, + "width": 14.5625, + "height": 6.5, + "top": 18.671875, + "right": 794.421875, + "bottom": 25.171875, + "left": 779.859375 + }, + "menu": { + "x": 754.515625, + "y": 40, + "width": 33.484375, + "height": 25.5625, + "top": 40, + "right": 788, + "bottom": 65.5625, + "left": 754.515625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": -7, + "anchor": { + "x": 775.84375, + "y": 22.3125, + "width": 17.46875, + "height": 7.8125, + "top": 22.3125, + "right": 793.3125, + "bottom": 30.125, + "left": 775.84375 + }, + "menu": { + "x": 747.8125, + "y": 39.984375, + "width": 40.1875, + "height": 30.671875, + "top": 39.984375, + "right": 788, + "bottom": 70.65625, + "left": 747.8125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": -6, + "anchor": { + "x": 770.984375, + "y": 26.78125, + "width": 20.984375, + "height": 9.375, + "top": 26.78125, + "right": 791.96875, + "bottom": 36.15625, + "left": 770.984375 + }, + "menu": { + "x": 739.78125, + "y": 40, + "width": 48.21875, + "height": 36.78125, + "top": 40, + "right": 788, + "bottom": 76.78125, + "left": 739.78125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": -5, + "anchor": { + "x": 765.1875, + "y": 32.140625, + "width": 25.171875, + "height": 11.25, + "top": 32.140625, + "right": 790.359375, + "bottom": 43.390625, + "left": 765.1875 + }, + "menu": { + "x": 730.125, + "y": 45, + "width": 57.859375, + "height": 44.15625, + "top": 45, + "right": 787.984375, + "bottom": 89.15625, + "left": 730.125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": -4, + "anchor": { + "x": 758.21875, + "y": 38.578125, + "width": 30.21875, + "height": 13.5, + "top": 38.578125, + "right": 788.4375, + "bottom": 52.078125, + "left": 758.21875 + }, + "menu": { + "x": 718.546875, + "y": 54, + "width": 69.4375, + "height": 53.015625, + "top": 54, + "right": 787.984375, + "bottom": 107.015625, + "left": 718.546875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": -3, + "anchor": { + "x": 749.828125, + "y": 46.28125, + "width": 36.296875, + "height": 16.203125, + "top": 46.28125, + "right": 786.125, + "bottom": 62.484375, + "left": 749.828125 + }, + "menu": { + "x": 704.65625, + "y": 64.796875, + "width": 83.328125, + "height": 63.640625, + "top": 64.796875, + "right": 787.984375, + "bottom": 128.4375, + "left": 704.65625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": -2, + "anchor": { + "x": 739.796875, + "y": 55.546875, + "width": 43.546875, + "height": 19.4375, + "top": 55.546875, + "right": 783.34375, + "bottom": 74.984375, + "left": 739.796875 + }, + "menu": { + "x": 688, + "y": 77.765625, + "width": 100, + "height": 76.359375, + "top": 77.765625, + "right": 788, + "bottom": 154.125, + "left": 688 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": -1, + "anchor": { + "x": 727.71875, + "y": 66.65625, + "width": 52.28125, + "height": 23.328125, + "top": 66.65625, + "right": 780, + "bottom": 89.984375, + "left": 727.71875 + }, + "menu": { + "x": 668, + "y": 93.3125, + "width": 120, + "height": 91.640625, + "top": 93.3125, + "right": 788, + "bottom": 184.953125, + "left": 668 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": 0, + "anchor": { + "x": 713.234375, + "y": 80, + "width": 62.765625, + "height": 28, + "top": 80, + "right": 776, + "bottom": 108, + "left": 713.234375 + }, + "menu": { + "x": 644, + "y": 112, + "width": 144, + "height": 110, + "top": 112, + "right": 788, + "bottom": 222, + "left": 644 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": 1, + "anchor": { + "x": 695.921875, + "y": 96, + "width": 75.28125, + "height": 33.59375, + "top": 96, + "right": 771.203125, + "bottom": 129.59375, + "left": 695.921875 + }, + "menu": { + "x": 615.1875, + "y": 134.390625, + "width": 172.796875, + "height": 131.984375, + "top": 134.390625, + "right": 787.984375, + "bottom": 266.375, + "left": 615.1875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": 2, + "anchor": { + "x": 675.125, + "y": 115.1875, + "width": 90.328125, + "height": 40.3125, + "top": 115.1875, + "right": 765.453125, + "bottom": 155.5, + "left": 675.125 + }, + "menu": { + "x": 580.640625, + "y": 161.265625, + "width": 207.359375, + "height": 158.359375, + "top": 161.265625, + "right": 788, + "bottom": 319.625, + "left": 580.640625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": 3, + "anchor": { + "x": 650.109375, + "y": 138.234375, + "width": 108.421875, + "height": 48.375, + "top": 138.234375, + "right": 758.53125, + "bottom": 186.609375, + "left": 650.109375 + }, + "menu": { + "x": 539.171875, + "y": 193.515625, + "width": 248.828125, + "height": 190.0625, + "top": 193.515625, + "right": 788, + "bottom": 383.578125, + "left": 539.171875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": 4, + "anchor": { + "x": 620.15625, + "y": 165.875, + "width": 130.078125, + "height": 58.046875, + "top": 165.875, + "right": 750.234375, + "bottom": 223.921875, + "left": 620.15625 + }, + "menu": { + "x": 489.40625, + "y": 232.21875, + "width": 298.59375, + "height": 228.0625, + "top": 232.21875, + "right": 788, + "bottom": 460.28125, + "left": 489.40625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": 5, + "anchor": { + "x": 584.140625, + "y": 199.0625, + "width": 156.140625, + "height": 69.671875, + "top": 199.0625, + "right": 740.28125, + "bottom": 268.734375, + "left": 584.140625 + }, + "menu": { + "x": 429.6875, + "y": 278.6875, + "width": 358.3125, + "height": 273.6875, + "top": 278.6875, + "right": 788, + "bottom": 552.375, + "left": 429.6875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": 6, + "anchor": { + "x": 541, + "y": 238.875, + "width": 187.34375, + "height": 83.59375, + "top": 238.875, + "right": 728.34375, + "bottom": 322.46875, + "left": 541 + }, + "menu": { + "x": 358.03125, + "y": 259.5625, + "width": 429.96875, + "height": 328.421875, + "top": 259.5625, + "right": 788, + "bottom": 587.984375, + "left": 358.03125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": 7, + "anchor": { + "x": 489.1875, + "y": 286.640625, + "width": 224.828125, + "height": 100.328125, + "top": 286.640625, + "right": 714.015625, + "bottom": 386.96875, + "left": 489.1875 + }, + "menu": { + "x": 272.015625, + "y": 193.859375, + "width": 515.96875, + "height": 394.140625, + "top": 193.859375, + "right": 787.984375, + "bottom": 588, + "left": 272.015625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "start", + "level": 8, + "anchor": { + "x": 427.015625, + "y": 343.984375, + "width": 269.796875, + "height": 120.390625, + "top": 343.984375, + "right": 696.8125, + "bottom": 464.375, + "left": 427.015625 + }, + "menu": { + "x": 168.8125, + "y": 115.0625, + "width": 619.171875, + "height": 472.9375, + "top": 115.0625, + "right": 787.984375, + "bottom": 588, + "left": 168.8125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": -8, + "anchor": { + "x": 779.859375, + "y": 18.671875, + "width": 14.5625, + "height": 6.5, + "top": 18.671875, + "right": 794.421875, + "bottom": 25.171875, + "left": 779.859375 + }, + "menu": { + "x": 754.515625, + "y": 40, + "width": 33.484375, + "height": 25.5625, + "top": 40, + "right": 788, + "bottom": 65.5625, + "left": 754.515625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": -7, + "anchor": { + "x": 775.84375, + "y": 22.3125, + "width": 17.46875, + "height": 7.8125, + "top": 22.3125, + "right": 793.3125, + "bottom": 30.125, + "left": 775.84375 + }, + "menu": { + "x": 747.8125, + "y": 39.984375, + "width": 40.1875, + "height": 30.671875, + "top": 39.984375, + "right": 788, + "bottom": 70.65625, + "left": 747.8125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": -6, + "anchor": { + "x": 770.984375, + "y": 26.78125, + "width": 20.984375, + "height": 9.375, + "top": 26.78125, + "right": 791.96875, + "bottom": 36.15625, + "left": 770.984375 + }, + "menu": { + "x": 739.78125, + "y": 40, + "width": 48.21875, + "height": 36.78125, + "top": 40, + "right": 788, + "bottom": 76.78125, + "left": 739.78125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": -5, + "anchor": { + "x": 765.1875, + "y": 32.140625, + "width": 25.171875, + "height": 11.25, + "top": 32.140625, + "right": 790.359375, + "bottom": 43.390625, + "left": 765.1875 + }, + "menu": { + "x": 730.125, + "y": 45, + "width": 57.859375, + "height": 44.15625, + "top": 45, + "right": 787.984375, + "bottom": 89.15625, + "left": 730.125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": -4, + "anchor": { + "x": 758.21875, + "y": 38.578125, + "width": 30.21875, + "height": 13.5, + "top": 38.578125, + "right": 788.4375, + "bottom": 52.078125, + "left": 758.21875 + }, + "menu": { + "x": 718.546875, + "y": 54, + "width": 69.4375, + "height": 53.015625, + "top": 54, + "right": 787.984375, + "bottom": 107.015625, + "left": 718.546875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": -3, + "anchor": { + "x": 749.828125, + "y": 46.28125, + "width": 36.296875, + "height": 16.203125, + "top": 46.28125, + "right": 786.125, + "bottom": 62.484375, + "left": 749.828125 + }, + "menu": { + "x": 702.78125, + "y": 64.796875, + "width": 83.328125, + "height": 63.640625, + "top": 64.796875, + "right": 786.109375, + "bottom": 128.4375, + "left": 702.78125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": -2, + "anchor": { + "x": 739.796875, + "y": 55.546875, + "width": 43.546875, + "height": 19.4375, + "top": 55.546875, + "right": 783.34375, + "bottom": 74.984375, + "left": 739.796875 + }, + "menu": { + "x": 683.34375, + "y": 77.765625, + "width": 100, + "height": 76.359375, + "top": 77.765625, + "right": 783.34375, + "bottom": 154.125, + "left": 683.34375 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": -1, + "anchor": { + "x": 727.71875, + "y": 66.65625, + "width": 52.28125, + "height": 23.328125, + "top": 66.65625, + "right": 780, + "bottom": 89.984375, + "left": 727.71875 + }, + "menu": { + "x": 660, + "y": 93.3125, + "width": 120, + "height": 91.640625, + "top": 93.3125, + "right": 780, + "bottom": 184.953125, + "left": 660 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": 0, + "anchor": { + "x": 713.234375, + "y": 80, + "width": 62.765625, + "height": 28, + "top": 80, + "right": 776, + "bottom": 108, + "left": 713.234375 + }, + "menu": { + "x": 632, + "y": 112, + "width": 144, + "height": 110, + "top": 112, + "right": 776, + "bottom": 222, + "left": 632 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": 1, + "anchor": { + "x": 695.921875, + "y": 96, + "width": 75.28125, + "height": 33.59375, + "top": 96, + "right": 771.203125, + "bottom": 129.59375, + "left": 695.921875 + }, + "menu": { + "x": 598.40625, + "y": 134.390625, + "width": 172.796875, + "height": 131.984375, + "top": 134.390625, + "right": 771.203125, + "bottom": 266.375, + "left": 598.40625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": 2, + "anchor": { + "x": 675.125, + "y": 115.1875, + "width": 90.328125, + "height": 40.3125, + "top": 115.1875, + "right": 765.453125, + "bottom": 155.5, + "left": 675.125 + }, + "menu": { + "x": 558.078125, + "y": 161.265625, + "width": 207.359375, + "height": 158.359375, + "top": 161.265625, + "right": 765.4375, + "bottom": 319.625, + "left": 558.078125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": 3, + "anchor": { + "x": 650.109375, + "y": 138.234375, + "width": 108.421875, + "height": 48.375, + "top": 138.234375, + "right": 758.53125, + "bottom": 186.609375, + "left": 650.109375 + }, + "menu": { + "x": 509.6875, + "y": 193.515625, + "width": 248.828125, + "height": 190.0625, + "top": 193.515625, + "right": 758.515625, + "bottom": 383.578125, + "left": 509.6875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": 4, + "anchor": { + "x": 620.15625, + "y": 165.875, + "width": 130.078125, + "height": 58.046875, + "top": 165.875, + "right": 750.234375, + "bottom": 223.921875, + "left": 620.15625 + }, + "menu": { + "x": 451.625, + "y": 232.21875, + "width": 298.59375, + "height": 228.0625, + "top": 232.21875, + "right": 750.21875, + "bottom": 460.28125, + "left": 451.625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": 5, + "anchor": { + "x": 584.140625, + "y": 199.0625, + "width": 156.140625, + "height": 69.671875, + "top": 199.0625, + "right": 740.28125, + "bottom": 268.734375, + "left": 584.140625 + }, + "menu": { + "x": 381.96875, + "y": 278.6875, + "width": 358.3125, + "height": 273.6875, + "top": 278.6875, + "right": 740.28125, + "bottom": 552.375, + "left": 381.96875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": 6, + "anchor": { + "x": 541, + "y": 238.875, + "width": 187.34375, + "height": 83.59375, + "top": 238.875, + "right": 728.34375, + "bottom": 322.46875, + "left": 541 + }, + "menu": { + "x": 298.375, + "y": 259.5625, + "width": 429.96875, + "height": 328.421875, + "top": 259.5625, + "right": 728.34375, + "bottom": 587.984375, + "left": 298.375 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": 7, + "anchor": { + "x": 489.1875, + "y": 286.640625, + "width": 224.828125, + "height": 100.328125, + "top": 286.640625, + "right": 714.015625, + "bottom": 386.96875, + "left": 489.1875 + }, + "menu": { + "x": 198.03125, + "y": 193.859375, + "width": 515.96875, + "height": 394.140625, + "top": 193.859375, + "right": 714, + "bottom": 588, + "left": 198.03125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": false, + "align": "end", + "level": 8, + "anchor": { + "x": 427.015625, + "y": 343.984375, + "width": 269.796875, + "height": 120.390625, + "top": 343.984375, + "right": 696.8125, + "bottom": 464.375, + "left": 427.015625 + }, + "menu": { + "x": 77.625, + "y": 115.0625, + "width": 619.171875, + "height": 472.9375, + "top": 115.0625, + "right": 696.796875, + "bottom": 588, + "left": 77.625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": -8, + "anchor": { + "x": 468.234375, + "y": 249.65625, + "width": 14.5625, + "height": 6.5, + "top": 249.65625, + "right": 482.796875, + "bottom": 256.15625, + "left": 468.234375 + }, + "menu": { + "x": 468.21875, + "y": 257.078125, + "width": 33.484375, + "height": 25.5625, + "top": 257.078125, + "right": 501.703125, + "bottom": 282.640625, + "left": 468.21875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": -7, + "anchor": { + "x": 481.890625, + "y": 239.125, + "width": 17.46875, + "height": 7.8125, + "top": 239.125, + "right": 499.359375, + "bottom": 246.9375, + "left": 481.890625 + }, + "menu": { + "x": 481.875, + "y": 248.046875, + "width": 40.1875, + "height": 30.671875, + "top": 248.046875, + "right": 522.0625, + "bottom": 278.71875, + "left": 481.875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": -6, + "anchor": { + "x": 498.234375, + "y": 226.546875, + "width": 20.984375, + "height": 9.375, + "top": 226.546875, + "right": 519.21875, + "bottom": 235.921875, + "left": 498.234375 + }, + "menu": { + "x": 498.234375, + "y": 237.265625, + "width": 48.21875, + "height": 36.78125, + "top": 237.265625, + "right": 546.453125, + "bottom": 274.046875, + "left": 498.234375 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": -5, + "anchor": { + "x": 517.890625, + "y": 211.296875, + "width": 25.171875, + "height": 11.25, + "top": 211.296875, + "right": 543.0625, + "bottom": 222.546875, + "left": 517.890625 + }, + "menu": { + "x": 517.890625, + "y": 224.15625, + "width": 57.859375, + "height": 44.15625, + "top": 224.15625, + "right": 575.75, + "bottom": 268.3125, + "left": 517.890625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": -4, + "anchor": { + "x": 541.46875, + "y": 193.28125, + "width": 30.21875, + "height": 13.5, + "top": 193.28125, + "right": 571.6875, + "bottom": 206.78125, + "left": 541.46875 + }, + "menu": { + "x": 541.46875, + "y": 208.703125, + "width": 69.4375, + "height": 53.015625, + "top": 208.703125, + "right": 610.90625, + "bottom": 261.71875, + "left": 541.46875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": -3, + "anchor": { + "x": 569.734375, + "y": 172.34375, + "width": 36.296875, + "height": 16.203125, + "top": 172.34375, + "right": 606.03125, + "bottom": 188.546875, + "left": 569.734375 + }, + "menu": { + "x": 569.734375, + "y": 190.859375, + "width": 83.328125, + "height": 63.640625, + "top": 190.859375, + "right": 653.0625, + "bottom": 254.5, + "left": 569.734375 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": -2, + "anchor": { + "x": 603.671875, + "y": 146.515625, + "width": 43.546875, + "height": 19.4375, + "top": 146.515625, + "right": 647.21875, + "bottom": 165.953125, + "left": 603.671875 + }, + "menu": { + "x": 603.671875, + "y": 168.734375, + "width": 100, + "height": 76.359375, + "top": 168.734375, + "right": 703.671875, + "bottom": 245.09375, + "left": 603.671875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": -1, + "anchor": { + "x": 644.375, + "y": 122.296875, + "width": 52.28125, + "height": 23.328125, + "top": 122.296875, + "right": 696.65625, + "bottom": 145.625, + "left": 644.375 + }, + "menu": { + "x": 644.375, + "y": 148.953125, + "width": 120, + "height": 91.640625, + "top": 148.953125, + "right": 764.375, + "bottom": 240.59375, + "left": 644.375 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": 0, + "anchor": { + "x": 689.234375, + "y": 139, + "width": 62.765625, + "height": 28, + "top": 139, + "right": 752, + "bottom": 167, + "left": 689.234375 + }, + "menu": { + "x": 644, + "y": 171, + "width": 144, + "height": 110, + "top": 171, + "right": 788, + "bottom": 281, + "left": 644 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": 1, + "anchor": { + "x": 671.921875, + "y": 158.359375, + "width": 75.28125, + "height": 33.59375, + "top": 158.359375, + "right": 747.203125, + "bottom": 191.953125, + "left": 671.921875 + }, + "menu": { + "x": 615.1875, + "y": 196.75, + "width": 172.796875, + "height": 131.984375, + "top": 196.75, + "right": 787.984375, + "bottom": 328.734375, + "left": 615.1875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": 2, + "anchor": { + "x": 662.640625, + "y": 181.84375, + "width": 90.328125, + "height": 40.3125, + "top": 181.84375, + "right": 752.96875, + "bottom": 222.15625, + "left": 662.640625 + }, + "menu": { + "x": 580.640625, + "y": 227.921875, + "width": 207.359375, + "height": 158.359375, + "top": 227.921875, + "right": 788, + "bottom": 386.28125, + "left": 580.640625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": 3, + "anchor": { + "x": 639.9375, + "y": 211, + "width": 108.421875, + "height": 48.375, + "top": 211, + "right": 748.359375, + "bottom": 259.375, + "left": 639.9375 + }, + "menu": { + "x": 539.171875, + "y": 266.28125, + "width": 248.828125, + "height": 190.0625, + "top": 266.28125, + "right": 788, + "bottom": 456.34375, + "left": 539.171875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": 4, + "anchor": { + "x": 612.75, + "y": 245.609375, + "width": 130.078125, + "height": 58.046875, + "top": 245.609375, + "right": 742.828125, + "bottom": 303.65625, + "left": 612.75 + }, + "menu": { + "x": 489.40625, + "y": 311.953125, + "width": 298.59375, + "height": 228.0625, + "top": 311.953125, + "right": 788, + "bottom": 540.015625, + "left": 489.40625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": 5, + "anchor": { + "x": 580.046875, + "y": 285.59375, + "width": 156.140625, + "height": 69.671875, + "top": 285.59375, + "right": 736.1875, + "bottom": 355.265625, + "left": 580.046875 + }, + "menu": { + "x": 429.6875, + "y": 314.296875, + "width": 358.3125, + "height": 273.6875, + "top": 314.296875, + "right": 788, + "bottom": 587.984375, + "left": 429.6875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": 6, + "anchor": { + "x": 540.890625, + "y": 334.890625, + "width": 187.34375, + "height": 83.59375, + "top": 334.890625, + "right": 728.234375, + "bottom": 418.484375, + "left": 540.890625 + }, + "menu": { + "x": 358.03125, + "y": 259.5625, + "width": 429.96875, + "height": 328.421875, + "top": 259.5625, + "right": 788, + "bottom": 587.984375, + "left": 358.03125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": 7, + "anchor": { + "x": 493.84375, + "y": 394.875, + "width": 224.828125, + "height": 100.328125, + "top": 394.875, + "right": 718.671875, + "bottom": 495.203125, + "left": 493.84375 + }, + "menu": { + "x": 272.015625, + "y": 193.859375, + "width": 515.96875, + "height": 394.140625, + "top": 193.859375, + "right": 787.984375, + "bottom": 588, + "left": 272.015625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "start", + "level": 8, + "anchor": { + "x": 437.40625, + "y": 440.046875, + "width": 269.796875, + "height": 120.390625, + "top": 440.046875, + "right": 707.203125, + "bottom": 560.4375, + "left": 437.40625 + }, + "menu": { + "x": 168.828125, + "y": 115.0625, + "width": 619.171875, + "height": 472.9375, + "top": 115.0625, + "right": 788, + "bottom": 588, + "left": 168.828125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": -8, + "anchor": { + "x": 468.234375, + "y": 249.65625, + "width": 14.5625, + "height": 6.5, + "top": 249.65625, + "right": 482.796875, + "bottom": 256.15625, + "left": 468.234375 + }, + "menu": { + "x": 449.296875, + "y": 257.078125, + "width": 33.484375, + "height": 25.5625, + "top": 257.078125, + "right": 482.78125, + "bottom": 282.640625, + "left": 449.296875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": -7, + "anchor": { + "x": 481.890625, + "y": 239.125, + "width": 17.46875, + "height": 7.8125, + "top": 239.125, + "right": 499.359375, + "bottom": 246.9375, + "left": 481.890625 + }, + "menu": { + "x": 459.171875, + "y": 248.046875, + "width": 40.1875, + "height": 30.671875, + "top": 248.046875, + "right": 499.359375, + "bottom": 278.71875, + "left": 459.171875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": -6, + "anchor": { + "x": 498.234375, + "y": 226.546875, + "width": 20.984375, + "height": 9.375, + "top": 226.546875, + "right": 519.21875, + "bottom": 235.921875, + "left": 498.234375 + }, + "menu": { + "x": 471, + "y": 237.265625, + "width": 48.21875, + "height": 36.78125, + "top": 237.265625, + "right": 519.21875, + "bottom": 274.046875, + "left": 471 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": -5, + "anchor": { + "x": 517.890625, + "y": 211.296875, + "width": 25.171875, + "height": 11.25, + "top": 211.296875, + "right": 543.0625, + "bottom": 222.546875, + "left": 517.890625 + }, + "menu": { + "x": 485.1875, + "y": 224.15625, + "width": 57.859375, + "height": 44.15625, + "top": 224.15625, + "right": 543.046875, + "bottom": 268.3125, + "left": 485.1875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": -4, + "anchor": { + "x": 541.46875, + "y": 193.28125, + "width": 30.21875, + "height": 13.5, + "top": 193.28125, + "right": 571.6875, + "bottom": 206.78125, + "left": 541.46875 + }, + "menu": { + "x": 502.25, + "y": 208.703125, + "width": 69.4375, + "height": 53.015625, + "top": 208.703125, + "right": 571.6875, + "bottom": 261.71875, + "left": 502.25 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": -3, + "anchor": { + "x": 569.734375, + "y": 172.34375, + "width": 36.296875, + "height": 16.203125, + "top": 172.34375, + "right": 606.03125, + "bottom": 188.546875, + "left": 569.734375 + }, + "menu": { + "x": 522.703125, + "y": 190.859375, + "width": 83.328125, + "height": 63.640625, + "top": 190.859375, + "right": 606.03125, + "bottom": 254.5, + "left": 522.703125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": -2, + "anchor": { + "x": 603.671875, + "y": 146.515625, + "width": 43.546875, + "height": 19.4375, + "top": 146.515625, + "right": 647.21875, + "bottom": 165.953125, + "left": 603.671875 + }, + "menu": { + "x": 547.21875, + "y": 168.734375, + "width": 100, + "height": 76.359375, + "top": 168.734375, + "right": 647.21875, + "bottom": 245.09375, + "left": 547.21875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": -1, + "anchor": { + "x": 644.375, + "y": 122.296875, + "width": 52.28125, + "height": 23.328125, + "top": 122.296875, + "right": 696.65625, + "bottom": 145.625, + "left": 644.375 + }, + "menu": { + "x": 576.65625, + "y": 148.953125, + "width": 120, + "height": 91.640625, + "top": 148.953125, + "right": 696.65625, + "bottom": 240.59375, + "left": 576.65625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": 0, + "anchor": { + "x": 689.234375, + "y": 139, + "width": 62.765625, + "height": 28, + "top": 139, + "right": 752, + "bottom": 167, + "left": 689.234375 + }, + "menu": { + "x": 608, + "y": 171, + "width": 144, + "height": 110, + "top": 171, + "right": 752, + "bottom": 281, + "left": 608 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": 1, + "anchor": { + "x": 671.921875, + "y": 158.359375, + "width": 75.28125, + "height": 33.59375, + "top": 158.359375, + "right": 747.203125, + "bottom": 191.953125, + "left": 671.921875 + }, + "menu": { + "x": 574.40625, + "y": 196.75, + "width": 172.796875, + "height": 131.984375, + "top": 196.75, + "right": 747.203125, + "bottom": 328.734375, + "left": 574.40625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": 2, + "anchor": { + "x": 662.640625, + "y": 181.84375, + "width": 90.328125, + "height": 40.3125, + "top": 181.84375, + "right": 752.96875, + "bottom": 222.15625, + "left": 662.640625 + }, + "menu": { + "x": 545.59375, + "y": 227.921875, + "width": 207.359375, + "height": 158.359375, + "top": 227.921875, + "right": 752.953125, + "bottom": 386.28125, + "left": 545.59375 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": 3, + "anchor": { + "x": 639.9375, + "y": 211, + "width": 108.421875, + "height": 48.375, + "top": 211, + "right": 748.359375, + "bottom": 259.375, + "left": 639.9375 + }, + "menu": { + "x": 499.53125, + "y": 266.28125, + "width": 248.828125, + "height": 190.0625, + "top": 266.28125, + "right": 748.359375, + "bottom": 456.34375, + "left": 499.53125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": 4, + "anchor": { + "x": 612.75, + "y": 245.609375, + "width": 130.078125, + "height": 58.046875, + "top": 245.609375, + "right": 742.828125, + "bottom": 303.65625, + "left": 612.75 + }, + "menu": { + "x": 444.21875, + "y": 311.953125, + "width": 298.59375, + "height": 228.0625, + "top": 311.953125, + "right": 742.8125, + "bottom": 540.015625, + "left": 444.21875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": 5, + "anchor": { + "x": 580.046875, + "y": 285.59375, + "width": 156.140625, + "height": 69.671875, + "top": 285.59375, + "right": 736.1875, + "bottom": 355.265625, + "left": 580.046875 + }, + "menu": { + "x": 377.859375, + "y": 314.296875, + "width": 358.3125, + "height": 273.6875, + "top": 314.296875, + "right": 736.171875, + "bottom": 587.984375, + "left": 377.859375 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": 6, + "anchor": { + "x": 540.890625, + "y": 334.890625, + "width": 187.34375, + "height": 83.59375, + "top": 334.890625, + "right": 728.234375, + "bottom": 418.484375, + "left": 540.890625 + }, + "menu": { + "x": 298.265625, + "y": 259.5625, + "width": 429.96875, + "height": 328.421875, + "top": 259.5625, + "right": 728.234375, + "bottom": 587.984375, + "left": 298.265625 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": 7, + "anchor": { + "x": 493.84375, + "y": 394.875, + "width": 224.828125, + "height": 100.328125, + "top": 394.875, + "right": 718.671875, + "bottom": 495.203125, + "left": 493.84375 + }, + "menu": { + "x": 202.6875, + "y": 193.859375, + "width": 515.96875, + "height": 394.140625, + "top": 193.859375, + "right": 718.65625, + "bottom": 588, + "left": 202.6875 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "dialog": true, + "align": "end", + "level": 8, + "anchor": { + "x": 437.40625, + "y": 440.046875, + "width": 269.796875, + "height": 120.390625, + "top": 440.046875, + "right": 707.203125, + "bottom": 560.4375, + "left": 437.40625 + }, + "menu": { + "x": 88.03125, + "y": 115.0625, + "width": 619.171875, + "height": 472.9375, + "top": 115.0625, + "right": 707.203125, + "bottom": 588, + "left": 88.03125 + }, + "within": true, + "aligned": true, + "inDialog": true, + "focusReturned": true, + "ownerClosed": 0 + } + ], + "interactions": { + "keyboard": { + "selected": "Second", + "draft": "keep this draft", + "menuClosed": true, + "focus": "Fixture selector", + "ownerClosed": 0 + }, + "toggleClosed": true, + "outside": { + "closed": true, + "focus": "Retained draft" + } + }, + "errors": [] +} diff --git a/.github/pr-screenshots/2269-choice-menus/tooltip-source-matrix.json b/.github/pr-screenshots/2269-choice-menus/tooltip-source-matrix.json new file mode 100644 index 000000000..545a181d0 --- /dev/null +++ b/.github/pr-screenshots/2269-choice-menus/tooltip-source-matrix.json @@ -0,0 +1,6337 @@ +{ + "scope": "Isolated source/native-primitive fixture, not native Desktop pixels", + "sourceCommit": "b6275fc3af28f6b20dae34d9c7a35bc958303316", + "nativeSha256": "333ea89e7518ec1f1d33111bb9c65d382454bcc3638ebac7116253c92fe5d566", + "baselineFailures": 192, + "baselineCases": 204, + "selectCases": 136, + "tooltipCases": 204, + "openPinnedZoomChanges": 36, + "errors": [], + "rows": [ + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "center", + "level": -8, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246, + "width": 14.609375, + "height": 6.4375, + "top": 246, + "right": 519, + "bottom": 252.4375, + "left": 504.390625 + }, + "bubble": { + "x": 529, + "y": 246.203125, + "width": 22.796875, + "height": 6.03125, + "top": 246.203125, + "right": 551.796875, + "bottom": 252.234375, + "left": 529 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "center", + "level": -7, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246.734375, + "width": 17.140625, + "height": 6.53125, + "top": 246.734375, + "right": 521.53125, + "bottom": 253.265625, + "left": 504.390625 + }, + "bubble": { + "x": 531.531005859375, + "y": 246.3828125, + "width": 27.328125, + "height": 7.234375, + "top": 246.3828125, + "right": 558.859130859375, + "bottom": 253.6171875, + "left": 531.531005859375 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "center", + "level": -6, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246.671875, + "width": 20.140625, + "height": 7.65625, + "top": 246.671875, + "right": 524.53125, + "bottom": 254.328125, + "left": 504.390625 + }, + "bubble": { + "x": 534.531005859375, + "y": 246.1484375, + "width": 32.828125, + "height": 8.703125, + "top": 246.1484375, + "right": 567.359130859375, + "bottom": 254.8515625, + "left": 534.531005859375 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "center", + "level": -5, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246.609375, + "width": 23.765625, + "height": 8.78125, + "top": 246.609375, + "right": 528.15625, + "bottom": 255.390625, + "left": 504.390625 + }, + "bubble": { + "x": 538.156005859375, + "y": 245.78125, + "width": 39.40625, + "height": 10.4375, + "top": 245.78125, + "right": 577.562255859375, + "bottom": 256.21875, + "left": 538.156005859375 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "center", + "level": -4, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246.53125, + "width": 28.15625, + "height": 9.9375, + "top": 246.53125, + "right": 532.546875, + "bottom": 256.46875, + "left": 504.390625 + }, + "bubble": { + "x": 542.5469970703125, + "y": 245.2421875, + "width": 47.25, + "height": 12.515625, + "top": 245.2421875, + "right": 589.7969970703125, + "bottom": 257.7578125, + "left": 542.5469970703125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "center", + "level": -3, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 247.421875, + "width": 33.375, + "height": 12.15625, + "top": 247.421875, + "right": 537.765625, + "bottom": 259.578125, + "left": 504.390625 + }, + "bubble": { + "x": 547.7659912109375, + "y": 245.9765625, + "width": 56.75, + "height": 15.046875, + "top": 245.9765625, + "right": 604.5159912109375, + "bottom": 261.0234375, + "left": 547.7659912109375 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "center", + "level": -2, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 248.3125, + "width": 39.625, + "height": 13.375, + "top": 248.3125, + "right": 544.015625, + "bottom": 261.6875, + "left": 504.390625 + }, + "bubble": { + "x": 554.0159912109375, + "y": 245.9765625, + "width": 68.078125, + "height": 18.046875, + "top": 245.9765625, + "right": 622.0941162109375, + "bottom": 264.0234375, + "left": 554.0159912109375 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "center", + "level": -1, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 248.171875, + "width": 47.203125, + "height": 15.65625, + "top": 248.171875, + "right": 551.59375, + "bottom": 263.828125, + "left": 504.390625 + }, + "bubble": { + "x": 561.593994140625, + "y": 245.1640625, + "width": 81.71875, + "height": 21.671875, + "top": 245.1640625, + "right": 643.312744140625, + "bottom": 266.8359375, + "left": 561.593994140625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "center", + "level": 0, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 248, + "width": 58.25, + "height": 21, + "top": 248, + "right": 562.640625, + "bottom": 269, + "left": 504.390625 + }, + "bubble": { + "x": 572.640625, + "y": 245.5, + "width": 98.109375, + "height": 26, + "top": 245.5, + "right": 670.75, + "bottom": 271.5, + "left": 572.640625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "center", + "level": 1, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 248.8125, + "width": 69.078125, + "height": 24.375, + "top": 248.8125, + "right": 573.46875, + "bottom": 273.1875, + "left": 504.390625 + }, + "bubble": { + "x": 583.468994140625, + "y": 245.40625, + "width": 117.703125, + "height": 31.1875, + "top": 245.40625, + "right": 701.172119140625, + "bottom": 276.59375, + "left": 583.468994140625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "center", + "level": 2, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 249.5625, + "width": 82.09375, + "height": 28.875, + "top": 249.5625, + "right": 586.484375, + "bottom": 278.4375, + "left": 504.390625 + }, + "bubble": { + "x": 596.4840087890625, + "y": 245.2890625, + "width": 141.265625, + "height": 37.421875, + "top": 245.2890625, + "right": 737.7496337890625, + "bottom": 282.7109375, + "left": 596.4840087890625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "center", + "level": 3, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 249.28125, + "width": 99.734375, + "height": 36.4375, + "top": 249.28125, + "right": 604.125, + "bottom": 285.71875, + "left": 504.390625 + }, + "bubble": { + "x": 614.125, + "y": 245.046875, + "width": 169.484375, + "height": 44.90625, + "top": 245.046875, + "right": 783.609375, + "bottom": 289.953125, + "left": 614.125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "center", + "level": 4, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 249.9375, + "width": 120.453125, + "height": 44.125, + "top": 249.9375, + "right": 624.84375, + "bottom": 294.0625, + "left": 504.390625 + }, + "bubble": { + "x": 634.843994140625, + "y": 245.046875, + "width": 203.34375, + "height": 53.90625, + "top": 245.046875, + "right": 838.187744140625, + "bottom": 298.953125, + "left": 634.843994140625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "center", + "level": 5, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 251.515625, + "width": 142.953125, + "height": 50.96875, + "top": 251.515625, + "right": 647.34375, + "bottom": 302.484375, + "left": 504.390625 + }, + "bubble": { + "x": 657.343994140625, + "y": 244.6640625, + "width": 244.03125, + "height": 64.671875, + "top": 244.6640625, + "right": 901.375244140625, + "bottom": 309.3359375, + "left": 657.343994140625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "center", + "level": 6, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 253.015625, + "width": 171.953125, + "height": 60.96875, + "top": 253.015625, + "right": 676.34375, + "bottom": 313.984375, + "left": 504.390625 + }, + "bubble": { + "x": 686.343994140625, + "y": 244.6875, + "width": 292.84375, + "height": 77.625, + "top": 244.6875, + "right": 979.187744140625, + "bottom": 322.3125, + "left": 686.343994140625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "center", + "level": 7, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 252.421875, + "width": 208.328125, + "height": 76.15625, + "top": 252.421875, + "right": 712.71875, + "bottom": 328.578125, + "left": 504.390625 + }, + "bubble": { + "x": 722.718994140625, + "y": 243.9375, + "width": 351.484375, + "height": 93.125, + "top": 243.9375, + "right": 1074.203369140625, + "bottom": 337.0625, + "left": 722.718994140625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "center", + "level": 8, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 253.703125, + "width": 249.25, + "height": 90.59375, + "top": 253.703125, + "right": 753.640625, + "bottom": 344.296875, + "left": 504.390625 + }, + "bubble": { + "x": 763.64111328125, + "y": 243.109375, + "width": 421.75, + "height": 111.78125, + "top": 243.109375, + "right": 1185.39111328125, + "bottom": 354.890625, + "left": 763.64111328125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "end", + "level": -8, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246, + "width": 14.609375, + "height": 6.4375, + "top": 246, + "right": 519, + "bottom": 252.4375, + "left": 504.390625 + }, + "bubble": { + "x": 529, + "y": 246.203125, + "width": 22.796875, + "height": 6.03125, + "top": 246.203125, + "right": 551.796875, + "bottom": 252.234375, + "left": 529 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "end", + "level": -7, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246.734375, + "width": 17.140625, + "height": 6.53125, + "top": 246.734375, + "right": 521.53125, + "bottom": 253.265625, + "left": 504.390625 + }, + "bubble": { + "x": 531.531005859375, + "y": 246.3828125, + "width": 27.328125, + "height": 7.234375, + "top": 246.3828125, + "right": 558.859130859375, + "bottom": 253.6171875, + "left": 531.531005859375 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "end", + "level": -6, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246.671875, + "width": 20.140625, + "height": 7.65625, + "top": 246.671875, + "right": 524.53125, + "bottom": 254.328125, + "left": 504.390625 + }, + "bubble": { + "x": 534.531005859375, + "y": 246.1484375, + "width": 32.828125, + "height": 8.703125, + "top": 246.1484375, + "right": 567.359130859375, + "bottom": 254.8515625, + "left": 534.531005859375 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "end", + "level": -5, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246.609375, + "width": 23.765625, + "height": 8.78125, + "top": 246.609375, + "right": 528.15625, + "bottom": 255.390625, + "left": 504.390625 + }, + "bubble": { + "x": 538.156005859375, + "y": 245.78125, + "width": 39.40625, + "height": 10.4375, + "top": 245.78125, + "right": 577.562255859375, + "bottom": 256.21875, + "left": 538.156005859375 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "end", + "level": -4, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246.53125, + "width": 28.15625, + "height": 9.9375, + "top": 246.53125, + "right": 532.546875, + "bottom": 256.46875, + "left": 504.390625 + }, + "bubble": { + "x": 542.5469970703125, + "y": 245.2421875, + "width": 47.25, + "height": 12.515625, + "top": 245.2421875, + "right": 589.7969970703125, + "bottom": 257.7578125, + "left": 542.5469970703125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "end", + "level": -3, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 247.421875, + "width": 33.375, + "height": 12.15625, + "top": 247.421875, + "right": 537.765625, + "bottom": 259.578125, + "left": 504.390625 + }, + "bubble": { + "x": 547.7659912109375, + "y": 245.9765625, + "width": 56.75, + "height": 15.046875, + "top": 245.9765625, + "right": 604.5159912109375, + "bottom": 261.0234375, + "left": 547.7659912109375 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "end", + "level": -2, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 248.3125, + "width": 39.625, + "height": 13.375, + "top": 248.3125, + "right": 544.015625, + "bottom": 261.6875, + "left": 504.390625 + }, + "bubble": { + "x": 554.0159912109375, + "y": 245.9765625, + "width": 68.078125, + "height": 18.046875, + "top": 245.9765625, + "right": 622.0941162109375, + "bottom": 264.0234375, + "left": 554.0159912109375 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "end", + "level": -1, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 248.171875, + "width": 47.203125, + "height": 15.65625, + "top": 248.171875, + "right": 551.59375, + "bottom": 263.828125, + "left": 504.390625 + }, + "bubble": { + "x": 561.593994140625, + "y": 245.1640625, + "width": 81.71875, + "height": 21.671875, + "top": 245.1640625, + "right": 643.312744140625, + "bottom": 266.8359375, + "left": 561.593994140625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "end", + "level": 0, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 248, + "width": 58.25, + "height": 21, + "top": 248, + "right": 562.640625, + "bottom": 269, + "left": 504.390625 + }, + "bubble": { + "x": 572.640625, + "y": 245.5, + "width": 98.109375, + "height": 26, + "top": 245.5, + "right": 670.75, + "bottom": 271.5, + "left": 572.640625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "end", + "level": 1, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 248.8125, + "width": 69.078125, + "height": 24.375, + "top": 248.8125, + "right": 573.46875, + "bottom": 273.1875, + "left": 504.390625 + }, + "bubble": { + "x": 583.468994140625, + "y": 245.40625, + "width": 117.703125, + "height": 31.1875, + "top": 245.40625, + "right": 701.172119140625, + "bottom": 276.59375, + "left": 583.468994140625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "end", + "level": 2, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 249.5625, + "width": 82.09375, + "height": 28.875, + "top": 249.5625, + "right": 586.484375, + "bottom": 278.4375, + "left": 504.390625 + }, + "bubble": { + "x": 596.4840087890625, + "y": 245.2890625, + "width": 141.265625, + "height": 37.421875, + "top": 245.2890625, + "right": 737.7496337890625, + "bottom": 282.7109375, + "left": 596.4840087890625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "end", + "level": 3, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 249.28125, + "width": 99.734375, + "height": 36.4375, + "top": 249.28125, + "right": 604.125, + "bottom": 285.71875, + "left": 504.390625 + }, + "bubble": { + "x": 614.125, + "y": 245.046875, + "width": 169.484375, + "height": 44.90625, + "top": 245.046875, + "right": 783.609375, + "bottom": 289.953125, + "left": 614.125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "end", + "level": 4, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 249.9375, + "width": 120.453125, + "height": 44.125, + "top": 249.9375, + "right": 624.84375, + "bottom": 294.0625, + "left": 504.390625 + }, + "bubble": { + "x": 634.843994140625, + "y": 245.046875, + "width": 203.34375, + "height": 53.90625, + "top": 245.046875, + "right": 838.187744140625, + "bottom": 298.953125, + "left": 634.843994140625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "end", + "level": 5, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 251.515625, + "width": 142.953125, + "height": 50.96875, + "top": 251.515625, + "right": 647.34375, + "bottom": 302.484375, + "left": 504.390625 + }, + "bubble": { + "x": 657.343994140625, + "y": 244.6640625, + "width": 244.03125, + "height": 64.671875, + "top": 244.6640625, + "right": 901.375244140625, + "bottom": 309.3359375, + "left": 657.343994140625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "end", + "level": 6, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 253.015625, + "width": 171.953125, + "height": 60.96875, + "top": 253.015625, + "right": 676.34375, + "bottom": 313.984375, + "left": 504.390625 + }, + "bubble": { + "x": 686.343994140625, + "y": 244.6875, + "width": 292.84375, + "height": 77.625, + "top": 244.6875, + "right": 979.187744140625, + "bottom": 322.3125, + "left": 686.343994140625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "end", + "level": 7, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 252.421875, + "width": 208.328125, + "height": 76.15625, + "top": 252.421875, + "right": 712.71875, + "bottom": 328.578125, + "left": 504.390625 + }, + "bubble": { + "x": 722.718994140625, + "y": 243.9375, + "width": 351.484375, + "height": 93.125, + "top": 243.9375, + "right": 1074.203369140625, + "bottom": 337.0625, + "left": 722.718994140625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "right", + "align": "end", + "level": 8, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 253.703125, + "width": 249.25, + "height": 90.59375, + "top": 253.703125, + "right": 753.640625, + "bottom": 344.296875, + "left": 504.390625 + }, + "bubble": { + "x": 763.64111328125, + "y": 243.109375, + "width": 421.75, + "height": 111.78125, + "top": 243.109375, + "right": 1185.39111328125, + "bottom": 354.890625, + "left": 763.64111328125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "center", + "level": -8, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246, + "width": 14.609375, + "height": 6.4375, + "top": 246, + "right": 519, + "bottom": 252.4375, + "left": 504.390625 + }, + "bubble": { + "x": 500.296875, + "y": 260.43798828125, + "width": 22.796875, + "height": 6.03125, + "top": 260.43798828125, + "right": 523.09375, + "bottom": 266.46923828125, + "left": 500.296875 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "center", + "level": -7, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246.734375, + "width": 17.140625, + "height": 6.53125, + "top": 246.734375, + "right": 521.53125, + "bottom": 253.265625, + "left": 504.390625 + }, + "bubble": { + "x": 499.296875, + "y": 261.2659912109375, + "width": 27.328125, + "height": 7.234375, + "top": 261.2659912109375, + "right": 526.625, + "bottom": 268.5003662109375, + "left": 499.296875 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "center", + "level": -6, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246.671875, + "width": 20.140625, + "height": 7.65625, + "top": 246.671875, + "right": 524.53125, + "bottom": 254.328125, + "left": 504.390625 + }, + "bubble": { + "x": 498.046875, + "y": 262.3280029296875, + "width": 32.828125, + "height": 8.703125, + "top": 262.3280029296875, + "right": 530.875, + "bottom": 271.0311279296875, + "left": 498.046875 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "center", + "level": -5, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246.609375, + "width": 23.765625, + "height": 8.78125, + "top": 246.609375, + "right": 528.15625, + "bottom": 255.390625, + "left": 504.390625 + }, + "bubble": { + "x": 496.5703125, + "y": 263.3909912109375, + "width": 39.40625, + "height": 10.4375, + "top": 263.3909912109375, + "right": 535.9765625, + "bottom": 273.8284912109375, + "left": 496.5703125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "center", + "level": -4, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246.53125, + "width": 28.15625, + "height": 9.9375, + "top": 246.53125, + "right": 532.546875, + "bottom": 256.46875, + "left": 504.390625 + }, + "bubble": { + "x": 494.84375, + "y": 264.468994140625, + "width": 47.25, + "height": 12.515625, + "top": 264.468994140625, + "right": 542.09375, + "bottom": 276.984619140625, + "left": 494.84375 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "center", + "level": -3, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 247.421875, + "width": 33.375, + "height": 12.15625, + "top": 247.421875, + "right": 537.765625, + "bottom": 259.578125, + "left": 504.390625 + }, + "bubble": { + "x": 492.703125, + "y": 267.5780029296875, + "width": 56.75, + "height": 15.046875, + "top": 267.5780029296875, + "right": 549.453125, + "bottom": 282.6248779296875, + "left": 492.703125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "center", + "level": -2, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 248.3125, + "width": 39.625, + "height": 13.375, + "top": 248.3125, + "right": 544.015625, + "bottom": 261.6875, + "left": 504.390625 + }, + "bubble": { + "x": 490.1640625, + "y": 269.68798828125, + "width": 68.078125, + "height": 18.046875, + "top": 269.68798828125, + "right": 558.2421875, + "bottom": 287.73486328125, + "left": 490.1640625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "center", + "level": -1, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 248.171875, + "width": 47.203125, + "height": 15.65625, + "top": 248.171875, + "right": 551.59375, + "bottom": 263.828125, + "left": 504.390625 + }, + "bubble": { + "x": 487.1328125, + "y": 271.8280029296875, + "width": 81.71875, + "height": 21.671875, + "top": 271.8280029296875, + "right": 568.8515625, + "bottom": 293.4998779296875, + "left": 487.1328125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "center", + "level": 0, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 248, + "width": 58.25, + "height": 21, + "top": 248, + "right": 562.640625, + "bottom": 269, + "left": 504.390625 + }, + "bubble": { + "x": 484.4609375, + "y": 277, + "width": 98.109375, + "height": 26, + "top": 277, + "right": 582.5703125, + "bottom": 303, + "left": 484.4609375 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "center", + "level": 1, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 248.8125, + "width": 69.078125, + "height": 24.375, + "top": 248.8125, + "right": 573.46875, + "bottom": 273.1875, + "left": 504.390625 + }, + "bubble": { + "x": 480.078125, + "y": 281.18798828125, + "width": 117.703125, + "height": 31.1875, + "top": 281.18798828125, + "right": 597.78125, + "bottom": 312.37548828125, + "left": 480.078125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "center", + "level": 2, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 249.5625, + "width": 82.09375, + "height": 28.875, + "top": 249.5625, + "right": 586.484375, + "bottom": 278.4375, + "left": 504.390625 + }, + "bubble": { + "x": 474.8046875, + "y": 286.43798828125, + "width": 141.265625, + "height": 37.421875, + "top": 286.43798828125, + "right": 616.0703125, + "bottom": 323.85986328125, + "left": 474.8046875 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "center", + "level": 3, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 249.28125, + "width": 99.734375, + "height": 36.4375, + "top": 249.28125, + "right": 604.125, + "bottom": 285.71875, + "left": 504.390625 + }, + "bubble": { + "x": 469.515625, + "y": 293.718994140625, + "width": 169.484375, + "height": 44.90625, + "top": 293.718994140625, + "right": 639, + "bottom": 338.625244140625, + "left": 469.515625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "center", + "level": 4, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 249.9375, + "width": 120.453125, + "height": 44.125, + "top": 249.9375, + "right": 624.84375, + "bottom": 294.0625, + "left": 504.390625 + }, + "bubble": { + "x": 462.9453125, + "y": 302.06201171875, + "width": 203.34375, + "height": 53.90625, + "top": 302.06201171875, + "right": 666.2890625, + "bottom": 355.96826171875, + "left": 462.9453125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "center", + "level": 5, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 251.515625, + "width": 142.953125, + "height": 50.96875, + "top": 251.515625, + "right": 647.34375, + "bottom": 302.484375, + "left": 504.390625 + }, + "bubble": { + "x": 453.8515625, + "y": 310.4840087890625, + "width": 244.03125, + "height": 64.671875, + "top": 310.4840087890625, + "right": 697.8828125, + "bottom": 375.1558837890625, + "left": 453.8515625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "center", + "level": 6, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 253.015625, + "width": 171.953125, + "height": 60.96875, + "top": 253.015625, + "right": 676.34375, + "bottom": 313.984375, + "left": 504.390625 + }, + "bubble": { + "x": 443.9453125, + "y": 321.9840087890625, + "width": 292.84375, + "height": 77.625, + "top": 321.9840087890625, + "right": 736.7890625, + "bottom": 399.6090087890625, + "left": 443.9453125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "center", + "level": 7, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 252.421875, + "width": 208.328125, + "height": 76.15625, + "top": 252.421875, + "right": 712.71875, + "bottom": 328.578125, + "left": 504.390625 + }, + "bubble": { + "x": 432.8125, + "y": 336.5780029296875, + "width": 351.484375, + "height": 93.125, + "top": 336.5780029296875, + "right": 784.296875, + "bottom": 429.7030029296875, + "left": 432.8125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "center", + "level": 8, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 253.703125, + "width": 249.25, + "height": 90.59375, + "top": 253.703125, + "right": 753.640625, + "bottom": 344.296875, + "left": 504.390625 + }, + "bubble": { + "x": 418.140625, + "y": 352.2969970703125, + "width": 421.75, + "height": 111.78125, + "top": 352.2969970703125, + "right": 839.890625, + "bottom": 464.0782470703125, + "left": 418.140625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "end", + "level": -8, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246, + "width": 14.609375, + "height": 6.4375, + "top": 246, + "right": 519, + "bottom": 252.4375, + "left": 504.390625 + }, + "bubble": { + "x": 496.203125, + "y": 260.43798828125, + "width": 22.796875, + "height": 6.03125, + "top": 260.43798828125, + "right": 519, + "bottom": 266.46923828125, + "left": 496.203125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "end", + "level": -7, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246.734375, + "width": 17.140625, + "height": 6.53125, + "top": 246.734375, + "right": 521.53125, + "bottom": 253.265625, + "left": 504.390625 + }, + "bubble": { + "x": 494.203125, + "y": 261.2659912109375, + "width": 27.328125, + "height": 7.234375, + "top": 261.2659912109375, + "right": 521.53125, + "bottom": 268.5003662109375, + "left": 494.203125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "end", + "level": -6, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246.671875, + "width": 20.140625, + "height": 7.65625, + "top": 246.671875, + "right": 524.53125, + "bottom": 254.328125, + "left": 504.390625 + }, + "bubble": { + "x": 491.703125, + "y": 262.3280029296875, + "width": 32.828125, + "height": 8.703125, + "top": 262.3280029296875, + "right": 524.53125, + "bottom": 271.0311279296875, + "left": 491.703125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "end", + "level": -5, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246.609375, + "width": 23.765625, + "height": 8.78125, + "top": 246.609375, + "right": 528.15625, + "bottom": 255.390625, + "left": 504.390625 + }, + "bubble": { + "x": 488.75, + "y": 263.3909912109375, + "width": 39.40625, + "height": 10.4375, + "top": 263.3909912109375, + "right": 528.15625, + "bottom": 273.8284912109375, + "left": 488.75 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "end", + "level": -4, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246.53125, + "width": 28.15625, + "height": 9.9375, + "top": 246.53125, + "right": 532.546875, + "bottom": 256.46875, + "left": 504.390625 + }, + "bubble": { + "x": 485.296875, + "y": 264.468994140625, + "width": 47.25, + "height": 12.515625, + "top": 264.468994140625, + "right": 532.546875, + "bottom": 276.984619140625, + "left": 485.296875 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "end", + "level": -3, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 247.421875, + "width": 33.375, + "height": 12.15625, + "top": 247.421875, + "right": 537.765625, + "bottom": 259.578125, + "left": 504.390625 + }, + "bubble": { + "x": 481.015625, + "y": 267.5780029296875, + "width": 56.75, + "height": 15.046875, + "top": 267.5780029296875, + "right": 537.765625, + "bottom": 282.6248779296875, + "left": 481.015625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "end", + "level": -2, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 248.3125, + "width": 39.625, + "height": 13.375, + "top": 248.3125, + "right": 544.015625, + "bottom": 261.6875, + "left": 504.390625 + }, + "bubble": { + "x": 475.9375, + "y": 269.68798828125, + "width": 68.078125, + "height": 18.046875, + "top": 269.68798828125, + "right": 544.015625, + "bottom": 287.73486328125, + "left": 475.9375 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "end", + "level": -1, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 248.171875, + "width": 47.203125, + "height": 15.65625, + "top": 248.171875, + "right": 551.59375, + "bottom": 263.828125, + "left": 504.390625 + }, + "bubble": { + "x": 469.875, + "y": 271.8280029296875, + "width": 81.71875, + "height": 21.671875, + "top": 271.8280029296875, + "right": 551.59375, + "bottom": 293.4998779296875, + "left": 469.875 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "end", + "level": 0, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 248, + "width": 58.25, + "height": 21, + "top": 248, + "right": 562.640625, + "bottom": 269, + "left": 504.390625 + }, + "bubble": { + "x": 464.53125, + "y": 277, + "width": 98.109375, + "height": 26, + "top": 277, + "right": 562.640625, + "bottom": 303, + "left": 464.53125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "end", + "level": 1, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 248.8125, + "width": 69.078125, + "height": 24.375, + "top": 248.8125, + "right": 573.46875, + "bottom": 273.1875, + "left": 504.390625 + }, + "bubble": { + "x": 455.765625, + "y": 281.18798828125, + "width": 117.703125, + "height": 31.1875, + "top": 281.18798828125, + "right": 573.46875, + "bottom": 312.37548828125, + "left": 455.765625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "end", + "level": 2, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 249.5625, + "width": 82.09375, + "height": 28.875, + "top": 249.5625, + "right": 586.484375, + "bottom": 278.4375, + "left": 504.390625 + }, + "bubble": { + "x": 445.21875, + "y": 286.43798828125, + "width": 141.265625, + "height": 37.421875, + "top": 286.43798828125, + "right": 586.484375, + "bottom": 323.85986328125, + "left": 445.21875 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "end", + "level": 3, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 249.28125, + "width": 99.734375, + "height": 36.4375, + "top": 249.28125, + "right": 604.125, + "bottom": 285.71875, + "left": 504.390625 + }, + "bubble": { + "x": 434.640625, + "y": 293.718994140625, + "width": 169.484375, + "height": 44.90625, + "top": 293.718994140625, + "right": 604.125, + "bottom": 338.625244140625, + "left": 434.640625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "end", + "level": 4, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 249.9375, + "width": 120.453125, + "height": 44.125, + "top": 249.9375, + "right": 624.84375, + "bottom": 294.0625, + "left": 504.390625 + }, + "bubble": { + "x": 421.5, + "y": 302.06201171875, + "width": 203.34375, + "height": 53.90625, + "top": 302.06201171875, + "right": 624.84375, + "bottom": 355.96826171875, + "left": 421.5 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "end", + "level": 5, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 251.515625, + "width": 142.953125, + "height": 50.96875, + "top": 251.515625, + "right": 647.34375, + "bottom": 302.484375, + "left": 504.390625 + }, + "bubble": { + "x": 403.3125, + "y": 310.4840087890625, + "width": 244.03125, + "height": 64.671875, + "top": 310.4840087890625, + "right": 647.34375, + "bottom": 375.1558837890625, + "left": 403.3125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "end", + "level": 6, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 253.015625, + "width": 171.953125, + "height": 60.96875, + "top": 253.015625, + "right": 676.34375, + "bottom": 313.984375, + "left": 504.390625 + }, + "bubble": { + "x": 383.5, + "y": 321.9840087890625, + "width": 292.84375, + "height": 77.625, + "top": 321.9840087890625, + "right": 676.34375, + "bottom": 399.6090087890625, + "left": 383.5 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "end", + "level": 7, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 252.421875, + "width": 208.328125, + "height": 76.15625, + "top": 252.421875, + "right": 712.71875, + "bottom": 328.578125, + "left": 504.390625 + }, + "bubble": { + "x": 361.234375, + "y": 336.5780029296875, + "width": 351.484375, + "height": 93.125, + "top": 336.5780029296875, + "right": 712.71875, + "bottom": 429.7030029296875, + "left": 361.234375 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "bottom", + "align": "end", + "level": 8, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 253.703125, + "width": 249.25, + "height": 90.59375, + "top": 253.703125, + "right": 753.640625, + "bottom": 344.296875, + "left": 504.390625 + }, + "bubble": { + "x": 331.890625, + "y": 352.2969970703125, + "width": 421.75, + "height": 111.78125, + "top": 352.2969970703125, + "right": 753.640625, + "bottom": 464.0782470703125, + "left": 331.890625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "center", + "level": -8, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246, + "width": 14.609375, + "height": 6.4375, + "top": 246, + "right": 519, + "bottom": 252.4375, + "left": 504.390625 + }, + "bubble": { + "x": 500.296875, + "y": 231.96875, + "width": 22.796875, + "height": 6.03125, + "top": 231.96875, + "right": 523.09375, + "bottom": 238, + "left": 500.296875 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "center", + "level": -7, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246.734375, + "width": 17.140625, + "height": 6.53125, + "top": 246.734375, + "right": 521.53125, + "bottom": 253.265625, + "left": 504.390625 + }, + "bubble": { + "x": 499.296875, + "y": 231.49961853027344, + "width": 27.328125, + "height": 7.234375, + "top": 231.49961853027344, + "right": 526.625, + "bottom": 238.73399353027344, + "left": 499.296875 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "center", + "level": -6, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246.671875, + "width": 20.140625, + "height": 7.65625, + "top": 246.671875, + "right": 524.53125, + "bottom": 254.328125, + "left": 504.390625 + }, + "bubble": { + "x": 498.046875, + "y": 229.9688720703125, + "width": 32.828125, + "height": 8.703125, + "top": 229.9688720703125, + "right": 530.875, + "bottom": 238.6719970703125, + "left": 498.046875 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "center", + "level": -5, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246.609375, + "width": 23.765625, + "height": 8.78125, + "top": 246.609375, + "right": 528.15625, + "bottom": 255.390625, + "left": 504.390625 + }, + "bubble": { + "x": 496.5703125, + "y": 228.17149353027344, + "width": 39.40625, + "height": 10.4375, + "top": 228.17149353027344, + "right": 535.9765625, + "bottom": 238.60899353027344, + "left": 496.5703125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "center", + "level": -4, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246.53125, + "width": 28.15625, + "height": 9.9375, + "top": 246.53125, + "right": 532.546875, + "bottom": 256.46875, + "left": 504.390625 + }, + "bubble": { + "x": 494.84375, + "y": 226.015380859375, + "width": 47.25, + "height": 12.515625, + "top": 226.015380859375, + "right": 542.09375, + "bottom": 238.531005859375, + "left": 494.84375 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "center", + "level": -3, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 247.421875, + "width": 33.375, + "height": 12.15625, + "top": 247.421875, + "right": 537.765625, + "bottom": 259.578125, + "left": 504.390625 + }, + "bubble": { + "x": 492.703125, + "y": 224.3751220703125, + "width": 56.75, + "height": 15.046875, + "top": 224.3751220703125, + "right": 549.453125, + "bottom": 239.4219970703125, + "left": 492.703125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "center", + "level": -2, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 248.3125, + "width": 39.625, + "height": 13.375, + "top": 248.3125, + "right": 544.015625, + "bottom": 261.6875, + "left": 504.390625 + }, + "bubble": { + "x": 490.1640625, + "y": 222.26512145996094, + "width": 68.078125, + "height": 18.046875, + "top": 222.26512145996094, + "right": 558.2421875, + "bottom": 240.31199645996094, + "left": 490.1640625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "center", + "level": -1, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 248.171875, + "width": 47.203125, + "height": 15.65625, + "top": 248.171875, + "right": 551.59375, + "bottom": 263.828125, + "left": 504.390625 + }, + "bubble": { + "x": 487.1328125, + "y": 218.5001220703125, + "width": 81.71875, + "height": 21.671875, + "top": 218.5001220703125, + "right": 568.8515625, + "bottom": 240.1719970703125, + "left": 487.1328125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "center", + "level": 0, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 248, + "width": 58.25, + "height": 21, + "top": 248, + "right": 562.640625, + "bottom": 269, + "left": 504.390625 + }, + "bubble": { + "x": 484.4609375, + "y": 214, + "width": 98.109375, + "height": 26, + "top": 214, + "right": 582.5703125, + "bottom": 240, + "left": 484.4609375 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "center", + "level": 1, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 248.8125, + "width": 69.078125, + "height": 24.375, + "top": 248.8125, + "right": 573.46875, + "bottom": 273.1875, + "left": 504.390625 + }, + "bubble": { + "x": 480.078125, + "y": 209.62449645996094, + "width": 117.703125, + "height": 31.1875, + "top": 209.62449645996094, + "right": 597.78125, + "bottom": 240.81199645996094, + "left": 480.078125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "center", + "level": 2, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 249.5625, + "width": 82.09375, + "height": 28.875, + "top": 249.5625, + "right": 586.484375, + "bottom": 278.4375, + "left": 504.390625 + }, + "bubble": { + "x": 474.8046875, + "y": 204.14012145996094, + "width": 141.265625, + "height": 37.421875, + "top": 204.14012145996094, + "right": 616.0703125, + "bottom": 241.56199645996094, + "left": 474.8046875 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "center", + "level": 3, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 249.28125, + "width": 99.734375, + "height": 36.4375, + "top": 249.28125, + "right": 604.125, + "bottom": 285.71875, + "left": 504.390625 + }, + "bubble": { + "x": 469.515625, + "y": 196.374755859375, + "width": 169.484375, + "height": 44.90625, + "top": 196.374755859375, + "right": 639, + "bottom": 241.281005859375, + "left": 469.515625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "center", + "level": 4, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 249.9375, + "width": 120.453125, + "height": 44.125, + "top": 249.9375, + "right": 624.84375, + "bottom": 294.0625, + "left": 504.390625 + }, + "bubble": { + "x": 462.9453125, + "y": 188.03173828125, + "width": 203.34375, + "height": 53.90625, + "top": 188.03173828125, + "right": 666.2890625, + "bottom": 241.93798828125, + "left": 462.9453125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "center", + "level": 5, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 251.515625, + "width": 142.953125, + "height": 50.96875, + "top": 251.515625, + "right": 647.34375, + "bottom": 302.484375, + "left": 504.390625 + }, + "bubble": { + "x": 453.8515625, + "y": 178.8441162109375, + "width": 244.03125, + "height": 64.671875, + "top": 178.8441162109375, + "right": 697.8828125, + "bottom": 243.5159912109375, + "left": 453.8515625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "center", + "level": 6, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 253.015625, + "width": 171.953125, + "height": 60.96875, + "top": 253.015625, + "right": 676.34375, + "bottom": 313.984375, + "left": 504.390625 + }, + "bubble": { + "x": 443.9453125, + "y": 167.3909912109375, + "width": 292.84375, + "height": 77.625, + "top": 167.3909912109375, + "right": 736.7890625, + "bottom": 245.0159912109375, + "left": 443.9453125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "center", + "level": 7, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 252.421875, + "width": 208.328125, + "height": 76.15625, + "top": 252.421875, + "right": 712.71875, + "bottom": 328.578125, + "left": 504.390625 + }, + "bubble": { + "x": 432.8125, + "y": 151.2969970703125, + "width": 351.484375, + "height": 93.125, + "top": 151.2969970703125, + "right": 784.296875, + "bottom": 244.4219970703125, + "left": 432.8125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "center", + "level": 8, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 253.703125, + "width": 249.25, + "height": 90.59375, + "top": 253.703125, + "right": 753.640625, + "bottom": 344.296875, + "left": 504.390625 + }, + "bubble": { + "x": 418.140625, + "y": 133.9217529296875, + "width": 421.75, + "height": 111.78125, + "top": 133.9217529296875, + "right": 839.890625, + "bottom": 245.7030029296875, + "left": 418.140625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "end", + "level": -8, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246, + "width": 14.609375, + "height": 6.4375, + "top": 246, + "right": 519, + "bottom": 252.4375, + "left": 504.390625 + }, + "bubble": { + "x": 496.203125, + "y": 231.96875, + "width": 22.796875, + "height": 6.03125, + "top": 231.96875, + "right": 519, + "bottom": 238, + "left": 496.203125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "end", + "level": -7, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246.734375, + "width": 17.140625, + "height": 6.53125, + "top": 246.734375, + "right": 521.53125, + "bottom": 253.265625, + "left": 504.390625 + }, + "bubble": { + "x": 494.203125, + "y": 231.49961853027344, + "width": 27.328125, + "height": 7.234375, + "top": 231.49961853027344, + "right": 521.53125, + "bottom": 238.73399353027344, + "left": 494.203125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "end", + "level": -6, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246.671875, + "width": 20.140625, + "height": 7.65625, + "top": 246.671875, + "right": 524.53125, + "bottom": 254.328125, + "left": 504.390625 + }, + "bubble": { + "x": 491.703125, + "y": 229.9688720703125, + "width": 32.828125, + "height": 8.703125, + "top": 229.9688720703125, + "right": 524.53125, + "bottom": 238.6719970703125, + "left": 491.703125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "end", + "level": -5, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246.609375, + "width": 23.765625, + "height": 8.78125, + "top": 246.609375, + "right": 528.15625, + "bottom": 255.390625, + "left": 504.390625 + }, + "bubble": { + "x": 488.75, + "y": 228.17149353027344, + "width": 39.40625, + "height": 10.4375, + "top": 228.17149353027344, + "right": 528.15625, + "bottom": 238.60899353027344, + "left": 488.75 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "end", + "level": -4, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 246.53125, + "width": 28.15625, + "height": 9.9375, + "top": 246.53125, + "right": 532.546875, + "bottom": 256.46875, + "left": 504.390625 + }, + "bubble": { + "x": 485.296875, + "y": 226.015380859375, + "width": 47.25, + "height": 12.515625, + "top": 226.015380859375, + "right": 532.546875, + "bottom": 238.531005859375, + "left": 485.296875 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "end", + "level": -3, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 247.421875, + "width": 33.375, + "height": 12.15625, + "top": 247.421875, + "right": 537.765625, + "bottom": 259.578125, + "left": 504.390625 + }, + "bubble": { + "x": 481.015625, + "y": 224.3751220703125, + "width": 56.75, + "height": 15.046875, + "top": 224.3751220703125, + "right": 537.765625, + "bottom": 239.4219970703125, + "left": 481.015625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "end", + "level": -2, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 248.3125, + "width": 39.625, + "height": 13.375, + "top": 248.3125, + "right": 544.015625, + "bottom": 261.6875, + "left": 504.390625 + }, + "bubble": { + "x": 475.9375, + "y": 222.26512145996094, + "width": 68.078125, + "height": 18.046875, + "top": 222.26512145996094, + "right": 544.015625, + "bottom": 240.31199645996094, + "left": 475.9375 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "end", + "level": -1, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 248.171875, + "width": 47.203125, + "height": 15.65625, + "top": 248.171875, + "right": 551.59375, + "bottom": 263.828125, + "left": 504.390625 + }, + "bubble": { + "x": 469.875, + "y": 218.5001220703125, + "width": 81.71875, + "height": 21.671875, + "top": 218.5001220703125, + "right": 551.59375, + "bottom": 240.1719970703125, + "left": 469.875 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "end", + "level": 0, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 248, + "width": 58.25, + "height": 21, + "top": 248, + "right": 562.640625, + "bottom": 269, + "left": 504.390625 + }, + "bubble": { + "x": 464.53125, + "y": 214, + "width": 98.109375, + "height": 26, + "top": 214, + "right": 562.640625, + "bottom": 240, + "left": 464.53125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "end", + "level": 1, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 248.8125, + "width": 69.078125, + "height": 24.375, + "top": 248.8125, + "right": 573.46875, + "bottom": 273.1875, + "left": 504.390625 + }, + "bubble": { + "x": 455.765625, + "y": 209.62449645996094, + "width": 117.703125, + "height": 31.1875, + "top": 209.62449645996094, + "right": 573.46875, + "bottom": 240.81199645996094, + "left": 455.765625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "end", + "level": 2, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 249.5625, + "width": 82.09375, + "height": 28.875, + "top": 249.5625, + "right": 586.484375, + "bottom": 278.4375, + "left": 504.390625 + }, + "bubble": { + "x": 445.21875, + "y": 204.14012145996094, + "width": 141.265625, + "height": 37.421875, + "top": 204.14012145996094, + "right": 586.484375, + "bottom": 241.56199645996094, + "left": 445.21875 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "end", + "level": 3, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 249.28125, + "width": 99.734375, + "height": 36.4375, + "top": 249.28125, + "right": 604.125, + "bottom": 285.71875, + "left": 504.390625 + }, + "bubble": { + "x": 434.640625, + "y": 196.374755859375, + "width": 169.484375, + "height": 44.90625, + "top": 196.374755859375, + "right": 604.125, + "bottom": 241.281005859375, + "left": 434.640625 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "end", + "level": 4, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 249.9375, + "width": 120.453125, + "height": 44.125, + "top": 249.9375, + "right": 624.84375, + "bottom": 294.0625, + "left": 504.390625 + }, + "bubble": { + "x": 421.5, + "y": 188.03173828125, + "width": 203.34375, + "height": 53.90625, + "top": 188.03173828125, + "right": 624.84375, + "bottom": 241.93798828125, + "left": 421.5 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "end", + "level": 5, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 251.515625, + "width": 142.953125, + "height": 50.96875, + "top": 251.515625, + "right": 647.34375, + "bottom": 302.484375, + "left": 504.390625 + }, + "bubble": { + "x": 403.3125, + "y": 178.8441162109375, + "width": 244.03125, + "height": 64.671875, + "top": 178.8441162109375, + "right": 647.34375, + "bottom": 243.5159912109375, + "left": 403.3125 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "end", + "level": 6, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 253.015625, + "width": 171.953125, + "height": 60.96875, + "top": 253.015625, + "right": 676.34375, + "bottom": 313.984375, + "left": 504.390625 + }, + "bubble": { + "x": 383.5, + "y": 167.3909912109375, + "width": 292.84375, + "height": 77.625, + "top": 167.3909912109375, + "right": 676.34375, + "bottom": 245.0159912109375, + "left": 383.5 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "end", + "level": 7, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 252.421875, + "width": 208.328125, + "height": 76.15625, + "top": 252.421875, + "right": 712.71875, + "bottom": 328.578125, + "left": 504.390625 + }, + "bubble": { + "x": 361.234375, + "y": 151.2969970703125, + "width": 351.484375, + "height": 93.125, + "top": 151.2969970703125, + "right": 712.71875, + "bottom": 244.4219970703125, + "left": 361.234375 + } + }, + { + "viewport": { + "width": 1261, + "height": 820 + }, + "side": "top", + "align": "end", + "level": 8, + "within": true, + "aligned": true, + "anchor": { + "x": 504.390625, + "y": 253.703125, + "width": 249.25, + "height": 90.59375, + "top": 253.703125, + "right": 753.640625, + "bottom": 344.296875, + "left": 504.390625 + }, + "bubble": { + "x": 331.890625, + "y": 133.9217529296875, + "width": 421.75, + "height": 111.78125, + "top": 133.9217529296875, + "right": 753.640625, + "bottom": 245.7030029296875, + "left": 331.890625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "center", + "level": -8, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180, + "width": 14.609375, + "height": 6.4375, + "top": 180, + "right": 334.609375, + "bottom": 186.4375, + "left": 320 + }, + "bubble": { + "x": 344.6090087890625, + "y": 180.203125, + "width": 22.796875, + "height": 6.03125, + "top": 180.203125, + "right": 367.4058837890625, + "bottom": 186.234375, + "left": 344.6090087890625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "center", + "level": -7, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180.734375, + "width": 17.140625, + "height": 6.53125, + "top": 180.734375, + "right": 337.140625, + "bottom": 187.265625, + "left": 320 + }, + "bubble": { + "x": 347.1409912109375, + "y": 180.3828125, + "width": 27.328125, + "height": 7.234375, + "top": 180.3828125, + "right": 374.4691162109375, + "bottom": 187.6171875, + "left": 347.1409912109375 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "center", + "level": -6, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180.671875, + "width": 20.140625, + "height": 7.65625, + "top": 180.671875, + "right": 340.140625, + "bottom": 188.328125, + "left": 320 + }, + "bubble": { + "x": 350.1409912109375, + "y": 180.1484375, + "width": 32.828125, + "height": 8.703125, + "top": 180.1484375, + "right": 382.9691162109375, + "bottom": 188.8515625, + "left": 350.1409912109375 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "center", + "level": -5, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180.609375, + "width": 23.765625, + "height": 8.78125, + "top": 180.609375, + "right": 343.765625, + "bottom": 189.390625, + "left": 320 + }, + "bubble": { + "x": 353.7659912109375, + "y": 179.78125, + "width": 39.40625, + "height": 10.4375, + "top": 179.78125, + "right": 393.1722412109375, + "bottom": 190.21875, + "left": 353.7659912109375 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "center", + "level": -4, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180.53125, + "width": 28.15625, + "height": 9.9375, + "top": 180.53125, + "right": 348.15625, + "bottom": 190.46875, + "left": 320 + }, + "bubble": { + "x": 358.156005859375, + "y": 179.2421875, + "width": 47.25, + "height": 12.515625, + "top": 179.2421875, + "right": 405.406005859375, + "bottom": 191.7578125, + "left": 358.156005859375 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "center", + "level": -3, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 181.421875, + "width": 33.375, + "height": 12.15625, + "top": 181.421875, + "right": 353.375, + "bottom": 193.578125, + "left": 320 + }, + "bubble": { + "x": 363.375, + "y": 179.9765625, + "width": 56.75, + "height": 15.046875, + "top": 179.9765625, + "right": 420.125, + "bottom": 195.0234375, + "left": 363.375 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "center", + "level": -2, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 182.3125, + "width": 39.625, + "height": 13.375, + "top": 182.3125, + "right": 359.625, + "bottom": 195.6875, + "left": 320 + }, + "bubble": { + "x": 369.625, + "y": 179.9765625, + "width": 68.078125, + "height": 18.046875, + "top": 179.9765625, + "right": 437.703125, + "bottom": 198.0234375, + "left": 369.625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "center", + "level": -1, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 182.171875, + "width": 47.203125, + "height": 15.65625, + "top": 182.171875, + "right": 367.203125, + "bottom": 197.828125, + "left": 320 + }, + "bubble": { + "x": 377.2030029296875, + "y": 179.1640625, + "width": 81.71875, + "height": 21.671875, + "top": 179.1640625, + "right": 458.9217529296875, + "bottom": 200.8359375, + "left": 377.2030029296875 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "center", + "level": 0, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 182, + "width": 58.25, + "height": 21, + "top": 182, + "right": 378.25, + "bottom": 203, + "left": 320 + }, + "bubble": { + "x": 388.25, + "y": 179.5, + "width": 98.109375, + "height": 26, + "top": 179.5, + "right": 486.359375, + "bottom": 205.5, + "left": 388.25 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "center", + "level": 1, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 182.8125, + "width": 69.078125, + "height": 24.375, + "top": 182.8125, + "right": 389.078125, + "bottom": 207.1875, + "left": 320 + }, + "bubble": { + "x": 399.0780029296875, + "y": 179.40625, + "width": 117.703125, + "height": 31.1875, + "top": 179.40625, + "right": 516.7811279296875, + "bottom": 210.59375, + "left": 399.0780029296875 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "center", + "level": 2, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 183.5625, + "width": 82.09375, + "height": 28.875, + "top": 183.5625, + "right": 402.09375, + "bottom": 212.4375, + "left": 320 + }, + "bubble": { + "x": 412.093994140625, + "y": 179.2890625, + "width": 141.265625, + "height": 37.421875, + "top": 179.2890625, + "right": 553.359619140625, + "bottom": 216.7109375, + "left": 412.093994140625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "center", + "level": 3, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 183.28125, + "width": 99.734375, + "height": 36.4375, + "top": 183.28125, + "right": 419.734375, + "bottom": 219.71875, + "left": 320 + }, + "bubble": { + "x": 429.7340087890625, + "y": 179.046875, + "width": 169.484375, + "height": 44.90625, + "top": 179.046875, + "right": 599.2183837890625, + "bottom": 223.953125, + "left": 429.7340087890625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "center", + "level": 4, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 183.9375, + "width": 120.453125, + "height": 44.125, + "top": 183.9375, + "right": 440.453125, + "bottom": 228.0625, + "left": 320 + }, + "bubble": { + "x": 450.4530029296875, + "y": 179.046875, + "width": 203.34375, + "height": 53.90625, + "top": 179.046875, + "right": 653.7967529296875, + "bottom": 232.953125, + "left": 450.4530029296875 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "center", + "level": 5, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 185.515625, + "width": 142.953125, + "height": 50.96875, + "top": 185.515625, + "right": 462.953125, + "bottom": 236.484375, + "left": 320 + }, + "bubble": { + "x": 472.9530029296875, + "y": 178.6640625, + "width": 244.03125, + "height": 64.671875, + "top": 178.6640625, + "right": 716.9842529296875, + "bottom": 243.3359375, + "left": 472.9530029296875 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "center", + "level": 6, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 187.015625, + "width": 171.953125, + "height": 60.96875, + "top": 187.015625, + "right": 491.953125, + "bottom": 247.984375, + "left": 320 + }, + "bubble": { + "x": 495.15625, + "y": 178.6875, + "width": 292.84375, + "height": 77.625, + "top": 178.6875, + "right": 788, + "bottom": 256.3125, + "left": 495.15625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "center", + "level": 7, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 186.421875, + "width": 208.328125, + "height": 76.15625, + "top": 186.421875, + "right": 528.328125, + "bottom": 262.578125, + "left": 320 + }, + "bubble": { + "x": 436.515625, + "y": 177.9375, + "width": 351.484375, + "height": 93.125, + "top": 177.9375, + "right": 788, + "bottom": 271.0625, + "left": 436.515625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "center", + "level": 8, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 187.703125, + "width": 249.25, + "height": 90.59375, + "top": 187.703125, + "right": 569.25, + "bottom": 278.296875, + "left": 320 + }, + "bubble": { + "x": 366.25, + "y": 177.109375, + "width": 421.75, + "height": 111.78125, + "top": 177.109375, + "right": 788, + "bottom": 288.890625, + "left": 366.25 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "end", + "level": -8, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180, + "width": 14.609375, + "height": 6.4375, + "top": 180, + "right": 334.609375, + "bottom": 186.4375, + "left": 320 + }, + "bubble": { + "x": 344.6090087890625, + "y": 180.203125, + "width": 22.796875, + "height": 6.03125, + "top": 180.203125, + "right": 367.4058837890625, + "bottom": 186.234375, + "left": 344.6090087890625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "end", + "level": -7, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180.734375, + "width": 17.140625, + "height": 6.53125, + "top": 180.734375, + "right": 337.140625, + "bottom": 187.265625, + "left": 320 + }, + "bubble": { + "x": 347.1409912109375, + "y": 180.3828125, + "width": 27.328125, + "height": 7.234375, + "top": 180.3828125, + "right": 374.4691162109375, + "bottom": 187.6171875, + "left": 347.1409912109375 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "end", + "level": -6, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180.671875, + "width": 20.140625, + "height": 7.65625, + "top": 180.671875, + "right": 340.140625, + "bottom": 188.328125, + "left": 320 + }, + "bubble": { + "x": 350.1409912109375, + "y": 180.1484375, + "width": 32.828125, + "height": 8.703125, + "top": 180.1484375, + "right": 382.9691162109375, + "bottom": 188.8515625, + "left": 350.1409912109375 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "end", + "level": -5, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180.609375, + "width": 23.765625, + "height": 8.78125, + "top": 180.609375, + "right": 343.765625, + "bottom": 189.390625, + "left": 320 + }, + "bubble": { + "x": 353.7659912109375, + "y": 179.78125, + "width": 39.40625, + "height": 10.4375, + "top": 179.78125, + "right": 393.1722412109375, + "bottom": 190.21875, + "left": 353.7659912109375 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "end", + "level": -4, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180.53125, + "width": 28.15625, + "height": 9.9375, + "top": 180.53125, + "right": 348.15625, + "bottom": 190.46875, + "left": 320 + }, + "bubble": { + "x": 358.156005859375, + "y": 179.2421875, + "width": 47.25, + "height": 12.515625, + "top": 179.2421875, + "right": 405.406005859375, + "bottom": 191.7578125, + "left": 358.156005859375 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "end", + "level": -3, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 181.421875, + "width": 33.375, + "height": 12.15625, + "top": 181.421875, + "right": 353.375, + "bottom": 193.578125, + "left": 320 + }, + "bubble": { + "x": 363.375, + "y": 179.9765625, + "width": 56.75, + "height": 15.046875, + "top": 179.9765625, + "right": 420.125, + "bottom": 195.0234375, + "left": 363.375 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "end", + "level": -2, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 182.3125, + "width": 39.625, + "height": 13.375, + "top": 182.3125, + "right": 359.625, + "bottom": 195.6875, + "left": 320 + }, + "bubble": { + "x": 369.625, + "y": 179.9765625, + "width": 68.078125, + "height": 18.046875, + "top": 179.9765625, + "right": 437.703125, + "bottom": 198.0234375, + "left": 369.625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "end", + "level": -1, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 182.171875, + "width": 47.203125, + "height": 15.65625, + "top": 182.171875, + "right": 367.203125, + "bottom": 197.828125, + "left": 320 + }, + "bubble": { + "x": 377.2030029296875, + "y": 179.1640625, + "width": 81.71875, + "height": 21.671875, + "top": 179.1640625, + "right": 458.9217529296875, + "bottom": 200.8359375, + "left": 377.2030029296875 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "end", + "level": 0, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 182, + "width": 58.25, + "height": 21, + "top": 182, + "right": 378.25, + "bottom": 203, + "left": 320 + }, + "bubble": { + "x": 388.25, + "y": 179.5, + "width": 98.109375, + "height": 26, + "top": 179.5, + "right": 486.359375, + "bottom": 205.5, + "left": 388.25 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "end", + "level": 1, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 182.8125, + "width": 69.078125, + "height": 24.375, + "top": 182.8125, + "right": 389.078125, + "bottom": 207.1875, + "left": 320 + }, + "bubble": { + "x": 399.0780029296875, + "y": 179.40625, + "width": 117.703125, + "height": 31.1875, + "top": 179.40625, + "right": 516.7811279296875, + "bottom": 210.59375, + "left": 399.0780029296875 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "end", + "level": 2, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 183.5625, + "width": 82.09375, + "height": 28.875, + "top": 183.5625, + "right": 402.09375, + "bottom": 212.4375, + "left": 320 + }, + "bubble": { + "x": 412.093994140625, + "y": 179.2890625, + "width": 141.265625, + "height": 37.421875, + "top": 179.2890625, + "right": 553.359619140625, + "bottom": 216.7109375, + "left": 412.093994140625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "end", + "level": 3, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 183.28125, + "width": 99.734375, + "height": 36.4375, + "top": 183.28125, + "right": 419.734375, + "bottom": 219.71875, + "left": 320 + }, + "bubble": { + "x": 429.7340087890625, + "y": 179.046875, + "width": 169.484375, + "height": 44.90625, + "top": 179.046875, + "right": 599.2183837890625, + "bottom": 223.953125, + "left": 429.7340087890625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "end", + "level": 4, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 183.9375, + "width": 120.453125, + "height": 44.125, + "top": 183.9375, + "right": 440.453125, + "bottom": 228.0625, + "left": 320 + }, + "bubble": { + "x": 450.4530029296875, + "y": 179.046875, + "width": 203.34375, + "height": 53.90625, + "top": 179.046875, + "right": 653.7967529296875, + "bottom": 232.953125, + "left": 450.4530029296875 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "end", + "level": 5, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 185.515625, + "width": 142.953125, + "height": 50.96875, + "top": 185.515625, + "right": 462.953125, + "bottom": 236.484375, + "left": 320 + }, + "bubble": { + "x": 472.9530029296875, + "y": 178.6640625, + "width": 244.03125, + "height": 64.671875, + "top": 178.6640625, + "right": 716.9842529296875, + "bottom": 243.3359375, + "left": 472.9530029296875 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "end", + "level": 6, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 187.015625, + "width": 171.953125, + "height": 60.96875, + "top": 187.015625, + "right": 491.953125, + "bottom": 247.984375, + "left": 320 + }, + "bubble": { + "x": 495.15625, + "y": 178.6875, + "width": 292.84375, + "height": 77.625, + "top": 178.6875, + "right": 788, + "bottom": 256.3125, + "left": 495.15625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "end", + "level": 7, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 186.421875, + "width": 208.328125, + "height": 76.15625, + "top": 186.421875, + "right": 528.328125, + "bottom": 262.578125, + "left": 320 + }, + "bubble": { + "x": 436.515625, + "y": 177.9375, + "width": 351.484375, + "height": 93.125, + "top": 177.9375, + "right": 788, + "bottom": 271.0625, + "left": 436.515625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "right", + "align": "end", + "level": 8, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 187.703125, + "width": 249.25, + "height": 90.59375, + "top": 187.703125, + "right": 569.25, + "bottom": 278.296875, + "left": 320 + }, + "bubble": { + "x": 366.25, + "y": 177.109375, + "width": 421.75, + "height": 111.78125, + "top": 177.109375, + "right": 788, + "bottom": 288.890625, + "left": 366.25 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "center", + "level": -8, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180, + "width": 14.609375, + "height": 6.4375, + "top": 180, + "right": 334.609375, + "bottom": 186.4375, + "left": 320 + }, + "bubble": { + "x": 315.90625, + "y": 194.43800354003906, + "width": 22.796875, + "height": 6.03125, + "top": 194.43800354003906, + "right": 338.703125, + "bottom": 200.46925354003906, + "left": 315.90625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "center", + "level": -7, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180.734375, + "width": 17.140625, + "height": 6.53125, + "top": 180.734375, + "right": 337.140625, + "bottom": 187.265625, + "left": 320 + }, + "bubble": { + "x": 314.90625, + "y": 195.26600646972656, + "width": 27.328125, + "height": 7.234375, + "top": 195.26600646972656, + "right": 342.234375, + "bottom": 202.50038146972656, + "left": 314.90625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "center", + "level": -6, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180.671875, + "width": 20.140625, + "height": 7.65625, + "top": 180.671875, + "right": 340.140625, + "bottom": 188.328125, + "left": 320 + }, + "bubble": { + "x": 313.65625, + "y": 196.3280029296875, + "width": 32.828125, + "height": 8.703125, + "top": 196.3280029296875, + "right": 346.484375, + "bottom": 205.0311279296875, + "left": 313.65625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "center", + "level": -5, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180.609375, + "width": 23.765625, + "height": 8.78125, + "top": 180.609375, + "right": 343.765625, + "bottom": 189.390625, + "left": 320 + }, + "bubble": { + "x": 312.1796875, + "y": 197.3909912109375, + "width": 39.40625, + "height": 10.4375, + "top": 197.3909912109375, + "right": 351.5859375, + "bottom": 207.8284912109375, + "left": 312.1796875 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "center", + "level": -4, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180.53125, + "width": 28.15625, + "height": 9.9375, + "top": 180.53125, + "right": 348.15625, + "bottom": 190.46875, + "left": 320 + }, + "bubble": { + "x": 310.453125, + "y": 198.468994140625, + "width": 47.25, + "height": 12.515625, + "top": 198.468994140625, + "right": 357.703125, + "bottom": 210.984619140625, + "left": 310.453125 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "center", + "level": -3, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 181.421875, + "width": 33.375, + "height": 12.15625, + "top": 181.421875, + "right": 353.375, + "bottom": 193.578125, + "left": 320 + }, + "bubble": { + "x": 308.3125, + "y": 201.5780029296875, + "width": 56.75, + "height": 15.046875, + "top": 201.5780029296875, + "right": 365.0625, + "bottom": 216.6248779296875, + "left": 308.3125 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "center", + "level": -2, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 182.3125, + "width": 39.625, + "height": 13.375, + "top": 182.3125, + "right": 359.625, + "bottom": 195.6875, + "left": 320 + }, + "bubble": { + "x": 305.7734375, + "y": 203.68800354003906, + "width": 68.078125, + "height": 18.046875, + "top": 203.68800354003906, + "right": 373.8515625, + "bottom": 221.73487854003906, + "left": 305.7734375 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "center", + "level": -1, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 182.171875, + "width": 47.203125, + "height": 15.65625, + "top": 182.171875, + "right": 367.203125, + "bottom": 197.828125, + "left": 320 + }, + "bubble": { + "x": 302.7421875, + "y": 205.8280029296875, + "width": 81.71875, + "height": 21.671875, + "top": 205.8280029296875, + "right": 384.4609375, + "bottom": 227.4998779296875, + "left": 302.7421875 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "center", + "level": 0, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 182, + "width": 58.25, + "height": 21, + "top": 182, + "right": 378.25, + "bottom": 203, + "left": 320 + }, + "bubble": { + "x": 300.0703125, + "y": 211, + "width": 98.109375, + "height": 26, + "top": 211, + "right": 398.1796875, + "bottom": 237, + "left": 300.0703125 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "center", + "level": 1, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 182.8125, + "width": 69.078125, + "height": 24.375, + "top": 182.8125, + "right": 389.078125, + "bottom": 207.1875, + "left": 320 + }, + "bubble": { + "x": 295.6875, + "y": 215.18800354003906, + "width": 117.703125, + "height": 31.1875, + "top": 215.18800354003906, + "right": 413.390625, + "bottom": 246.37550354003906, + "left": 295.6875 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "center", + "level": 2, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 183.5625, + "width": 82.09375, + "height": 28.875, + "top": 183.5625, + "right": 402.09375, + "bottom": 212.4375, + "left": 320 + }, + "bubble": { + "x": 290.4140625, + "y": 220.43800354003906, + "width": 141.265625, + "height": 37.42185974121094, + "top": 220.43800354003906, + "right": 431.6796875, + "bottom": 257.85986328125, + "left": 290.4140625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "center", + "level": 3, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 183.28125, + "width": 99.734375, + "height": 36.4375, + "top": 183.28125, + "right": 419.734375, + "bottom": 219.71875, + "left": 320 + }, + "bubble": { + "x": 285.125, + "y": 227.718994140625, + "width": 169.484375, + "height": 44.90625, + "top": 227.718994140625, + "right": 454.609375, + "bottom": 272.625244140625, + "left": 285.125 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "center", + "level": 4, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 183.9375, + "width": 120.453125, + "height": 44.125, + "top": 183.9375, + "right": 440.453125, + "bottom": 228.0625, + "left": 320 + }, + "bubble": { + "x": 278.5546875, + "y": 236.06199645996094, + "width": 203.34375, + "height": 53.90626525878906, + "top": 236.06199645996094, + "right": 481.8984375, + "bottom": 289.96826171875, + "left": 278.5546875 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "center", + "level": 5, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 185.515625, + "width": 142.953125, + "height": 50.96875, + "top": 185.515625, + "right": 462.953125, + "bottom": 236.484375, + "left": 320 + }, + "bubble": { + "x": 269.4609375, + "y": 244.4840087890625, + "width": 244.03125, + "height": 64.671875, + "top": 244.4840087890625, + "right": 513.4921875, + "bottom": 309.1558837890625, + "left": 269.4609375 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "center", + "level": 6, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 187.015625, + "width": 171.953125, + "height": 60.96875, + "top": 187.015625, + "right": 491.953125, + "bottom": 247.984375, + "left": 320 + }, + "bubble": { + "x": 259.5546875, + "y": 255.9840087890625, + "width": 292.84375, + "height": 77.625, + "top": 255.9840087890625, + "right": 552.3984375, + "bottom": 333.6090087890625, + "left": 259.5546875 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "center", + "level": 7, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 186.421875, + "width": 208.328125, + "height": 76.15625, + "top": 186.421875, + "right": 528.328125, + "bottom": 262.578125, + "left": 320 + }, + "bubble": { + "x": 248.421875, + "y": 270.5780029296875, + "width": 351.484375, + "height": 93.125, + "top": 270.5780029296875, + "right": 599.90625, + "bottom": 363.7030029296875, + "left": 248.421875 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "center", + "level": 8, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 187.703125, + "width": 249.25, + "height": 90.59375, + "top": 187.703125, + "right": 569.25, + "bottom": 278.296875, + "left": 320 + }, + "bubble": { + "x": 233.75, + "y": 286.2969970703125, + "width": 421.75, + "height": 111.78125, + "top": 286.2969970703125, + "right": 655.5, + "bottom": 398.0782470703125, + "left": 233.75 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "end", + "level": -8, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180, + "width": 14.609375, + "height": 6.4375, + "top": 180, + "right": 334.609375, + "bottom": 186.4375, + "left": 320 + }, + "bubble": { + "x": 311.8125, + "y": 194.43800354003906, + "width": 22.796875, + "height": 6.03125, + "top": 194.43800354003906, + "right": 334.609375, + "bottom": 200.46925354003906, + "left": 311.8125 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "end", + "level": -7, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180.734375, + "width": 17.140625, + "height": 6.53125, + "top": 180.734375, + "right": 337.140625, + "bottom": 187.265625, + "left": 320 + }, + "bubble": { + "x": 309.8125, + "y": 195.26600646972656, + "width": 27.328125, + "height": 7.234375, + "top": 195.26600646972656, + "right": 337.140625, + "bottom": 202.50038146972656, + "left": 309.8125 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "end", + "level": -6, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180.671875, + "width": 20.140625, + "height": 7.65625, + "top": 180.671875, + "right": 340.140625, + "bottom": 188.328125, + "left": 320 + }, + "bubble": { + "x": 307.3125, + "y": 196.3280029296875, + "width": 32.828125, + "height": 8.703125, + "top": 196.3280029296875, + "right": 340.140625, + "bottom": 205.0311279296875, + "left": 307.3125 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "end", + "level": -5, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180.609375, + "width": 23.765625, + "height": 8.78125, + "top": 180.609375, + "right": 343.765625, + "bottom": 189.390625, + "left": 320 + }, + "bubble": { + "x": 304.359375, + "y": 197.3909912109375, + "width": 39.40625, + "height": 10.4375, + "top": 197.3909912109375, + "right": 343.765625, + "bottom": 207.8284912109375, + "left": 304.359375 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "end", + "level": -4, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180.53125, + "width": 28.15625, + "height": 9.9375, + "top": 180.53125, + "right": 348.15625, + "bottom": 190.46875, + "left": 320 + }, + "bubble": { + "x": 300.90625, + "y": 198.468994140625, + "width": 47.25, + "height": 12.515625, + "top": 198.468994140625, + "right": 348.15625, + "bottom": 210.984619140625, + "left": 300.90625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "end", + "level": -3, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 181.421875, + "width": 33.375, + "height": 12.15625, + "top": 181.421875, + "right": 353.375, + "bottom": 193.578125, + "left": 320 + }, + "bubble": { + "x": 296.625, + "y": 201.5780029296875, + "width": 56.75, + "height": 15.046875, + "top": 201.5780029296875, + "right": 353.375, + "bottom": 216.6248779296875, + "left": 296.625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "end", + "level": -2, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 182.3125, + "width": 39.625, + "height": 13.375, + "top": 182.3125, + "right": 359.625, + "bottom": 195.6875, + "left": 320 + }, + "bubble": { + "x": 291.546875, + "y": 203.68800354003906, + "width": 68.078125, + "height": 18.046875, + "top": 203.68800354003906, + "right": 359.625, + "bottom": 221.73487854003906, + "left": 291.546875 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "end", + "level": -1, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 182.171875, + "width": 47.203125, + "height": 15.65625, + "top": 182.171875, + "right": 367.203125, + "bottom": 197.828125, + "left": 320 + }, + "bubble": { + "x": 285.484375, + "y": 205.8280029296875, + "width": 81.71875, + "height": 21.671875, + "top": 205.8280029296875, + "right": 367.203125, + "bottom": 227.4998779296875, + "left": 285.484375 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "end", + "level": 0, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 182, + "width": 58.25, + "height": 21, + "top": 182, + "right": 378.25, + "bottom": 203, + "left": 320 + }, + "bubble": { + "x": 280.140625, + "y": 211, + "width": 98.109375, + "height": 26, + "top": 211, + "right": 378.25, + "bottom": 237, + "left": 280.140625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "end", + "level": 1, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 182.8125, + "width": 69.078125, + "height": 24.375, + "top": 182.8125, + "right": 389.078125, + "bottom": 207.1875, + "left": 320 + }, + "bubble": { + "x": 271.375, + "y": 215.18800354003906, + "width": 117.703125, + "height": 31.1875, + "top": 215.18800354003906, + "right": 389.078125, + "bottom": 246.37550354003906, + "left": 271.375 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "end", + "level": 2, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 183.5625, + "width": 82.09375, + "height": 28.875, + "top": 183.5625, + "right": 402.09375, + "bottom": 212.4375, + "left": 320 + }, + "bubble": { + "x": 260.828125, + "y": 220.43800354003906, + "width": 141.265625, + "height": 37.42185974121094, + "top": 220.43800354003906, + "right": 402.09375, + "bottom": 257.85986328125, + "left": 260.828125 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "end", + "level": 3, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 183.28125, + "width": 99.734375, + "height": 36.4375, + "top": 183.28125, + "right": 419.734375, + "bottom": 219.71875, + "left": 320 + }, + "bubble": { + "x": 250.25, + "y": 227.718994140625, + "width": 169.484375, + "height": 44.90625, + "top": 227.718994140625, + "right": 419.734375, + "bottom": 272.625244140625, + "left": 250.25 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "end", + "level": 4, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 183.9375, + "width": 120.453125, + "height": 44.125, + "top": 183.9375, + "right": 440.453125, + "bottom": 228.0625, + "left": 320 + }, + "bubble": { + "x": 237.109375, + "y": 236.06199645996094, + "width": 203.34375, + "height": 53.90626525878906, + "top": 236.06199645996094, + "right": 440.453125, + "bottom": 289.96826171875, + "left": 237.109375 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "end", + "level": 5, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 185.515625, + "width": 142.953125, + "height": 50.96875, + "top": 185.515625, + "right": 462.953125, + "bottom": 236.484375, + "left": 320 + }, + "bubble": { + "x": 218.921875, + "y": 244.4840087890625, + "width": 244.03125, + "height": 64.671875, + "top": 244.4840087890625, + "right": 462.953125, + "bottom": 309.1558837890625, + "left": 218.921875 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "end", + "level": 6, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 187.015625, + "width": 171.953125, + "height": 60.96875, + "top": 187.015625, + "right": 491.953125, + "bottom": 247.984375, + "left": 320 + }, + "bubble": { + "x": 199.109375, + "y": 255.9840087890625, + "width": 292.84375, + "height": 77.625, + "top": 255.9840087890625, + "right": 491.953125, + "bottom": 333.6090087890625, + "left": 199.109375 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "end", + "level": 7, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 186.421875, + "width": 208.328125, + "height": 76.15625, + "top": 186.421875, + "right": 528.328125, + "bottom": 262.578125, + "left": 320 + }, + "bubble": { + "x": 176.84375, + "y": 270.5780029296875, + "width": 351.484375, + "height": 93.125, + "top": 270.5780029296875, + "right": 528.328125, + "bottom": 363.7030029296875, + "left": 176.84375 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "bottom", + "align": "end", + "level": 8, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 187.703125, + "width": 249.25, + "height": 90.59375, + "top": 187.703125, + "right": 569.25, + "bottom": 278.296875, + "left": 320 + }, + "bubble": { + "x": 147.5, + "y": 286.2969970703125, + "width": 421.75, + "height": 111.78125, + "top": 286.2969970703125, + "right": 569.25, + "bottom": 398.0782470703125, + "left": 147.5 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "center", + "level": -8, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180, + "width": 14.609375, + "height": 6.4375, + "top": 180, + "right": 334.609375, + "bottom": 186.4375, + "left": 320 + }, + "bubble": { + "x": 315.90625, + "y": 165.96875, + "width": 22.796875, + "height": 6.03125, + "top": 165.96875, + "right": 338.703125, + "bottom": 172, + "left": 315.90625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "center", + "level": -7, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180.734375, + "width": 17.140625, + "height": 6.53125, + "top": 180.734375, + "right": 337.140625, + "bottom": 187.265625, + "left": 320 + }, + "bubble": { + "x": 314.90625, + "y": 165.4996337890625, + "width": 27.328125, + "height": 7.234375, + "top": 165.4996337890625, + "right": 342.234375, + "bottom": 172.7340087890625, + "left": 314.90625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "center", + "level": -6, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180.671875, + "width": 20.140625, + "height": 7.65625, + "top": 180.671875, + "right": 340.140625, + "bottom": 188.328125, + "left": 320 + }, + "bubble": { + "x": 313.65625, + "y": 163.9688720703125, + "width": 32.828125, + "height": 8.703125, + "top": 163.9688720703125, + "right": 346.484375, + "bottom": 172.6719970703125, + "left": 313.65625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "center", + "level": -5, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180.609375, + "width": 23.765625, + "height": 8.78125, + "top": 180.609375, + "right": 343.765625, + "bottom": 189.390625, + "left": 320 + }, + "bubble": { + "x": 312.1796875, + "y": 162.1715087890625, + "width": 39.40625, + "height": 10.4375, + "top": 162.1715087890625, + "right": 351.5859375, + "bottom": 172.6090087890625, + "left": 312.1796875 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "center", + "level": -4, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180.53125, + "width": 28.15625, + "height": 9.9375, + "top": 180.53125, + "right": 348.15625, + "bottom": 190.46875, + "left": 320 + }, + "bubble": { + "x": 310.453125, + "y": 160.015380859375, + "width": 47.25, + "height": 12.515625, + "top": 160.015380859375, + "right": 357.703125, + "bottom": 172.531005859375, + "left": 310.453125 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "center", + "level": -3, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 181.421875, + "width": 33.375, + "height": 12.15625, + "top": 181.421875, + "right": 353.375, + "bottom": 193.578125, + "left": 320 + }, + "bubble": { + "x": 308.3125, + "y": 158.3751220703125, + "width": 56.75, + "height": 15.046875, + "top": 158.3751220703125, + "right": 365.0625, + "bottom": 173.4219970703125, + "left": 308.3125 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "center", + "level": -2, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 182.3125, + "width": 39.625, + "height": 13.375, + "top": 182.3125, + "right": 359.625, + "bottom": 195.6875, + "left": 320 + }, + "bubble": { + "x": 305.7734375, + "y": 156.26512145996094, + "width": 68.078125, + "height": 18.046875, + "top": 156.26512145996094, + "right": 373.8515625, + "bottom": 174.31199645996094, + "left": 305.7734375 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "center", + "level": -1, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 182.171875, + "width": 47.203125, + "height": 15.65625, + "top": 182.171875, + "right": 367.203125, + "bottom": 197.828125, + "left": 320 + }, + "bubble": { + "x": 302.7421875, + "y": 152.5001220703125, + "width": 81.71875, + "height": 21.671875, + "top": 152.5001220703125, + "right": 384.4609375, + "bottom": 174.1719970703125, + "left": 302.7421875 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "center", + "level": 0, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 182, + "width": 58.25, + "height": 21, + "top": 182, + "right": 378.25, + "bottom": 203, + "left": 320 + }, + "bubble": { + "x": 300.0703125, + "y": 148, + "width": 98.109375, + "height": 26, + "top": 148, + "right": 398.1796875, + "bottom": 174, + "left": 300.0703125 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "center", + "level": 1, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 182.8125, + "width": 69.078125, + "height": 24.375, + "top": 182.8125, + "right": 389.078125, + "bottom": 207.1875, + "left": 320 + }, + "bubble": { + "x": 295.6875, + "y": 143.62449645996094, + "width": 117.703125, + "height": 31.1875, + "top": 143.62449645996094, + "right": 413.390625, + "bottom": 174.81199645996094, + "left": 295.6875 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "center", + "level": 2, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 183.5625, + "width": 82.09375, + "height": 28.875, + "top": 183.5625, + "right": 402.09375, + "bottom": 212.4375, + "left": 320 + }, + "bubble": { + "x": 290.4140625, + "y": 138.14012145996094, + "width": 141.265625, + "height": 37.421875, + "top": 138.14012145996094, + "right": 431.6796875, + "bottom": 175.56199645996094, + "left": 290.4140625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "center", + "level": 3, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 183.28125, + "width": 99.734375, + "height": 36.4375, + "top": 183.28125, + "right": 419.734375, + "bottom": 219.71875, + "left": 320 + }, + "bubble": { + "x": 285.125, + "y": 130.374755859375, + "width": 169.484375, + "height": 44.90625, + "top": 130.374755859375, + "right": 454.609375, + "bottom": 175.281005859375, + "left": 285.125 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "center", + "level": 4, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 183.9375, + "width": 120.453125, + "height": 44.125, + "top": 183.9375, + "right": 440.453125, + "bottom": 228.0625, + "left": 320 + }, + "bubble": { + "x": 278.5546875, + "y": 122.03175354003906, + "width": 203.34375, + "height": 53.90625, + "top": 122.03175354003906, + "right": 481.8984375, + "bottom": 175.93800354003906, + "left": 278.5546875 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "center", + "level": 5, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 185.515625, + "width": 142.953125, + "height": 50.96875, + "top": 185.515625, + "right": 462.953125, + "bottom": 236.484375, + "left": 320 + }, + "bubble": { + "x": 269.4609375, + "y": 112.8441162109375, + "width": 244.03125, + "height": 64.671875, + "top": 112.8441162109375, + "right": 513.4921875, + "bottom": 177.5159912109375, + "left": 269.4609375 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "center", + "level": 6, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 187.015625, + "width": 171.953125, + "height": 60.96875, + "top": 187.015625, + "right": 491.953125, + "bottom": 247.984375, + "left": 320 + }, + "bubble": { + "x": 259.5546875, + "y": 101.3909912109375, + "width": 292.84375, + "height": 77.625, + "top": 101.3909912109375, + "right": 552.3984375, + "bottom": 179.0159912109375, + "left": 259.5546875 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "center", + "level": 7, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 186.421875, + "width": 208.328125, + "height": 76.15625, + "top": 186.421875, + "right": 528.328125, + "bottom": 262.578125, + "left": 320 + }, + "bubble": { + "x": 248.421875, + "y": 85.2969970703125, + "width": 351.484375, + "height": 93.125, + "top": 85.2969970703125, + "right": 599.90625, + "bottom": 178.4219970703125, + "left": 248.421875 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "center", + "level": 8, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 187.703125, + "width": 249.25, + "height": 90.59375, + "top": 187.703125, + "right": 569.25, + "bottom": 278.296875, + "left": 320 + }, + "bubble": { + "x": 233.75, + "y": 67.9217529296875, + "width": 421.75, + "height": 111.78125, + "top": 67.9217529296875, + "right": 655.5, + "bottom": 179.7030029296875, + "left": 233.75 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "end", + "level": -8, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180, + "width": 14.609375, + "height": 6.4375, + "top": 180, + "right": 334.609375, + "bottom": 186.4375, + "left": 320 + }, + "bubble": { + "x": 311.8125, + "y": 165.96875, + "width": 22.796875, + "height": 6.03125, + "top": 165.96875, + "right": 334.609375, + "bottom": 172, + "left": 311.8125 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "end", + "level": -7, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180.734375, + "width": 17.140625, + "height": 6.53125, + "top": 180.734375, + "right": 337.140625, + "bottom": 187.265625, + "left": 320 + }, + "bubble": { + "x": 309.8125, + "y": 165.4996337890625, + "width": 27.328125, + "height": 7.234375, + "top": 165.4996337890625, + "right": 337.140625, + "bottom": 172.7340087890625, + "left": 309.8125 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "end", + "level": -6, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180.671875, + "width": 20.140625, + "height": 7.65625, + "top": 180.671875, + "right": 340.140625, + "bottom": 188.328125, + "left": 320 + }, + "bubble": { + "x": 307.3125, + "y": 163.9688720703125, + "width": 32.828125, + "height": 8.703125, + "top": 163.9688720703125, + "right": 340.140625, + "bottom": 172.6719970703125, + "left": 307.3125 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "end", + "level": -5, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180.609375, + "width": 23.765625, + "height": 8.78125, + "top": 180.609375, + "right": 343.765625, + "bottom": 189.390625, + "left": 320 + }, + "bubble": { + "x": 304.359375, + "y": 162.1715087890625, + "width": 39.40625, + "height": 10.4375, + "top": 162.1715087890625, + "right": 343.765625, + "bottom": 172.6090087890625, + "left": 304.359375 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "end", + "level": -4, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 180.53125, + "width": 28.15625, + "height": 9.9375, + "top": 180.53125, + "right": 348.15625, + "bottom": 190.46875, + "left": 320 + }, + "bubble": { + "x": 300.90625, + "y": 160.015380859375, + "width": 47.25, + "height": 12.515625, + "top": 160.015380859375, + "right": 348.15625, + "bottom": 172.531005859375, + "left": 300.90625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "end", + "level": -3, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 181.421875, + "width": 33.375, + "height": 12.15625, + "top": 181.421875, + "right": 353.375, + "bottom": 193.578125, + "left": 320 + }, + "bubble": { + "x": 296.625, + "y": 158.3751220703125, + "width": 56.75, + "height": 15.046875, + "top": 158.3751220703125, + "right": 353.375, + "bottom": 173.4219970703125, + "left": 296.625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "end", + "level": -2, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 182.3125, + "width": 39.625, + "height": 13.375, + "top": 182.3125, + "right": 359.625, + "bottom": 195.6875, + "left": 320 + }, + "bubble": { + "x": 291.546875, + "y": 156.26512145996094, + "width": 68.078125, + "height": 18.046875, + "top": 156.26512145996094, + "right": 359.625, + "bottom": 174.31199645996094, + "left": 291.546875 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "end", + "level": -1, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 182.171875, + "width": 47.203125, + "height": 15.65625, + "top": 182.171875, + "right": 367.203125, + "bottom": 197.828125, + "left": 320 + }, + "bubble": { + "x": 285.484375, + "y": 152.5001220703125, + "width": 81.71875, + "height": 21.671875, + "top": 152.5001220703125, + "right": 367.203125, + "bottom": 174.1719970703125, + "left": 285.484375 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "end", + "level": 0, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 182, + "width": 58.25, + "height": 21, + "top": 182, + "right": 378.25, + "bottom": 203, + "left": 320 + }, + "bubble": { + "x": 280.140625, + "y": 148, + "width": 98.109375, + "height": 26, + "top": 148, + "right": 378.25, + "bottom": 174, + "left": 280.140625 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "end", + "level": 1, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 182.8125, + "width": 69.078125, + "height": 24.375, + "top": 182.8125, + "right": 389.078125, + "bottom": 207.1875, + "left": 320 + }, + "bubble": { + "x": 271.375, + "y": 143.62449645996094, + "width": 117.703125, + "height": 31.1875, + "top": 143.62449645996094, + "right": 389.078125, + "bottom": 174.81199645996094, + "left": 271.375 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "end", + "level": 2, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 183.5625, + "width": 82.09375, + "height": 28.875, + "top": 183.5625, + "right": 402.09375, + "bottom": 212.4375, + "left": 320 + }, + "bubble": { + "x": 260.828125, + "y": 138.14012145996094, + "width": 141.265625, + "height": 37.421875, + "top": 138.14012145996094, + "right": 402.09375, + "bottom": 175.56199645996094, + "left": 260.828125 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "end", + "level": 3, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 183.28125, + "width": 99.734375, + "height": 36.4375, + "top": 183.28125, + "right": 419.734375, + "bottom": 219.71875, + "left": 320 + }, + "bubble": { + "x": 250.25, + "y": 130.374755859375, + "width": 169.484375, + "height": 44.90625, + "top": 130.374755859375, + "right": 419.734375, + "bottom": 175.281005859375, + "left": 250.25 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "end", + "level": 4, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 183.9375, + "width": 120.453125, + "height": 44.125, + "top": 183.9375, + "right": 440.453125, + "bottom": 228.0625, + "left": 320 + }, + "bubble": { + "x": 237.109375, + "y": 122.03175354003906, + "width": 203.34375, + "height": 53.90625, + "top": 122.03175354003906, + "right": 440.453125, + "bottom": 175.93800354003906, + "left": 237.109375 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "end", + "level": 5, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 185.515625, + "width": 142.953125, + "height": 50.96875, + "top": 185.515625, + "right": 462.953125, + "bottom": 236.484375, + "left": 320 + }, + "bubble": { + "x": 218.921875, + "y": 112.8441162109375, + "width": 244.03125, + "height": 64.671875, + "top": 112.8441162109375, + "right": 462.953125, + "bottom": 177.5159912109375, + "left": 218.921875 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "end", + "level": 6, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 187.015625, + "width": 171.953125, + "height": 60.96875, + "top": 187.015625, + "right": 491.953125, + "bottom": 247.984375, + "left": 320 + }, + "bubble": { + "x": 199.109375, + "y": 101.3909912109375, + "width": 292.84375, + "height": 77.625, + "top": 101.3909912109375, + "right": 491.953125, + "bottom": 179.0159912109375, + "left": 199.109375 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "end", + "level": 7, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 186.421875, + "width": 208.328125, + "height": 76.15625, + "top": 186.421875, + "right": 528.328125, + "bottom": 262.578125, + "left": 320 + }, + "bubble": { + "x": 176.84375, + "y": 85.2969970703125, + "width": 351.484375, + "height": 93.125, + "top": 85.2969970703125, + "right": 528.328125, + "bottom": 178.4219970703125, + "left": 176.84375 + } + }, + { + "viewport": { + "width": 800, + "height": 600 + }, + "side": "top", + "align": "end", + "level": 8, + "within": true, + "aligned": true, + "anchor": { + "x": 320, + "y": 187.703125, + "width": 249.25, + "height": 90.59375, + "top": 187.703125, + "right": 569.25, + "bottom": 278.296875, + "left": 320 + }, + "bubble": { + "x": 147.5, + "y": 67.9217529296875, + "width": 421.75, + "height": 111.78125, + "top": 67.9217529296875, + "right": 569.25, + "bottom": 179.7030029296875, + "left": 147.5 + } + } + ] +} diff --git a/changes/2269-scaled-choice-menus.md b/changes/2269-scaled-choice-menus.md new file mode 100644 index 000000000..7b06b0ba5 --- /dev/null +++ b/changes/2269-scaled-choice-menus.md @@ -0,0 +1,11 @@ +--- +section: Fixed +--- + +## en + +- Kept shared settings choice menus and tooltips next to their controls and inside the window when zooming, with keyboard selection and focus return ([#2269](https://github.com/BotHarness/DeepSeekBot/issues/2269)). + +## zh + +- 修复整窗缩放后共享设置选项菜单和提示浮层偏离控件或超出窗口的问题,并保留键盘选择和关闭后的焦点返回([#2269](https://github.com/BotHarness/DeepSeekBot/issues/2269))。 diff --git a/docs/adr/0237-desktop-window-zoom-is-client-owned.md b/docs/adr/0237-desktop-window-zoom-is-client-owned.md index 5ecddce6d..88e6ff4ae 100644 --- a/docs/adr/0237-desktop-window-zoom-is-client-owned.md +++ b/docs/adr/0237-desktop-window-zoom-is-client-owned.md @@ -76,7 +76,9 @@ is the qualified combination. The composed Host release is a selection guard, no independent executable-version attestation; remote Hosts and other shell versions need their own qualification. An SDK version alone is insufficient. The current native protocol rejects numberpad codes, so S1 reset is available in Settings/CLI -and as a custom-bindable command; default numberpad behavior remains an S2 dependency. +and as a custom-bindable command. Default reset and numberpad bindings remain an outstanding +requirement tracked in [#2318](https://github.com/BotHarness/DeepSeekBot/issues/2318), rather than +part of the qualified S2 behavior. ## CLI and lifecycle diff --git a/docs/architecture/botharness-architecture.md b/docs/architecture/botharness-architecture.md index a6226f381..588696460 100644 --- a/docs/architecture/botharness-architecture.md +++ b/docs/architecture/botharness-architecture.md @@ -1179,3 +1179,8 @@ packaged-install and Human QA evidence remain separate from source coverage; num broader reliability and other desktop platforms are tracked in #2269/#2270. Bot-mode Dockview content overlays and splitter movement convert viewport coordinates to local CSS units through the repository-pinned Dockview compatibility patch. The patch is bundled in the Client; it changes no DSH executable and preserves persistent panel instances and the existing layout store. The macOS workspace corner separately retains the native 88×40 viewport-pixel traffic-light footprint and converts measured group intersections into local header padding; zoom, layout and fullscreen updates do not change that physical footprint. + +Bot-owned choice controls use the shared `ds/Select` → `PointerMenu` geometry owner under +window zoom. It keeps the native Menu renderer and keyboard owner inside the owning Modal, +converts viewport anchor coordinates through effective CSS zoom, clamps to the safe viewport +and returns focus after dismissal. No second shortcut router or Panel state is introduced. diff --git a/packages/browser/lib/client.js b/packages/browser/lib/client.js index d7dc945af..21e086f8e 100644 --- a/packages/browser/lib/client.js +++ b/packages/browser/lib/client.js @@ -2327,6 +2327,76 @@ window.__ModuleLoader__.load({ }); } //#endregion + //#region packages/client/src/client/ds/pointer-menu.tsx + function pointerMenuPosition(point, width, height, viewport) { + const margin = Number.parseFloat(space.x4); + return { + x: Math.max(margin, Math.min(point.x, viewport.width - width - margin)), + y: Math.max(Math.max(margin, viewport.top), Math.min(point.y, viewport.height - height - margin)) + }; + } + function PointerMenu({ point, container = document.body, align = "start", ...props }) { + const mount = useMountedResource((node) => { + const menu = node.querySelector("[role=\"menu\"]"); + if (!menu) return; + const originalMaxWidth = Number.parseFloat(getComputedStyle(menu).maxWidth); + const originalMinWidth = Number.parseFloat(getComputedStyle(menu).minWidth); + const place = () => { + const scale = node.getBoundingClientRect(); + if (!scale.width || !scale.height) return; + const cssZoom = "currentCSSZoom" in node && typeof node.currentCSSZoom === "number" ? node.currentCSSZoom : void 0; + const scaleX = cssZoom ?? scale.width; + const scaleY = cssZoom ?? scale.height; + const root = document.documentElement; + const clearance = root.hasAttribute("data-fullscreen") ? 0 : Number.parseFloat(getComputedStyle(root).getPropertyValue("--dsh-frame-top-clearance")) || 0; + const margin = Number.parseFloat(space.x4); + const availableWidth = Math.max(0, innerWidth - 2 * margin) / scaleX; + menu.style.minWidth = `${Math.min(originalMinWidth || 0, availableWidth)}px`; + menu.style.maxWidth = `${Math.min(originalMaxWidth || Infinity, availableWidth)}px`; + menu.style.maxHeight = `${Math.max(0, innerHeight - Math.max(margin, clearance) - margin) / scaleY}px`; + const box = menu.getBoundingClientRect(); + const desired = pointerMenuPosition({ + x: align === "end" ? point.x - box.width : point.x, + y: point.y + }, box.width, box.height, { + width: innerWidth, + height: innerHeight, + top: clearance + }); + const left = Number.parseFloat(node.style.left) || 0; + const top = Number.parseFloat(node.style.top) || 0; + node.style.left = `${left + (desired.x - box.left) / scaleX}px`; + node.style.top = `${top + (desired.y - box.top) / scaleY}px`; + }; + place(); + const observer = typeof ResizeObserver === "undefined" ? void 0 : new ResizeObserver(place); + observer?.observe(menu); + observer?.observe(node); + window.addEventListener("resize", place); + window.addEventListener("scroll", place, true); + return () => { + observer?.disconnect(); + window.removeEventListener("resize", place); + window.removeEventListener("scroll", place, true); + }; + }, [ + point.x, + point.y, + align + ]); + return (0, react_dom.createPortal)(/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + ref: mount, + "data-pointer-menu": "", + className: "bhxixxii4 bhxu96u03 bhx13vifvy bhx51uzqw bhx1kkor1i bhxp6lfbs bhx47corl", + children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Menu, { + ...props, + open: true, + portal: false, + className: { className: "bhx67bb7w" }.className + }) + }), container); + } + //#endregion //#region packages/client/src/client/ds/pill-button.tsx const pillStyles = { pill: { k1xSpc: "bhx3nfvp2", @@ -2353,44 +2423,94 @@ window.__ModuleLoader__.load({ //#region packages/client/src/client/ds/select.tsx function Select({ label, value, options, onChange, disabled = false, align = "end", autoFocus = false, reselect = false }) { const [open, setOpen] = (0, react.useState)(false); + const [point, setPoint] = (0, react.useState)(); + const trigger = (0, react.useRef)(null); + const active = open && !disabled; + const mount = useMountedResource((node) => { + trigger.current = node; + if (!active) return () => { + trigger.current = null; + }; + const place = () => { + const rect = node.getBoundingClientRect(); + const scale = node.offsetHeight > 0 ? rect.height / node.offsetHeight : 1; + const next = { + x: align === "end" ? rect.right : rect.left, + y: rect.bottom + Number.parseFloat(space.x2) * scale + }; + setPoint((previous) => previous?.x === next.x && previous.y === next.y ? previous : next); + }; + place(); + const resize = typeof ResizeObserver === "undefined" ? void 0 : new ResizeObserver(place); + resize?.observe(node); + resize?.observe(document.documentElement); + const observer = new MutationObserver(place); + observer.observe(document.documentElement, { + attributes: true, + attributeFilter: ["style", "data-fullscreen"] + }); + window.addEventListener("resize", place); + window.addEventListener("scroll", place, true); + return () => { + trigger.current = null; + resize?.disconnect(); + observer.disconnect(); + window.removeEventListener("resize", place); + window.removeEventListener("scroll", place, true); + }; + }, [active, align]); + const close = () => { + const button = trigger.current; + const menu = document.activeElement?.closest("[data-pointer-menu]"); + setOpen(false); + setPoint(void 0); + queueMicrotask(() => { + const focused = document.activeElement; + if (button?.isConnected && !button.disabled && (focused === document.body || focused !== null && menu?.contains(focused))) button.focus({ preventScroll: true }); + }); + }; const current = options.find((option) => option.value === value); - return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Menu, { - open: open && !disabled, - portal: true, + return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", { + ref: mount, + type: "button", + "aria-label": label, + "aria-haspopup": "menu", + "aria-expanded": active, + disabled, + "data-modal-autofocus": autoFocus ? "" : void 0, + onPointerDown: (event) => { + if (active) event.stopPropagation(); + }, + onClick: () => { + if (active) close(); + else setOpen(true); + }, + ...props(pillStyles.pill), + children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + className: "bhxeuugli bhxb3r6kr bhxlyipyv bhxuxw1ft", + children: current?.label + }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + className: "bhx3nfvp2 bhx2lah0s bhxr3raxm", + children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular, { size: 12 }) + })] + }), active && point ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PointerMenu, { + point, align, + container: trigger.current?.closest("[role=\"dialog\"]") ?? document.body, + autoFocus: true, + anchor: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { "aria-hidden": "true" }), items: options.map((option) => ({ id: option.value, label: option.label })), selectedId: value, onSelect: (id) => { - setOpen(false); + close(); const next = options.find((option) => option.value === id); if (next !== void 0 && (reselect || next.value !== value)) onChange(next.value); }, - onClose: () => { - setOpen(false); - }, - anchor: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", { - type: "button", - "aria-label": label, - "aria-haspopup": "menu", - "aria-expanded": open && !disabled, - disabled, - "data-modal-autofocus": autoFocus ? "" : void 0, - onClick: () => { - setOpen((previous) => !previous); - }, - ...props(pillStyles.pill), - children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { - className: "bhxeuugli bhxb3r6kr bhxlyipyv bhxuxw1ft", - children: current?.label - }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { - className: "bhx3nfvp2 bhx2lah0s bhxr3raxm", - children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular, { size: 12 }) - })] - }) - }); + onClose: close + }) : null] }); } //#endregion //#region packages/client/src/client/ds/settings-row.tsx @@ -2965,11 +3085,15 @@ window.__ModuleLoader__.load({ .bhx1hc1fzr:not(#\\#):not(#\\#):not(#\\#){opacity:1} .bhx1y3gkto:not(#\\#):not(#\\#):not(#\\#){outline-offset:1px} .bhxj0a0fe:not(#\\#):not(#\\#):not(#\\#){overflow-wrap:anywhere} +.bhx67bb7w:not(#\\#):not(#\\#):not(#\\#){pointer-events:auto} +.bhx47corl:not(#\\#):not(#\\#):not(#\\#){pointer-events:none} +.bhxixxii4:not(#\\#):not(#\\#):not(#\\#){position:fixed} .bhx2b8uid:not(#\\#):not(#\\#):not(#\\#){text-align:center} .bhxp4054r:not(#\\#):not(#\\#):not(#\\#){text-align:end} .bhxlyipyv:not(#\\#):not(#\\#):not(#\\#){text-overflow:ellipsis} .bhxuxw1ft:not(#\\#):not(#\\#):not(#\\#){white-space:nowrap} .bhx126k92a:not(#\\#):not(#\\#):not(#\\#){white-space:pre-wrap} +.bhxp6lfbs:not(#\\#):not(#\\#):not(#\\#){z-index:1100} .bhxtgyt42:disabled:not(#\\#):not(#\\#):not(#\\#){cursor:default} .bhxijokvz:disabled:not(#\\#):not(#\\#):not(#\\#){opacity:.5} .bhx1lc0nsx:hover:not(#\\#):not(#\\#):not(#\\#){background-color:var(--dsw-alias-interactive-bg-hover)} @@ -2983,16 +3107,20 @@ window.__ModuleLoader__.load({ .bhxnoyelg:not(#\\#):not(#\\#):not(#\\#):not(#\\#){border-bottom-color:var(--dsw-alias-border-l1)} .bhx1q0q8m5:not(#\\#):not(#\\#):not(#\\#):not(#\\#){border-bottom-style:solid} .bhxrvphhj:not(#\\#):not(#\\#):not(#\\#):not(#\\#){border-bottom-width:1px} +.bhx1kkor1i:not(#\\#):not(#\\#):not(#\\#):not(#\\#){height:1px} .bhxxevliy:not(#\\#):not(#\\#):not(#\\#):not(#\\#){height:28px} .bhxdkzj7d:not(#\\#):not(#\\#):not(#\\#):not(#\\#){height:40px} .bhxols6we:not(#\\#):not(#\\#):not(#\\#):not(#\\#){height:6px} +.bhxu96u03:not(#\\#):not(#\\#):not(#\\#):not(#\\#){left:0} .bhx193iq5w:not(#\\#):not(#\\#):not(#\\#):not(#\\#){max-width:100%} .bhxxc7z9f:not(#\\#):not(#\\#):not(#\\#):not(#\\#){max-width:360px} .bhxh9uqaf:not(#\\#):not(#\\#):not(#\\#):not(#\\#){max-width:60%} .bhxeuugli:not(#\\#):not(#\\#):not(#\\#):not(#\\#){min-width:0} .bhx1e1oj2y:not(#\\#):not(#\\#):not(#\\#):not(#\\#){padding-bottom:4px} .bhxb590mu:not(#\\#):not(#\\#):not(#\\#):not(#\\#){padding-top:16px} +.bhx13vifvy:not(#\\#):not(#\\#):not(#\\#):not(#\\#){top:0} .bhxh8yej3:not(#\\#):not(#\\#):not(#\\#):not(#\\#){width:100%} +.bhx51uzqw:not(#\\#):not(#\\#):not(#\\#):not(#\\#){width:1px} .bhx1i1gie9:not(#\\#):not(#\\#):not(#\\#):not(#\\#){width:40px} .bhx10zg81t:first-child:not(#\\#):not(#\\#):not(#\\#):not(#\\#){padding-top:0} .bhx1bta2m4:last-child:not(#\\#):not(#\\#):not(#\\#):not(#\\#){border-bottom-color:transparent} diff --git a/packages/browser/lib/client.js.map b/packages/browser/lib/client.js.map index d46bf31d2..edfbbe28f 100644 --- a/packages/browser/lib/client.js.map +++ b/packages/browser/lib/client.js.map @@ -1 +1 @@ -{"version":3,"file":"client.js","names":["createElement","stylex","space","x1","x2","x3","x4","x5","x6","text","metaSize","metaLine","bodySize","bodyLine","titleSize","titleLine","regular","strong","radius","xs","sm","md","lg","panel","round","border","hairline","focus","size","inlineIcon","icon","row","nav","dialog","small","bodyMax","medium","wide","color","fg","muted","subtle","divider","borderStrong","hover","selected","navSelected","accent","onAccent","danger","onDanger","dangerEdge","dangerSoft","warning","warningEdge","warningSoft","success","surface","elevated","base","well","accentTint","ReactElement","ReactNode","stylex","ChannelSidebarIcon","border","color","radius","size","space","text","EmptyState","title","description","action","status","undefined","PanelEmptyState","icon","children","useRef","useCallback","Button","Pill","IconFullscreenOutlineRegular","useState","StateDot","useRef","useCallback","Fragment","ReactElement","ReactNode","stylex","color","space","text","styles","note","kogj98","kGuDYH","kLWn49","kHjlTd","$$css","inset","k8WAf4","kg3NbH","muted","kMwMTN","subtle","danger","success","warning","NoteTone","Note","tone","children","props","useState","ReactElement","ReactNode","stylex","Button","Note","color","radius","space","text","MissingPackagesAccess","MissingPackagesLabels","missing","manual","install","copy","copied","formatProgressMiB","bytes","toFixed","ProgressLine","percent","label","value","Math","max","min","MissingPackages","command","access","installing","busy","onInstall","labels","children","setCopied","navigator","clipboard","writeText","then","undefined","useState","useRef","useCallback","useRef","useId","useState","useAnchoredPosition","Input","IconChevronDownOutlineRegular","createPortal","MenuSurface","IconPlusOutlineRegular","NativeMenu","ButtonHTMLAttributes","InputHTMLAttributes","ReactElement","ReactNode","stylex","border","color","radius","size","space","text","pillStyles","pill","k1xSpc","kGNEyG","kOIVth","ks0D6T","kZKoxP","kg3NbH","kMzoRj","kaIpWk","kWkggS","kMwMTN","kMv6JI","kGuDYH","kLWn49","khDVqt","kkrTdU","kSiTet","kI3sdo","kInvED","$$css","PillButton","children","rest","Omit","HTMLButtonElement","PillFileButton","input","HTMLInputElement","Menu","useState","ReactElement","ReactNode","stylex","IconChevronDownOutlineRegular","pillStyles","color","SelectOption","value","Value","label","SelectProps","options","onChange","disabled","align","autoFocus","reselect","Select","open","setOpen","current","find","option","map","id","next","undefined","previous","props","pill","useId","ReactElement","ReactNode","Ref","stylex","border","color","space","text","NARROW","COMPACT","SettingsRows","children","rootRef","HTMLDivElement","SettingsSectionProps","title","description","SettingsSection","id","undefined","SettingsRowProps","control","data","Readonly","Record","SettingsRow","titleId","descriptionId","SettingsValue","useState","useMemo","useSyncExternalStore","useState","useRef","useCallback","Tag","Button","Input","useState","useRef","useCallback","Tag","Button","useState","useRef","useCallback","Tag","Button","Input","useState","useRef","useSyncExternalStore","Tooltip","useId","useCallback","Tag","Switch","Button","IconFullscreenOutlineRegular"],"sources":["../../../node_modules/.pnpm/@stylexjs+stylex@0.19.1/node_modules/@stylexjs/stylex/lib/es/stylex.mjs","../../client/src/client/channel-sidebar-icon.tsx","../../client/src/client/ds/tokens.stylex.ts","../../client/src/client/ds/empty-state.tsx","../../client/src/client/mounted-resource.ts","../../client/src/client/remote-viewer/tokens.ts","../../client/src/client/remote-viewer/viewer-state.ts","../../client/src/client/remote-viewer/frame-liveness.ts","../../client/src/client/remote-viewer/index.tsx","../../client/src/client/sidebar-card.tsx","../src/client/locale.ts","../src/failure-kinds.ts","../../client/src/client/ds/note.tsx","../../client/src/client/missing-packages.tsx","../src/client/browser-failure.tsx","../../client/src/client/combobox.tsx","../src/client/profile-combobox.tsx","../../client/src/client/appearance-scope.ts","../../client/src/client/appearance-primitives.tsx","../../client/src/client/ds/pill-button.tsx","../../client/src/client/ds/select.tsx","../../client/src/client/ds/settings-row.tsx","../src/client/settings.tsx","../src/client/profile-browser.tsx","../src/client/daily-browser.tsx","../src/client/borrowed-browser.tsx","../../client/src/client/ds/stylex-css.ts","../src/client/styles.ts","../src/client/access-power-icon.tsx","../src/client/viewer-icons.tsx","../src/client/index.tsx"],"sourcesContent":["var styleq = {};\n\nvar hasRequiredStyleq;\n\nfunction requireStyleq () {\n\tif (hasRequiredStyleq) return styleq;\n\thasRequiredStyleq = 1;\n\n\tObject.defineProperty(styleq, \"__esModule\", {\n\t value: true\n\t});\n\tstyleq.styleq = void 0;\n\tvar cache = new WeakMap();\n\tvar compiledKey = '$$css';\n\tfunction createStyleq(options) {\n\t var disableCache;\n\t var disableMix;\n\t var transform;\n\t if (options != null) {\n\t disableCache = options.disableCache === true;\n\t disableMix = options.disableMix === true;\n\t transform = options.transform;\n\t }\n\t return function styleq() {\n\t var definedProperties = [];\n\t var className = '';\n\t var inlineStyle = null;\n\t var debugString = '';\n\t var nextCache = disableCache ? null : cache;\n\t var styles = new Array(arguments.length);\n\t for (var i = 0; i < arguments.length; i++) {\n\t styles[i] = arguments[i];\n\t }\n\t while (styles.length > 0) {\n\t var possibleStyle = styles.pop();\n\t if (possibleStyle == null || possibleStyle === false) {\n\t continue;\n\t }\n\t if (Array.isArray(possibleStyle)) {\n\t for (var _i = 0; _i < possibleStyle.length; _i++) {\n\t styles.push(possibleStyle[_i]);\n\t }\n\t continue;\n\t }\n\t var style = transform != null ? transform(possibleStyle) : possibleStyle;\n\t if (style.$$css != null) {\n\t var classNameChunk = '';\n\t if (nextCache != null && nextCache.has(style)) {\n\t var cacheEntry = nextCache.get(style);\n\t if (cacheEntry != null) {\n\t classNameChunk = cacheEntry[0];\n\t debugString = cacheEntry[2];\n\t definedProperties.push.apply(definedProperties, cacheEntry[1]);\n\t nextCache = cacheEntry[3];\n\t }\n\t } else {\n\t var definedPropertiesChunk = [];\n\t for (var prop in style) {\n\t var value = style[prop];\n\t if (prop === compiledKey) {\n\t var compiledKeyValue = style[prop];\n\t if (compiledKeyValue !== true) {\n\t debugString = debugString ? compiledKeyValue + '; ' + debugString : compiledKeyValue;\n\t }\n\t continue;\n\t }\n\t if (typeof value === 'string' || value === null) {\n\t if (!definedProperties.includes(prop)) {\n\t definedProperties.push(prop);\n\t if (nextCache != null) {\n\t definedPropertiesChunk.push(prop);\n\t }\n\t if (typeof value === 'string') {\n\t classNameChunk += classNameChunk ? ' ' + value : value;\n\t }\n\t }\n\t } else {\n\t console.error(\"styleq: \".concat(prop, \" typeof \").concat(String(value), \" is not \\\"string\\\" or \\\"null\\\".\"));\n\t }\n\t }\n\t if (nextCache != null) {\n\t var weakMap = new WeakMap();\n\t nextCache.set(style, [classNameChunk, definedPropertiesChunk, debugString, weakMap]);\n\t nextCache = weakMap;\n\t }\n\t }\n\t if (classNameChunk) {\n\t className = className ? classNameChunk + ' ' + className : classNameChunk;\n\t }\n\t } else {\n\t if (disableMix) {\n\t if (inlineStyle == null) {\n\t inlineStyle = {};\n\t }\n\t inlineStyle = Object.assign({}, style, inlineStyle);\n\t } else {\n\t var subStyle = null;\n\t for (var _prop in style) {\n\t var _value = style[_prop];\n\t if (_value !== undefined) {\n\t if (!definedProperties.includes(_prop)) {\n\t if (_value != null) {\n\t if (inlineStyle == null) {\n\t inlineStyle = {};\n\t }\n\t if (subStyle == null) {\n\t subStyle = {};\n\t }\n\t subStyle[_prop] = _value;\n\t }\n\t definedProperties.push(_prop);\n\t nextCache = null;\n\t }\n\t }\n\t }\n\t if (subStyle != null) {\n\t inlineStyle = Object.assign(subStyle, inlineStyle);\n\t }\n\t }\n\t }\n\t }\n\t var styleProps = [className, inlineStyle, debugString];\n\t return styleProps;\n\t };\n\t}\n\tvar styleq$1 = styleq.styleq = createStyleq();\n\tstyleq$1.factory = createStyleq;\n\treturn styleq;\n}\n\nvar styleqExports = /*@__PURE__*/ requireStyleq();\n\nconst errorForFn = name => new Error(`Unexpected 'stylex.${name}' call at runtime. Styles must be compiled by '@stylexjs/babel-plugin'.`);\nconst errorForType = key => errorForFn(`types.${key}`);\nconst create = function stylexCreate(_styles) {\n throw errorForFn('create');\n};\nconst createTheme = (_baseTokens, _overrides) => {\n throw errorForFn('createTheme');\n};\nconst defineConsts = function stylexDefineConsts(_styles) {\n throw errorForFn('defineConsts');\n};\nconst defineVars = function stylexDefineVars(_styles) {\n throw errorForFn('defineVars');\n};\nconst unstable_conditional = function stylexConditional(_value) {\n throw errorForFn('unstable_conditional');\n};\nconst unstable_defineVarsNested = function stylexDefineVarsNested(_styles) {\n throw errorForFn('unstable_defineVarsNested');\n};\nconst unstable_defineConstsNested = function stylexDefineConstsNested(_styles) {\n throw errorForFn('unstable_defineConstsNested');\n};\nconst unstable_createThemeNested = (_baseTokens, _overrides) => {\n throw errorForFn('unstable_createThemeNested');\n};\nconst defineMarker = () => {\n throw errorForFn('defineMarker');\n};\nconst firstThatWorks = (..._styles) => {\n throw errorForFn('firstThatWorks');\n};\nconst keyframes = _keyframes => {\n throw errorForFn('keyframes');\n};\nconst positionTry = _positionTry => {\n throw errorForFn('positionTry');\n};\nfunction props(...styles) {\n const [className, style, dataStyleSrc] = styleqExports.styleq(styles);\n const result = {};\n if (className != null && className !== '') {\n result.className = className;\n }\n if (style != null && Object.keys(style).length > 0) {\n result.style = style;\n }\n if (dataStyleSrc != null && dataStyleSrc !== '') {\n result['data-style-src'] = dataStyleSrc;\n }\n return result;\n}\nconst toKebabCase = str => str.replace(/([A-Z])/g, '-$1').toLowerCase();\nfunction attrs(...styles) {\n const {\n className,\n style,\n 'data-style-src': dataStyleSrc\n } = props.apply(this, styles);\n const result = {};\n if (className != null) {\n result.class = className;\n }\n if (style != null) {\n result.style = Object.entries(style).map(([key, value]) => `${toKebabCase(key)}:${value}`).join(';');\n }\n if (dataStyleSrc != null) {\n result['data-style-src'] = dataStyleSrc;\n }\n return result;\n}\nconst viewTransitionClass = _viewTransitionClass => {\n throw errorForFn('viewTransitionClass');\n};\nconst defaultMarker = () => {\n throw errorForFn('defaultMarker');\n};\nconst when = {\n ancestor: _p => {\n throw errorForFn('when.ancestor');\n },\n descendant: _p => {\n throw errorForFn('when.descendant');\n },\n siblingBefore: _p => {\n throw errorForFn('when.siblingBefore');\n },\n siblingAfter: _p => {\n throw errorForFn('when.siblingAfter');\n },\n anySibling: _p => {\n throw errorForFn('when.anySibling');\n }\n};\nconst env = Object.freeze({});\nconst types = {\n angle: _v => {\n throw errorForType('angle');\n },\n color: _v => {\n throw errorForType('color');\n },\n url: _v => {\n throw errorForType('url');\n },\n image: _v => {\n throw errorForType('image');\n },\n integer: _v => {\n throw errorForType('integer');\n },\n lengthPercentage: _v => {\n throw errorForType('lengthPercentage');\n },\n length: _v => {\n throw errorForType('length');\n },\n percentage: _v => {\n throw errorForType('percentage');\n },\n number: _v => {\n throw errorForType('number');\n },\n resolution: _v => {\n throw errorForType('resolution');\n },\n time: _v => {\n throw errorForType('time');\n },\n transformFunction: _v => {\n throw errorForType('transformFunction');\n },\n transformList: _v => {\n throw errorForType('transformList');\n }\n};\nconst legacyMerge = /*@__PURE__*/ function () {\n function _legacyMerge(...styles) {\n const [className] = styleqExports.styleq(styles);\n return className;\n }\n _legacyMerge.create = create;\n _legacyMerge.createTheme = createTheme;\n _legacyMerge.defineConsts = defineConsts;\n _legacyMerge.defineMarker = defineMarker;\n _legacyMerge.defineVars = defineVars;\n _legacyMerge.defaultMarker = defaultMarker;\n _legacyMerge.firstThatWorks = firstThatWorks;\n _legacyMerge.keyframes = keyframes;\n _legacyMerge.positionTry = positionTry;\n _legacyMerge.props = props;\n _legacyMerge.attrs = attrs;\n _legacyMerge.types = types;\n _legacyMerge.when = when;\n _legacyMerge.viewTransitionClass = viewTransitionClass;\n _legacyMerge.env = env;\n _legacyMerge.unstable_conditional = unstable_conditional;\n _legacyMerge.unstable_defineVarsNested = unstable_defineVarsNested;\n _legacyMerge.unstable_defineConstsNested = unstable_defineConstsNested;\n _legacyMerge.unstable_createThemeNested = unstable_createThemeNested;\n return _legacyMerge;\n}();\n\nexport { attrs, create, createTheme, defaultMarker, defineConsts, defineMarker, defineVars, env, firstThatWorks, keyframes, legacyMerge, positionTry, props, types, unstable_conditional, unstable_createThemeNested, unstable_defineConstsNested, unstable_defineVarsNested, viewTransitionClass, when };\n","/**\n * Vendored Channel sidebar glyphs from lucide-react@1.46.0 (ISC, ADR-0032).\n *\n * Source: the matching lucide `dist/esm/icons/*.mjs` glyph data. Vendored at the\n * stock 2-unit stroke without adding a `lucide-react` runtime dependency.\n *\n * ISC License\n *\n * Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2022 as part of Feather (MIT).\n * All other copyright (c) for Lucide are held by Lucide Contributors 2022.\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\nimport { createElement, type ReactElement } from 'react';\n\nconst glyphs: Record][]> = {\n 'chevron-right': [['path', { d: 'm9 18 6-6-6-6' }]],\n house: [['path', { d: 'm3 10 9-7 9 7v10a1 1 0 0 1-1 1h-5v-7H9v7H4a1 1 0 0 1-1-1z' }]],\n hash: [\n ['line', { x1: '4', x2: '20', y1: '9', y2: '9' }],\n ['line', { x1: '4', x2: '20', y1: '15', y2: '15' }],\n ['line', { x1: '10', x2: '8', y1: '3', y2: '21' }],\n ['line', { x1: '16', x2: '14', y1: '3', y2: '21' }],\n ],\n 'messages-circle': [\n [\n 'path',\n {\n d: 'M19.95 10.05a7 7 0 011.412 7.872 1 1 0 00-.058.787l.675 2.089a1 1 0 01-1.236 1.168l-2.155-.631a1 1 0 00-.745.06 7 7 0 01-7.793-1.445',\n },\n ],\n [\n 'path',\n {\n d: 'M2.696 12.708a1 1 0 00-.058-.785 7 7 0 113.518 3.473 1 1 0 00-.744-.061l-2.155.63a1 1 0 01-1.236-1.167z',\n },\n ],\n ],\n 'text-quote': [\n ['path', { d: 'M17 5H3' }],\n ['path', { d: 'M21 12H8' }],\n ['path', { d: 'M21 19H8' }],\n ['path', { d: 'M3 12v7' }],\n ],\n brain: [\n ['path', { d: 'M12 18V5' }],\n ['path', { d: 'M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4' }],\n ['path', { d: 'M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5' }],\n ['path', { d: 'M17.997 5.125a4 4 0 0 1 2.526 5.77' }],\n ['path', { d: 'M18 18a4 4 0 0 0 2-7.464' }],\n ['path', { d: 'M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517' }],\n ['path', { d: 'M6 18a4 4 0 0 1-2-7.464' }],\n ['path', { d: 'M6.003 5.125a4 4 0 0 0-2.526 5.77' }],\n ],\n file: [\n [\n 'path',\n {\n d: 'M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5' }],\n ],\n terminal: [\n ['path', { d: 'M12 19h8' }],\n ['path', { d: 'm4 17 6-6-6-6' }],\n ],\n archive: [\n ['rect', { width: '20', height: '5', x: '2', y: '3', rx: '1' }],\n ['path', { d: 'M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8' }],\n ['path', { d: 'M10 12h4' }],\n ],\n 'archive-restore': [\n ['rect', { width: '20', height: '5', x: '2', y: '3', rx: '1' }],\n ['path', { d: 'M4 8v11a2 2 0 0 0 2 2h2' }],\n ['path', { d: 'M20 8v11a2 2 0 0 1-2 2h-2' }],\n ['path', { d: 'm9 15 3-3 3 3' }],\n ['path', { d: 'M12 12v9' }],\n ],\n 'alarm-clock': [\n ['circle', { cx: '12', cy: '13', r: '8' }],\n ['path', { d: 'M12 9v4l2 2' }],\n ['path', { d: 'M5 3 2 6' }],\n ['path', { d: 'm22 6-3-3' }],\n ['path', { d: 'M6.38 18.7 4 21' }],\n ['path', { d: 'M17.64 18.67 20 21' }],\n ],\n 'bell-ring': [\n ['path', { d: 'M10.268 21a2 2 0 0 0 3.464 0' }],\n ['path', { d: 'M22 8c0-2.3-.8-4.3-2-6' }],\n [\n 'path',\n {\n d: 'M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326',\n },\n ],\n ['path', { d: 'M4 2C2.8 3.7 2 5.7 2 8' }],\n ],\n bell: [\n ['path', { d: 'M10.268 21a2 2 0 0 0 3.464 0' }],\n [\n 'path',\n {\n d: 'M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326',\n },\n ],\n ],\n 'bell-off': [\n ['path', { d: 'M10.268 21a2 2 0 0 0 3.464 0' }],\n ['path', { d: 'M17 17H4a1 1 0 0 1-.74-1.673C4.59 13.956 6 12.499 6 8a6 6 0 0 1 .258-1.742' }],\n ['path', { d: 'm2 2 20 20' }],\n ['path', { d: 'M8.668 3.01A6 6 0 0 1 18 8c0 2.687.77 4.653 1.707 6.05' }],\n ],\n cpu: [\n ['path', { d: 'M12 20v2' }],\n ['path', { d: 'M12 2v2' }],\n ['path', { d: 'M17 20v2' }],\n ['path', { d: 'M17 2v2' }],\n ['path', { d: 'M2 12h2' }],\n ['path', { d: 'M2 17h2' }],\n ['path', { d: 'M2 7h2' }],\n ['path', { d: 'M20 12h2' }],\n ['path', { d: 'M20 17h2' }],\n ['path', { d: 'M20 7h2' }],\n ['path', { d: 'M7 20v2' }],\n ['path', { d: 'M7 2v2' }],\n ['rect', { x: '4', y: '4', width: '16', height: '16', rx: '2' }],\n ['rect', { x: '8', y: '8', width: '8', height: '8', rx: '1' }],\n ],\n 'id-card': [\n ['path', { d: 'M13 19a4 4 0 00-8 0' }],\n ['path', { d: 'M16 10h2' }],\n ['path', { d: 'M16 14h2' }],\n ['circle', { cx: '9', cy: '12', r: '3' }],\n ['rect', { x: '2', y: '5', width: '20', height: '14', rx: '2' }],\n ],\n plug: [\n ['path', { d: 'M12 22v-5' }],\n ['path', { d: 'M15 8V2' }],\n [\n 'path',\n {\n d: 'M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z',\n },\n ],\n ['path', { d: 'M9 8V2' }],\n ],\n ruler: [\n [\n 'path',\n {\n d: 'M21.3 15.3a2.4 2.4 0 0 1 0 3.4l-2.6 2.6a2.4 2.4 0 0 1-3.4 0L2.7 8.7a2.41 2.41 0 0 1 0-3.4l2.6-2.6a2.41 2.41 0 0 1 3.4 0Z',\n },\n ],\n ['path', { d: 'm14.5 12.5 2-2' }],\n ['path', { d: 'm11.5 9.5 2-2' }],\n ['path', { d: 'm8.5 6.5 2-2' }],\n ['path', { d: 'm17.5 15.5 2-2' }],\n ],\n compass: [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n [\n 'path',\n {\n d: 'm16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z',\n },\n ],\n ],\n gauge: [\n ['path', { d: 'm12 14 4-4' }],\n ['path', { d: 'M3.34 19a10 10 0 1 1 17.32 0' }],\n ],\n 'user-check': [\n ['path', { d: 'm16 11 2 2 4-4' }],\n ['path', { d: 'M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2' }],\n ['circle', { cx: '9', cy: '7', r: '4' }],\n ],\n 'shield-check': [\n [\n 'path',\n {\n d: 'M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z',\n },\n ],\n ['path', { d: 'm9 12 2 2 4-4' }],\n ],\n plus: [\n ['path', { d: 'M5 12h14' }],\n ['path', { d: 'M12 5v14' }],\n ],\n user: [\n ['path', { d: 'M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2' }],\n ['circle', { cx: '12', cy: '7', r: '4' }],\n ],\n bot: [\n ['path', { d: 'M12 8V4H8' }],\n ['rect', { width: '16', height: '12', x: '4', y: '8', rx: '2' }],\n ['path', { d: 'M2 14h2' }],\n ['path', { d: 'M20 14h2' }],\n ['path', { d: 'M15 13v2' }],\n ['path', { d: 'M9 13v2' }],\n ],\n 'list-checks': [\n ['path', { d: 'M13 5h8' }],\n ['path', { d: 'M13 12h8' }],\n ['path', { d: 'M13 19h8' }],\n ['path', { d: 'm3 17 2 2 4-4' }],\n ['path', { d: 'm3 7 2 2 4-4' }],\n ],\n palette: [\n [\n 'path',\n {\n d: 'M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z',\n },\n ],\n ['circle', { cx: '13.5', cy: '6.5', r: '.5', fill: 'currentColor' }],\n ['circle', { cx: '17.5', cy: '10.5', r: '.5', fill: 'currentColor' }],\n ['circle', { cx: '6.5', cy: '12.5', r: '.5', fill: 'currentColor' }],\n ['circle', { cx: '8.5', cy: '7.5', r: '.5', fill: 'currentColor' }],\n ],\n 'image-up': [\n [\n 'path',\n {\n d: 'M10.3 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v10l-3.1-3.1a2 2 0 0 0-2.814.014L6 21',\n },\n ],\n ['path', { d: 'm14 19.5 3-3 3 3' }],\n ['path', { d: 'M17 22v-5.5' }],\n ['circle', { cx: '9', cy: '9', r: '2' }],\n ],\n lock: [\n ['rect', { width: '18', height: '11', x: '3', y: '11', rx: '2', ry: '2' }],\n ['path', { d: 'M7 11V7a5 5 0 0 1 10 0v4' }],\n ],\n play: [\n [\n 'path',\n {\n d: 'M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z',\n },\n ],\n ],\n 'lock-open': [\n ['rect', { width: '18', height: '11', x: '3', y: '11', rx: '2', ry: '2' }],\n ['path', { d: 'M7 11V7a5 5 0 0 1 9.9-1' }],\n ],\n eye: [\n [\n 'path',\n {\n d: 'M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0',\n },\n ],\n ['circle', { cx: '12', cy: '12', r: '3' }],\n ],\n 'eye-off': [\n [\n 'path',\n {\n d: 'M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49',\n },\n ],\n ['path', { d: 'M14.084 14.158a3 3 0 0 1-4.242-4.242' }],\n [\n 'path',\n {\n d: 'M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143',\n },\n ],\n ['path', { d: 'm2 2 20 20' }],\n ],\n files: [\n [\n 'path',\n {\n d: 'M15 2h-4a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8',\n },\n ],\n [\n 'path',\n {\n d: 'M16.706 2.706A2.4 2.4 0 0 0 15 2v5a1 1 0 0 0 1 1h5a2.4 2.4 0 0 0-.706-1.706z',\n },\n ],\n [\n 'path',\n {\n d: 'M5 7a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 1.732-1',\n },\n ],\n ],\n 'git-branch': [\n [\n 'path',\n {\n d: 'M15 6a9 9 0 0 0-9 9V3',\n },\n ],\n [\n 'circle',\n {\n cx: '18',\n cy: '6',\n r: '3',\n },\n ],\n [\n 'circle',\n {\n cx: '6',\n cy: '18',\n r: '3',\n },\n ],\n ],\n 'messages-square': [\n [\n 'path',\n {\n d: 'M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z',\n },\n ],\n [\n 'path',\n {\n d: 'M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1',\n },\n ],\n ],\n inbox: [\n [\n 'polyline',\n {\n points: '22 12 16 12 14 15 10 15 8 12 2 12',\n },\n ],\n [\n 'path',\n {\n d: 'M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z',\n },\n ],\n ],\n 'folder-key': [\n [\n 'path',\n {\n d: 'M13 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v1.36',\n },\n ],\n [\n 'path',\n {\n d: 'M19 12v6',\n },\n ],\n [\n 'path',\n {\n d: 'M19 14h2',\n },\n ],\n [\n 'circle',\n {\n cx: '19',\n cy: '20',\n r: '2',\n },\n ],\n ],\n users: [\n [\n 'path',\n {\n d: 'M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2',\n },\n ],\n [\n 'path',\n {\n d: 'M16 3.128a4 4 0 0 1 0 7.744',\n },\n ],\n [\n 'path',\n {\n d: 'M22 21v-2a4 4 0 0 0-3-3.87',\n },\n ],\n [\n 'circle',\n {\n cx: '9',\n cy: '7',\n r: '4',\n },\n ],\n ],\n 'settings-2': [\n [\n 'path',\n {\n d: 'M14 17H5',\n },\n ],\n [\n 'path',\n {\n d: 'M19 7h-9',\n },\n ],\n [\n 'circle',\n {\n cx: '17',\n cy: '17',\n r: '3',\n },\n ],\n [\n 'circle',\n {\n cx: '7',\n cy: '7',\n r: '3',\n },\n ],\n ],\n settings: [\n [\n 'path',\n {\n d: 'M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915',\n },\n ],\n [\n 'circle',\n {\n cx: '12',\n cy: '12',\n r: '3',\n },\n ],\n ],\n monitor: [\n [\n 'rect',\n {\n width: '20',\n height: '14',\n x: '2',\n y: '3',\n rx: '2',\n },\n ],\n [\n 'line',\n {\n x1: '8',\n x2: '16',\n y1: '21',\n y2: '21',\n },\n ],\n [\n 'line',\n {\n x1: '12',\n x2: '12',\n y1: '17',\n y2: '21',\n },\n ],\n ],\n globe: [\n [\n 'circle',\n {\n cx: '12',\n cy: '12',\n r: '10',\n },\n ],\n [\n 'path',\n {\n d: 'M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20',\n },\n ],\n [\n 'path',\n {\n d: 'M2 12h20',\n },\n ],\n ],\n 'panels-top-left': [\n [\n 'rect',\n {\n width: '18',\n height: '18',\n x: '3',\n y: '3',\n rx: '2',\n },\n ],\n [\n 'path',\n {\n d: 'M3 9h18',\n },\n ],\n [\n 'path',\n {\n d: 'M9 21V9',\n },\n ],\n ],\n 'grip-vertical': [\n ['circle', { cx: '9', cy: '12', r: '1' }],\n ['circle', { cx: '9', cy: '5', r: '1' }],\n ['circle', { cx: '9', cy: '19', r: '1' }],\n ['circle', { cx: '15', cy: '12', r: '1' }],\n ['circle', { cx: '15', cy: '5', r: '1' }],\n ['circle', { cx: '15', cy: '19', r: '1' }],\n ],\n x: [\n ['path', { d: 'M18 6 6 18' }],\n ['path', { d: 'm6 6 12 12' }],\n ],\n check: [\n [\n 'path',\n {\n d: 'M20 6 9 17l-5-5',\n },\n ],\n ],\n};\n\nexport function ChannelSidebarIcon({\n name = 'panels-top-left',\n size = 16,\n}: {\n name?: string | undefined;\n size?: number | string;\n}): ReactElement {\n const nodes = Object.hasOwn(glyphs, name) ? glyphs[name]! : glyphs['panels-top-left']!;\n return (\n \n {nodes.map(([tag, attributes], index) => createElement(tag, { ...attributes, key: index }))}\n \n );\n}\n","import * as stylex from '@stylexjs/stylex';\n\nexport const space = stylex.defineConsts({\n x1: '2px',\n x2: '4px',\n x3: '8px',\n x4: '12px',\n x5: '16px',\n x6: '24px',\n});\n\nexport const text = stylex.defineConsts({\n metaSize: '12px',\n metaLine: '16px',\n bodySize: '13px',\n bodyLine: '20px',\n titleSize: '14px',\n titleLine: '20px',\n regular: '400',\n strong: '500',\n});\n\nexport const radius = stylex.defineConsts({\n xs: 'var(--dsw-radius-xs, 4px)',\n sm: 'var(--dsw-radius-sm, 8px)',\n md: 'var(--dsw-radius-md, 12px)',\n lg: 'var(--dsw-radius-lg, 16px)',\n panel: 'var(--dsw-radius-panel)',\n round: '50%',\n});\n\nexport const border = stylex.defineConsts({\n hairline: '1px',\n focus: 'var(--dsw-focus-ring-width, 2px)',\n});\n\nexport const size = stylex.defineConsts({\n inlineIcon: '26px',\n icon: '28px',\n row: '32px',\n nav: '40px',\n});\n\nexport const dialog = stylex.defineConsts({\n small: 'min(440px, calc(100vw - 32px))',\n bodyMax: 'min(60vh, 520px)',\n medium: 'min(760px, calc(100vw - 32px))',\n wide: 'min(1060px, calc(100vw - 32px))',\n});\n\nexport const color = stylex.defineConsts({\n fg: 'var(--dsw-alias-label-primary)',\n muted: 'var(--dsw-alias-label-secondary)',\n subtle: 'var(--dsw-alias-label-tertiary)',\n divider: 'var(--dsw-alias-border-l1)',\n border: 'var(--dsw-alias-border-l2)',\n borderStrong: 'var(--dsw-alias-border-l3)',\n hover: 'var(--dsw-alias-interactive-bg-hover)',\n selected: 'var(--dsw-alias-interactive-bg-active)',\n navSelected: 'var(--dsw-specific-sidebar-nav-item-active)',\n accent: 'var(--dsw-alias-state-business-primary)',\n onAccent: 'var(--dsw-alias-label-primary-foreground)',\n danger: 'var(--dsw-alias-state-error-primary)',\n onDanger: 'var(--dsw-alias-label-primary-foreground)',\n dangerEdge: 'var(--dsw-alias-state-error-secondary)',\n dangerSoft: 'var(--dsw-alias-interactive-bg-hover-danger)',\n warning: 'var(--dsw-alias-state-warn-primary)',\n warningEdge: 'var(--dsw-alias-state-warn-secondary)',\n warningSoft: 'var(--dsw-alias-state-warn-tertiary)',\n success: 'var(--dsw-alias-state-success-primary)',\n surface: 'var(--dsw-alias-bg-module-platform)',\n elevated: 'var(--dsw-alias-button-elevated-fill)',\n base: 'var(--dsw-alias-bg-base)',\n well: 'var(--dsw-alias-bg-base)',\n accentTint: 'var(--dsw-alias-state-business-tertiary)',\n});\n","import type { ReactElement, ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { ChannelSidebarIcon } from '../channel-sidebar-icon.js';\nimport { border, color, radius, size, space, text } from './tokens.stylex.js';\n\nconst styles = stylex.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: space.x3,\n marginBlock: space.x4,\n paddingBlock: space.x6,\n paddingInline: space.x5,\n borderWidth: border.hairline,\n borderStyle: 'dashed',\n borderColor: color.border,\n borderRadius: radius.md,\n textAlign: 'center',\n },\n panel: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n flexGrow: 1,\n gap: space.x4,\n padding: space.x5,\n boxSizing: 'border-box',\n textAlign: 'center',\n color: color.muted,\n },\n icon: { width: size.nav, height: size.nav, flexShrink: 0, color: color.subtle },\n title: {\n margin: 0,\n color: color.fg,\n fontSize: text.bodySize,\n lineHeight: text.bodyLine,\n fontWeight: text.strong,\n },\n description: {\n margin: 0,\n maxWidth: '360px',\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n },\n});\n\nexport function EmptyState({\n title,\n description,\n action,\n status = false,\n}: {\n readonly title: ReactNode;\n readonly description?: ReactNode;\n readonly action?: ReactNode;\n readonly status?: boolean;\n}): ReactElement {\n return (\n
\n

{title}

\n {description === undefined ? null : (\n

{description}

\n )}\n {action}\n
\n );\n}\n\nexport function PanelEmptyState({\n icon,\n children,\n action,\n}: {\n readonly icon?: string | undefined;\n readonly children: ReactNode;\n readonly action?: ReactNode;\n}): ReactElement {\n return (\n
\n \n \n \n

{children}

\n {action === undefined ? null :
{action}
}\n
\n );\n}\n","import { useCallback, useRef, type DependencyList, type RefCallback } from 'react';\n\nexport function useMountedResource(\n start: (node: T) => void | (() => void),\n dependencies: DependencyList,\n): RefCallback {\n const cleanup = useRef<(() => void) | undefined>(undefined);\n return useCallback((node: T | null) => {\n cleanup.current?.();\n cleanup.current = undefined;\n if (node !== null) cleanup.current = start(node) || undefined;\n }, dependencies);\n}\n","export const BH = {\n labelSecondary: 'var(--dsw-alias-label-secondary)',\n hoverFill: 'var(--dsw-alias-interactive-bg-hover)',\n errorPrimary: 'var(--dsw-alias-state-error-primary)',\n radiusMd: 'var(--dsw-radius-md)',\n labelPrimary: 'var(--dsw-alias-label-primary, #0f1115)',\n labelPrimaryForeground: 'var(--dsw-alias-label-primary-foreground, #ffffff)',\n borderL2: 'var(--dsw-alias-border-l2, #0000001a)',\n borderL3: 'var(--dsw-alias-border-l3, #0000001f)',\n borderL4: 'var(--dsw-alias-border-l4, #00000029)',\n bgBase: 'var(--dsw-alias-bg-base, #ffffff)',\n buttonPrimaryFill: 'var(--dsw-alias-button-primary-fill, #0f1115)',\n buttonElevatedFill: 'var(--dsw-alias-button-elevated-fill, transparent)',\n businessPrimary: 'var(--dsw-alias-state-business-primary, #4176e6)',\n hoverScrim: 'color-mix(in srgb, var(--dsw-alias-bg-base) 35%, transparent)',\n} as const;\n\nexport const VIDEO_SURFACE = {\n background: '#000000',\n spinnerTrack: 'rgba(255, 255, 255, 0.18)',\n spinnerArc: '#ffffff',\n onVideo: '#ffffff',\n} as const;\n","import type { ViewerKey } from './locale.js';\n\nexport type ViewerAction = 'open' | 'collapse';\n\nexport function nextExpanded(action: ViewerAction): boolean {\n return action === 'open';\n}\n\nexport type FramePhase = 'connecting' | 'live' | 'empty';\n\nexport const PHASE_SMOOTH_AFTER = 2;\n\nexport interface SmoothedPhase {\n readonly phase: FramePhase;\n readonly streak: number;\n}\n\nexport function smoothPhase(shown: FramePhase, raw: FramePhase, streak: number): SmoothedPhase {\n if (raw === 'live') return { phase: 'live', streak: 0 };\n if (shown !== 'live') return { phase: raw, streak: 0 };\n const next = streak + 1;\n if (next >= PHASE_SMOOTH_AFTER) return { phase: raw, streak: next };\n return { phase: shown, streak: next };\n}\n\nexport function dotStateFor(phase: FramePhase): 'done' | 'ongoing' | 'error' {\n if (phase === 'live') return 'done';\n if (phase === 'empty') return 'error';\n return 'ongoing';\n}\n\nexport function statusKeyFor(phase: FramePhase, reconnecting: boolean): ViewerKey {\n if (phase === 'live') return 'entry.live';\n if (phase === 'empty') return 'entry.noScreen';\n return reconnecting ? 'entry.reconnecting' : 'entry.connecting';\n}\n\nexport function stopKey(busy: boolean, stopping: boolean): ViewerKey {\n return busy || stopping ? 'entry.stopping' : 'entry.stop';\n}\n\nconst EXIT_REPORT = /^exited code=\\d+$/;\n\nexport function isExitReport(detail: string | undefined): boolean {\n return detail !== undefined && EXIT_REPORT.test(detail);\n}\n","import type { FramePhase } from './viewer-state.js';\n\nexport const EMPTY_AFTER_MISSES = 6;\n\nexport const BUSY_EMPTY_AFTER = 30;\n\nexport const QUIET_TOLERANCE = 4;\n\nexport const QUIET_ABANDON = 120;\n\nexport const LOSS_REMOUNT_AFTER = 3;\n\nexport const MAX_AUTO_RELOAD = 3;\n\nconst STATUS_ELEMENT_ID = 'status-display';\n\nconst BUSY_TEXT = /connecting|reconnect|disconnect|failed|error/i;\n\nexport interface StreamSample {\n readonly sized: boolean;\n readonly busy: boolean;\n readonly signature?: number;\n}\n\nexport interface StreamTracker {\n readonly misses: number;\n readonly busyStreak: number;\n readonly quiet: number;\n readonly lastSignature?: number;\n readonly live?: true;\n}\n\nexport function hashBytes(data: Uint8ClampedArray): number {\n let hash = 0x81_9c_9d_c5;\n for (let index = 0; index < data.length; index += 1) {\n hash ^= data[index] ?? 0;\n hash = Math.imul(hash, 0x01_00_01_93);\n }\n return hash >>> 0;\n}\n\nexport function upstreamBusy(doc: Document | null | undefined): boolean {\n try {\n const element = doc?.getElementById(STATUS_ELEMENT_ID) as HTMLElement | null;\n if (element === null || element === undefined) return false;\n if (element.classList.contains('hidden')) return false;\n return BUSY_TEXT.test(element.textContent ?? '');\n } catch {\n return false;\n }\n}\n\nfunction signatureOf(\n doc: Document,\n surface: HTMLVideoElement | HTMLCanvasElement,\n): number | undefined {\n try {\n const scratch = doc.createElement('canvas');\n scratch.width = 16;\n scratch.height = 16;\n const context = scratch.getContext('2d', { willReadFrequently: true });\n if (context === null) return undefined;\n context.drawImage(surface, 0, 0, 16, 16);\n return hashBytes(context.getImageData(0, 0, 16, 16).data);\n } catch {\n return undefined;\n }\n}\n\nexport function sampleSurface(doc: Document | null | undefined): StreamSample {\n const busy = upstreamBusy(doc);\n let sized = false;\n let signature: number | undefined;\n try {\n const surface = doc?.getElementById('videoCanvas') as\n | HTMLVideoElement\n | HTMLCanvasElement\n | null;\n const videoWidth = (surface as { readonly videoWidth?: unknown } | null)?.videoWidth;\n const canvasWidth = (surface as { readonly width?: unknown } | null)?.width;\n const width =\n typeof videoWidth === 'number'\n ? videoWidth\n : typeof canvasWidth === 'number'\n ? canvasWidth\n : 0;\n sized = surface !== null && surface !== undefined && width > 0;\n if (sized && surface !== null && surface !== undefined && doc !== null && doc !== undefined) {\n signature = signatureOf(doc, surface);\n }\n } catch {\n signature = undefined;\n }\n return signature === undefined ? { sized, busy } : { sized, busy, signature };\n}\nfunction withSignature(\n base: { readonly misses: number; readonly busyStreak: number; readonly quiet: number },\n signature: number | undefined,\n): StreamTracker {\n return signature === undefined ? { ...base } : { ...base, lastSignature: signature };\n}\n\nfunction withPreviousSignature(\n base: { readonly misses: number; readonly busyStreak: number; readonly quiet: number },\n prev: StreamTracker,\n): StreamTracker {\n return prev.lastSignature === undefined\n ? { ...base }\n : { ...base, lastSignature: prev.lastSignature };\n}\n\nexport function shouldRemountLoss(lossStreak: number): boolean {\n return lossStreak >= LOSS_REMOUNT_AFTER;\n}\n\nexport function shouldAutoReload(phase: FramePhase, everLive: boolean, attempts: number): boolean {\n return phase === 'empty' && !everLive && attempts < MAX_AUTO_RELOAD;\n}\n\nexport function nextStreamTracker(\n prev: StreamTracker,\n sample: StreamSample,\n): { readonly tracker: StreamTracker; readonly phase: FramePhase } {\n const signature = sample.signature;\n if (!sample.sized) {\n const misses = prev.misses + 1;\n return {\n tracker: withSignature({ misses, busyStreak: 0, quiet: 0 }, signature),\n phase: misses >= EMPTY_AFTER_MISSES ? 'empty' : 'connecting',\n };\n }\n if (sample.busy) {\n const busyStreak = prev.busyStreak + 1;\n return {\n tracker: withPreviousSignature({ misses: prev.misses, busyStreak, quiet: 0 }, prev),\n phase: busyStreak >= BUSY_EMPTY_AFTER ? 'empty' : 'connecting',\n };\n }\n const changed =\n signature !== undefined && prev.lastSignature !== undefined && signature !== prev.lastSignature;\n if (changed) {\n return {\n tracker: { ...withSignature({ misses: 0, busyStreak: 0, quiet: 0 }, signature), live: true },\n phase: 'live',\n };\n }\n if (signature === undefined) {\n return { tracker: { misses: 0, busyStreak: 0, quiet: 0, live: true }, phase: 'live' };\n }\n const quiet = prev.quiet + 1;\n if (quiet >= QUIET_ABANDON) {\n return {\n tracker: withSignature({ misses: EMPTY_AFTER_MISSES, busyStreak: 0, quiet }, signature),\n phase: 'empty',\n };\n }\n if (prev.live === true || quiet >= QUIET_TOLERANCE) {\n return {\n tracker: { ...withSignature({ misses: 0, busyStreak: 0, quiet }, signature), live: true },\n phase: 'live',\n };\n }\n return {\n tracker: withSignature({ misses: prev.misses, busyStreak: 0, quiet }, signature),\n phase: 'connecting',\n };\n}\n","import {\n Fragment,\n useCallback,\n useRef,\n useState,\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n type RefCallback,\n} from 'react';\nimport {\n Button,\n IconFullscreenOutlineRegular,\n Pill,\n StateDot,\n} from '@deepseek-ai/dsh-client-ui-primitives';\nimport { useMountedResource } from '../mounted-resource.js';\nimport { BH, VIDEO_SURFACE } from './tokens.js';\nimport {\n dotStateFor,\n nextExpanded,\n smoothPhase,\n statusKeyFor,\n stopKey,\n type FramePhase,\n} from './viewer-state.js';\nimport {\n LOSS_REMOUNT_AFTER,\n nextStreamTracker,\n sampleSurface,\n shouldAutoReload,\n shouldRemountLoss,\n type StreamTracker,\n} from './frame-liveness.js';\nimport type { ViewerTranslate } from './locale.js';\nexport type ViewerLifecycleEvent =\n | { readonly type: 'mount' }\n | { readonly type: 'overlay'; readonly open: boolean }\n | { readonly type: 'phase'; readonly from: FramePhase; readonly to: FramePhase }\n | { readonly type: 'auto-reload'; readonly attempt: number }\n | { readonly type: 'manual-retry' }\n | { readonly type: 'loss-remount'; readonly streak: number };\n\nexport const SPIN_STYLE = '@keyframes bc-spin { to { transform: rotate(360deg); } }';\n\nfunction useStreamPhase(onSample: (phase: FramePhase) => void): RefCallback {\n return useMountedResource(\n (iframe) => {\n let active = true;\n let tracker: StreamTracker = { misses: 0, busyStreak: 0, quiet: 0 };\n let timer: ReturnType | undefined;\n const check = (): void => {\n if (!active) return;\n let doc: Document | null = null;\n try {\n doc = iframe.contentDocument;\n } catch {\n doc = null;\n }\n const next = nextStreamTracker(tracker, sampleSurface(doc));\n tracker = next.tracker;\n onSample(next.phase);\n timer = setTimeout(check, 1000);\n };\n timer = setTimeout(check, 300);\n return () => {\n active = false;\n if (timer !== undefined) clearTimeout(timer);\n };\n },\n [onSample],\n );\n}\n\nexport function ScreenIndicator({ label = '连接中' }: { readonly label?: string }): ReactElement {\n const size = 26;\n const stroke = 2;\n const radius = (size - stroke) / 2;\n const circumference = 2 * Math.PI * radius;\n return (\n \n
\n \n \n \n \n {label}\n
\n \n );\n}\n\nfunction ScreenEmpty({\n t,\n onRetry,\n}: {\n readonly t: ViewerTranslate;\n readonly onRetry: () => void;\n}): ReactElement {\n return (\n \n
\n {t('entry.noScreen')}\n \n
\n \n );\n}\n\nexport interface StreamOverlayProps {\n readonly phase: FramePhase;\n readonly reconnecting: boolean;\n readonly hovered: boolean;\n readonly t: ViewerTranslate;\n readonly onRetry: () => void;\n readonly onOpen: () => void;\n}\n\nexport function StreamOverlay(props: StreamOverlayProps): ReactElement | null {\n const { phase, reconnecting, hovered, t, onRetry, onOpen } = props;\n if (phase === 'connecting') {\n return ;\n }\n if (phase === 'empty') {\n return ;\n }\n if (!hovered) return null;\n return (\n \n \n \n {t('entry.openFullscreen')}\n \n \n );\n}\n\ninterface ScaledFrameProps {\n readonly src: string;\n readonly title: string;\n readonly design: { width: number; height: number };\n readonly interactive: boolean;\n readonly fit?: 'width' | 'contain';\n readonly iframeRef?: RefCallback;\n}\n\nfunction ScaledFrame({\n src,\n title,\n design,\n interactive,\n fit = 'width',\n iframeRef,\n}: ScaledFrameProps): ReactElement {\n const DESIGN_WIDTH = design.width;\n const DESIGN_HEIGHT = design.height;\n const [box, setBox] = useState({ width: DESIGN_WIDTH, height: DESIGN_HEIGHT });\n const resizeResource = useMountedResource(\n (element) => {\n const frame = element.querySelector('iframe');\n if (frame !== null) {\n frame.inert = !interactive;\n if (!interactive) frame.blur();\n }\n const update = (): void =>\n setBox({ width: element.clientWidth, height: element.clientHeight });\n update();\n const observer = new ResizeObserver(update);\n observer.observe(element);\n return () => observer.disconnect();\n },\n [interactive],\n );\n\n const scale =\n fit === 'contain'\n ? Math.min(box.width / DESIGN_WIDTH, box.height / DESIGN_HEIGHT)\n : box.width / DESIGN_WIDTH;\n const offsetX = fit === 'contain' ? Math.max(0, (box.width - DESIGN_WIDTH * scale) / 2) : 0;\n const offsetY = fit === 'contain' ? Math.max(0, (box.height - DESIGN_HEIGHT * scale) / 2) : 0;\n\n return (\n \n \n \n );\n}\n\nfunction CollapseIcon(): ReactElement {\n return (\n \n \n \n \n \n \n );\n}\n\nexport interface ViewerTitleBarProps {\n readonly t: ViewerTranslate;\n readonly title: string;\n readonly phase: FramePhase;\n readonly reconnecting: boolean;\n readonly busy: boolean;\n readonly stopping: boolean;\n readonly interactive: boolean;\n readonly extraControls?: ReactNode;\n readonly onToggleInteractive: () => void;\n readonly onStop: () => void;\n readonly onCollapse: () => void;\n readonly hideStop?: boolean | undefined;\n readonly hideInteractiveToggle?: boolean | undefined;\n}\n\nfunction StopButton({\n t,\n busy,\n stopping,\n onStop,\n}: {\n readonly t: ViewerTranslate;\n readonly busy: boolean;\n readonly stopping: boolean;\n readonly onStop: () => void;\n}): ReactElement {\n return (\n \n );\n}\n\nexport function ViewerTitleBar(props: ViewerTitleBarProps): ReactElement {\n const {\n t,\n title,\n phase,\n reconnecting,\n busy,\n stopping,\n interactive,\n extraControls,\n onToggleInteractive,\n onStop,\n onCollapse,\n hideStop,\n hideInteractiveToggle,\n } = props;\n return (\n \n \n \n {title}\n \n {t(statusKeyFor(phase, reconnecting))}\n {interactive ? null : (\n {t('entry.watchOnly')}\n )}\n \n {extraControls}\n {hideInteractiveToggle ? null : (\n \n {t(interactive ? 'entry.interactive.disable' : 'entry.interactive.enable')}\n \n )}\n {hideStop === true ? null : (\n \n )}\n \n \n \n \n );\n}\n\nexport interface RemoteViewerProps {\n readonly t: ViewerTranslate;\n readonly title: string;\n readonly src: string;\n readonly design: { width: number; height: number };\n readonly busy: boolean;\n readonly stopping: boolean;\n readonly onStop: () => void;\n readonly footer?: ReactNode;\n readonly notice?: ReactNode;\n readonly extraControls?: ReactNode;\n readonly onEvent?: (event: ViewerLifecycleEvent) => void;\n readonly interactive?: boolean;\n readonly onToggleInteractive?: () => void;\n readonly onDisableInteraction?: () => void;\n readonly expanded?: boolean;\n readonly onExpandedChange?: (expanded: boolean) => void;\n readonly hideStop?: boolean | undefined;\n readonly hideInteractiveToggle?: boolean | undefined;\n readonly allowFrameInput?: boolean | undefined;\n}\n\nexport function RemoteViewer({\n t,\n title,\n src,\n design,\n busy,\n stopping,\n onStop,\n footer,\n notice,\n extraControls,\n onEvent,\n interactive,\n onToggleInteractive,\n onDisableInteraction,\n expanded: controlledExpanded,\n onExpandedChange,\n hideStop,\n hideInteractiveToggle,\n allowFrameInput,\n}: RemoteViewerProps): ReactElement {\n const entryRef = useRef(null);\n const mounted = useRef(false);\n const [hovered, setHovered] = useState(false);\n const [ownExpanded, setOwnExpanded] = useState(false);\n const expanded = controlledExpanded ?? ownExpanded;\n const setExpanded = (next: boolean): void => {\n setOwnExpanded(next);\n onExpandedChange?.(next);\n };\n const [inputEnabled, setInputEnabled] = useState(false);\n const [reloadKey, setReloadKey] = useState(0);\n const [reconnecting, setReconnecting] = useState(false);\n const wasReady = useRef(false);\n const autoReloads = useRef(0);\n const lossStreak = useRef(0);\n const phaseRef = useRef('connecting');\n\n const [smooth, setSmooth] = useState<{ phase: FramePhase; streak: number }>({\n phase: 'connecting',\n streak: 0,\n });\n const resetFrame = useCallback(() => {\n phaseRef.current = 'connecting';\n setSmooth({ phase: 'connecting', streak: 0 });\n setReloadKey((key) => key + 1);\n }, []);\n const onSample = useCallback(\n (nextPhase: FramePhase): void => {\n const fromPhase = phaseRef.current;\n if (fromPhase !== nextPhase) {\n phaseRef.current = nextPhase;\n setSmooth((current) => smoothPhase(current.phase, nextPhase, current.streak));\n onEvent?.({ type: 'phase', from: fromPhase, to: nextPhase });\n }\n if (nextPhase === 'live') {\n wasReady.current = true;\n autoReloads.current = 0;\n lossStreak.current = 0;\n setReconnecting(false);\n return;\n }\n if (wasReady.current) {\n lossStreak.current += 1;\n if (shouldRemountLoss(lossStreak.current)) {\n wasReady.current = false;\n lossStreak.current = 0;\n onEvent?.({ type: 'loss-remount', streak: LOSS_REMOUNT_AFTER });\n setReconnecting(true);\n resetFrame();\n return;\n }\n }\n if (\n fromPhase !== nextPhase &&\n shouldAutoReload(nextPhase, wasReady.current, autoReloads.current)\n ) {\n autoReloads.current += 1;\n onEvent?.({ type: 'auto-reload', attempt: autoReloads.current });\n resetFrame();\n }\n },\n [resetFrame, onEvent],\n );\n const streamRef = useStreamPhase(onSample);\n const phase = smooth.phase;\n\n const reconnect = (): void => {\n onEvent?.({ type: 'manual-retry' });\n setReconnecting(true);\n autoReloads.current = 0;\n lossStreak.current = 0;\n wasReady.current = false;\n resetFrame();\n };\n const openViewer = (): void => {\n setExpanded(nextExpanded('open'));\n onEvent?.({ type: 'overlay', open: true });\n };\n const collapseViewer = (): void => {\n setInputEnabled(false);\n onDisableInteraction?.();\n setExpanded(nextExpanded('collapse'));\n onEvent?.({ type: 'overlay', open: false });\n requestAnimationFrame(() => entryRef.current?.focus());\n };\n const dialogResource = useMountedResource(\n (dialog) => {\n if (!mounted.current) {\n mounted.current = true;\n onEvent?.({ type: 'mount' });\n }\n if (!expanded) return;\n const onKey = (event: KeyboardEvent): void => {\n if (event.key !== 'Tab') return;\n const focusable = [\n ...dialog.querySelectorAll(\n 'button, [href], iframe, [tabindex]:not([tabindex=\"-1\"])',\n ),\n ].filter((element) => element.tabIndex !== -1);\n const first = focusable[0];\n const last = focusable.at(-1);\n if (first === undefined || last === undefined) return;\n const active = document.activeElement;\n if (event.shiftKey && (active === first || active === dialog)) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && active === last) {\n event.preventDefault();\n first.focus();\n }\n };\n document.addEventListener('keydown', onKey);\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n dialog.focus();\n return () => {\n document.removeEventListener('keydown', onKey);\n document.body.style.overflow = previousOverflow;\n };\n },\n [expanded, onDisableInteraction, onEvent],\n );\n\n const statusText = t(statusKeyFor(phase, reconnecting));\n const openable = phase === 'live' && !expanded;\n\n const overlay = (\n \n );\n\n const stopLabel = t(stopKey(busy, stopping));\n const rowButton = (disabled: boolean): CSSProperties => ({\n flex: 1,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: 28,\n padding: '0 10px',\n borderRadius: 14,\n border: `1px solid ${BH.borderL3}`,\n background: BH.buttonElevatedFill,\n color: BH.labelPrimary,\n fontSize: 12,\n ...(disabled ? { opacity: 0.4, cursor: 'not-allowed' } : { cursor: 'pointer' }),\n });\n\n return (\n \n \n {expanded ? (\n setInputEnabled((current) => !current))\n }\n onStop={onStop}\n onCollapse={collapseViewer}\n hideStop={hideStop}\n hideInteractiveToggle={hideInteractiveToggle}\n />\n ) : null}\n {notice}\n setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n onClick={() => {\n if (openable) openViewer();\n }}\n onKeyDown={(event) => {\n if (!openable) return;\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n openViewer();\n }}\n style={\n expanded\n ? { position: 'relative', flex: 1, minHeight: 0 }\n : { position: 'relative', cursor: openable ? 'pointer' : 'default' }\n }\n >\n \n {overlay}\n \n {expanded ? null : (\n \n \n {title}\n \n
\n {hideStop === true ? null : (\n \n {stopLabel}\n \n )}\n \n {t('entry.reconnect')}\n \n
\n {footer}\n
\n )}\n \n );\n}\n","import type { ReactElement, ReactNode, Ref } from 'react';\n\nimport { ChannelSidebarIcon } from './channel-sidebar-icon.js';\n\nexport function SidebarCardList({\n label,\n className,\n listRef,\n flush = false,\n children,\n}: {\n label?: string | undefined;\n className?: string | undefined;\n listRef?: Ref | undefined;\n flush?: boolean | undefined;\n children: ReactNode;\n}): ReactElement {\n return (\n \n {children}\n \n );\n}\n\nexport interface SidebarCardRowProps {\n icon?: string | undefined;\n leading?: ReactNode | undefined;\n selection?: { checked: boolean; multiple?: boolean } | undefined;\n iconLabel?: string | undefined;\n title: ReactNode;\n titleClassName?: string | undefined;\n badge?: ReactNode | undefined;\n summary?: ReactNode | undefined;\n flipKey?: string | undefined;\n hint?: string | undefined;\n chips?: ReactNode | undefined;\n meta?: ReactNode | undefined;\n trailing?: ReactNode | undefined;\n detail?: ReactNode | undefined;\n onClick?: () => void | undefined;\n disabled?: boolean | undefined;\n muted?: boolean | undefined;\n mainClassName?: string | undefined;\n dialog?: boolean | undefined;\n expanded?: boolean | undefined;\n controls?: string | undefined;\n state?: string | undefined;\n anchor?: string | undefined;\n}\n\nexport function SidebarCardRow({\n icon,\n leading,\n iconLabel,\n selection,\n title,\n titleClassName,\n badge,\n summary,\n flipKey,\n hint,\n chips,\n meta,\n trailing,\n detail,\n onClick,\n disabled,\n muted,\n mainClassName,\n dialog,\n expanded,\n controls,\n state,\n anchor,\n}: SidebarCardRowProps): ReactElement {\n const body = (\n <>\n {leading === undefined ? null : {leading}}\n {icon === undefined ? null : (\n \n \n
\n )}\n \n {badge === undefined ? (\n \n {title}\n \n ) : (\n \n \n {title}\n \n {badge}\n \n )}\n {summary === undefined ? null : {summary}}\n {chips === undefined ? null : {chips}}\n {meta === undefined ? null : {meta}}\n \n \n );\n const className = mainClassName === undefined ? 'bh-card-main' : 'bh-card-main ' + mainClassName;\n return (\n \n
\n {selection?.multiple === true ? (\n \n ) : onClick === undefined ? (\n
\n {body}\n
\n ) : (\n \n {body}\n \n )}\n {trailing === undefined ? null : {trailing}}\n
\n {detail === undefined ? null : (\n
\n {detail}\n
\n )}\n \n );\n}\n","export const LOCALE_NS = 'botharness-browser';\n\nexport const zh = {\n 'entry.profile.install': '安装 BotHarness Profile 控制扩展',\n 'entry.profile.instructions':\n '在 BotHarness Profile 控制扩展中输入地址和配对码,并确认允许整个 Profile。',\n 'entry.profile.forget': '解除 Profile 配对',\n 'entry.profile.disconnected': 'Profile 已配对,连接已断开',\n 'entry.profile.connected': 'Profile 已连接',\n 'entry.profile.pair': '配对 Chrome Profile',\n 'entry.profile.scope': '此 Chrome Profile 的所有普通网页标签页',\n 'settings.profile-control': '日常 Chrome · 整个 Profile',\n 'settings.daily-control': '日常 Chrome · 控制',\n 'entry.daily.install': '安装 Playwright 扩展',\n 'entry.daily.connect': '连接现有页面',\n 'entry.daily.select': '请在 Chrome 中选择一个现有标签页',\n 'entry.daily.confirm': '已连接,尚未允许操作',\n 'entry.daily.controlled': '已允许此页面的读取、输入和点击',\n 'entry.daily.allow': '允许控制此页面',\n\n 'entry.live': '已连接',\n 'entry.noScreen': '暂无画面',\n 'entry.connecting': '连接中',\n 'entry.reconnecting': '正在重新连接',\n 'entry.reconnect': '重新连接',\n 'entry.openFullscreen': '打开大屏',\n 'entry.collapseFullscreen': '收起全屏',\n 'entry.interactive.disable': '停止交互',\n 'entry.interactive.enable': '开启交互',\n 'entry.watchOnly': '观看模式',\n 'entry.stop': '停止',\n 'entry.stopping': '停止中',\n\n 'settings.localDriver': '本机驱动',\n 'settings.containerDriver': '容器驱动',\n 'settings.driver.current': '默认',\n 'settings.driver.agent-browser': 'agent-browser(试用)',\n 'settings.section': '浏览器控制',\n 'settings.target': '操作目标',\n 'settings.local': '本机 Browser',\n 'settings.container': 'Docker Browser',\n 'settings.extension': '日常浏览器',\n 'entry.borrow.none': '尚未借用标签页',\n 'entry.borrow.readOnly': '只读借用中',\n 'entry.borrow.pair': '连接浏览器扩展',\n 'entry.borrow.return': '归还标签页',\n 'entry.borrow.code': '配对码',\n 'entry.borrow.cancel': '取消配对',\n 'entry.borrow.instructions':\n '在扩展中输入此地址和配对码,再选择借出当前页面。配对码 5 分钟内有效,仅可使用一次。',\n 'entry.view.interaction': '允许 Human 操作',\n 'entry.view.inputMode.direct': '直接点按',\n 'entry.view.inputMode.trackpad': '触控板',\n 'entry.view.close': '关闭',\n 'entry.view.container': '容器浏览器',\n 'entry.view.browserTitle': '{name}的浏览器',\n 'entry.takeover.start': '接管',\n 'entry.takeover.stop': '取消接管',\n 'entry.takeover.active': '接管中',\n 'entry.label': '浏览器',\n 'entry.access.title': 'Browser Access',\n 'entry.access.on': 'Browser Access 已开启',\n 'entry.access.description': '开启后,该 Bot 的会话可以使用浏览器',\n 'entry.access.enable': '启用 Browser Access',\n 'entry.access.disable': '停用 Browser Access',\n 'entry.access.failed': '切换 Browser Access 失败',\n 'entry.access.failureHint': '授权失败',\n 'entry.profile.label': 'Profile',\n 'entry.profile.default': 'default',\n 'entry.profile.failed': '切换浏览器 profile 失败',\n 'entry.profile.choose': '选择浏览器 Profile',\n 'entry.profile.create': '创建“{name}”',\n 'entry.view.follow': '跟随 Bot',\n 'entry.view.pause': '暂停 Bot',\n 'entry.view.resume': '继续',\n 'entry.view.open': '打开 Bot 浏览器',\n 'entry.view.fullscreen': '全屏',\n 'entry.view.stop': '停止',\n 'entry.view.cleanupFailed': '浏览器清理失败。点击“停止”重试。',\n 'entry.view.opening': '正在打开…',\n 'entry.view.noFrame': '暂无画面',\n 'entry.view.noTabs': '暂无标签页',\n 'entry.view.tabs': '标签页',\n 'entry.chip.running': '运行中',\n 'entry.chip.stopped': '未运行',\n 'entry.chip.paused': '已暂停',\n 'entry.chip.disconnected': '未连接',\n 'entry.chip.connecting': '连接中',\n 'entry.chip.confirm': '待允许',\n 'entry.chip.controlled': '可操作',\n 'entry.chip.unpaired': '未配对',\n 'entry.chip.offline': '已断开',\n 'entry.chip.connected': '已连接',\n 'entry.chip.notShared': '未借用',\n 'entry.chip.readOnly': '只读',\n 'entry.provision.preparing': '正在准备下载浏览器…',\n 'entry.provision.downloading': '正在下载浏览器…{percent}%({downloaded}/{total})',\n 'entry.fail.details': '详情',\n 'entry.fail.provision-no-network.title': '浏览器下载失败——本机网络似乎不通。',\n 'entry.fail.provision-no-network.fault': '这是本机网络的问题,不是你的设置问题。',\n 'entry.fail.provision-no-network.action': '让本机连上网后,再点一次“打开”。',\n 'entry.fail.provision-no-disk-space.title': '浏览器下载失败——磁盘空间不足。',\n 'entry.fail.provision-no-disk-space.fault': '这是本机剩余空间的问题。',\n 'entry.fail.provision-no-disk-space.action': '至少腾出 500 MB 空间后,再点一次“打开”。',\n 'entry.fail.provision-no-permission.title': '浏览器下载失败——下载目录不可写。',\n 'entry.fail.provision-no-permission.fault': '这是本机目录权限的问题。',\n 'entry.fail.provision-no-permission.action':\n '请机器管理员放开浏览器目录的写权限后,再点一次“打开”。',\n 'entry.fail.provision-missing-libs.title': '这台机器缺少浏览器需要的系统库。',\n 'entry.install.missing': '需要安装 {count} 个系统包。',\n 'entry.install.manual':\n '安装需要管理员密码。请在这台机器的终端里运行下面的命令,装好后再点「打开」。',\n 'entry.install.button': '一键安装',\n 'entry.install.copy': '复制命令',\n 'entry.install.copied': '已复制',\n 'entry.install.progress': '正在安装系统库:{percent}%',\n 'entry.fail.provision-missing-libs.fault': '这是机器环境的问题,不是浏览器设置的问题。',\n 'entry.fail.provision-missing-libs.action':\n 'Ubuntu 24.04 上按“详情”里的命令安装系统库,装好后再点“打开”。',\n 'entry.fail.provision-failed.title': '浏览器下载失败。',\n 'entry.fail.provision-failed.fault': '暂时看不出具体原因。',\n 'entry.fail.provision-failed.action': '再点一次“打开”重试;多次失败请把“详情”发给机器管理员。',\n 'entry.fail.startup-missing-binary.title': '配置的浏览器文件不存在。',\n 'entry.fail.startup-missing-binary.fault': '这是插件配置里的浏览器路径问题。',\n 'entry.fail.startup-missing-binary.action':\n '修正浏览器插件配置中的 browserPath,或清空它改用自动下载。',\n 'entry.fail.startup-spawn-failed.title': '浏览器程序无法启动。',\n 'entry.fail.startup-spawn-failed.fault':\n '本机拦截或删除了浏览器文件——常见是杀毒软件,偶尔是权限问题。',\n 'entry.fail.startup-spawn-failed.action':\n '把浏览器目录加入杀毒软件白名单(或找机器管理员看权限),再点一次“打开”。',\n 'entry.fail.startup-sandbox.title': '浏览器因系统沙箱限制拒绝启动。',\n 'entry.fail.startup-sandbox.fault': '这是本机系统限制的问题。',\n 'entry.fail.startup-sandbox.action':\n 'Ubuntu 23.10 起通常是 AppArmor 限制了用户命名空间:按“详情”给这个浏览器加 AppArmor 配置后,再点一次“打开”。',\n 'entry.fail.startup-crashed.title': '浏览器在启动过程中退出了。',\n 'entry.fail.startup-crashed.fault': '这是本机浏览器的问题,不是页面问题。',\n 'entry.fail.startup-crashed.action': '再点一次“打开”重试;多次失败请把“详情”发给机器管理员。',\n 'entry.fail.startup-timeout.title': '浏览器启动超时。',\n 'entry.fail.startup-timeout.fault': '这台机器可能比较慢或负载较高。',\n 'entry.fail.startup-timeout.action': '再点一次“打开”重试;多次失败请重启机器或联系管理员。',\n 'entry.error': '浏览器操作失败',\n};\n\nexport type BrowserKey = keyof typeof zh;\n\nexport const en: Record = {\n 'entry.profile.install': 'Install BotHarness Profile Control extension',\n 'entry.profile.instructions':\n 'Enter the address and code in the BotHarness Profile Control extension and confirm Profile-wide access.',\n 'entry.profile.forget': 'Forget Profile pairing',\n 'entry.profile.disconnected': 'Profile paired · disconnected',\n 'entry.profile.connected': 'Profile connected',\n 'entry.profile.pair': 'Pair Chrome Profile',\n 'entry.profile.scope': 'All ordinary webpage tabs in this Chrome Profile',\n 'settings.profile-control': 'Daily Chrome · Entire Profile',\n 'settings.daily-control': 'Daily Chrome · Control',\n 'entry.daily.install': 'Install Playwright extension',\n 'entry.daily.connect': 'Connect existing page',\n 'entry.daily.select': 'Select one existing Chrome tab',\n 'entry.daily.confirm': 'Connected · control not granted',\n 'entry.daily.controlled': 'This document allows observe, type and click',\n 'entry.daily.allow': 'Allow control of this document',\n\n 'entry.live': 'Connected',\n 'entry.noScreen': 'No screen',\n 'entry.connecting': 'Connecting',\n 'entry.reconnecting': 'Reconnecting',\n 'entry.reconnect': 'Reconnect',\n 'entry.openFullscreen': 'Open fullscreen',\n 'entry.collapseFullscreen': 'Leave fullscreen',\n 'entry.interactive.disable': 'Disable interaction',\n 'entry.interactive.enable': 'Enable interaction',\n 'entry.watchOnly': 'Watch only',\n 'entry.stop': 'Stop',\n 'entry.stopping': 'Stopping',\n\n 'settings.localDriver': 'Local driver',\n 'settings.containerDriver': 'Container driver',\n 'settings.driver.current': 'Default',\n 'settings.driver.agent-browser': 'agent-browser (trial)',\n 'settings.section': 'Browser',\n 'settings.target': 'Browser Target',\n 'settings.local': 'Local Browser',\n 'settings.container': 'Docker Browser',\n 'settings.extension': 'Daily Browser',\n 'entry.borrow.none': 'No shared tab',\n 'entry.borrow.readOnly': 'Shared read-only',\n 'entry.borrow.pair': 'Connect browser extension',\n 'entry.borrow.return': 'Return tab',\n 'entry.borrow.code': 'Pairing code',\n 'entry.borrow.cancel': 'Cancel pairing',\n 'entry.borrow.instructions':\n 'Enter this address and code in the extension, then share the current page. The code expires in 5 minutes and can be used once.',\n 'entry.view.interaction': 'Enable Human interaction',\n 'entry.view.inputMode.direct': 'Direct tap',\n 'entry.view.inputMode.trackpad': 'Trackpad',\n 'entry.view.close': 'Close',\n 'entry.view.container': 'Container Browser',\n 'entry.view.browserTitle': \"{name}'s Browser\",\n 'entry.takeover.start': 'Take over',\n 'entry.takeover.stop': 'Release',\n 'entry.takeover.active': 'Taking over',\n 'entry.label': 'Browser',\n 'entry.access.title': 'Browser Access',\n 'entry.access.on': 'Browser Access is on',\n 'entry.access.description': \"This PersonaBot's sessions may use the browser\",\n 'entry.access.enable': 'Enable Browser Access',\n 'entry.access.disable': 'Disable Browser Access',\n 'entry.access.failed': 'Failed to switch Browser Access',\n 'entry.access.failureHint': 'Access failed',\n 'entry.profile.label': 'Profile',\n 'entry.profile.default': 'default',\n 'entry.profile.failed': 'Failed to switch the browser profile',\n 'entry.profile.choose': 'Choose browser profile',\n 'entry.profile.create': 'Create “{name}”',\n 'entry.view.follow': 'Follow the Bot',\n 'entry.view.pause': 'Pause Bot',\n 'entry.view.resume': 'Resume',\n 'entry.view.open': 'Open Bot Browser',\n 'entry.view.fullscreen': 'Fullscreen',\n 'entry.view.stop': 'Stop',\n 'entry.view.cleanupFailed': 'Browser cleanup failed. Click Stop to retry.',\n 'entry.view.opening': 'Opening…',\n 'entry.view.noFrame': 'No frame yet',\n 'entry.view.noTabs': 'No tabs yet',\n 'entry.view.tabs': 'Tabs',\n 'entry.chip.running': 'Running',\n 'entry.chip.stopped': 'Stopped',\n 'entry.chip.paused': 'Paused',\n 'entry.chip.disconnected': 'Not connected',\n 'entry.chip.connecting': 'Connecting',\n 'entry.chip.confirm': 'Needs approval',\n 'entry.chip.controlled': 'Controllable',\n 'entry.chip.unpaired': 'Not paired',\n 'entry.chip.offline': 'Disconnected',\n 'entry.chip.connected': 'Connected',\n 'entry.chip.notShared': 'Not shared',\n 'entry.chip.readOnly': 'Read-only',\n 'entry.provision.preparing': 'Preparing the browser download…',\n 'entry.provision.downloading': 'Downloading browser… {percent}% ({downloaded} / {total})',\n 'entry.fail.details': 'Details',\n 'entry.fail.provision-no-network.title':\n 'The browser download failed — this machine looks offline.',\n 'entry.fail.provision-no-network.fault':\n 'This is about the network on this machine, not your settings.',\n 'entry.fail.provision-no-network.action':\n 'Reconnect this machine to the internet, then click Open again.',\n 'entry.fail.provision-no-disk-space.title': 'The browser download failed — the disk is full.',\n 'entry.fail.provision-no-disk-space.fault': 'This is about free space on this machine.',\n 'entry.fail.provision-no-disk-space.action': 'Free at least 500 MB, then click Open again.',\n 'entry.fail.provision-no-permission.title':\n 'The browser download failed — the download folder is not writable.',\n 'entry.fail.provision-no-permission.fault': 'This is about folder permissions on this machine.',\n 'entry.fail.provision-no-permission.action':\n 'Ask the machine owner to make the browser folder writable, then click Open again.',\n 'entry.fail.provision-missing-libs.title':\n 'This machine is missing system libraries the browser needs.',\n 'entry.install.missing': '{count} system packages need to be installed.',\n 'entry.install.manual':\n 'Installing needs an administrator password. Run this command in a terminal on this machine, then click Open again.',\n 'entry.install.button': 'Install',\n 'entry.install.copy': 'Copy command',\n 'entry.install.copied': 'Copied',\n 'entry.install.progress': 'Installing system libraries: {percent}%',\n 'entry.fail.provision-missing-libs.fault':\n 'This is about the machine setup, not your browser settings.',\n 'entry.fail.provision-missing-libs.action':\n 'On Ubuntu 24.04, install them with the command in Details, then click Open again.',\n 'entry.fail.provision-failed.title': 'The browser download failed.',\n 'entry.fail.provision-failed.fault': 'The cause is unclear from here.',\n 'entry.fail.provision-failed.action':\n 'Click Open to retry; if it keeps failing, show Details to the machine owner.',\n 'entry.fail.startup-missing-binary.title': 'The configured browser file does not exist.',\n 'entry.fail.startup-missing-binary.fault':\n 'This is about the browser path in the plugin configuration.',\n 'entry.fail.startup-missing-binary.action':\n 'Fix browserPath in the browser plugin configuration, or clear it to use the automatic download.',\n 'entry.fail.startup-spawn-failed.title': 'The browser program could not be started.',\n 'entry.fail.startup-spawn-failed.fault':\n 'This machine blocked or removed the browser file — often antivirus, sometimes permissions.',\n 'entry.fail.startup-spawn-failed.action':\n 'Allow-list the browser folder in your antivirus (or ask the machine owner about permissions), then click Open again.',\n 'entry.fail.startup-sandbox.title': 'The browser refused to start because of its OS sandbox.',\n 'entry.fail.startup-sandbox.fault': 'This is about OS restrictions on this machine.',\n 'entry.fail.startup-sandbox.action':\n 'On Ubuntu 23.10 and later this is usually AppArmor restricting user namespaces: add the AppArmor profile from Details for this browser, then click Open again.',\n 'entry.fail.startup-crashed.title': 'The browser exited during startup.',\n 'entry.fail.startup-crashed.fault': 'This is about the browser on this machine, not the page.',\n 'entry.fail.startup-crashed.action':\n 'Click Open to retry; if it keeps failing, show Details to the machine owner.',\n 'entry.fail.startup-timeout.title': 'The browser took too long to start.',\n 'entry.fail.startup-timeout.fault': 'This machine may be slow or overloaded.',\n 'entry.fail.startup-timeout.action':\n 'Click Open to retry; if it keeps failing, restart the machine or ask its owner.',\n 'entry.error': 'Browser action failed',\n};\n\nexport type BrowserTranslate = (\n key: BrowserKey,\n params?: Record,\n) => string;\n","export type BrowserFailureKind =\n | 'provision-no-network'\n | 'provision-no-disk-space'\n | 'provision-no-permission'\n | 'provision-missing-libs'\n | 'provision-failed'\n | 'startup-missing-binary'\n | 'startup-spawn-failed'\n | 'startup-sandbox'\n | 'startup-crashed'\n | 'startup-timeout';\n\nexport const BROWSER_FAILURE_KINDS: readonly BrowserFailureKind[] = [\n 'provision-no-network',\n 'provision-no-disk-space',\n 'provision-no-permission',\n 'provision-missing-libs',\n 'provision-failed',\n 'startup-missing-binary',\n 'startup-spawn-failed',\n 'startup-sandbox',\n 'startup-crashed',\n 'startup-timeout',\n];\n\nexport function isBrowserFailureKind(value: unknown): value is BrowserFailureKind {\n return typeof value === 'string' && (BROWSER_FAILURE_KINDS as readonly string[]).includes(value);\n}\n\nexport interface BrowserInstallProgress {\n readonly downloadedBytes: number;\n readonly totalBytes: number;\n}\n","import type { ReactElement, ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { color, space, text } from './tokens.stylex.js';\n\nconst styles = stylex.create({\n note: {\n margin: 0,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n overflowWrap: 'anywhere',\n },\n inset: { paddingBlock: space.x2, paddingInline: space.x2 },\n muted: { color: color.muted },\n subtle: { color: color.subtle },\n danger: { color: color.danger },\n success: { color: color.success },\n warning: { color: color.warning },\n});\n\nexport type NoteTone = 'muted' | 'subtle' | 'danger' | 'success' | 'warning';\n\nexport function Note({\n tone = 'muted',\n inset = false,\n children,\n}: {\n readonly tone?: NoteTone;\n readonly inset?: boolean;\n readonly children: ReactNode;\n}): ReactElement {\n return (\n \n {children}\n

\n );\n}\n","import { useState, type ReactElement, type ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\nimport { Button } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { Note } from './ds/note.js';\nimport { color, radius, space, text } from './ds/tokens.stylex.js';\n\nconst styles = stylex.create({\n root: {\n display: 'grid',\n gap: space.x3,\n justifyItems: 'start',\n width: '100%',\n },\n progress: {\n display: 'grid',\n gap: space.x1,\n width: '100%',\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n },\n bar: {\n width: '100%',\n height: '6px',\n accentColor: color.accent,\n },\n command: {\n margin: 0,\n width: '100%',\n boxSizing: 'border-box',\n paddingBlock: space.x2,\n paddingInline: space.x2,\n borderRadius: radius.sm,\n backgroundColor: color.hover,\n color: color.fg,\n fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace',\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n whiteSpace: 'pre-wrap',\n overflowWrap: 'anywhere',\n },\n actions: {\n display: 'flex',\n gap: space.x2,\n flexWrap: 'wrap',\n },\n});\n\nexport type MissingPackagesAccess = 'root' | 'sudo' | 'none';\n\nexport interface MissingPackagesLabels {\n readonly missing: string;\n readonly manual: string;\n readonly install: string;\n readonly copy: string;\n readonly copied: string;\n}\n\nexport function formatProgressMiB(bytes: number): string {\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nexport function ProgressLine({\n percent,\n label,\n}: {\n readonly percent: number;\n readonly label: string;\n}): ReactElement {\n const value = Math.max(0, Math.min(100, percent));\n return (\n
\n \n {label}\n
\n );\n}\n\nexport function MissingPackages({\n command,\n access,\n installing,\n busy = false,\n onInstall,\n labels,\n children,\n}: {\n readonly command: string;\n readonly access: MissingPackagesAccess;\n readonly installing?: { readonly percent: number; readonly label: string } | undefined;\n readonly busy?: boolean;\n readonly onInstall: () => void;\n readonly labels: MissingPackagesLabels;\n readonly children?: ReactNode;\n}): ReactElement {\n const [copied, setCopied] = useState(false);\n const copy = (): void => {\n void navigator.clipboard?.writeText(command).then(() => setCopied(true));\n };\n return (\n
\n {installing === undefined ? (\n {labels.missing}\n ) : (\n \n )}\n {access === 'none' && installing === undefined ? (\n <>\n {labels.manual}\n
{command}
\n \n ) : null}\n
\n {access !== 'none' && installing === undefined ? (\n \n ) : null}\n {access === 'none' ? (\n \n ) : null}\n {children}\n
\n
\n );\n}\n","import { useCallback, useRef, useState, type ReactElement } from 'react';\n\nimport {\n isBrowserFailureKind,\n type BrowserFailureKind,\n type BrowserInstallProgress,\n} from '../failure-kinds.js';\nimport {\n MissingPackages,\n type MissingPackagesAccess,\n} from '../../../client/src/client/missing-packages.js';\nimport type { BrowserTranslate } from './locale.js';\n\nexport interface BrowserFailure {\n readonly message: string;\n readonly code?: string;\n readonly detail?: string;\n readonly packages?: readonly string[];\n}\n\nexport class BrowserApiError extends Error {\n readonly code?: string;\n readonly detail?: string;\n readonly packages?: readonly string[];\n\n constructor(message: string, code?: string, detail?: string, packages?: readonly string[]) {\n super(message);\n this.name = 'BrowserApiError';\n if (code !== undefined) this.code = code;\n if (detail !== undefined) this.detail = detail;\n if (packages !== undefined) this.packages = packages;\n }\n}\n\nexport function readFailure(cause: unknown): BrowserFailure {\n if (cause instanceof BrowserApiError)\n return {\n message: cause.message,\n ...(cause.code === undefined ? {} : { code: cause.code }),\n ...(cause.detail === undefined ? {} : { detail: cause.detail }),\n ...(cause.packages === undefined ? {} : { packages: cause.packages }),\n };\n return { message: cause instanceof Error ? cause.message : String(cause) };\n}\n\ninterface InstallState {\n readonly access?: MissingPackagesAccess;\n readonly state?: 'installing' | 'installed' | 'failed';\n readonly percent?: number;\n readonly text?: string;\n}\n\nconst INSTALL_ENDPOINT = './api/browser/install-packages';\n\nfunction BrowserMissingLibs({\n packages,\n t,\n onRetry,\n}: {\n readonly packages: readonly string[];\n readonly t: BrowserTranslate;\n readonly onRetry?: (() => void) | undefined;\n}): ReactElement {\n const [install, setInstall] = useState({});\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState();\n const retried = useRef(false);\n const read = useCallback(async (): Promise => {\n const response = await fetch(INSTALL_ENDPOINT, { cache: 'no-store' });\n const next = (await response.json()) as InstallState;\n setInstall(next);\n return next;\n }, []);\n const resource = useCallback(\n (node: HTMLDivElement | null): void => {\n if (node === null) return;\n void read().catch(() => undefined);\n },\n [read],\n );\n const poll = (): void => {\n void read()\n .then((next) => {\n if (next.state === 'installing') {\n setTimeout(poll, 1000);\n return;\n }\n if (next.state === 'installed' && !retried.current) {\n retried.current = true;\n onRetry?.();\n }\n })\n .catch((cause: unknown) => setError(String(cause)));\n };\n const start = (): void => {\n setBusy(true);\n setError(undefined);\n void fetch(INSTALL_ENDPOINT, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ authorize: true, packages }),\n })\n .then(async (response) => {\n if (!response.ok) throw new Error(((await response.json()) as { error?: string }).error);\n poll();\n })\n .catch((cause: unknown) => setError(String(cause)))\n .finally(() => setBusy(false));\n };\n const installing = install.state === 'installing';\n return (\n
\n {install.state === 'failed' && install.text !== undefined ? (\n
{install.text}
\n ) : null}\n {error === undefined ? null :
{error}
}\n \n
\n );\n}\n\nexport function BrowserFailureNotice({\n failure,\n t,\n onRetry,\n}: {\n readonly failure: BrowserFailure;\n readonly t: BrowserTranslate;\n readonly onRetry?: (() => void) | undefined;\n}): ReactElement | null {\n if (!isBrowserFailureKind(failure.code)) return null;\n const kind: BrowserFailureKind = failure.code;\n return (\n
\n
{t(`entry.fail.${kind}.title`)}
\n
{t(`entry.fail.${kind}.fault`)}
\n {kind === 'provision-missing-libs' && (failure.packages?.length ?? 0) > 0 ? (\n \n ) : (\n
{t(`entry.fail.${kind}.action`)}
\n )}\n {failure.detail === undefined || failure.detail === '' ? null : (\n
\n {t('entry.fail.details')}\n
{failure.detail}
\n
\n )}\n
\n );\n}\n\nfunction formatMiB(bytes: number): string {\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nexport function BrowserProvisionProgress({\n progress,\n t,\n}: {\n readonly progress: BrowserInstallProgress;\n readonly t: BrowserTranslate;\n}): ReactElement {\n if (progress.totalBytes <= 0)\n return (\n
\n {t('entry.provision.preparing')}\n
\n );\n const percent = Math.max(\n 0,\n Math.min(99, Math.floor((progress.downloadedBytes / progress.totalBytes) * 100)),\n );\n return (\n
\n \n \n {t('entry.provision.downloading', {\n percent: String(percent),\n downloaded: formatMiB(progress.downloadedBytes),\n total: formatMiB(progress.totalBytes),\n })}\n \n
\n );\n}\n","import { border, color, radius, space, text } from './ds/tokens.stylex.js';\nimport { useId, useRef, useState, type KeyboardEvent, type ReactElement } from 'react';\nimport { createPortal } from 'react-dom';\nimport {\n IconChevronDownOutlineRegular,\n IconPlusOutlineRegular,\n Input,\n MenuSurface,\n useAnchoredPosition,\n useDismissOnOutsidePointer,\n} from '@deepseek-ai/dsh-client-ui-primitives';\n\nexport interface ComboboxOption {\n readonly value: string;\n readonly label: string;\n readonly hint?: string | undefined;\n readonly disabled?: boolean | undefined;\n}\n\nexport const COMBOBOX_CSS = `\n.bh-combobox { position: relative; flex: 1; min-width: 0; }\n.bh-combobox-input { display: flex; padding-right: ${space.x6}; }\n.bh-combobox input { width: 100%; text-overflow: ellipsis; }\n.bh-combobox input[readonly] { cursor: pointer; }\n.bh-combobox-toggle {\n position: absolute; right: 4px; top: 50%; transform: translateY(-50%); width: 24px; height: 24px;\n display: flex; align-items: center; justify-content: center;\n border: 0; border-radius: ${radius.sm}; padding: 0;\n color: var(--dsw-alias-label-secondary); background: transparent; cursor: pointer;\n}\n.bh-combobox-toggle:hover { background: var(--dsw-alias-interactive-bg-hover); }\n.bh-combobox-toggle:disabled { opacity: 0.5; cursor: default; }\n.bh-combobox-list {\n position: fixed; z-index: 1100; box-sizing: border-box;\n background: var(--dsw-alias-bg-base);\n --dsw-elevation-stroke-color: var(--dsw-alias-border-l1);\n box-shadow: var(--dsw-elevation-prominent);\n}\n.bh-combobox-scroll > button {\n display: flex; align-items: baseline; justify-content: space-between; gap: ${space.x4};\n width: 100%; min-height: 34px; padding: ${space.x2} ${space.x3};\n border: 0; border-radius: ${radius.sm}; background: transparent;\n color: var(--dsw-alias-label-primary); text-align: left; font: inherit; font-size: ${text.bodySize}; line-height: ${text.bodyLine}; cursor: pointer;\n overflow-wrap: anywhere;\n}\n.bh-combobox-scroll > button[aria-selected=\"true\"] { font-weight: ${text.strong}; }\n.bh-combobox-scroll > button:disabled { color: var(--dsw-alias-label-tertiary); cursor: default; }\n.bh-combobox-scroll > button:not(:disabled):hover, .bh-combobox-scroll > button[data-active] {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n.bh-combobox-scroll { max-height: 260px; overflow-y: auto; padding: ${space.x2}; box-sizing: border-box; }\n.bh-combobox-hint { flex: none; color: var(--dsw-alias-label-secondary); font-size: ${text.metaSize}; font-weight: ${text.regular}; }\n.bh-combobox-empty { padding: ${space.x2} ${space.x3}; color: var(--dsw-alias-label-secondary); font-size: ${text.bodySize}; }\n.bh-combobox-scroll > .bh-combobox-action { justify-content: flex-start; align-items: center; gap: ${space.x2}; border-top: ${border.hairline} solid ${color.divider}; border-radius: 0; margin-top: ${space.x2}; }\n`;\n\nexport function Combobox({\n value,\n options,\n onSelect,\n label,\n toggleLabel,\n disabled = false,\n invalid = false,\n errorId,\n placeholder,\n emptyLabel,\n fallbackValue,\n createLabel,\n searchable = true,\n className,\n action,\n}: {\n readonly value: string;\n readonly options: readonly ComboboxOption[];\n readonly onSelect: (value: string) => void;\n readonly label: string;\n readonly toggleLabel: string;\n readonly disabled?: boolean;\n readonly invalid?: boolean;\n readonly errorId?: string;\n readonly placeholder?: string;\n readonly emptyLabel?: string;\n readonly fallbackValue?: string;\n readonly createLabel?: (query: string) => string;\n readonly searchable?: boolean;\n readonly className?: string;\n readonly action?: {\n readonly label: string;\n readonly onSelect: () => void;\n readonly disabled?: boolean;\n };\n}): ReactElement {\n const root = useRef(null);\n const panel = useRef(null);\n const listId = useId();\n const actionValue = `${listId}-action`;\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(undefined);\n const [active, setActive] = useState(undefined);\n const current = value === '' && fallbackValue !== undefined ? fallbackValue : value;\n const display = options.find((option) => option.value === current)?.label ?? current;\n const trimmed = query?.trim() ?? '';\n const needle = trimmed.toLowerCase();\n const matches: ComboboxOption[] = options.filter((option) =>\n [option.label, option.value, option.hint ?? ''].some((text) =>\n text.toLowerCase().includes(needle),\n ),\n );\n const canCreate =\n createLabel !== undefined &&\n trimmed !== '' &&\n !options.some((option) => option.value === trimmed);\n const choices: ComboboxOption[] = canCreate\n ? [...matches, { value: trimmed, label: createLabel(trimmed) }]\n : matches;\n const shown =\n action === undefined\n ? choices\n : [...choices, { value: actionValue, label: action.label, disabled: action.disabled }];\n const enabled = shown.filter((option) => option.disabled !== true);\n const hasPopup = shown.length > 0 || (choices.length === 0 && emptyLabel !== undefined);\n const highlighted = shown.findIndex(\n (option) => option.value === active && option.disabled !== true,\n );\n const position = useAnchoredPosition({\n open,\n anchorRef: root,\n panelRef: panel,\n gap: 4,\n margin: 12,\n });\n useDismissOnOutsidePointer(root, open, setOpen, panel);\n\n const dismiss = (): void => {\n setOpen(false);\n setQuery(undefined);\n setActive(undefined);\n };\n const select = (next: string): void => {\n dismiss();\n if (action !== undefined && next === actionValue) action.onSelect();\n else onSelect(next);\n };\n const typedChoice = (): string | undefined => {\n if (query === undefined) return current === '' ? undefined : current;\n if (trimmed === '') return fallbackValue;\n if (createLabel !== undefined) return trimmed;\n const available = matches.filter((option) => option.disabled !== true);\n const exact = available.find(\n (option) => option.value.toLowerCase() === needle || option.label.toLowerCase() === needle,\n );\n return (exact ?? available[0])?.value;\n };\n const onKeyDown = (event: KeyboardEvent): void => {\n if (event.nativeEvent.isComposing) return;\n if (event.key === 'Escape') {\n if (!open) return;\n event.preventDefault();\n event.stopPropagation();\n dismiss();\n } else if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n setOpen(true);\n if (enabled.length === 0) return;\n const offset = event.key === 'ArrowDown' ? 1 : -1;\n const at = enabled.findIndex((option) => option.value === active);\n const next =\n enabled[\n at < 0\n ? offset === 1\n ? 0\n : enabled.length - 1\n : (at + offset + enabled.length) % enabled.length\n ];\n setActive(next?.value);\n const index = shown.findIndex((option) => option.value === next?.value);\n document.getElementById(`${listId}-${index}`)?.scrollIntoView?.({ block: 'nearest' });\n } else if (event.key === 'Enter' && open) {\n event.preventDefault();\n const choice = shown[highlighted]?.value ?? typedChoice();\n if (choice === undefined) dismiss();\n else select(choice);\n }\n };\n\n return (\n \n = 0 ? `${listId}-${highlighted}` : undefined\n }\n aria-invalid={invalid}\n aria-describedby={invalid ? errorId : undefined}\n value={query ?? display}\n placeholder={placeholder}\n disabled={disabled}\n autoComplete=\"off\"\n readOnly={!searchable}\n data-searchable={searchable || undefined}\n onFocus={(event) => {\n if (searchable) event.currentTarget.select();\n setOpen(true);\n }}\n onClick={() => setOpen(true)}\n onChange={(event) => {\n setQuery(event.target.value);\n setActive(undefined);\n setOpen(true);\n }}\n onBlur={dismiss}\n onKeyDown={onKeyDown}\n />\n event.preventDefault()}\n onClick={() => {\n if (open) dismiss();\n else {\n root.current?.querySelector('input')?.focus();\n setOpen(true);\n }\n }}\n >\n \n \n {open && !disabled && hasPopup\n ? createPortal(\n \n
\n {choices.length === 0 && emptyLabel !== undefined ? (\n
{emptyLabel}
\n ) : null}\n {shown.map((option, index) => (\n event.preventDefault()}\n onMouseEnter={() => {\n if (option.disabled !== true) setActive(option.value);\n }}\n onClick={() => select(option.value)}\n >\n {option.value === actionValue ? : null}\n {option.label}\n {option.hint === undefined ? null : (\n {option.hint}\n )}\n \n ))}\n
\n ,\n document.body,\n )\n : null}\n \n );\n}\n","import type { ReactElement } from 'react';\n\nimport { Combobox } from '../../../client/src/client/combobox.js';\nimport type { BrowserTranslate } from './locale.js';\n\nexport function ProfileCombobox({\n value,\n profiles,\n disabled,\n invalid,\n errorId,\n onSelect,\n t,\n}: {\n readonly value: string;\n readonly profiles: readonly string[];\n readonly disabled: boolean;\n readonly invalid: boolean;\n readonly errorId: string;\n readonly onSelect: (name: string) => void;\n readonly t: BrowserTranslate;\n}): ReactElement {\n const names = [...new Set(['default', ...profiles, value === '' ? 'default' : value])];\n return (\n ({ value: name, label: name }))}\n onSelect={onSelect}\n label={t('entry.profile.label')}\n toggleLabel={t('entry.profile.choose')}\n disabled={disabled}\n invalid={invalid}\n errorId={errorId}\n fallbackValue=\"default\"\n createLabel={(name) => t('entry.profile.create', { name })}\n />\n );\n}\n","import { space } from './ds/tokens.stylex.js';\nimport { panelMaterials, validTargetId } from './appearance-panels.js';\nimport { appearanceMaterials } from './appearance-materials.js';\nimport {\n APPEARANCE_KEY,\n APPEARANCE_PRIMARY,\n Appearance,\n type AppearanceSnapshot,\n} from './appearance.js';\nimport { NATIVE_LIGHT, NATIVE_DARK } from './appearance-native-tokens.js';\nexport const APPEARANCE_CLASS = 'bh-appearance-scope';\nexport function appearanceCss(snapshot: AppearanceSnapshot): string {\n const { config, mode } = snapshot;\n const selected = config.modes[mode];\n const primary = selected.primary ?? APPEARANCE_PRIMARY[selected.preset][mode];\n const materials = appearanceMaterials(selected, mode);\n const tokens: Record = {\n ...NATIVE_LIGHT,\n ...(mode === 'dark' ? NATIVE_DARK : {}),\n };\n for (const part of ['header', 'body'] as const) {\n const material = materials[part];\n tokens[`--bh-global-${part}-fill`] =\n `color-mix(in srgb, ${material.color} ${material.opacity}%, transparent)`;\n tokens[`--bh-global-${part}-blur`] = `${material.blur}px`;\n }\n tokens['--dsw-alias-state-business-primary'] = primary;\n tokens['--dsw-alias-state-business-secondary'] =\n `color-mix(in srgb, ${primary} 45%, transparent)`;\n tokens['--dsw-alias-state-business-tertiary'] = `color-mix(in srgb, ${primary} 14%, transparent)`;\n tokens['--dsw-specific-sidebar-nav-item-active'] =\n `color-mix(in srgb, ${primary} 14%, transparent)`;\n return `.bh-root,.bh-workspace-mount[data-workspace-enabled],.${APPEARANCE_CLASS},[data-bh-appearance-owned]{color:var(--dsw-alias-label-primary);color-scheme:${mode};${Object.entries(\n tokens,\n )\n .map(([k, v]) => `${k}:${v}`)\n .join(\n ';',\n )}}:root [data-bh-appearance-owned][data-menu-material],:root .${APPEARANCE_CLASS}[data-menu-material],:root .${APPEARANCE_CLASS} [data-menu-material]{--dsw-elevation-stroke-color:var(--dsw-alias-border-${mode === 'dark' ? 'l3' : 'l4'})}${materialCss()}${panelCss(snapshot)}`;\n}\n\nexport function mountAppearance(owner: Appearance): () => void {\n const style = document.createElement('style');\n style.dataset.plugin = '@botharness/ui';\n style.dataset.pluginCss = '@botharness/ui/appearance';\n const update = () => {\n style.textContent = appearanceCss(owner.getSnapshot());\n style.dataset.bhAppearance = owner.getSnapshot().mode;\n };\n const media = window.matchMedia('(prefers-color-scheme: dark)');\n const onStorage = (event: StorageEvent) => {\n if (event.key === APPEARANCE_KEY || event.key === null) owner.refresh();\n };\n update();\n document.head.appendChild(style);\n const off = owner.subscribe(update);\n media.addEventListener('change', owner.refresh);\n window.addEventListener('storage', onStorage);\n return () => {\n off();\n style.remove();\n media.removeEventListener('change', owner.refresh);\n window.removeEventListener('storage', onStorage);\n };\n}\n\nfunction materialCss(): string {\n const scope = ':root .bh-workspace-mount[data-workspace-enabled]';\n return `\n${scope} .bh-dock-theme { --dv-group-view-background-color:transparent; --dv-tabs-and-actions-container-background-color:transparent; --dv-activegroup-visiblepanel-tab-background-color:transparent; --dv-inactivegroup-visiblepanel-tab-background-color:transparent; --dv-activegroup-hiddenpanel-tab-background-color:transparent; --dv-inactivegroup-hiddenpanel-tab-background-color:transparent; }\n${scope} .bh-root, ${scope} .bh-workspace-rail { background:transparent; }\n${scope} .dv-tabs-and-actions-container, ${scope} .bh-channel-session-header { background:var(--bh-global-header-fill); backdrop-filter:blur(var(--bh-global-header-blur)); }\n${scope} [data-appearance-header] { background:var(--bh-global-header-fill); backdrop-filter:blur(var(--bh-global-header-blur)); }\n${scope} .bh-channel-subpanel-body { display:flex; flex-direction:column; flex:1; min-height:0; min-width:0; overflow:auto; }\n${scope} .bh-channel-subpanel-body > section { flex:1; min-height:0; }\n${scope} .bh-memory-commit-view { display:flex; flex-direction:column; padding:0; }\n${scope} .bh-memory-commit-header { margin:0; flex-shrink:0; }\n${scope} .bh-memory-detail-body { flex:1; padding:${space.x3} ${space.x4}; }\n${scope} [data-appearance-body], ${scope} .dv-content-container { background:var(--bh-global-body-fill); backdrop-filter:blur(var(--bh-global-body-blur)); }\n`;\n}\n\nfunction panelCss({ config, mode }: AppearanceSnapshot): string {\n return Object.keys(config.modes[mode].panels ?? {})\n .filter(validTargetId)\n .map((id) => {\n const material = panelMaterials(config.modes[mode], mode, id);\n const scope = `:root .bh-workspace-mount[data-workspace-enabled] .dv-groupview:has(> .dv-tabs-and-actions-container .dv-active-tab [data-dock-header=\"${id.slice(5)}\"])`;\n return (['header', 'body'] as const)\n .map(\n (part) =>\n `${scope} > ${part === 'header' ? '.dv-tabs-and-actions-container' : '.dv-content-container'}, :root .bh-workspace-mount[data-workspace-enabled] [data-appearance-${part}=\"${id.slice(5)}\"] { background:color-mix(in srgb, ${material[part].color} ${material[part].opacity}%, transparent); backdrop-filter:blur(${material[part].blur}px); }`,\n )\n .join('');\n })\n .join('');\n}\n","import { Modal as NativeModal, Menu as NativeMenu } from '@deepseek-ai/dsh-client-ui-primitives';\nimport type { ComponentProps } from 'react';\nimport { APPEARANCE_CLASS } from './appearance-scope.js';\nexport function Modal(props: ComponentProps) {\n return (\n \n );\n}\nexport function Menu(props: ComponentProps) {\n return (\n \n );\n}\n","import type { ButtonHTMLAttributes, InputHTMLAttributes, ReactElement, ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { border, color, radius, size, space, text } from './tokens.stylex.js';\n\nexport const pillStyles = stylex.create({\n pill: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: space.x2,\n maxWidth: '100%',\n height: size.icon,\n paddingInline: `${space.x4} ${space.x3}`,\n borderWidth: 0,\n borderRadius: radius.sm,\n backgroundColor: { default: color.surface, ':hover': color.hover },\n color: color.fg,\n fontFamily: 'inherit',\n fontSize: text.bodySize,\n lineHeight: text.bodyLine,\n whiteSpace: 'nowrap',\n cursor: { default: 'pointer', ':disabled': 'default' },\n opacity: { default: 1, ':disabled': 0.5 },\n outline: { default: 'none', ':focus-visible': `${border.focus} solid ${color.accent}` },\n outlineOffset: '1px',\n },\n});\n\nexport function PillButton({\n children,\n ...rest\n}: { readonly children: ReactNode } & Omit<\n ButtonHTMLAttributes,\n 'className' | 'style' | 'type' | 'children'\n>): ReactElement {\n return (\n \n );\n}\n\nexport function PillFileButton({\n children,\n ...input\n}: { readonly children: ReactNode } & Omit<\n InputHTMLAttributes,\n 'className' | 'style' | 'type' | 'children' | 'hidden'\n>): ReactElement {\n return (\n \n );\n}\n","import { Menu } from '../appearance-primitives.js';\nimport { useState, type ReactElement, type ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\nimport { IconChevronDownOutlineRegular } from '@deepseek-ai/dsh-client-ui-primitives';\n\nimport { pillStyles } from './pill-button.js';\nimport { color } from './tokens.stylex.js';\n\nconst styles = stylex.create({\n label: {\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n chevron: {\n display: 'inline-flex',\n flexShrink: 0,\n color: color.muted,\n },\n});\n\nexport interface SelectOption {\n readonly value: Value;\n readonly label: ReactNode;\n}\n\nexport interface SelectProps {\n readonly label: string;\n readonly value: Value;\n readonly options: readonly SelectOption[];\n readonly onChange: (value: Value) => void;\n readonly disabled?: boolean;\n readonly align?: 'start' | 'end';\n readonly autoFocus?: boolean;\n readonly reselect?: boolean;\n}\n\nexport function Select({\n label,\n value,\n options,\n onChange,\n disabled = false,\n align = 'end',\n autoFocus = false,\n reselect = false,\n}: SelectProps): ReactElement {\n const [open, setOpen] = useState(false);\n const current = options.find((option) => option.value === value);\n return (\n ({ id: option.value, label: option.label }))}\n selectedId={value}\n onSelect={(id) => {\n setOpen(false);\n const next = options.find((option) => option.value === id);\n if (next !== undefined && (reselect || next.value !== value)) onChange(next.value);\n }}\n onClose={() => {\n setOpen(false);\n }}\n anchor={\n {\n setOpen((previous) => !previous);\n }}\n {...stylex.props(pillStyles.pill)}\n >\n {current?.label}\n \n \n \n \n }\n />\n );\n}\n","import { useId, type ReactElement, type ReactNode, type Ref } from 'react';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { border, color, space, text } from './tokens.stylex.js';\n\nconst NARROW = '@media (max-width: 648px)';\nconst COMPACT = '@container bh-settings (max-width: 480px)';\n\nconst styles = stylex.create({\n rows: {\n display: 'flex',\n flexDirection: 'column',\n minWidth: 0,\n },\n section: {\n display: 'flex',\n flexDirection: 'column',\n minWidth: 0,\n paddingTop: { default: space.x5, ':first-child': 0 },\n },\n sectionHead: {\n display: 'flex',\n flexDirection: 'column',\n gap: space.x1,\n paddingBottom: space.x2,\n },\n sectionTitle: {\n margin: 0,\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n fontWeight: text.strong,\n },\n row: {\n display: 'flex',\n alignItems: { default: 'center', [NARROW]: 'stretch', [COMPACT]: 'stretch' },\n flexDirection: { default: 'row', [NARROW]: 'column', [COMPACT]: 'column' },\n gap: { default: space.x4, [NARROW]: space.x3, [COMPACT]: space.x3 },\n minWidth: 0,\n paddingBlock: space.x4,\n borderBottomWidth: border.hairline,\n borderBottomStyle: 'solid',\n borderBottomColor: { default: color.divider, ':last-child': 'transparent' },\n },\n text: {\n display: 'flex',\n flexDirection: 'column',\n gap: space.x1,\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: 0,\n minWidth: 0,\n },\n title: {\n color: color.fg,\n fontSize: text.titleSize,\n lineHeight: text.titleLine,\n fontWeight: text.strong,\n overflowWrap: 'anywhere',\n },\n description: {\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n overflowWrap: 'anywhere',\n },\n control: {\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n justifyContent: { default: 'flex-end', [NARROW]: 'flex-start', [COMPACT]: 'flex-start' },\n gap: space.x3,\n flexShrink: 0,\n minWidth: 0,\n maxWidth: { default: '60%', [NARROW]: '100%', [COMPACT]: '100%' },\n },\n value: {\n color: color.muted,\n fontSize: text.bodySize,\n lineHeight: text.bodyLine,\n textAlign: 'end',\n overflowWrap: 'anywhere',\n },\n});\n\nexport function SettingsRows({\n children,\n rootRef,\n}: {\n readonly children: ReactNode;\n readonly rootRef?: Ref | undefined;\n}): ReactElement {\n return (\n
\n {children}\n
\n );\n}\n\nexport interface SettingsSectionProps {\n readonly title?: ReactNode;\n readonly description?: ReactNode;\n readonly children: ReactNode;\n}\n\nexport function SettingsSection({\n title,\n description,\n children,\n}: SettingsSectionProps): ReactElement {\n const id = useId();\n return (\n \n {title === undefined ? null : (\n
\n

\n {title}\n

\n {description === undefined ? null : (\n
{description}
\n )}\n
\n )}\n {children}\n \n );\n}\n\nexport interface SettingsRowProps {\n readonly title: ReactNode;\n readonly description?: ReactNode;\n readonly control?: ReactNode;\n readonly children?: ReactNode;\n readonly rootRef?: Ref | undefined;\n readonly data?: Readonly>;\n}\n\nexport function SettingsRow({\n title,\n description,\n control,\n children,\n rootRef,\n data,\n}: SettingsRowProps): ReactElement {\n const id = useId();\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n return (\n \n
\n
\n {title}\n
\n {description === undefined ? null : (\n
\n {description}\n
\n )}\n {children}\n
\n {control === undefined ? null :
{control}
}\n \n );\n}\n\nexport function SettingsValue({ children }: { readonly children: ReactNode }): ReactElement {\n return {children};\n}\n","import { useMemo, useState, useSyncExternalStore, type ReactElement } from 'react';\nimport { Note } from '../../../client/src/client/ds/note.js';\nimport { Select } from '../../../client/src/client/ds/select.js';\nimport { SettingsRow, SettingsRows } from '../../../client/src/client/ds/settings-row.js';\nimport type { BrowserClientContext } from './index.js';\nimport { LOCALE_NS, type BrowserTranslate } from './locale.js';\n\ninterface TargetScope {\n getSnapshot(): {\n status: string;\n writable: boolean;\n value:\n | {\n target?: 'local' | 'container' | 'extension' | 'daily-control' | 'profile-control';\n localDriver?: 'current' | 'agent-browser';\n containerDriver?: 'current' | 'agent-browser';\n }\n | undefined;\n };\n subscribe(listener: () => void): () => void;\n set(field: string, value: unknown): Promise;\n}\n\nfunction ConfigChoice({\n scope,\n field,\n value,\n writable,\n title,\n items,\n}: {\n scope: TargetScope;\n field: 'target' | 'localDriver' | 'containerDriver';\n value: string;\n writable: boolean;\n title: string;\n items: { id: string; label: string }[];\n}): ReactElement {\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState();\n return (\n <>\n ({ value: item.id, label: item.label }))}\n disabled={!writable || saving}\n onChange={(id) => {\n setSaving(true);\n setError(undefined);\n void scope\n .set(field, id)\n .then(() => {\n if (scope.getSnapshot().value?.[field] !== id)\n throw new Error('Browser setting was not saved');\n })\n .catch((cause: unknown) => setError(String(cause)))\n .finally(() => setSaving(false));\n }}\n />\n }\n />\n {error === undefined ? null : {error}}\n \n );\n}\n\nexport function BrowserTargetSettings({\n scope,\n t,\n}: {\n scope: TargetScope;\n t: BrowserTranslate;\n}): ReactElement {\n const store = useMemo(\n () => ({\n subscribe: (listener: () => void) => scope.subscribe(listener),\n getSnapshot: () => scope.getSnapshot(),\n }),\n [scope],\n );\n const snapshot = useSyncExternalStore(store.subscribe, store.getSnapshot);\n const target = snapshot.value?.target ?? 'local';\n return (\n \n ({ id, label: t(`settings.${id}`) }))}\n />\n {target !== 'local' && target !== 'container' ? null : (\n ({\n id,\n label: t(`settings.driver.${id}`),\n }))}\n />\n )}\n \n );\n}\n\nexport function registerBrowserSettings(ctx: BrowserClientContext, t: BrowserTranslate): void {\n ctx.inject(['configForms', 'slots'], (settingsCtx) => {\n const native = settingsCtx as unknown as {\n configForms: { get(namespace: string): TargetScope };\n slots: {\n inject(name: string, callback: () => unknown): () => void;\n register(\n options: {\n name: string;\n id: string;\n order: number;\n label: () => string;\n locale: string;\n inject: () => { scope: TargetScope; t: BrowserTranslate };\n },\n component: typeof BrowserTargetSettings,\n ): () => void;\n };\n };\n const scope = native.configForms.get('botharness-browser');\n return native.slots.inject('botharness.settings.section', () =>\n native.slots.register(\n {\n name: 'botharness.settings.section',\n id: 'browser',\n order: 32,\n label: () => t('settings.section'),\n locale: LOCALE_NS,\n inject: () => ({ scope, t }),\n },\n BrowserTargetSettings,\n ),\n );\n });\n}\n","import { useCallback, useRef, useState, type ReactElement } from 'react';\nimport { Button, Input, Tag } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { SidebarCardList, SidebarCardRow } from '../../../client/src/client/sidebar-card.js';\nimport type { BrowserTranslate } from './locale.js';\n\nimport type { ProfileView } from '../profile-control.js';\n\nexport function ProfileBrowserControl({\n slug,\n view,\n paused,\n enabled,\n t,\n refresh,\n}: {\n readonly slug: string | undefined;\n readonly view: ProfileView | undefined;\n readonly paused: boolean;\n readonly enabled: boolean;\n readonly t: BrowserTranslate;\n readonly refresh: () => void;\n}): ReactElement {\n const [pair, setPair] = useState<{ code: string; expiresAt: number } | undefined>();\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState();\n const active = useRef(false);\n const sequence = useRef(0);\n const resource = useCallback((node: HTMLDivElement | null): void => {\n active.current = node !== null;\n if (node === null) sequence.current += 1;\n }, []);\n const invoke = (action: 'pair' | 'forget' | 'pause'): void => {\n if (slug === undefined || busy) return;\n const request = ++sequence.current;\n setBusy(true);\n setError(undefined);\n setPair(undefined);\n void fetch(action === 'pause' ? './api/browser/takeover' : `./api/browser/profile/${action}`, {\n method: 'POST',\n cache: 'no-store',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ slug, ...(action === 'pause' ? { active: !paused } : {}) }),\n })\n .then(async (response) => {\n const body = (await response.json()) as {\n ok: boolean;\n error?: string;\n code?: string;\n expiresAt?: number;\n };\n if (!response.ok || !body.ok) throw new Error(body.error ?? t('entry.error'));\n if (!active.current || sequence.current !== request) return;\n if (action === 'pair' && body.code !== undefined && body.expiresAt !== undefined)\n setPair({ code: body.code, expiresAt: body.expiresAt });\n })\n .catch((cause: unknown) => {\n if (active.current && sequence.current === request)\n setError(cause instanceof Error ? cause.message : t('entry.error'));\n })\n .finally(() => {\n if (active.current && sequence.current === request) {\n setBusy(false);\n refresh();\n }\n });\n };\n return (\n
\n \n \n {view?.paired !== true ? (\n {t('entry.chip.unpaired')}\n ) : view.connected ? (\n {t('entry.chip.connected')}\n ) : (\n {t('entry.chip.offline')}\n )}\n {paused ? {t('entry.chip.paused')} : null}\n \n }\n meta={\n <>\n {t('entry.profile.scope')}\n \n {view?.paired\n ? t(view.connected ? 'entry.profile.connected' : 'entry.profile.disconnected')\n : t('entry.view.noTabs')}\n {view?.connected ? ` · ${view.tabs}` : ''}\n \n \n }\n detail={\n
\n \n {t('entry.profile.install')}\n \n
\n invoke(view?.paired ? 'forget' : 'pair')}\n >\n {t(view?.paired ? 'entry.profile.forget' : 'entry.profile.pair')}\n \n {view?.connected ? (\n invoke('pause')}\n >\n {t(paused ? 'entry.view.resume' : 'entry.view.pause')}\n \n ) : null}\n
\n {view?.paired || pair === undefined ? null : (\n <>\n {t('entry.profile.instructions')}\n \n {location.origin}\n \n )}\n
\n }\n />\n
\n {error === undefined ? null : (\n
\n {error}\n
\n )}\n
\n );\n}\n","import { useCallback, useRef, useState, type ReactElement } from 'react';\nimport { Button, Tag } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { SidebarCardList, SidebarCardRow } from '../../../client/src/client/sidebar-card.js';\nimport type { DailyView } from '../daily.js';\nimport type { BrowserTranslate } from './locale.js';\n\nexport function DailyBrowserControl({\n slug,\n view,\n enabled,\n paused,\n t,\n refresh,\n}: {\n readonly slug: string | undefined;\n readonly view: DailyView | null;\n readonly enabled: boolean;\n readonly paused: boolean;\n readonly t: BrowserTranslate;\n readonly refresh: () => void;\n}): ReactElement {\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState();\n const mounted = useRef(false);\n const resource = useCallback((node: HTMLDivElement | null): void => {\n mounted.current = node !== null;\n }, []);\n const invoke = (action: 'connect' | 'grant' | 'return' | 'pause'): void => {\n if (busy || slug === undefined) return;\n setBusy(true);\n setError(undefined);\n void fetch(action === 'pause' ? './api/browser/takeover' : `./api/browser/daily/${action}`, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ slug, ...(action === 'pause' ? { active: !paused } : {}) }),\n })\n .then(async (response) => {\n const body = (await response.json()) as { ok: boolean; error?: string };\n if (!response.ok || !body.ok) throw new Error(body.error ?? t('entry.error'));\n })\n .catch((cause: unknown) => {\n if (mounted.current) setError(cause instanceof Error ? cause.message : t('entry.error'));\n })\n .finally(() => {\n if (mounted.current) {\n setBusy(false);\n refresh();\n }\n });\n };\n return (\n
\n \n \n {view === null || view.state === 'error' ? (\n {t('entry.chip.disconnected')}\n ) : view.state === 'connecting' ? (\n {t('entry.chip.connecting')}\n ) : view.state === 'confirm' ? (\n {t('entry.chip.confirm')}\n ) : (\n {t('entry.chip.controlled')}\n )}\n {paused && view?.state === 'controlled' ? (\n {t('entry.chip.paused')}\n ) : null}\n \n }\n meta={\n view === null || view.state === 'error' ? undefined : (\n \n {t(\n view.state === 'connecting'\n ? 'entry.daily.select'\n : view.state === 'confirm'\n ? 'entry.daily.confirm'\n : 'entry.daily.controlled',\n )}\n \n )\n }\n detail={\n
\n {view === null || view.state === 'error' || view.url === '' ? null : (\n <>\n {view.title || view.url}\n {view.url}\n \n )}\n \n {t('entry.daily.install')}\n \n
\n {view === null || view.state === 'error' ? (\n invoke('connect')}\n >\n {t('entry.daily.connect')}\n \n ) : (\n <>\n {view.state === 'confirm' ? (\n invoke('grant')}\n >\n {t('entry.daily.allow')}\n \n ) : null}\n {view.state === 'controlled' ? (\n invoke('pause')}\n >\n {t(paused ? 'entry.view.resume' : 'entry.view.pause')}\n \n ) : null}\n invoke('return')}\n >\n {t(\n view.state === 'connecting' ? 'entry.borrow.cancel' : 'entry.borrow.return',\n )}\n \n \n )}\n
\n
\n }\n />\n
\n {view?.error === undefined ? null : (\n
\n {view.error}\n
\n )}\n {error === undefined ? null : (\n
\n {error}\n
\n )}\n
\n );\n}\n","import { useCallback, useRef, useState, type ReactElement } from 'react';\nimport { Button, Input, Tag } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { SidebarCardList, SidebarCardRow } from '../../../client/src/client/sidebar-card.js';\nimport type { BrowserTranslate } from './locale.js';\n\nexport interface BorrowedTabView {\n readonly title: string;\n readonly url: string;\n readonly expiresAt: number;\n}\n\nexport function BorrowedBrowser({\n slug,\n tab,\n enabled,\n t,\n refresh,\n}: {\n readonly slug: string | undefined;\n readonly tab: BorrowedTabView | null | undefined;\n readonly enabled: boolean;\n readonly t: BrowserTranslate;\n readonly refresh: () => void;\n}): ReactElement {\n const [pair, setPair] = useState<{ code: string; expiresAt: number } | undefined>();\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState();\n const active = useRef(false);\n const sequence = useRef(0);\n const resource = useCallback((node: HTMLDivElement | null): void => {\n active.current = node !== null;\n if (node === null) sequence.current += 1;\n }, []);\n const invoke = (action: 'pair' | 'return'): void => {\n if (slug === undefined || busy) return;\n const request = ++sequence.current;\n setBusy(true);\n setError(undefined);\n setPair(undefined);\n void fetch(`./api/browser/borrow/${action}`, {\n method: 'POST',\n cache: 'no-store',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ slug }),\n })\n .then(async (response) => {\n const body = (await response.json()) as {\n ok: boolean;\n error?: string;\n code?: string;\n expiresAt?: number;\n };\n if (!response.ok || !body.ok) throw new Error(body.error ?? t('entry.error'));\n if (!active.current || sequence.current !== request) return;\n if (action === 'pair' && body.code !== undefined && body.expiresAt !== undefined)\n setPair({ code: body.code, expiresAt: body.expiresAt });\n })\n .catch((cause: unknown) => {\n if (active.current && sequence.current === request)\n setError(cause instanceof Error ? cause.message : t('entry.error'));\n })\n .finally(() => {\n if (active.current && sequence.current === request) {\n setBusy(false);\n refresh();\n }\n });\n };\n return (\n
\n \n {t('entry.chip.notShared')}\n ) : (\n {t('entry.chip.readOnly')}\n )\n }\n meta={{t(tab == null ? 'entry.borrow.none' : 'entry.borrow.readOnly')}}\n detail={\n
\n {tab == null ? null : (\n <>\n {tab.title || tab.url}\n {tab.url}\n \n )}\n invoke(tab == null ? 'pair' : 'return')}\n >\n {t(tab == null ? 'entry.borrow.pair' : 'entry.borrow.return')}\n \n {tab != null || pair === undefined ? null : (\n <>\n {t('entry.borrow.instructions')}\n \n {location.origin}\n {\n sequence.current += 1;\n setPair(undefined);\n invoke('return');\n }}\n >\n {t('entry.borrow.cancel')}\n \n \n )}\n
\n }\n />\n
\n {error === undefined ? null : (\n
\n {error}\n
\n )}\n
\n );\n}\n","export const STYLEX_CSS: string = '@bh-stylex-css';\n","import { border, color, radius, space, text } from '../../../client/src/client/ds/tokens.stylex.js';\nimport { COMBOBOX_CSS } from '../../../client/src/client/combobox.js';\nimport { STYLEX_CSS } from '../../../client/src/client/ds/stylex-css.js';\n\nexport const styles =\n COMBOBOX_CSS +\n `\n.bh-browser-access-control { position: relative; display: flex; align-items: center; }\n.bh-browser-borrow { display: grid; gap: ${space.x3}; font-size: ${text.metaSize}; }\n.bh-browser-borrow-title, .bh-browser-daily-install { color: var(--dsw-alias-label-primary); text-underline-offset: 3px; }\n.bh-browser-borrow-url { overflow-wrap: anywhere; }\n.bh-browser-borrow-url { color: var(--dsw-alias-label-secondary); }\n.bh-browser-access-power {\n display: flex; align-items: center; justify-content: center; width: 28px; height: 28px;\n padding: 0; border: 0; border-radius: ${radius.md}; background: transparent;\n color: var(--dsw-alias-label-secondary); cursor: pointer;\n}\n.bh-browser-access-power:hover { background: var(--dsw-alias-interactive-bg-hover); }\n.bh-browser-access-power[aria-pressed='true'] { color: var(--dsw-alias-state-business-primary); background: var(--dsw-alias-interactive-bg-hover); }\n.bh-browser-access-power:focus-visible { outline: ${border.focus} solid var(--dsw-alias-state-business-primary); outline-offset: 2px; }\n.bh-browser-access-power:disabled { opacity: 0.5; cursor: default; }\n.bh-browser-access-power.bh-access-failed { color: var(--dsw-alias-state-error-primary); }\n.bh-browser-access-error { order: -1; padding: 0 ${space.x2}; color: var(--dsw-alias-state-error-primary); font-size: ${text.metaSize}; line-height: ${text.metaLine}; white-space: nowrap; }\n\n.bh-browser-local { display: grid; gap: ${space.x3}; font-size: ${text.metaSize}; }\n.bh-browser-card-detail { display: grid; gap: ${space.x3}; justify-items: start; font-size: ${text.metaSize}; }\n.bh-browser-card-field { display: flex; align-items: center; justify-content: space-between; gap: ${space.x3}; width: 100%; color: var(--dsw-alias-label-secondary); }\n.bh-browser-card-field > span:first-child { flex: none; }\n.bh-browser-cards .bh-card-meta [role=\"status\"] { color: inherit; }\n.bh-browser-note { color: var(--dsw-alias-label-secondary); }\n.bh-browser-frame { display: block; width: 100%; border: ${border.hairline} solid ${color.divider}; border-radius: ${radius.md}; }\n.bh-browser-actions { display: flex; flex-wrap: wrap; gap: ${space.x3}; }\n.bh-browser-tab[aria-pressed=\"true\"] { background: var(--dsw-alias-interactive-bg-hover); }\n.bh-browser-tab[aria-current=\"true\"] .bh-browser-tab-title { font-weight: ${text.strong}; }\n.bh-browser-tab .bh-browser-tab-url { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.bh-browser-tabs .bh-card-main { padding: ${space.x3} ${space.x3}; }\n.bh-browser-error { color: var(--dsw-alias-state-error-primary); overflow-wrap: anywhere; }\n.bh-viewer-btn-content { display: inline-flex; align-items: center; gap: ${space.x2}; }\n@media (max-width: 560px) {\n [data-bh-viewer-btn-label] { display: none; }\n}\n.bh-browser-progress { display: grid; gap: ${space.x2}; color: var(--dsw-alias-label-secondary); }\n.bh-browser-progress-bar { width: 100%; height: 6px; accent-color: var(--dsw-alias-state-business-primary); }\n.bh-browser-failure { display: grid; gap: ${space.x2}; overflow-wrap: anywhere; }\n.bh-browser-failure-title { color: var(--dsw-alias-label-primary); font-weight: ${text.strong}; }\n.bh-browser-failure-fault, .bh-browser-failure-action { color: var(--dsw-alias-label-secondary); }\n.bh-browser-failure-details { color: var(--dsw-alias-label-secondary); }\n.bh-browser-failure-details pre { overflow-x: auto; white-space: pre-wrap; font-size: ${text.metaSize}; }\n` +\n STYLEX_CSS;\n","/**\n * Vendored Access Power glyph from lucide-react@1.46.0 (ISC, ADR-0032).\n *\n * Source: the lucide `dist/esm/icons/power.mjs` glyph data. Vendored at the\n * stock 2-unit stroke without adding a `lucide-react` runtime dependency.\n *\n * ISC License\n *\n * Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2022 as part of Feather (MIT).\n * All other copyright (c) for Lucide are held by Lucide Contributors 2022.\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\nimport type { ReactElement } from 'react';\nexport function AccessPowerIcon(): ReactElement {\n return (\n \n \n \n \n );\n}\n","import type { ReactElement } from 'react';\n\nfunction baseProps(size: number): {\n width: number;\n height: number;\n viewBox: string;\n fill: string;\n stroke: string;\n strokeWidth: number;\n strokeLinecap: 'round';\n strokeLinejoin: 'round';\n 'aria-hidden': true;\n} {\n return {\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n 'aria-hidden': true,\n };\n}\n\nexport function TrackpadIcon({ size = 14 }: { readonly size?: number }): ReactElement {\n return (\n \n \n \n \n );\n}\n\nexport function TakeoverIcon({ size = 14 }: { readonly size?: number }): ReactElement {\n return (\n \n \n \n \n \n );\n}\n","import { PanelEmptyState } from '../../../client/src/client/ds/empty-state.js';\nimport { RemoteViewer } from '../../../client/src/client/remote-viewer/index.js';\nimport type { ViewerTranslate } from '../../../client/src/client/remote-viewer/locale.js';\nimport {\n useId,\n useCallback,\n useRef,\n useState,\n useSyncExternalStore,\n type ComponentType,\n type ReactElement,\n} from 'react';\nimport {\n Button,\n IconFullscreenOutlineRegular,\n Switch,\n Tag,\n Tooltip,\n} from '@deepseek-ai/dsh-client-ui-primitives';\nimport { ChannelSidebarIcon } from '../../../client/src/client/channel-sidebar-icon.js';\nimport { useMountedResource } from '../../../client/src/client/mounted-resource.js';\nimport { SidebarCardList, SidebarCardRow } from '../../../client/src/client/sidebar-card.js';\nimport type {} from '@deepseek-ai/dsh-client-ui-slots';\n\nimport { LOCALE_NS, en, zh, type BrowserTranslate } from './locale.js';\nimport {\n BrowserApiError,\n BrowserFailureNotice,\n BrowserProvisionProgress,\n readFailure,\n type BrowserFailure,\n} from './browser-failure.js';\nimport { isBrowserFailureKind } from '../failure-kinds.js';\nimport { ProfileCombobox } from './profile-combobox.js';\nimport { registerBrowserSettings } from './settings.js';\nimport { ProfileBrowserControl } from './profile-browser.js';\nimport type { ProfileView } from '../profile-control.js';\nimport { DailyBrowserControl } from './daily-browser.js';\nimport type { DailyView } from '../daily.js';\nimport { BorrowedBrowser, type BorrowedTabView } from './borrowed-browser.js';\nimport { styles } from './styles.js';\n\nconst ENTRY_ID = 'botharness-browser';\nconst OBSERVATION_ENDPOINT = './api/browser/observation';\nconst TAKEOVER_ENDPOINT = './api/browser/takeover';\nconst OPEN_ENDPOINT = './api/browser/open';\nconst STOP_ENDPOINT = './api/browser/stop';\nconst baseRelative = (path: string | null | undefined): string | undefined =>\n path === null || path === undefined ? undefined : path.startsWith('/') ? `.${path}` : path;\n\nimport { AccessPowerIcon } from './access-power-icon.js';\nimport { TakeoverIcon, TrackpadIcon } from './viewer-icons.js';\n\nexport const name = 'botharness-browser-client';\n\nexport const inject = ['channelSidebar', 'connection', 'locale'];\n\nexport interface BrowserClientContext {\n readonly locale: {\n bind(namespace: string): BrowserTranslate;\n register(namespace: string, dictionaries: { zh: unknown; en: unknown }): () => void;\n };\n inject(names: readonly string[], callback: (ctx: BrowserClientContext) => void): void;\n effect(callback: () => () => void, name: string): void;\n}\n\ninterface ChannelSidebarEntryProps {\n readonly botSlug?: string;\n readonly t: BrowserTranslate;\n readonly expanded?: boolean;\n readonly setExpanded?: (expanded: boolean) => void;\n readonly setExpandable?: (expandable: boolean) => void;\n}\n\ninterface ChannelSidebarRegistryLike {\n register(entry: {\n readonly id: string;\n readonly label: string;\n readonly icon?: string;\n readonly order: number;\n readonly scope: 'channel' | 'personabot';\n readonly component: ComponentType;\n readonly headerAction?: ComponentType;\n readonly badge?: ComponentType;\n readonly tab?: string;\n }): () => void;\n}\n\ninterface ConnectionRpcLike {\n call(\n path: string,\n method: string,\n options?: { args?: unknown },\n ): Promise<{ ok: boolean; value?: unknown; error?: { message?: string } }>;\n}\n\nlet connectionRpc: ConnectionRpcLike | undefined;\n\ninterface BotInfoView {\n readonly displayName: string | undefined;\n readonly browserAccess: boolean | undefined;\n readonly browserProfile: string | undefined;\n readonly profiles: readonly string[];\n}\n\ninterface BrowserTabView {\n readonly targetId: string;\n readonly url: string;\n readonly title: string;\n readonly current: boolean;\n}\n\ninterface BrowserObservation {\n readonly target?: 'local' | 'container' | 'extension' | 'daily-control' | 'profile-control';\n readonly daily?: DailyView | null;\n readonly profile?: ProfileView;\n readonly borrowed?: BorrowedTabView | null;\n readonly viewerUrl?: string | null;\n readonly cleanupRequired?: boolean;\n readonly running: boolean;\n readonly frame: string | null;\n readonly focused: string | null;\n readonly takeover: boolean;\n readonly handoffPending?: boolean;\n readonly provisioning?: { downloadedBytes: number; totalBytes: number } | null;\n readonly tabs: readonly BrowserTabView[];\n readonly profiles?: readonly string[];\n}\n\nasync function requestJson(url: string, init?: RequestInit): Promise {\n const response = await fetch(url, { cache: 'no-store', ...init });\n const body = (await response.json()) as T & {\n ok?: boolean;\n error?: string;\n code?: string;\n detail?: string;\n packages?: string[];\n };\n if (!response.ok || body.ok === false) {\n throw new BrowserApiError(\n body.error ?? `HTTP ${String(response.status)}`,\n body.code,\n body.detail,\n body.packages,\n );\n }\n return body;\n}\n\ninterface ReadableStore {\n subscribe(listener: () => void): () => void;\n getSnapshot(): T;\n}\n\ntype BotInfoStore = ReadableStore & {\n refresh(): void;\n setAccess(enabled: boolean): void;\n};\n\nconst botInfoStores = new Map();\n\nfunction botInfoStore(botSlug: string | undefined): BotInfoStore {\n const key = botSlug ?? '';\n const existing = botInfoStores.get(key);\n if (existing !== undefined) return existing;\n const created = createBotInfoStore(botSlug);\n botInfoStores.set(key, created);\n return created;\n}\n\nfunction createBotInfoStore(botSlug: string | undefined): BotInfoStore {\n let info: BotInfoView = {\n displayName: undefined,\n browserAccess: undefined,\n browserProfile: undefined,\n profiles: [],\n };\n const listeners = new Set<() => void>();\n let loadedAt = Number.NEGATIVE_INFINITY;\n const load = (): void => {\n const rpc = connectionRpc;\n if (rpc === undefined || botSlug === undefined) return;\n void rpc\n .call('/api', 'botharness/list', { args: {} })\n .then((result) => {\n if (!result.ok) return;\n const value = result.value as {\n bots?: readonly {\n slug?: unknown;\n displayName?: unknown;\n browserAccess?: unknown;\n browserProfile?: unknown;\n }[];\n };\n const bots = value.bots ?? [];\n const match = bots.find((bot) => bot.slug === botSlug);\n if (match === undefined) return;\n const profiles = [\n ...new Set(\n bots\n .map((bot) => (typeof bot.browserProfile === 'string' ? bot.browserProfile : ''))\n .filter((name) => name !== ''),\n ),\n ].sort();\n info = {\n displayName:\n typeof match.displayName === 'string' && match.displayName.length > 0\n ? match.displayName\n : undefined,\n browserAccess: match.browserAccess === true,\n browserProfile:\n typeof match.browserProfile === 'string' && match.browserProfile !== ''\n ? match.browserProfile\n : undefined,\n profiles,\n };\n for (const listener of listeners) listener();\n })\n .catch(() => undefined);\n };\n return {\n setAccess(enabled) {\n info = { ...info, browserAccess: enabled };\n for (const listener of listeners) listener();\n },\n subscribe(listener) {\n if (listeners.size === 0 && Date.now() - loadedAt > 5000) {\n loadedAt = Date.now();\n load();\n }\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n getSnapshot: () => info,\n refresh: load,\n };\n}\n\ninterface ObservationStore {\n subscribe(listener: () => void): () => void;\n getSnapshot(): BrowserObservation | undefined;\n setTab(targetId: string | undefined): void;\n refresh(): void;\n confirmTakeover(active: boolean): void;\n}\n\nfunction observationUrl(botSlug: string | undefined, tabId: string | undefined): string {\n const base = `${OBSERVATION_ENDPOINT}?slug=${encodeURIComponent(botSlug ?? '')}`;\n return tabId === undefined || tabId === '' ? base : `${base}&tab=${encodeURIComponent(tabId)}`;\n}\n\nfunction createObservationStore(botSlug: string | undefined): ObservationStore {\n let value: BrowserObservation | undefined;\n let tab: string | undefined;\n let timer: ReturnType | undefined;\n let refreshing = false;\n let revision = 0;\n let refreshAgain = false;\n const listeners = new Set<() => void>();\n const refresh = async (): Promise => {\n if (refreshing) {\n refreshAgain = true;\n return;\n }\n refreshing = true;\n const requestedTab = tab;\n const requestedRevision = revision;\n try {\n const next = await requestJson(observationUrl(botSlug, requestedTab));\n if (tab === requestedTab && revision === requestedRevision) value = next;\n } catch {\n if (tab === requestedTab && revision === requestedRevision) value = undefined;\n } finally {\n refreshing = false;\n }\n for (const listener of listeners) listener();\n if (refreshAgain && listeners.size > 0) {\n refreshAgain = false;\n void refresh();\n }\n };\n return {\n subscribe(listener) {\n listeners.add(listener);\n if (listeners.size === 1) {\n void refresh();\n timer = setInterval(() => void refresh(), 1500);\n }\n return () => {\n listeners.delete(listener);\n if (listeners.size === 0 && timer !== undefined) {\n clearInterval(timer);\n timer = undefined;\n }\n };\n },\n getSnapshot: () => value,\n setTab(targetId) {\n tab = targetId;\n void refresh();\n },\n confirmTakeover(active) {\n revision += 1;\n if (value !== undefined) value = { ...value, takeover: active };\n for (const listener of listeners) listener();\n },\n refresh: () => void refresh(),\n };\n}\n\nfunction BrowserHeaderAction({\n botSlug,\n t,\n setExpandable,\n setExpanded,\n}: ChannelSidebarEntryProps): ReactElement {\n const store = botInfoStore(botSlug);\n const [busy, setBusy] = useState(false);\n const inFlight = useRef(false);\n const [error, setError] = useState(false);\n const subscribe = (listener: () => void): (() => void) => {\n const sync = (): void => {\n setExpandable?.(store.getSnapshot().browserAccess !== undefined);\n };\n const unsubscribe = store.subscribe(() => {\n sync();\n listener();\n });\n sync();\n return unsubscribe;\n };\n const info = useSyncExternalStore(subscribe, store.getSnapshot);\n const accessOn = info.browserAccess === true;\n\n const onToggle = (next: boolean): void => {\n const rpc = connectionRpc;\n if (rpc === undefined || botSlug === undefined || inFlight.current) return;\n inFlight.current = true;\n setBusy(true);\n setError(false);\n void rpc\n .call('/api', 'botharness/browserAccessSet', { args: { slug: botSlug, enabled: next } })\n .then((result) => {\n if (!result.ok) {\n setError(true);\n return;\n }\n const value = result.value as { bot?: { browserAccess?: unknown } };\n const applied = value.bot?.browserAccess === true;\n store.setAccess(applied);\n setExpanded?.(applied);\n })\n .catch(() => {\n setError(true);\n })\n .finally(() => {\n inFlight.current = false;\n setBusy(false);\n });\n };\n\n const label = t(accessOn ? 'entry.access.disable' : 'entry.access.enable');\n return (\n \n \n onToggle(!accessOn)}\n >\n \n \n \n {error ? (\n \n {t('entry.access.failureHint')}\n \n ) : null}\n \n );\n}\n\nfunction BrowserBody({ botSlug, t }: ChannelSidebarEntryProps): ReactElement {\n const [store] = useState(() => createObservationStore(botSlug));\n const infoStore = botInfoStore(botSlug);\n const observation = useSyncExternalStore(store.subscribe, store.getSnapshot);\n const info = useSyncExternalStore(infoStore.subscribe, infoStore.getSnapshot);\n const [follow, setFollow] = useState(true);\n const [preview, setPreview] = useState(undefined);\n const [busy, setBusy] = useState(false);\n const errorId = useId();\n const [profileInvalid, setProfileInvalid] = useState(false);\n const [profileOverride, setProfileOverride] = useState(undefined);\n const [failure, setFailure] = useState(undefined);\n const [viewer, setViewer] = useState();\n const [interaction, setInteraction] = useState(false);\n const viewerScope = useRef('');\n const previousViewer = useRef<{ identity: string; url: string | undefined }>({\n identity: '',\n url: undefined,\n });\n const mounted = useRef(true);\n const viewerRequest = useRef(0);\n const interactionResource = useCallback((node: HTMLDivElement | null): void => {\n mounted.current = node !== null;\n if (node === null) viewerRequest.current += 1;\n }, []);\n const disableInteraction = useCallback(() => {\n viewerRequest.current += 1;\n setInteraction(false);\n }, []);\n const [inputMode, setInputMode] = useState<'direct' | 'trackpad'>(() =>\n typeof window !== 'undefined' &&\n window.innerWidth < 768 &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(pointer: coarse)').matches\n ? 'trackpad'\n : 'direct',\n );\n const finePointer =\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(pointer: fine)').matches;\n const showHeaderTakeover = inputMode === 'direct' && finePointer;\n\n const tabs = observation?.tabs ?? [];\n const focused = observation?.focused ?? null;\n const currentTab = tabs.find((tab) => tab.current);\n const orderedTabs =\n currentTab === undefined ? tabs : [currentTab, ...tabs.filter((tab) => !tab.current)];\n const cleanupRequired = observation?.cleanupRequired === true;\n const failureNotice =\n !cleanupRequired && failure !== undefined && isBrowserFailureKind(failure.code) ? (\n \n invoke(OPEN_ENDPOINT, follow || preview === undefined ? {} : { tab: preview })\n }\n />\n ) : null;\n let visibleError: string | undefined = failure?.message;\n if (cleanupRequired) visibleError = t('entry.view.cleanupFailed');\n if (failureNotice !== null) visibleError = undefined;\n const provisioning = observation?.provisioning ?? null;\n const paused = observation?.takeover === true;\n const viewerUrl =\n observation?.running === true &&\n (observation?.target === 'container' || observation?.target === 'local')\n ? baseRelative(observation.viewerUrl)\n : undefined;\n const narrowViewer = typeof window !== 'undefined' && window.innerWidth < 700;\n const viewerDesign =\n observation?.target === 'local' && (inputMode === 'trackpad' || narrowViewer)\n ? { width: 390, height: 700 }\n : { width: 1024, height: 768 };\n const identity = `${botSlug ?? ''}:${profileOverride ?? info.browserProfile ?? ''}:${observation?.target ?? ''}`;\n const scope = `${identity}:${viewerUrl ?? ''}`;\n const previous = previousViewer.current;\n if (viewerScope.current !== scope) {\n viewerScope.current = scope;\n viewerRequest.current += 1;\n previousViewer.current = { identity, url: viewerUrl };\n if (interaction) setInteraction(false);\n if ((previous.identity !== identity || previous.url !== undefined) && viewer !== undefined)\n setViewer(undefined);\n }\n if (!paused && interaction) setInteraction(false);\n const viewerTranslate: ViewerTranslate = (key) => t(key);\n const postTakeoverEnable = (): void => {\n if (botSlug === undefined || viewerUrl === undefined) return;\n const request = ++viewerRequest.current;\n const expectedScope = viewerScope.current;\n setBusy(true);\n setFailure(undefined);\n void requestJson<{ takeover: boolean }>(TAKEOVER_ENDPOINT, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ slug: botSlug, active: true }),\n })\n .then((result) => {\n if (\n mounted.current &&\n request === viewerRequest.current &&\n viewerScope.current === expectedScope\n ) {\n store.confirmTakeover(result.takeover);\n setInteraction(result.takeover);\n }\n })\n .catch((cause: unknown) => {\n if (mounted.current && request === viewerRequest.current) setFailure(readFailure(cause));\n })\n .finally(() => {\n if (mounted.current) {\n setBusy(false);\n store.refresh();\n }\n });\n };\n const toggleTakeover = (): void => {\n if (interaction) {\n disableInteraction();\n if (observation?.handoffPending !== true) invoke(TAKEOVER_ENDPOINT, { active: false });\n return;\n }\n if (busy || botSlug === undefined || viewerUrl === undefined) return;\n postTakeoverEnable();\n };\n const botName = info.displayName ?? botSlug ?? '';\n const takeoverTitle =\n interaction && paused\n ? `${t('entry.view.browserTitle', { name: botName })} · ${t('entry.takeover.active')}`\n : t('entry.view.browserTitle', { name: botName });\n const toggleRef = useRef(toggleTakeover);\n toggleRef.current = toggleTakeover;\n const messageResource = useMountedResource(() => {\n const onMessage = (event: MessageEvent): void => {\n const data = event.data as { type?: unknown } | null;\n if (typeof window === 'undefined' || event.origin !== window.location.origin) return;\n if (data === null || typeof data !== 'object' || data.type !== 'bh-takeover-toggle') return;\n const ours = [...document.querySelectorAll('iframe')].some(\n (frame) =>\n frame.contentWindow === event.source &&\n (frame.getAttribute('src') ?? '').includes('/botharness-browser/viewer/'),\n );\n if (!ours) return;\n toggleRef.current();\n };\n window.addEventListener('message', onMessage);\n return () => window.removeEventListener('message', onMessage);\n }, []);\n const takeoverNote = useRef(undefined);\n const wantTakeoverNote = interaction && paused;\n if (takeoverNote.current !== wantTakeoverNote && typeof document !== 'undefined') {\n takeoverNote.current = wantTakeoverNote;\n try {\n for (const frame of Array.from(document.querySelectorAll('iframe'))) {\n if ((frame.getAttribute('src') ?? '').includes('/botharness-browser/viewer/')) {\n frame.contentWindow?.postMessage(\n { type: 'bh-takeover-state', active: wantTakeoverNote },\n window.location.origin,\n );\n }\n }\n } catch {\n void 0;\n }\n }\n const bodyResource = useCallback(\n (node: HTMLDivElement | null): void => {\n interactionResource(node);\n messageResource(node);\n },\n [interactionResource, messageResource],\n );\n\n const invoke = (endpoint: string, body: Record = {}): void => {\n if (busy || botSlug === undefined) return;\n setBusy(true);\n setProfileInvalid(false);\n setFailure(undefined);\n void requestJson<{ ok: boolean; viewerUrl?: string | null; takeover?: boolean }>(endpoint, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ slug: botSlug, ...body }),\n })\n .then((result) => {\n if (typeof result.takeover === 'boolean') store.confirmTakeover(result.takeover);\n if (\n endpoint === OPEN_ENDPOINT &&\n result.viewerUrl !== undefined &&\n result.viewerUrl !== null\n ) {\n setViewer(baseRelative(result.viewerUrl));\n setInteraction(false);\n }\n if (endpoint === STOP_ENDPOINT) {\n setViewer(undefined);\n setInteraction(false);\n }\n })\n .catch((cause: unknown) => setFailure(readFailure(cause)))\n .finally(() => {\n setBusy(false);\n store.refresh();\n });\n };\n\n const onFollow = (next: boolean): void => {\n setFollow(next);\n if (next) {\n setPreview(undefined);\n store.setTab(undefined);\n } else {\n const selected = focused ?? preview;\n setPreview(selected);\n store.setTab(selected);\n }\n };\n\n const onSelectTab = (targetId: string): void => {\n setFollow(false);\n setPreview(targetId);\n store.setTab(targetId);\n };\n\n const onPause = (): void => {\n disableInteraction();\n invoke(TAKEOVER_ENDPOINT, { active: !paused });\n };\n\n const currentProfile = profileOverride ?? info.browserProfile ?? '';\n\n const saveProfile = (name: string): void => {\n const rpc = connectionRpc;\n if (rpc === undefined || botSlug === undefined || busy) return;\n const trimmed = name.trim();\n const next = trimmed === 'default' ? '' : trimmed;\n if (next === currentProfile) {\n setProfileInvalid(false);\n setFailure(undefined);\n return;\n }\n disableInteraction();\n setViewer(undefined);\n setBusy(true);\n setProfileInvalid(false);\n setFailure(undefined);\n void rpc\n .call('/api', 'botharness/browserProfileSet', { args: { slug: botSlug, profile: next } })\n .then((result) => {\n if (!result.ok) {\n setProfileInvalid(true);\n setFailure({ message: result.error?.message ?? t('entry.profile.failed') });\n return;\n }\n const value = result.value as { bot?: { browserProfile?: unknown } };\n setProfileOverride(\n typeof value.bot?.browserProfile === 'string' ? value.bot.browserProfile : '',\n );\n setPreview(undefined);\n store.setTab(undefined);\n infoStore.refresh();\n })\n .catch((cause: unknown) => {\n setProfileInvalid(true);\n setFailure(readFailure(cause));\n })\n .finally(() => {\n setBusy(false);\n store.refresh();\n });\n };\n\n if (!cleanupRequired && observation?.target === 'profile-control')\n return (\n \n );\n\n if (!cleanupRequired && observation?.target === 'daily-control')\n return (\n \n );\n\n if (!cleanupRequired && observation?.target === 'extension')\n return (\n \n );\n\n return (\n
\n \n \n {observation?.running === true ? (\n {t('entry.chip.running')}\n ) : (\n {t('entry.chip.stopped')}\n )}\n {paused ? {t('entry.chip.paused')} : null}\n \n }\n detail={\n
\n
\n {t('entry.profile.label')}\n \n
\n {viewerUrl === undefined ? (\n
\n {t('entry.view.follow')}\n \n
\n ) : null}\n
\n {viewerUrl === undefined ? (\n \n invoke(OPEN_ENDPOINT, follow || preview === undefined ? {} : { tab: preview })\n }\n >\n {t(busy ? 'entry.view.opening' : 'entry.view.open')}\n \n ) : (\n {\n if (viewerUrl !== undefined) setViewer(viewerUrl);\n }}\n >\n \n \n {t('entry.view.fullscreen')}\n \n \n )}\n \n {t(paused ? 'entry.view.resume' : 'entry.view.pause')}\n \n {observation?.running === true || cleanupRequired ? (\n invoke(STOP_ENDPOINT)}\n >\n {t('entry.view.stop')}\n \n ) : null}\n
\n
\n }\n />\n
\n {viewerUrl === undefined ? (\n <>\n {observation?.frame === null || observation?.frame === undefined ? (\n
{t('entry.view.noFrame')}
\n ) : (\n {t('entry.label')}\n )}\n \n ) : (\n \n {failure.message}\n
\n )\n }\n busy={busy}\n stopping={false}\n hideStop\n hideInteractiveToggle\n allowFrameInput\n onStop={() => invoke(STOP_ENDPOINT)}\n interactive={interaction && paused}\n onToggleInteractive={toggleTakeover}\n onDisableInteraction={disableInteraction}\n expanded={viewer === viewerUrl}\n onExpandedChange={(next) => {\n setViewer(next ? viewerUrl : undefined);\n if (!next) disableInteraction();\n }}\n extraControls={\n <>\n {showHeaderTakeover ? (\n setInputMode('trackpad')}\n >\n \n \n {t('entry.view.inputMode.trackpad')}\n \n \n ) : null}\n {showHeaderTakeover ? (\n \n \n \n \n {t(interaction ? 'entry.takeover.stop' : 'entry.takeover.start')}\n \n \n \n ) : null}\n \n }\n />\n )}\n {tabs.length === 0 ? (\n
{t('entry.view.noTabs')}
\n ) : (\n
    \n {orderedTabs.map((tab) => (\n
  • \n
    \n onSelectTab(tab.targetId)}\n >\n \n \n \n \n \n {tab.title === '' ? tab.url : tab.title}\n \n {tab.title === '' ? null : (\n {tab.url}\n )}\n \n \n
    \n
  • \n ))}\n
\n )}\n {provisioning !== null ? : null}\n {failureNotice}\n {visibleError !== undefined ? (\n
\n {visibleError}\n
\n ) : null}\n \n );\n}\n\nfunction createBrowserBody(t: BrowserTranslate): ComponentType {\n return function BrowserBodyView(props: Omit): ReactElement {\n const store = botInfoStore(props.botSlug);\n const info = useSyncExternalStore(store.subscribe, store.getSnapshot);\n if (info.browserAccess === false)\n return {t('entry.access.description')};\n return ;\n };\n}\n\nfunction createBrowserBadge(t: BrowserTranslate): ComponentType {\n return function BrowserBadge({ botSlug }: Omit) {\n const store = botInfoStore(botSlug);\n const info = useSyncExternalStore(store.subscribe, store.getSnapshot);\n if (info.browserAccess !== true) return null;\n return (\n \n );\n };\n}\n\nfunction createBrowserHeader(t: BrowserTranslate): ComponentType {\n return function BrowserHeaderView(props: Omit): ReactElement {\n return ;\n };\n}\n\nexport function apply(ctx: BrowserClientContext): void {\n botInfoStores.clear();\n const t = ctx.locale.bind(LOCALE_NS);\n registerBrowserSettings(ctx, t);\n ctx.effect(() => {\n const sheet = document.createElement('style');\n sheet.dataset.plugin = '@botharness/browser';\n sheet.dataset.pluginCss = '@botharness/browser/client.css';\n sheet.textContent = styles;\n document.head.append(sheet);\n return () => sheet.remove();\n }, 'botharness-browser: styles');\n ctx.effect(() => ctx.locale.register(LOCALE_NS, { zh, en }), 'botharness-browser: dictionaries');\n ctx.inject(['channelSidebar', 'connection'], (sidebarCtx) => {\n const registry = (sidebarCtx as unknown as { channelSidebar?: ChannelSidebarRegistryLike })\n .channelSidebar;\n connectionRpc = (sidebarCtx as unknown as { connection?: { rpc?: ConnectionRpcLike } })\n .connection?.rpc;\n if (registry === undefined) return;\n ctx.effect(\n () =>\n registry.register({\n id: ENTRY_ID,\n icon: 'globe',\n label: t('entry.label'),\n order: 41,\n scope: 'personabot',\n component: createBrowserBody(t),\n headerAction: createBrowserHeader(t),\n badge: createBrowserBadge(t),\n tab: 'screen',\n }),\n 'botharness-browser: channel sidebar entry',\n );\n });\n}\n"],"x_google_ignoreList":[0],"mappings":"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;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;GACF;GACA,mBAAmB,CACjB,CACE,QACA,EACE,GAAG,sHACL,CACF,GACA,CACE,QACA,EACE,GAAG,yGACL,CACF,CACF;GACA,OAAO,CACL,CACE,YACA,EACE,QAAQ,oCACV,CACF,GACA,CACE,QACA,EACE,GAAG,6GACL,CACF,CACF;GACA,cAAc;IACZ,CACE,QACA,EACE,GAAG,6GACL,CACF;IACA,CACE,QACA,EACE,GAAG,WACL,CACF;IACA,CACE,QACA,EACE,GAAG,WACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;GACF;GACA,OAAO;IACL,CACE,QACA,EACE,GAAG,4CACL,CACF;IACA,CACE,QACA,EACE,GAAG,8BACL,CACF;IACA,CACE,QACA,EACE,GAAG,6BACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;GACF;GACA,cAAc;IACZ,CACE,QACA,EACE,GAAG,WACL,CACF;IACA,CACE,QACA,EACE,GAAG,WACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;GACF;GACA,UAAU,CACR,CACE,QACA,EACE,GAAG,0UACL,CACF,GACA,CACE,UACA;IACE,IAAI;IACJ,IAAI;IACJ,GAAG;GACL,CACF,CACF;GACA,SAAS;IACP,CACE,QACA;KACE,OAAO;KACP,QAAQ;KACR,GAAG;KACH,GAAG;KACH,IAAI;IACN,CACF;IACA,CACE,QACA;KACE,IAAI;KACJ,IAAI;KACJ,IAAI;KACJ,IAAI;IACN,CACF;IACA,CACE,QACA;KACE,IAAI;KACJ,IAAI;KACJ,IAAI;KACJ,IAAI;IACN,CACF;GACF;GACA,OAAO;IACL,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;IACA,CACE,QACA,EACE,GAAG,kDACL,CACF;I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"} \ No newline at end of file +{"version":3,"file":"client.js","names":["createElement","stylex","space","x1","x2","x3","x4","x5","x6","text","metaSize","metaLine","bodySize","bodyLine","titleSize","titleLine","regular","strong","radius","xs","sm","md","lg","panel","round","border","hairline","focus","size","inlineIcon","icon","row","nav","dialog","small","bodyMax","medium","wide","color","fg","muted","subtle","divider","borderStrong","hover","selected","navSelected","accent","onAccent","danger","onDanger","dangerEdge","dangerSoft","warning","warningEdge","warningSoft","success","surface","elevated","base","well","accentTint","ReactElement","ReactNode","stylex","ChannelSidebarIcon","border","color","radius","size","space","text","EmptyState","title","description","action","status","undefined","PanelEmptyState","icon","children","useRef","useCallback","Button","Pill","IconFullscreenOutlineRegular","useState","StateDot","useRef","useCallback","Fragment","ReactElement","ReactNode","stylex","color","space","text","styles","note","kogj98","kGuDYH","kLWn49","kHjlTd","$$css","inset","k8WAf4","kg3NbH","muted","kMwMTN","subtle","danger","success","warning","NoteTone","Note","tone","children","props","useState","ReactElement","ReactNode","stylex","Button","Note","color","radius","space","text","MissingPackagesAccess","MissingPackagesLabels","missing","manual","install","copy","copied","formatProgressMiB","bytes","toFixed","ProgressLine","percent","label","value","Math","max","min","MissingPackages","command","access","installing","busy","onInstall","labels","children","setCopied","navigator","clipboard","writeText","then","undefined","useState","useRef","useCallback","useRef","useId","useState","useAnchoredPosition","Input","IconChevronDownOutlineRegular","createPortal","MenuSurface","IconPlusOutlineRegular","NativeMenu","Menu","ComponentProps","createPortal","stylex","useMountedResource","border","space","MenuPoint","x","y","pointerMenuPosition","point","width","height","viewport","top","margin","Number","parseFloat","x4","Math","max","min","PointerMenuProps","Omit","container","Element","align","PointerMenu","document","body","props","mount","HTMLSpanElement","node","menu","querySelector","HTMLElement","originalMaxWidth","getComputedStyle","maxWidth","originalMinWidth","minWidth","place","scale","getBoundingClientRect","cssZoom","currentCSSZoom","undefined","scaleX","scaleY","root","documentElement","clearance","hasAttribute","getPropertyValue","availableWidth","innerWidth","style","Infinity","maxHeight","innerHeight","box","desired","left","observer","ResizeObserver","observe","window","addEventListener","disconnect","removeEventListener","className","ButtonHTMLAttributes","InputHTMLAttributes","ReactElement","ReactNode","stylex","border","color","radius","size","space","text","pillStyles","pill","k1xSpc","kGNEyG","kOIVth","ks0D6T","kZKoxP","kg3NbH","kMzoRj","kaIpWk","kWkggS","kMwMTN","kMv6JI","kGuDYH","kLWn49","khDVqt","kkrTdU","kSiTet","kI3sdo","kInvED","$$css","PillButton","children","rest","Omit","HTMLButtonElement","PillFileButton","input","HTMLInputElement","PointerMenu","MenuPoint","useMountedResource","useRef","useState","ReactElement","ReactNode","stylex","IconChevronDownOutlineRegular","pillStyles","color","space","SelectOption","value","Value","label","SelectProps","options","onChange","disabled","align","autoFocus","reselect","Select","open","setOpen","point","setPoint","trigger","HTMLButtonElement","active","mount","node","current","place","rect","getBoundingClientRect","scale","offsetHeight","height","next","x","right","left","y","bottom","Number","parseFloat","x2","previous","resize","ResizeObserver","undefined","observe","document","documentElement","observer","MutationObserver","attributes","attributeFilter","window","addEventListener","disconnect","removeEventListener","close","button","menu","activeElement","closest","queueMicrotask","focused","isConnected","body","contains","focus","preventScroll","find","option","event","stopPropagation","props","pill","map","id","useId","ReactElement","ReactNode","Ref","stylex","border","color","space","text","NARROW","COMPACT","SettingsRows","children","rootRef","HTMLDivElement","SettingsSectionProps","title","description","SettingsSection","id","undefined","SettingsRowProps","control","data","Readonly","Record","SettingsRow","titleId","descriptionId","SettingsValue","useState","useMemo","useSyncExternalStore","useState","useRef","useCallback","Tag","Button","Input","useState","useRef","useCallback","Tag","Button","useState","useRef","useCallback","Tag","Button","Input","useState","useRef","useSyncExternalStore","Tooltip","useId","useCallback","Tag","Switch","Button","IconFullscreenOutlineRegular"],"sources":["../../../node_modules/.pnpm/@stylexjs+stylex@0.19.1/node_modules/@stylexjs/stylex/lib/es/stylex.mjs","../../client/src/client/channel-sidebar-icon.tsx","../../client/src/client/ds/tokens.stylex.ts","../../client/src/client/ds/empty-state.tsx","../../client/src/client/mounted-resource.ts","../../client/src/client/remote-viewer/tokens.ts","../../client/src/client/remote-viewer/viewer-state.ts","../../client/src/client/remote-viewer/frame-liveness.ts","../../client/src/client/remote-viewer/index.tsx","../../client/src/client/sidebar-card.tsx","../src/client/locale.ts","../src/failure-kinds.ts","../../client/src/client/ds/note.tsx","../../client/src/client/missing-packages.tsx","../src/client/browser-failure.tsx","../../client/src/client/combobox.tsx","../src/client/profile-combobox.tsx","../../client/src/client/appearance-scope.ts","../../client/src/client/appearance-primitives.tsx","../../client/src/client/ds/pointer-menu.tsx","../../client/src/client/ds/pill-button.tsx","../../client/src/client/ds/select.tsx","../../client/src/client/ds/settings-row.tsx","../src/client/settings.tsx","../src/client/profile-browser.tsx","../src/client/daily-browser.tsx","../src/client/borrowed-browser.tsx","../../client/src/client/ds/stylex-css.ts","../src/client/styles.ts","../src/client/access-power-icon.tsx","../src/client/viewer-icons.tsx","../src/client/index.tsx"],"sourcesContent":["var styleq = {};\n\nvar hasRequiredStyleq;\n\nfunction requireStyleq () {\n\tif (hasRequiredStyleq) return styleq;\n\thasRequiredStyleq = 1;\n\n\tObject.defineProperty(styleq, \"__esModule\", {\n\t value: true\n\t});\n\tstyleq.styleq = void 0;\n\tvar cache = new WeakMap();\n\tvar compiledKey = '$$css';\n\tfunction createStyleq(options) {\n\t var disableCache;\n\t var disableMix;\n\t var transform;\n\t if (options != null) {\n\t disableCache = options.disableCache === true;\n\t disableMix = options.disableMix === true;\n\t transform = options.transform;\n\t }\n\t return function styleq() {\n\t var definedProperties = [];\n\t var className = '';\n\t var inlineStyle = null;\n\t var debugString = '';\n\t var nextCache = disableCache ? null : cache;\n\t var styles = new Array(arguments.length);\n\t for (var i = 0; i < arguments.length; i++) {\n\t styles[i] = arguments[i];\n\t }\n\t while (styles.length > 0) {\n\t var possibleStyle = styles.pop();\n\t if (possibleStyle == null || possibleStyle === false) {\n\t continue;\n\t }\n\t if (Array.isArray(possibleStyle)) {\n\t for (var _i = 0; _i < possibleStyle.length; _i++) {\n\t styles.push(possibleStyle[_i]);\n\t }\n\t continue;\n\t }\n\t var style = transform != null ? transform(possibleStyle) : possibleStyle;\n\t if (style.$$css != null) {\n\t var classNameChunk = '';\n\t if (nextCache != null && nextCache.has(style)) {\n\t var cacheEntry = nextCache.get(style);\n\t if (cacheEntry != null) {\n\t classNameChunk = cacheEntry[0];\n\t debugString = cacheEntry[2];\n\t definedProperties.push.apply(definedProperties, cacheEntry[1]);\n\t nextCache = cacheEntry[3];\n\t }\n\t } else {\n\t var definedPropertiesChunk = [];\n\t for (var prop in style) {\n\t var value = style[prop];\n\t if (prop === compiledKey) {\n\t var compiledKeyValue = style[prop];\n\t if (compiledKeyValue !== true) {\n\t debugString = debugString ? compiledKeyValue + '; ' + debugString : compiledKeyValue;\n\t }\n\t continue;\n\t }\n\t if (typeof value === 'string' || value === null) {\n\t if (!definedProperties.includes(prop)) {\n\t definedProperties.push(prop);\n\t if (nextCache != null) {\n\t definedPropertiesChunk.push(prop);\n\t }\n\t if (typeof value === 'string') {\n\t classNameChunk += classNameChunk ? ' ' + value : value;\n\t }\n\t }\n\t } else {\n\t console.error(\"styleq: \".concat(prop, \" typeof \").concat(String(value), \" is not \\\"string\\\" or \\\"null\\\".\"));\n\t }\n\t }\n\t if (nextCache != null) {\n\t var weakMap = new WeakMap();\n\t nextCache.set(style, [classNameChunk, definedPropertiesChunk, debugString, weakMap]);\n\t nextCache = weakMap;\n\t }\n\t }\n\t if (classNameChunk) {\n\t className = className ? classNameChunk + ' ' + className : classNameChunk;\n\t }\n\t } else {\n\t if (disableMix) {\n\t if (inlineStyle == null) {\n\t inlineStyle = {};\n\t }\n\t inlineStyle = Object.assign({}, style, inlineStyle);\n\t } else {\n\t var subStyle = null;\n\t for (var _prop in style) {\n\t var _value = style[_prop];\n\t if (_value !== undefined) {\n\t if (!definedProperties.includes(_prop)) {\n\t if (_value != null) {\n\t if (inlineStyle == null) {\n\t inlineStyle = {};\n\t }\n\t if (subStyle == null) {\n\t subStyle = {};\n\t }\n\t subStyle[_prop] = _value;\n\t }\n\t definedProperties.push(_prop);\n\t nextCache = null;\n\t }\n\t }\n\t }\n\t if (subStyle != null) {\n\t inlineStyle = Object.assign(subStyle, inlineStyle);\n\t }\n\t }\n\t }\n\t }\n\t var styleProps = [className, inlineStyle, debugString];\n\t return styleProps;\n\t };\n\t}\n\tvar styleq$1 = styleq.styleq = createStyleq();\n\tstyleq$1.factory = createStyleq;\n\treturn styleq;\n}\n\nvar styleqExports = /*@__PURE__*/ requireStyleq();\n\nconst errorForFn = name => new Error(`Unexpected 'stylex.${name}' call at runtime. Styles must be compiled by '@stylexjs/babel-plugin'.`);\nconst errorForType = key => errorForFn(`types.${key}`);\nconst create = function stylexCreate(_styles) {\n throw errorForFn('create');\n};\nconst createTheme = (_baseTokens, _overrides) => {\n throw errorForFn('createTheme');\n};\nconst defineConsts = function stylexDefineConsts(_styles) {\n throw errorForFn('defineConsts');\n};\nconst defineVars = function stylexDefineVars(_styles) {\n throw errorForFn('defineVars');\n};\nconst unstable_conditional = function stylexConditional(_value) {\n throw errorForFn('unstable_conditional');\n};\nconst unstable_defineVarsNested = function stylexDefineVarsNested(_styles) {\n throw errorForFn('unstable_defineVarsNested');\n};\nconst unstable_defineConstsNested = function stylexDefineConstsNested(_styles) {\n throw errorForFn('unstable_defineConstsNested');\n};\nconst unstable_createThemeNested = (_baseTokens, _overrides) => {\n throw errorForFn('unstable_createThemeNested');\n};\nconst defineMarker = () => {\n throw errorForFn('defineMarker');\n};\nconst firstThatWorks = (..._styles) => {\n throw errorForFn('firstThatWorks');\n};\nconst keyframes = _keyframes => {\n throw errorForFn('keyframes');\n};\nconst positionTry = _positionTry => {\n throw errorForFn('positionTry');\n};\nfunction props(...styles) {\n const [className, style, dataStyleSrc] = styleqExports.styleq(styles);\n const result = {};\n if (className != null && className !== '') {\n result.className = className;\n }\n if (style != null && Object.keys(style).length > 0) {\n result.style = style;\n }\n if (dataStyleSrc != null && dataStyleSrc !== '') {\n result['data-style-src'] = dataStyleSrc;\n }\n return result;\n}\nconst toKebabCase = str => str.replace(/([A-Z])/g, '-$1').toLowerCase();\nfunction attrs(...styles) {\n const {\n className,\n style,\n 'data-style-src': dataStyleSrc\n } = props.apply(this, styles);\n const result = {};\n if (className != null) {\n result.class = className;\n }\n if (style != null) {\n result.style = Object.entries(style).map(([key, value]) => `${toKebabCase(key)}:${value}`).join(';');\n }\n if (dataStyleSrc != null) {\n result['data-style-src'] = dataStyleSrc;\n }\n return result;\n}\nconst viewTransitionClass = _viewTransitionClass => {\n throw errorForFn('viewTransitionClass');\n};\nconst defaultMarker = () => {\n throw errorForFn('defaultMarker');\n};\nconst when = {\n ancestor: _p => {\n throw errorForFn('when.ancestor');\n },\n descendant: _p => {\n throw errorForFn('when.descendant');\n },\n siblingBefore: _p => {\n throw errorForFn('when.siblingBefore');\n },\n siblingAfter: _p => {\n throw errorForFn('when.siblingAfter');\n },\n anySibling: _p => {\n throw errorForFn('when.anySibling');\n }\n};\nconst env = Object.freeze({});\nconst types = {\n angle: _v => {\n throw errorForType('angle');\n },\n color: _v => {\n throw errorForType('color');\n },\n url: _v => {\n throw errorForType('url');\n },\n image: _v => {\n throw errorForType('image');\n },\n integer: _v => {\n throw errorForType('integer');\n },\n lengthPercentage: _v => {\n throw errorForType('lengthPercentage');\n },\n length: _v => {\n throw errorForType('length');\n },\n percentage: _v => {\n throw errorForType('percentage');\n },\n number: _v => {\n throw errorForType('number');\n },\n resolution: _v => {\n throw errorForType('resolution');\n },\n time: _v => {\n throw errorForType('time');\n },\n transformFunction: _v => {\n throw errorForType('transformFunction');\n },\n transformList: _v => {\n throw errorForType('transformList');\n }\n};\nconst legacyMerge = /*@__PURE__*/ function () {\n function _legacyMerge(...styles) {\n const [className] = styleqExports.styleq(styles);\n return className;\n }\n _legacyMerge.create = create;\n _legacyMerge.createTheme = createTheme;\n _legacyMerge.defineConsts = defineConsts;\n _legacyMerge.defineMarker = defineMarker;\n _legacyMerge.defineVars = defineVars;\n _legacyMerge.defaultMarker = defaultMarker;\n _legacyMerge.firstThatWorks = firstThatWorks;\n _legacyMerge.keyframes = keyframes;\n _legacyMerge.positionTry = positionTry;\n _legacyMerge.props = props;\n _legacyMerge.attrs = attrs;\n _legacyMerge.types = types;\n _legacyMerge.when = when;\n _legacyMerge.viewTransitionClass = viewTransitionClass;\n _legacyMerge.env = env;\n _legacyMerge.unstable_conditional = unstable_conditional;\n _legacyMerge.unstable_defineVarsNested = unstable_defineVarsNested;\n _legacyMerge.unstable_defineConstsNested = unstable_defineConstsNested;\n _legacyMerge.unstable_createThemeNested = unstable_createThemeNested;\n return _legacyMerge;\n}();\n\nexport { attrs, create, createTheme, defaultMarker, defineConsts, defineMarker, defineVars, env, firstThatWorks, keyframes, legacyMerge, positionTry, props, types, unstable_conditional, unstable_createThemeNested, unstable_defineConstsNested, unstable_defineVarsNested, viewTransitionClass, when };\n","/**\n * Vendored Channel sidebar glyphs from lucide-react@1.46.0 (ISC, ADR-0032).\n *\n * Source: the matching lucide `dist/esm/icons/*.mjs` glyph data. Vendored at the\n * stock 2-unit stroke without adding a `lucide-react` runtime dependency.\n *\n * ISC License\n *\n * Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2022 as part of Feather (MIT).\n * All other copyright (c) for Lucide are held by Lucide Contributors 2022.\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\nimport { createElement, type ReactElement } from 'react';\n\nconst glyphs: Record][]> = {\n 'chevron-right': [['path', { d: 'm9 18 6-6-6-6' }]],\n house: [['path', { d: 'm3 10 9-7 9 7v10a1 1 0 0 1-1 1h-5v-7H9v7H4a1 1 0 0 1-1-1z' }]],\n hash: [\n ['line', { x1: '4', x2: '20', y1: '9', y2: '9' }],\n ['line', { x1: '4', x2: '20', y1: '15', y2: '15' }],\n ['line', { x1: '10', x2: '8', y1: '3', y2: '21' }],\n ['line', { x1: '16', x2: '14', y1: '3', y2: '21' }],\n ],\n 'messages-circle': [\n [\n 'path',\n {\n d: 'M19.95 10.05a7 7 0 011.412 7.872 1 1 0 00-.058.787l.675 2.089a1 1 0 01-1.236 1.168l-2.155-.631a1 1 0 00-.745.06 7 7 0 01-7.793-1.445',\n },\n ],\n [\n 'path',\n {\n d: 'M2.696 12.708a1 1 0 00-.058-.785 7 7 0 113.518 3.473 1 1 0 00-.744-.061l-2.155.63a1 1 0 01-1.236-1.167z',\n },\n ],\n ],\n 'text-quote': [\n ['path', { d: 'M17 5H3' }],\n ['path', { d: 'M21 12H8' }],\n ['path', { d: 'M21 19H8' }],\n ['path', { d: 'M3 12v7' }],\n ],\n brain: [\n ['path', { d: 'M12 18V5' }],\n ['path', { d: 'M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4' }],\n ['path', { d: 'M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5' }],\n ['path', { d: 'M17.997 5.125a4 4 0 0 1 2.526 5.77' }],\n ['path', { d: 'M18 18a4 4 0 0 0 2-7.464' }],\n ['path', { d: 'M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517' }],\n ['path', { d: 'M6 18a4 4 0 0 1-2-7.464' }],\n ['path', { d: 'M6.003 5.125a4 4 0 0 0-2.526 5.77' }],\n ],\n file: [\n [\n 'path',\n {\n d: 'M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5' }],\n ],\n terminal: [\n ['path', { d: 'M12 19h8' }],\n ['path', { d: 'm4 17 6-6-6-6' }],\n ],\n archive: [\n ['rect', { width: '20', height: '5', x: '2', y: '3', rx: '1' }],\n ['path', { d: 'M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8' }],\n ['path', { d: 'M10 12h4' }],\n ],\n 'archive-restore': [\n ['rect', { width: '20', height: '5', x: '2', y: '3', rx: '1' }],\n ['path', { d: 'M4 8v11a2 2 0 0 0 2 2h2' }],\n ['path', { d: 'M20 8v11a2 2 0 0 1-2 2h-2' }],\n ['path', { d: 'm9 15 3-3 3 3' }],\n ['path', { d: 'M12 12v9' }],\n ],\n 'alarm-clock': [\n ['circle', { cx: '12', cy: '13', r: '8' }],\n ['path', { d: 'M12 9v4l2 2' }],\n ['path', { d: 'M5 3 2 6' }],\n ['path', { d: 'm22 6-3-3' }],\n ['path', { d: 'M6.38 18.7 4 21' }],\n ['path', { d: 'M17.64 18.67 20 21' }],\n ],\n 'bell-ring': [\n ['path', { d: 'M10.268 21a2 2 0 0 0 3.464 0' }],\n ['path', { d: 'M22 8c0-2.3-.8-4.3-2-6' }],\n [\n 'path',\n {\n d: 'M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326',\n },\n ],\n ['path', { d: 'M4 2C2.8 3.7 2 5.7 2 8' }],\n ],\n bell: [\n ['path', { d: 'M10.268 21a2 2 0 0 0 3.464 0' }],\n [\n 'path',\n {\n d: 'M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326',\n },\n ],\n ],\n 'bell-off': [\n ['path', { d: 'M10.268 21a2 2 0 0 0 3.464 0' }],\n ['path', { d: 'M17 17H4a1 1 0 0 1-.74-1.673C4.59 13.956 6 12.499 6 8a6 6 0 0 1 .258-1.742' }],\n ['path', { d: 'm2 2 20 20' }],\n ['path', { d: 'M8.668 3.01A6 6 0 0 1 18 8c0 2.687.77 4.653 1.707 6.05' }],\n ],\n cpu: [\n ['path', { d: 'M12 20v2' }],\n ['path', { d: 'M12 2v2' }],\n ['path', { d: 'M17 20v2' }],\n ['path', { d: 'M17 2v2' }],\n ['path', { d: 'M2 12h2' }],\n ['path', { d: 'M2 17h2' }],\n ['path', { d: 'M2 7h2' }],\n ['path', { d: 'M20 12h2' }],\n ['path', { d: 'M20 17h2' }],\n ['path', { d: 'M20 7h2' }],\n ['path', { d: 'M7 20v2' }],\n ['path', { d: 'M7 2v2' }],\n ['rect', { x: '4', y: '4', width: '16', height: '16', rx: '2' }],\n ['rect', { x: '8', y: '8', width: '8', height: '8', rx: '1' }],\n ],\n 'id-card': [\n ['path', { d: 'M13 19a4 4 0 00-8 0' }],\n ['path', { d: 'M16 10h2' }],\n ['path', { d: 'M16 14h2' }],\n ['circle', { cx: '9', cy: '12', r: '3' }],\n ['rect', { x: '2', y: '5', width: '20', height: '14', rx: '2' }],\n ],\n plug: [\n ['path', { d: 'M12 22v-5' }],\n ['path', { d: 'M15 8V2' }],\n [\n 'path',\n {\n d: 'M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z',\n },\n ],\n ['path', { d: 'M9 8V2' }],\n ],\n ruler: [\n [\n 'path',\n {\n d: 'M21.3 15.3a2.4 2.4 0 0 1 0 3.4l-2.6 2.6a2.4 2.4 0 0 1-3.4 0L2.7 8.7a2.41 2.41 0 0 1 0-3.4l2.6-2.6a2.41 2.41 0 0 1 3.4 0Z',\n },\n ],\n ['path', { d: 'm14.5 12.5 2-2' }],\n ['path', { d: 'm11.5 9.5 2-2' }],\n ['path', { d: 'm8.5 6.5 2-2' }],\n ['path', { d: 'm17.5 15.5 2-2' }],\n ],\n compass: [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n [\n 'path',\n {\n d: 'm16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z',\n },\n ],\n ],\n gauge: [\n ['path', { d: 'm12 14 4-4' }],\n ['path', { d: 'M3.34 19a10 10 0 1 1 17.32 0' }],\n ],\n 'user-check': [\n ['path', { d: 'm16 11 2 2 4-4' }],\n ['path', { d: 'M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2' }],\n ['circle', { cx: '9', cy: '7', r: '4' }],\n ],\n 'shield-check': [\n [\n 'path',\n {\n d: 'M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z',\n },\n ],\n ['path', { d: 'm9 12 2 2 4-4' }],\n ],\n plus: [\n ['path', { d: 'M5 12h14' }],\n ['path', { d: 'M12 5v14' }],\n ],\n user: [\n ['path', { d: 'M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2' }],\n ['circle', { cx: '12', cy: '7', r: '4' }],\n ],\n bot: [\n ['path', { d: 'M12 8V4H8' }],\n ['rect', { width: '16', height: '12', x: '4', y: '8', rx: '2' }],\n ['path', { d: 'M2 14h2' }],\n ['path', { d: 'M20 14h2' }],\n ['path', { d: 'M15 13v2' }],\n ['path', { d: 'M9 13v2' }],\n ],\n 'list-checks': [\n ['path', { d: 'M13 5h8' }],\n ['path', { d: 'M13 12h8' }],\n ['path', { d: 'M13 19h8' }],\n ['path', { d: 'm3 17 2 2 4-4' }],\n ['path', { d: 'm3 7 2 2 4-4' }],\n ],\n palette: [\n [\n 'path',\n {\n d: 'M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z',\n },\n ],\n ['circle', { cx: '13.5', cy: '6.5', r: '.5', fill: 'currentColor' }],\n ['circle', { cx: '17.5', cy: '10.5', r: '.5', fill: 'currentColor' }],\n ['circle', { cx: '6.5', cy: '12.5', r: '.5', fill: 'currentColor' }],\n ['circle', { cx: '8.5', cy: '7.5', r: '.5', fill: 'currentColor' }],\n ],\n 'image-up': [\n [\n 'path',\n {\n d: 'M10.3 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v10l-3.1-3.1a2 2 0 0 0-2.814.014L6 21',\n },\n ],\n ['path', { d: 'm14 19.5 3-3 3 3' }],\n ['path', { d: 'M17 22v-5.5' }],\n ['circle', { cx: '9', cy: '9', r: '2' }],\n ],\n lock: [\n ['rect', { width: '18', height: '11', x: '3', y: '11', rx: '2', ry: '2' }],\n ['path', { d: 'M7 11V7a5 5 0 0 1 10 0v4' }],\n ],\n play: [\n [\n 'path',\n {\n d: 'M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z',\n },\n ],\n ],\n 'lock-open': [\n ['rect', { width: '18', height: '11', x: '3', y: '11', rx: '2', ry: '2' }],\n ['path', { d: 'M7 11V7a5 5 0 0 1 9.9-1' }],\n ],\n eye: [\n [\n 'path',\n {\n d: 'M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0',\n },\n ],\n ['circle', { cx: '12', cy: '12', r: '3' }],\n ],\n 'eye-off': [\n [\n 'path',\n {\n d: 'M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49',\n },\n ],\n ['path', { d: 'M14.084 14.158a3 3 0 0 1-4.242-4.242' }],\n [\n 'path',\n {\n d: 'M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143',\n },\n ],\n ['path', { d: 'm2 2 20 20' }],\n ],\n files: [\n [\n 'path',\n {\n d: 'M15 2h-4a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8',\n },\n ],\n [\n 'path',\n {\n d: 'M16.706 2.706A2.4 2.4 0 0 0 15 2v5a1 1 0 0 0 1 1h5a2.4 2.4 0 0 0-.706-1.706z',\n },\n ],\n [\n 'path',\n {\n d: 'M5 7a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 1.732-1',\n },\n ],\n ],\n 'git-branch': [\n [\n 'path',\n {\n d: 'M15 6a9 9 0 0 0-9 9V3',\n },\n ],\n [\n 'circle',\n {\n cx: '18',\n cy: '6',\n r: '3',\n },\n ],\n [\n 'circle',\n {\n cx: '6',\n cy: '18',\n r: '3',\n },\n ],\n ],\n 'messages-square': [\n [\n 'path',\n {\n d: 'M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z',\n },\n ],\n [\n 'path',\n {\n d: 'M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1',\n },\n ],\n ],\n inbox: [\n [\n 'polyline',\n {\n points: '22 12 16 12 14 15 10 15 8 12 2 12',\n },\n ],\n [\n 'path',\n {\n d: 'M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z',\n },\n ],\n ],\n 'folder-key': [\n [\n 'path',\n {\n d: 'M13 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v1.36',\n },\n ],\n [\n 'path',\n {\n d: 'M19 12v6',\n },\n ],\n [\n 'path',\n {\n d: 'M19 14h2',\n },\n ],\n [\n 'circle',\n {\n cx: '19',\n cy: '20',\n r: '2',\n },\n ],\n ],\n users: [\n [\n 'path',\n {\n d: 'M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2',\n },\n ],\n [\n 'path',\n {\n d: 'M16 3.128a4 4 0 0 1 0 7.744',\n },\n ],\n [\n 'path',\n {\n d: 'M22 21v-2a4 4 0 0 0-3-3.87',\n },\n ],\n [\n 'circle',\n {\n cx: '9',\n cy: '7',\n r: '4',\n },\n ],\n ],\n 'settings-2': [\n [\n 'path',\n {\n d: 'M14 17H5',\n },\n ],\n [\n 'path',\n {\n d: 'M19 7h-9',\n },\n ],\n [\n 'circle',\n {\n cx: '17',\n cy: '17',\n r: '3',\n },\n ],\n [\n 'circle',\n {\n cx: '7',\n cy: '7',\n r: '3',\n },\n ],\n ],\n settings: [\n [\n 'path',\n {\n d: 'M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915',\n },\n ],\n [\n 'circle',\n {\n cx: '12',\n cy: '12',\n r: '3',\n },\n ],\n ],\n monitor: [\n [\n 'rect',\n {\n width: '20',\n height: '14',\n x: '2',\n y: '3',\n rx: '2',\n },\n ],\n [\n 'line',\n {\n x1: '8',\n x2: '16',\n y1: '21',\n y2: '21',\n },\n ],\n [\n 'line',\n {\n x1: '12',\n x2: '12',\n y1: '17',\n y2: '21',\n },\n ],\n ],\n globe: [\n [\n 'circle',\n {\n cx: '12',\n cy: '12',\n r: '10',\n },\n ],\n [\n 'path',\n {\n d: 'M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20',\n },\n ],\n [\n 'path',\n {\n d: 'M2 12h20',\n },\n ],\n ],\n 'panels-top-left': [\n [\n 'rect',\n {\n width: '18',\n height: '18',\n x: '3',\n y: '3',\n rx: '2',\n },\n ],\n [\n 'path',\n {\n d: 'M3 9h18',\n },\n ],\n [\n 'path',\n {\n d: 'M9 21V9',\n },\n ],\n ],\n 'grip-vertical': [\n ['circle', { cx: '9', cy: '12', r: '1' }],\n ['circle', { cx: '9', cy: '5', r: '1' }],\n ['circle', { cx: '9', cy: '19', r: '1' }],\n ['circle', { cx: '15', cy: '12', r: '1' }],\n ['circle', { cx: '15', cy: '5', r: '1' }],\n ['circle', { cx: '15', cy: '19', r: '1' }],\n ],\n x: [\n ['path', { d: 'M18 6 6 18' }],\n ['path', { d: 'm6 6 12 12' }],\n ],\n check: [\n [\n 'path',\n {\n d: 'M20 6 9 17l-5-5',\n },\n ],\n ],\n};\n\nexport function ChannelSidebarIcon({\n name = 'panels-top-left',\n size = 16,\n}: {\n name?: string | undefined;\n size?: number | string;\n}): ReactElement {\n const nodes = Object.hasOwn(glyphs, name) ? glyphs[name]! : glyphs['panels-top-left']!;\n return (\n \n {nodes.map(([tag, attributes], index) => createElement(tag, { ...attributes, key: index }))}\n \n );\n}\n","import * as stylex from '@stylexjs/stylex';\n\nexport const space = stylex.defineConsts({\n x1: '2px',\n x2: '4px',\n x3: '8px',\n x4: '12px',\n x5: '16px',\n x6: '24px',\n});\n\nexport const text = stylex.defineConsts({\n metaSize: '12px',\n metaLine: '16px',\n bodySize: '13px',\n bodyLine: '20px',\n titleSize: '14px',\n titleLine: '20px',\n regular: '400',\n strong: '500',\n});\n\nexport const radius = stylex.defineConsts({\n xs: 'var(--dsw-radius-xs, 4px)',\n sm: 'var(--dsw-radius-sm, 8px)',\n md: 'var(--dsw-radius-md, 12px)',\n lg: 'var(--dsw-radius-lg, 16px)',\n panel: 'var(--dsw-radius-panel)',\n round: '50%',\n});\n\nexport const border = stylex.defineConsts({\n hairline: '1px',\n focus: 'var(--dsw-focus-ring-width, 2px)',\n});\n\nexport const size = stylex.defineConsts({\n inlineIcon: '26px',\n icon: '28px',\n row: '32px',\n nav: '40px',\n});\n\nexport const dialog = stylex.defineConsts({\n small: 'min(440px, calc(100vw - 32px))',\n bodyMax: 'min(60vh, 520px)',\n medium: 'min(760px, calc(100vw - 32px))',\n wide: 'min(1060px, calc(100vw - 32px))',\n});\n\nexport const color = stylex.defineConsts({\n fg: 'var(--dsw-alias-label-primary)',\n muted: 'var(--dsw-alias-label-secondary)',\n subtle: 'var(--dsw-alias-label-tertiary)',\n divider: 'var(--dsw-alias-border-l1)',\n border: 'var(--dsw-alias-border-l2)',\n borderStrong: 'var(--dsw-alias-border-l3)',\n hover: 'var(--dsw-alias-interactive-bg-hover)',\n selected: 'var(--dsw-alias-interactive-bg-active)',\n navSelected: 'var(--dsw-specific-sidebar-nav-item-active)',\n accent: 'var(--dsw-alias-state-business-primary)',\n onAccent: 'var(--dsw-alias-label-primary-foreground)',\n danger: 'var(--dsw-alias-state-error-primary)',\n onDanger: 'var(--dsw-alias-label-primary-foreground)',\n dangerEdge: 'var(--dsw-alias-state-error-secondary)',\n dangerSoft: 'var(--dsw-alias-interactive-bg-hover-danger)',\n warning: 'var(--dsw-alias-state-warn-primary)',\n warningEdge: 'var(--dsw-alias-state-warn-secondary)',\n warningSoft: 'var(--dsw-alias-state-warn-tertiary)',\n success: 'var(--dsw-alias-state-success-primary)',\n surface: 'var(--dsw-alias-bg-module-platform)',\n elevated: 'var(--dsw-alias-button-elevated-fill)',\n base: 'var(--dsw-alias-bg-base)',\n well: 'var(--dsw-alias-bg-base)',\n accentTint: 'var(--dsw-alias-state-business-tertiary)',\n});\n","import type { ReactElement, ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { ChannelSidebarIcon } from '../channel-sidebar-icon.js';\nimport { border, color, radius, size, space, text } from './tokens.stylex.js';\n\nconst styles = stylex.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: space.x3,\n marginBlock: space.x4,\n paddingBlock: space.x6,\n paddingInline: space.x5,\n borderWidth: border.hairline,\n borderStyle: 'dashed',\n borderColor: color.border,\n borderRadius: radius.md,\n textAlign: 'center',\n },\n panel: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n flexGrow: 1,\n gap: space.x4,\n padding: space.x5,\n boxSizing: 'border-box',\n textAlign: 'center',\n color: color.muted,\n },\n icon: { width: size.nav, height: size.nav, flexShrink: 0, color: color.subtle },\n title: {\n margin: 0,\n color: color.fg,\n fontSize: text.bodySize,\n lineHeight: text.bodyLine,\n fontWeight: text.strong,\n },\n description: {\n margin: 0,\n maxWidth: '360px',\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n },\n});\n\nexport function EmptyState({\n title,\n description,\n action,\n status = false,\n}: {\n readonly title: ReactNode;\n readonly description?: ReactNode;\n readonly action?: ReactNode;\n readonly status?: boolean;\n}): ReactElement {\n return (\n
\n

{title}

\n {description === undefined ? null : (\n

{description}

\n )}\n {action}\n
\n );\n}\n\nexport function PanelEmptyState({\n icon,\n children,\n action,\n}: {\n readonly icon?: string | undefined;\n readonly children: ReactNode;\n readonly action?: ReactNode;\n}): ReactElement {\n return (\n
\n \n \n \n

{children}

\n {action === undefined ? null :
{action}
}\n
\n );\n}\n","import { useCallback, useRef, type DependencyList, type RefCallback } from 'react';\n\nexport function useMountedResource(\n start: (node: T) => void | (() => void),\n dependencies: DependencyList,\n): RefCallback {\n const cleanup = useRef<(() => void) | undefined>(undefined);\n return useCallback((node: T | null) => {\n cleanup.current?.();\n cleanup.current = undefined;\n if (node !== null) cleanup.current = start(node) || undefined;\n }, dependencies);\n}\n","export const BH = {\n labelSecondary: 'var(--dsw-alias-label-secondary)',\n hoverFill: 'var(--dsw-alias-interactive-bg-hover)',\n errorPrimary: 'var(--dsw-alias-state-error-primary)',\n radiusMd: 'var(--dsw-radius-md)',\n labelPrimary: 'var(--dsw-alias-label-primary, #0f1115)',\n labelPrimaryForeground: 'var(--dsw-alias-label-primary-foreground, #ffffff)',\n borderL2: 'var(--dsw-alias-border-l2, #0000001a)',\n borderL3: 'var(--dsw-alias-border-l3, #0000001f)',\n borderL4: 'var(--dsw-alias-border-l4, #00000029)',\n bgBase: 'var(--dsw-alias-bg-base, #ffffff)',\n buttonPrimaryFill: 'var(--dsw-alias-button-primary-fill, #0f1115)',\n buttonElevatedFill: 'var(--dsw-alias-button-elevated-fill, transparent)',\n businessPrimary: 'var(--dsw-alias-state-business-primary, #4176e6)',\n hoverScrim: 'color-mix(in srgb, var(--dsw-alias-bg-base) 35%, transparent)',\n} as const;\n\nexport const VIDEO_SURFACE = {\n background: '#000000',\n spinnerTrack: 'rgba(255, 255, 255, 0.18)',\n spinnerArc: '#ffffff',\n onVideo: '#ffffff',\n} as const;\n","import type { ViewerKey } from './locale.js';\n\nexport type ViewerAction = 'open' | 'collapse';\n\nexport function nextExpanded(action: ViewerAction): boolean {\n return action === 'open';\n}\n\nexport type FramePhase = 'connecting' | 'live' | 'empty';\n\nexport const PHASE_SMOOTH_AFTER = 2;\n\nexport interface SmoothedPhase {\n readonly phase: FramePhase;\n readonly streak: number;\n}\n\nexport function smoothPhase(shown: FramePhase, raw: FramePhase, streak: number): SmoothedPhase {\n if (raw === 'live') return { phase: 'live', streak: 0 };\n if (shown !== 'live') return { phase: raw, streak: 0 };\n const next = streak + 1;\n if (next >= PHASE_SMOOTH_AFTER) return { phase: raw, streak: next };\n return { phase: shown, streak: next };\n}\n\nexport function dotStateFor(phase: FramePhase): 'done' | 'ongoing' | 'error' {\n if (phase === 'live') return 'done';\n if (phase === 'empty') return 'error';\n return 'ongoing';\n}\n\nexport function statusKeyFor(phase: FramePhase, reconnecting: boolean): ViewerKey {\n if (phase === 'live') return 'entry.live';\n if (phase === 'empty') return 'entry.noScreen';\n return reconnecting ? 'entry.reconnecting' : 'entry.connecting';\n}\n\nexport function stopKey(busy: boolean, stopping: boolean): ViewerKey {\n return busy || stopping ? 'entry.stopping' : 'entry.stop';\n}\n\nconst EXIT_REPORT = /^exited code=\\d+$/;\n\nexport function isExitReport(detail: string | undefined): boolean {\n return detail !== undefined && EXIT_REPORT.test(detail);\n}\n","import type { FramePhase } from './viewer-state.js';\n\nexport const EMPTY_AFTER_MISSES = 6;\n\nexport const BUSY_EMPTY_AFTER = 30;\n\nexport const QUIET_TOLERANCE = 4;\n\nexport const QUIET_ABANDON = 120;\n\nexport const LOSS_REMOUNT_AFTER = 3;\n\nexport const MAX_AUTO_RELOAD = 3;\n\nconst STATUS_ELEMENT_ID = 'status-display';\n\nconst BUSY_TEXT = /connecting|reconnect|disconnect|failed|error/i;\n\nexport interface StreamSample {\n readonly sized: boolean;\n readonly busy: boolean;\n readonly signature?: number;\n}\n\nexport interface StreamTracker {\n readonly misses: number;\n readonly busyStreak: number;\n readonly quiet: number;\n readonly lastSignature?: number;\n readonly live?: true;\n}\n\nexport function hashBytes(data: Uint8ClampedArray): number {\n let hash = 0x81_9c_9d_c5;\n for (let index = 0; index < data.length; index += 1) {\n hash ^= data[index] ?? 0;\n hash = Math.imul(hash, 0x01_00_01_93);\n }\n return hash >>> 0;\n}\n\nexport function upstreamBusy(doc: Document | null | undefined): boolean {\n try {\n const element = doc?.getElementById(STATUS_ELEMENT_ID) as HTMLElement | null;\n if (element === null || element === undefined) return false;\n if (element.classList.contains('hidden')) return false;\n return BUSY_TEXT.test(element.textContent ?? '');\n } catch {\n return false;\n }\n}\n\nfunction signatureOf(\n doc: Document,\n surface: HTMLVideoElement | HTMLCanvasElement,\n): number | undefined {\n try {\n const scratch = doc.createElement('canvas');\n scratch.width = 16;\n scratch.height = 16;\n const context = scratch.getContext('2d', { willReadFrequently: true });\n if (context === null) return undefined;\n context.drawImage(surface, 0, 0, 16, 16);\n return hashBytes(context.getImageData(0, 0, 16, 16).data);\n } catch {\n return undefined;\n }\n}\n\nexport function sampleSurface(doc: Document | null | undefined): StreamSample {\n const busy = upstreamBusy(doc);\n let sized = false;\n let signature: number | undefined;\n try {\n const surface = doc?.getElementById('videoCanvas') as\n | HTMLVideoElement\n | HTMLCanvasElement\n | null;\n const videoWidth = (surface as { readonly videoWidth?: unknown } | null)?.videoWidth;\n const canvasWidth = (surface as { readonly width?: unknown } | null)?.width;\n const width =\n typeof videoWidth === 'number'\n ? videoWidth\n : typeof canvasWidth === 'number'\n ? canvasWidth\n : 0;\n sized = surface !== null && surface !== undefined && width > 0;\n if (sized && surface !== null && surface !== undefined && doc !== null && doc !== undefined) {\n signature = signatureOf(doc, surface);\n }\n } catch {\n signature = undefined;\n }\n return signature === undefined ? { sized, busy } : { sized, busy, signature };\n}\nfunction withSignature(\n base: { readonly misses: number; readonly busyStreak: number; readonly quiet: number },\n signature: number | undefined,\n): StreamTracker {\n return signature === undefined ? { ...base } : { ...base, lastSignature: signature };\n}\n\nfunction withPreviousSignature(\n base: { readonly misses: number; readonly busyStreak: number; readonly quiet: number },\n prev: StreamTracker,\n): StreamTracker {\n return prev.lastSignature === undefined\n ? { ...base }\n : { ...base, lastSignature: prev.lastSignature };\n}\n\nexport function shouldRemountLoss(lossStreak: number): boolean {\n return lossStreak >= LOSS_REMOUNT_AFTER;\n}\n\nexport function shouldAutoReload(phase: FramePhase, everLive: boolean, attempts: number): boolean {\n return phase === 'empty' && !everLive && attempts < MAX_AUTO_RELOAD;\n}\n\nexport function nextStreamTracker(\n prev: StreamTracker,\n sample: StreamSample,\n): { readonly tracker: StreamTracker; readonly phase: FramePhase } {\n const signature = sample.signature;\n if (!sample.sized) {\n const misses = prev.misses + 1;\n return {\n tracker: withSignature({ misses, busyStreak: 0, quiet: 0 }, signature),\n phase: misses >= EMPTY_AFTER_MISSES ? 'empty' : 'connecting',\n };\n }\n if (sample.busy) {\n const busyStreak = prev.busyStreak + 1;\n return {\n tracker: withPreviousSignature({ misses: prev.misses, busyStreak, quiet: 0 }, prev),\n phase: busyStreak >= BUSY_EMPTY_AFTER ? 'empty' : 'connecting',\n };\n }\n const changed =\n signature !== undefined && prev.lastSignature !== undefined && signature !== prev.lastSignature;\n if (changed) {\n return {\n tracker: { ...withSignature({ misses: 0, busyStreak: 0, quiet: 0 }, signature), live: true },\n phase: 'live',\n };\n }\n if (signature === undefined) {\n return { tracker: { misses: 0, busyStreak: 0, quiet: 0, live: true }, phase: 'live' };\n }\n const quiet = prev.quiet + 1;\n if (quiet >= QUIET_ABANDON) {\n return {\n tracker: withSignature({ misses: EMPTY_AFTER_MISSES, busyStreak: 0, quiet }, signature),\n phase: 'empty',\n };\n }\n if (prev.live === true || quiet >= QUIET_TOLERANCE) {\n return {\n tracker: { ...withSignature({ misses: 0, busyStreak: 0, quiet }, signature), live: true },\n phase: 'live',\n };\n }\n return {\n tracker: withSignature({ misses: prev.misses, busyStreak: 0, quiet }, signature),\n phase: 'connecting',\n };\n}\n","import {\n Fragment,\n useCallback,\n useRef,\n useState,\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n type RefCallback,\n} from 'react';\nimport {\n Button,\n IconFullscreenOutlineRegular,\n Pill,\n StateDot,\n} from '@deepseek-ai/dsh-client-ui-primitives';\nimport { useMountedResource } from '../mounted-resource.js';\nimport { BH, VIDEO_SURFACE } from './tokens.js';\nimport {\n dotStateFor,\n nextExpanded,\n smoothPhase,\n statusKeyFor,\n stopKey,\n type FramePhase,\n} from './viewer-state.js';\nimport {\n LOSS_REMOUNT_AFTER,\n nextStreamTracker,\n sampleSurface,\n shouldAutoReload,\n shouldRemountLoss,\n type StreamTracker,\n} from './frame-liveness.js';\nimport type { ViewerTranslate } from './locale.js';\nexport type ViewerLifecycleEvent =\n | { readonly type: 'mount' }\n | { readonly type: 'overlay'; readonly open: boolean }\n | { readonly type: 'phase'; readonly from: FramePhase; readonly to: FramePhase }\n | { readonly type: 'auto-reload'; readonly attempt: number }\n | { readonly type: 'manual-retry' }\n | { readonly type: 'loss-remount'; readonly streak: number };\n\nexport const SPIN_STYLE = '@keyframes bc-spin { to { transform: rotate(360deg); } }';\n\nfunction useStreamPhase(onSample: (phase: FramePhase) => void): RefCallback {\n return useMountedResource(\n (iframe) => {\n let active = true;\n let tracker: StreamTracker = { misses: 0, busyStreak: 0, quiet: 0 };\n let timer: ReturnType | undefined;\n const check = (): void => {\n if (!active) return;\n let doc: Document | null = null;\n try {\n doc = iframe.contentDocument;\n } catch {\n doc = null;\n }\n const next = nextStreamTracker(tracker, sampleSurface(doc));\n tracker = next.tracker;\n onSample(next.phase);\n timer = setTimeout(check, 1000);\n };\n timer = setTimeout(check, 300);\n return () => {\n active = false;\n if (timer !== undefined) clearTimeout(timer);\n };\n },\n [onSample],\n );\n}\n\nexport function ScreenIndicator({ label = '连接中' }: { readonly label?: string }): ReactElement {\n const size = 26;\n const stroke = 2;\n const radius = (size - stroke) / 2;\n const circumference = 2 * Math.PI * radius;\n return (\n \n
\n \n \n \n \n {label}\n
\n \n );\n}\n\nfunction ScreenEmpty({\n t,\n onRetry,\n}: {\n readonly t: ViewerTranslate;\n readonly onRetry: () => void;\n}): ReactElement {\n return (\n \n
\n {t('entry.noScreen')}\n \n
\n \n );\n}\n\nexport interface StreamOverlayProps {\n readonly phase: FramePhase;\n readonly reconnecting: boolean;\n readonly hovered: boolean;\n readonly t: ViewerTranslate;\n readonly onRetry: () => void;\n readonly onOpen: () => void;\n}\n\nexport function StreamOverlay(props: StreamOverlayProps): ReactElement | null {\n const { phase, reconnecting, hovered, t, onRetry, onOpen } = props;\n if (phase === 'connecting') {\n return ;\n }\n if (phase === 'empty') {\n return ;\n }\n if (!hovered) return null;\n return (\n \n \n \n {t('entry.openFullscreen')}\n \n \n );\n}\n\ninterface ScaledFrameProps {\n readonly src: string;\n readonly title: string;\n readonly design: { width: number; height: number };\n readonly interactive: boolean;\n readonly fit?: 'width' | 'contain';\n readonly iframeRef?: RefCallback;\n}\n\nfunction ScaledFrame({\n src,\n title,\n design,\n interactive,\n fit = 'width',\n iframeRef,\n}: ScaledFrameProps): ReactElement {\n const DESIGN_WIDTH = design.width;\n const DESIGN_HEIGHT = design.height;\n const [box, setBox] = useState({ width: DESIGN_WIDTH, height: DESIGN_HEIGHT });\n const resizeResource = useMountedResource(\n (element) => {\n const frame = element.querySelector('iframe');\n if (frame !== null) {\n frame.inert = !interactive;\n if (!interactive) frame.blur();\n }\n const update = (): void =>\n setBox({ width: element.clientWidth, height: element.clientHeight });\n update();\n const observer = new ResizeObserver(update);\n observer.observe(element);\n return () => observer.disconnect();\n },\n [interactive],\n );\n\n const scale =\n fit === 'contain'\n ? Math.min(box.width / DESIGN_WIDTH, box.height / DESIGN_HEIGHT)\n : box.width / DESIGN_WIDTH;\n const offsetX = fit === 'contain' ? Math.max(0, (box.width - DESIGN_WIDTH * scale) / 2) : 0;\n const offsetY = fit === 'contain' ? Math.max(0, (box.height - DESIGN_HEIGHT * scale) / 2) : 0;\n\n return (\n \n \n \n );\n}\n\nfunction CollapseIcon(): ReactElement {\n return (\n \n \n \n \n \n \n );\n}\n\nexport interface ViewerTitleBarProps {\n readonly t: ViewerTranslate;\n readonly title: string;\n readonly phase: FramePhase;\n readonly reconnecting: boolean;\n readonly busy: boolean;\n readonly stopping: boolean;\n readonly interactive: boolean;\n readonly extraControls?: ReactNode;\n readonly onToggleInteractive: () => void;\n readonly onStop: () => void;\n readonly onCollapse: () => void;\n readonly hideStop?: boolean | undefined;\n readonly hideInteractiveToggle?: boolean | undefined;\n}\n\nfunction StopButton({\n t,\n busy,\n stopping,\n onStop,\n}: {\n readonly t: ViewerTranslate;\n readonly busy: boolean;\n readonly stopping: boolean;\n readonly onStop: () => void;\n}): ReactElement {\n return (\n \n );\n}\n\nexport function ViewerTitleBar(props: ViewerTitleBarProps): ReactElement {\n const {\n t,\n title,\n phase,\n reconnecting,\n busy,\n stopping,\n interactive,\n extraControls,\n onToggleInteractive,\n onStop,\n onCollapse,\n hideStop,\n hideInteractiveToggle,\n } = props;\n return (\n \n \n \n {title}\n \n {t(statusKeyFor(phase, reconnecting))}\n {interactive ? null : (\n {t('entry.watchOnly')}\n )}\n \n {extraControls}\n {hideInteractiveToggle ? null : (\n \n {t(interactive ? 'entry.interactive.disable' : 'entry.interactive.enable')}\n \n )}\n {hideStop === true ? null : (\n \n )}\n \n \n \n \n );\n}\n\nexport interface RemoteViewerProps {\n readonly t: ViewerTranslate;\n readonly title: string;\n readonly src: string;\n readonly design: { width: number; height: number };\n readonly busy: boolean;\n readonly stopping: boolean;\n readonly onStop: () => void;\n readonly footer?: ReactNode;\n readonly notice?: ReactNode;\n readonly extraControls?: ReactNode;\n readonly onEvent?: (event: ViewerLifecycleEvent) => void;\n readonly interactive?: boolean;\n readonly onToggleInteractive?: () => void;\n readonly onDisableInteraction?: () => void;\n readonly expanded?: boolean;\n readonly onExpandedChange?: (expanded: boolean) => void;\n readonly hideStop?: boolean | undefined;\n readonly hideInteractiveToggle?: boolean | undefined;\n readonly allowFrameInput?: boolean | undefined;\n}\n\nexport function RemoteViewer({\n t,\n title,\n src,\n design,\n busy,\n stopping,\n onStop,\n footer,\n notice,\n extraControls,\n onEvent,\n interactive,\n onToggleInteractive,\n onDisableInteraction,\n expanded: controlledExpanded,\n onExpandedChange,\n hideStop,\n hideInteractiveToggle,\n allowFrameInput,\n}: RemoteViewerProps): ReactElement {\n const entryRef = useRef(null);\n const mounted = useRef(false);\n const [hovered, setHovered] = useState(false);\n const [ownExpanded, setOwnExpanded] = useState(false);\n const expanded = controlledExpanded ?? ownExpanded;\n const setExpanded = (next: boolean): void => {\n setOwnExpanded(next);\n onExpandedChange?.(next);\n };\n const [inputEnabled, setInputEnabled] = useState(false);\n const [reloadKey, setReloadKey] = useState(0);\n const [reconnecting, setReconnecting] = useState(false);\n const wasReady = useRef(false);\n const autoReloads = useRef(0);\n const lossStreak = useRef(0);\n const phaseRef = useRef('connecting');\n\n const [smooth, setSmooth] = useState<{ phase: FramePhase; streak: number }>({\n phase: 'connecting',\n streak: 0,\n });\n const resetFrame = useCallback(() => {\n phaseRef.current = 'connecting';\n setSmooth({ phase: 'connecting', streak: 0 });\n setReloadKey((key) => key + 1);\n }, []);\n const onSample = useCallback(\n (nextPhase: FramePhase): void => {\n const fromPhase = phaseRef.current;\n if (fromPhase !== nextPhase) {\n phaseRef.current = nextPhase;\n setSmooth((current) => smoothPhase(current.phase, nextPhase, current.streak));\n onEvent?.({ type: 'phase', from: fromPhase, to: nextPhase });\n }\n if (nextPhase === 'live') {\n wasReady.current = true;\n autoReloads.current = 0;\n lossStreak.current = 0;\n setReconnecting(false);\n return;\n }\n if (wasReady.current) {\n lossStreak.current += 1;\n if (shouldRemountLoss(lossStreak.current)) {\n wasReady.current = false;\n lossStreak.current = 0;\n onEvent?.({ type: 'loss-remount', streak: LOSS_REMOUNT_AFTER });\n setReconnecting(true);\n resetFrame();\n return;\n }\n }\n if (\n fromPhase !== nextPhase &&\n shouldAutoReload(nextPhase, wasReady.current, autoReloads.current)\n ) {\n autoReloads.current += 1;\n onEvent?.({ type: 'auto-reload', attempt: autoReloads.current });\n resetFrame();\n }\n },\n [resetFrame, onEvent],\n );\n const streamRef = useStreamPhase(onSample);\n const phase = smooth.phase;\n\n const reconnect = (): void => {\n onEvent?.({ type: 'manual-retry' });\n setReconnecting(true);\n autoReloads.current = 0;\n lossStreak.current = 0;\n wasReady.current = false;\n resetFrame();\n };\n const openViewer = (): void => {\n setExpanded(nextExpanded('open'));\n onEvent?.({ type: 'overlay', open: true });\n };\n const collapseViewer = (): void => {\n setInputEnabled(false);\n onDisableInteraction?.();\n setExpanded(nextExpanded('collapse'));\n onEvent?.({ type: 'overlay', open: false });\n requestAnimationFrame(() => entryRef.current?.focus());\n };\n const dialogResource = useMountedResource(\n (dialog) => {\n if (!mounted.current) {\n mounted.current = true;\n onEvent?.({ type: 'mount' });\n }\n if (!expanded) return;\n const onKey = (event: KeyboardEvent): void => {\n if (event.key !== 'Tab') return;\n const focusable = [\n ...dialog.querySelectorAll(\n 'button, [href], iframe, [tabindex]:not([tabindex=\"-1\"])',\n ),\n ].filter((element) => element.tabIndex !== -1);\n const first = focusable[0];\n const last = focusable.at(-1);\n if (first === undefined || last === undefined) return;\n const active = document.activeElement;\n if (event.shiftKey && (active === first || active === dialog)) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && active === last) {\n event.preventDefault();\n first.focus();\n }\n };\n document.addEventListener('keydown', onKey);\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n dialog.focus();\n return () => {\n document.removeEventListener('keydown', onKey);\n document.body.style.overflow = previousOverflow;\n };\n },\n [expanded, onDisableInteraction, onEvent],\n );\n\n const statusText = t(statusKeyFor(phase, reconnecting));\n const openable = phase === 'live' && !expanded;\n\n const overlay = (\n \n );\n\n const stopLabel = t(stopKey(busy, stopping));\n const rowButton = (disabled: boolean): CSSProperties => ({\n flex: 1,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: 28,\n padding: '0 10px',\n borderRadius: 14,\n border: `1px solid ${BH.borderL3}`,\n background: BH.buttonElevatedFill,\n color: BH.labelPrimary,\n fontSize: 12,\n ...(disabled ? { opacity: 0.4, cursor: 'not-allowed' } : { cursor: 'pointer' }),\n });\n\n return (\n \n \n {expanded ? (\n setInputEnabled((current) => !current))\n }\n onStop={onStop}\n onCollapse={collapseViewer}\n hideStop={hideStop}\n hideInteractiveToggle={hideInteractiveToggle}\n />\n ) : null}\n {notice}\n setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n onClick={() => {\n if (openable) openViewer();\n }}\n onKeyDown={(event) => {\n if (!openable) return;\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n openViewer();\n }}\n style={\n expanded\n ? { position: 'relative', flex: 1, minHeight: 0 }\n : { position: 'relative', cursor: openable ? 'pointer' : 'default' }\n }\n >\n \n {overlay}\n \n {expanded ? null : (\n \n \n {title}\n \n
\n {hideStop === true ? null : (\n \n {stopLabel}\n \n )}\n \n {t('entry.reconnect')}\n \n
\n {footer}\n
\n )}\n \n );\n}\n","import type { ReactElement, ReactNode, Ref } from 'react';\n\nimport { ChannelSidebarIcon } from './channel-sidebar-icon.js';\n\nexport function SidebarCardList({\n label,\n className,\n listRef,\n flush = false,\n children,\n}: {\n label?: string | undefined;\n className?: string | undefined;\n listRef?: Ref | undefined;\n flush?: boolean | undefined;\n children: ReactNode;\n}): ReactElement {\n return (\n \n {children}\n \n );\n}\n\nexport interface SidebarCardRowProps {\n icon?: string | undefined;\n leading?: ReactNode | undefined;\n selection?: { checked: boolean; multiple?: boolean } | undefined;\n iconLabel?: string | undefined;\n title: ReactNode;\n titleClassName?: string | undefined;\n badge?: ReactNode | undefined;\n summary?: ReactNode | undefined;\n flipKey?: string | undefined;\n hint?: string | undefined;\n chips?: ReactNode | undefined;\n meta?: ReactNode | undefined;\n trailing?: ReactNode | undefined;\n detail?: ReactNode | undefined;\n onClick?: () => void | undefined;\n disabled?: boolean | undefined;\n muted?: boolean | undefined;\n mainClassName?: string | undefined;\n dialog?: boolean | undefined;\n expanded?: boolean | undefined;\n controls?: string | undefined;\n state?: string | undefined;\n anchor?: string | undefined;\n}\n\nexport function SidebarCardRow({\n icon,\n leading,\n iconLabel,\n selection,\n title,\n titleClassName,\n badge,\n summary,\n flipKey,\n hint,\n chips,\n meta,\n trailing,\n detail,\n onClick,\n disabled,\n muted,\n mainClassName,\n dialog,\n expanded,\n controls,\n state,\n anchor,\n}: SidebarCardRowProps): ReactElement {\n const body = (\n <>\n {leading === undefined ? null : {leading}}\n {icon === undefined ? null : (\n \n \n
\n )}\n \n {badge === undefined ? (\n \n {title}\n \n ) : (\n \n \n {title}\n \n {badge}\n
\n )}\n {summary === undefined ? null : {summary}}\n {chips === undefined ? null : {chips}}\n {meta === undefined ? null : {meta}}\n \n \n );\n const className = mainClassName === undefined ? 'bh-card-main' : 'bh-card-main ' + mainClassName;\n return (\n \n
\n {selection?.multiple === true ? (\n \n ) : onClick === undefined ? (\n
\n {body}\n
\n ) : (\n \n {body}\n \n )}\n {trailing === undefined ? null : {trailing}}\n
\n {detail === undefined ? null : (\n
\n {detail}\n
\n )}\n \n );\n}\n","export const LOCALE_NS = 'botharness-browser';\n\nexport const zh = {\n 'entry.profile.install': '安装 BotHarness Profile 控制扩展',\n 'entry.profile.instructions':\n '在 BotHarness Profile 控制扩展中输入地址和配对码,并确认允许整个 Profile。',\n 'entry.profile.forget': '解除 Profile 配对',\n 'entry.profile.disconnected': 'Profile 已配对,连接已断开',\n 'entry.profile.connected': 'Profile 已连接',\n 'entry.profile.pair': '配对 Chrome Profile',\n 'entry.profile.scope': '此 Chrome Profile 的所有普通网页标签页',\n 'settings.profile-control': '日常 Chrome · 整个 Profile',\n 'settings.daily-control': '日常 Chrome · 控制',\n 'entry.daily.install': '安装 Playwright 扩展',\n 'entry.daily.connect': '连接现有页面',\n 'entry.daily.select': '请在 Chrome 中选择一个现有标签页',\n 'entry.daily.confirm': '已连接,尚未允许操作',\n 'entry.daily.controlled': '已允许此页面的读取、输入和点击',\n 'entry.daily.allow': '允许控制此页面',\n\n 'entry.live': '已连接',\n 'entry.noScreen': '暂无画面',\n 'entry.connecting': '连接中',\n 'entry.reconnecting': '正在重新连接',\n 'entry.reconnect': '重新连接',\n 'entry.openFullscreen': '打开大屏',\n 'entry.collapseFullscreen': '收起全屏',\n 'entry.interactive.disable': '停止交互',\n 'entry.interactive.enable': '开启交互',\n 'entry.watchOnly': '观看模式',\n 'entry.stop': '停止',\n 'entry.stopping': '停止中',\n\n 'settings.localDriver': '本机驱动',\n 'settings.containerDriver': '容器驱动',\n 'settings.driver.current': '默认',\n 'settings.driver.agent-browser': 'agent-browser(试用)',\n 'settings.section': '浏览器控制',\n 'settings.target': '操作目标',\n 'settings.local': '本机 Browser',\n 'settings.container': 'Docker Browser',\n 'settings.extension': '日常浏览器',\n 'entry.borrow.none': '尚未借用标签页',\n 'entry.borrow.readOnly': '只读借用中',\n 'entry.borrow.pair': '连接浏览器扩展',\n 'entry.borrow.return': '归还标签页',\n 'entry.borrow.code': '配对码',\n 'entry.borrow.cancel': '取消配对',\n 'entry.borrow.instructions':\n '在扩展中输入此地址和配对码,再选择借出当前页面。配对码 5 分钟内有效,仅可使用一次。',\n 'entry.view.interaction': '允许 Human 操作',\n 'entry.view.inputMode.direct': '直接点按',\n 'entry.view.inputMode.trackpad': '触控板',\n 'entry.view.close': '关闭',\n 'entry.view.container': '容器浏览器',\n 'entry.view.browserTitle': '{name}的浏览器',\n 'entry.takeover.start': '接管',\n 'entry.takeover.stop': '取消接管',\n 'entry.takeover.active': '接管中',\n 'entry.label': '浏览器',\n 'entry.access.title': 'Browser Access',\n 'entry.access.on': 'Browser Access 已开启',\n 'entry.access.description': '开启后,该 Bot 的会话可以使用浏览器',\n 'entry.access.enable': '启用 Browser Access',\n 'entry.access.disable': '停用 Browser Access',\n 'entry.access.failed': '切换 Browser Access 失败',\n 'entry.access.failureHint': '授权失败',\n 'entry.profile.label': 'Profile',\n 'entry.profile.default': 'default',\n 'entry.profile.failed': '切换浏览器 profile 失败',\n 'entry.profile.choose': '选择浏览器 Profile',\n 'entry.profile.create': '创建“{name}”',\n 'entry.view.follow': '跟随 Bot',\n 'entry.view.pause': '暂停 Bot',\n 'entry.view.resume': '继续',\n 'entry.view.open': '打开 Bot 浏览器',\n 'entry.view.fullscreen': '全屏',\n 'entry.view.stop': '停止',\n 'entry.view.cleanupFailed': '浏览器清理失败。点击“停止”重试。',\n 'entry.view.opening': '正在打开…',\n 'entry.view.noFrame': '暂无画面',\n 'entry.view.noTabs': '暂无标签页',\n 'entry.view.tabs': '标签页',\n 'entry.chip.running': '运行中',\n 'entry.chip.stopped': '未运行',\n 'entry.chip.paused': '已暂停',\n 'entry.chip.disconnected': '未连接',\n 'entry.chip.connecting': '连接中',\n 'entry.chip.confirm': '待允许',\n 'entry.chip.controlled': '可操作',\n 'entry.chip.unpaired': '未配对',\n 'entry.chip.offline': '已断开',\n 'entry.chip.connected': '已连接',\n 'entry.chip.notShared': '未借用',\n 'entry.chip.readOnly': '只读',\n 'entry.provision.preparing': '正在准备下载浏览器…',\n 'entry.provision.downloading': '正在下载浏览器…{percent}%({downloaded}/{total})',\n 'entry.fail.details': '详情',\n 'entry.fail.provision-no-network.title': '浏览器下载失败——本机网络似乎不通。',\n 'entry.fail.provision-no-network.fault': '这是本机网络的问题,不是你的设置问题。',\n 'entry.fail.provision-no-network.action': '让本机连上网后,再点一次“打开”。',\n 'entry.fail.provision-no-disk-space.title': '浏览器下载失败——磁盘空间不足。',\n 'entry.fail.provision-no-disk-space.fault': '这是本机剩余空间的问题。',\n 'entry.fail.provision-no-disk-space.action': '至少腾出 500 MB 空间后,再点一次“打开”。',\n 'entry.fail.provision-no-permission.title': '浏览器下载失败——下载目录不可写。',\n 'entry.fail.provision-no-permission.fault': '这是本机目录权限的问题。',\n 'entry.fail.provision-no-permission.action':\n '请机器管理员放开浏览器目录的写权限后,再点一次“打开”。',\n 'entry.fail.provision-missing-libs.title': '这台机器缺少浏览器需要的系统库。',\n 'entry.install.missing': '需要安装 {count} 个系统包。',\n 'entry.install.manual':\n '安装需要管理员密码。请在这台机器的终端里运行下面的命令,装好后再点「打开」。',\n 'entry.install.button': '一键安装',\n 'entry.install.copy': '复制命令',\n 'entry.install.copied': '已复制',\n 'entry.install.progress': '正在安装系统库:{percent}%',\n 'entry.fail.provision-missing-libs.fault': '这是机器环境的问题,不是浏览器设置的问题。',\n 'entry.fail.provision-missing-libs.action':\n 'Ubuntu 24.04 上按“详情”里的命令安装系统库,装好后再点“打开”。',\n 'entry.fail.provision-failed.title': '浏览器下载失败。',\n 'entry.fail.provision-failed.fault': '暂时看不出具体原因。',\n 'entry.fail.provision-failed.action': '再点一次“打开”重试;多次失败请把“详情”发给机器管理员。',\n 'entry.fail.startup-missing-binary.title': '配置的浏览器文件不存在。',\n 'entry.fail.startup-missing-binary.fault': '这是插件配置里的浏览器路径问题。',\n 'entry.fail.startup-missing-binary.action':\n '修正浏览器插件配置中的 browserPath,或清空它改用自动下载。',\n 'entry.fail.startup-spawn-failed.title': '浏览器程序无法启动。',\n 'entry.fail.startup-spawn-failed.fault':\n '本机拦截或删除了浏览器文件——常见是杀毒软件,偶尔是权限问题。',\n 'entry.fail.startup-spawn-failed.action':\n '把浏览器目录加入杀毒软件白名单(或找机器管理员看权限),再点一次“打开”。',\n 'entry.fail.startup-sandbox.title': '浏览器因系统沙箱限制拒绝启动。',\n 'entry.fail.startup-sandbox.fault': '这是本机系统限制的问题。',\n 'entry.fail.startup-sandbox.action':\n 'Ubuntu 23.10 起通常是 AppArmor 限制了用户命名空间:按“详情”给这个浏览器加 AppArmor 配置后,再点一次“打开”。',\n 'entry.fail.startup-crashed.title': '浏览器在启动过程中退出了。',\n 'entry.fail.startup-crashed.fault': '这是本机浏览器的问题,不是页面问题。',\n 'entry.fail.startup-crashed.action': '再点一次“打开”重试;多次失败请把“详情”发给机器管理员。',\n 'entry.fail.startup-timeout.title': '浏览器启动超时。',\n 'entry.fail.startup-timeout.fault': '这台机器可能比较慢或负载较高。',\n 'entry.fail.startup-timeout.action': '再点一次“打开”重试;多次失败请重启机器或联系管理员。',\n 'entry.error': '浏览器操作失败',\n};\n\nexport type BrowserKey = keyof typeof zh;\n\nexport const en: Record = {\n 'entry.profile.install': 'Install BotHarness Profile Control extension',\n 'entry.profile.instructions':\n 'Enter the address and code in the BotHarness Profile Control extension and confirm Profile-wide access.',\n 'entry.profile.forget': 'Forget Profile pairing',\n 'entry.profile.disconnected': 'Profile paired · disconnected',\n 'entry.profile.connected': 'Profile connected',\n 'entry.profile.pair': 'Pair Chrome Profile',\n 'entry.profile.scope': 'All ordinary webpage tabs in this Chrome Profile',\n 'settings.profile-control': 'Daily Chrome · Entire Profile',\n 'settings.daily-control': 'Daily Chrome · Control',\n 'entry.daily.install': 'Install Playwright extension',\n 'entry.daily.connect': 'Connect existing page',\n 'entry.daily.select': 'Select one existing Chrome tab',\n 'entry.daily.confirm': 'Connected · control not granted',\n 'entry.daily.controlled': 'This document allows observe, type and click',\n 'entry.daily.allow': 'Allow control of this document',\n\n 'entry.live': 'Connected',\n 'entry.noScreen': 'No screen',\n 'entry.connecting': 'Connecting',\n 'entry.reconnecting': 'Reconnecting',\n 'entry.reconnect': 'Reconnect',\n 'entry.openFullscreen': 'Open fullscreen',\n 'entry.collapseFullscreen': 'Leave fullscreen',\n 'entry.interactive.disable': 'Disable interaction',\n 'entry.interactive.enable': 'Enable interaction',\n 'entry.watchOnly': 'Watch only',\n 'entry.stop': 'Stop',\n 'entry.stopping': 'Stopping',\n\n 'settings.localDriver': 'Local driver',\n 'settings.containerDriver': 'Container driver',\n 'settings.driver.current': 'Default',\n 'settings.driver.agent-browser': 'agent-browser (trial)',\n 'settings.section': 'Browser',\n 'settings.target': 'Browser Target',\n 'settings.local': 'Local Browser',\n 'settings.container': 'Docker Browser',\n 'settings.extension': 'Daily Browser',\n 'entry.borrow.none': 'No shared tab',\n 'entry.borrow.readOnly': 'Shared read-only',\n 'entry.borrow.pair': 'Connect browser extension',\n 'entry.borrow.return': 'Return tab',\n 'entry.borrow.code': 'Pairing code',\n 'entry.borrow.cancel': 'Cancel pairing',\n 'entry.borrow.instructions':\n 'Enter this address and code in the extension, then share the current page. The code expires in 5 minutes and can be used once.',\n 'entry.view.interaction': 'Enable Human interaction',\n 'entry.view.inputMode.direct': 'Direct tap',\n 'entry.view.inputMode.trackpad': 'Trackpad',\n 'entry.view.close': 'Close',\n 'entry.view.container': 'Container Browser',\n 'entry.view.browserTitle': \"{name}'s Browser\",\n 'entry.takeover.start': 'Take over',\n 'entry.takeover.stop': 'Release',\n 'entry.takeover.active': 'Taking over',\n 'entry.label': 'Browser',\n 'entry.access.title': 'Browser Access',\n 'entry.access.on': 'Browser Access is on',\n 'entry.access.description': \"This PersonaBot's sessions may use the browser\",\n 'entry.access.enable': 'Enable Browser Access',\n 'entry.access.disable': 'Disable Browser Access',\n 'entry.access.failed': 'Failed to switch Browser Access',\n 'entry.access.failureHint': 'Access failed',\n 'entry.profile.label': 'Profile',\n 'entry.profile.default': 'default',\n 'entry.profile.failed': 'Failed to switch the browser profile',\n 'entry.profile.choose': 'Choose browser profile',\n 'entry.profile.create': 'Create “{name}”',\n 'entry.view.follow': 'Follow the Bot',\n 'entry.view.pause': 'Pause Bot',\n 'entry.view.resume': 'Resume',\n 'entry.view.open': 'Open Bot Browser',\n 'entry.view.fullscreen': 'Fullscreen',\n 'entry.view.stop': 'Stop',\n 'entry.view.cleanupFailed': 'Browser cleanup failed. Click Stop to retry.',\n 'entry.view.opening': 'Opening…',\n 'entry.view.noFrame': 'No frame yet',\n 'entry.view.noTabs': 'No tabs yet',\n 'entry.view.tabs': 'Tabs',\n 'entry.chip.running': 'Running',\n 'entry.chip.stopped': 'Stopped',\n 'entry.chip.paused': 'Paused',\n 'entry.chip.disconnected': 'Not connected',\n 'entry.chip.connecting': 'Connecting',\n 'entry.chip.confirm': 'Needs approval',\n 'entry.chip.controlled': 'Controllable',\n 'entry.chip.unpaired': 'Not paired',\n 'entry.chip.offline': 'Disconnected',\n 'entry.chip.connected': 'Connected',\n 'entry.chip.notShared': 'Not shared',\n 'entry.chip.readOnly': 'Read-only',\n 'entry.provision.preparing': 'Preparing the browser download…',\n 'entry.provision.downloading': 'Downloading browser… {percent}% ({downloaded} / {total})',\n 'entry.fail.details': 'Details',\n 'entry.fail.provision-no-network.title':\n 'The browser download failed — this machine looks offline.',\n 'entry.fail.provision-no-network.fault':\n 'This is about the network on this machine, not your settings.',\n 'entry.fail.provision-no-network.action':\n 'Reconnect this machine to the internet, then click Open again.',\n 'entry.fail.provision-no-disk-space.title': 'The browser download failed — the disk is full.',\n 'entry.fail.provision-no-disk-space.fault': 'This is about free space on this machine.',\n 'entry.fail.provision-no-disk-space.action': 'Free at least 500 MB, then click Open again.',\n 'entry.fail.provision-no-permission.title':\n 'The browser download failed — the download folder is not writable.',\n 'entry.fail.provision-no-permission.fault': 'This is about folder permissions on this machine.',\n 'entry.fail.provision-no-permission.action':\n 'Ask the machine owner to make the browser folder writable, then click Open again.',\n 'entry.fail.provision-missing-libs.title':\n 'This machine is missing system libraries the browser needs.',\n 'entry.install.missing': '{count} system packages need to be installed.',\n 'entry.install.manual':\n 'Installing needs an administrator password. Run this command in a terminal on this machine, then click Open again.',\n 'entry.install.button': 'Install',\n 'entry.install.copy': 'Copy command',\n 'entry.install.copied': 'Copied',\n 'entry.install.progress': 'Installing system libraries: {percent}%',\n 'entry.fail.provision-missing-libs.fault':\n 'This is about the machine setup, not your browser settings.',\n 'entry.fail.provision-missing-libs.action':\n 'On Ubuntu 24.04, install them with the command in Details, then click Open again.',\n 'entry.fail.provision-failed.title': 'The browser download failed.',\n 'entry.fail.provision-failed.fault': 'The cause is unclear from here.',\n 'entry.fail.provision-failed.action':\n 'Click Open to retry; if it keeps failing, show Details to the machine owner.',\n 'entry.fail.startup-missing-binary.title': 'The configured browser file does not exist.',\n 'entry.fail.startup-missing-binary.fault':\n 'This is about the browser path in the plugin configuration.',\n 'entry.fail.startup-missing-binary.action':\n 'Fix browserPath in the browser plugin configuration, or clear it to use the automatic download.',\n 'entry.fail.startup-spawn-failed.title': 'The browser program could not be started.',\n 'entry.fail.startup-spawn-failed.fault':\n 'This machine blocked or removed the browser file — often antivirus, sometimes permissions.',\n 'entry.fail.startup-spawn-failed.action':\n 'Allow-list the browser folder in your antivirus (or ask the machine owner about permissions), then click Open again.',\n 'entry.fail.startup-sandbox.title': 'The browser refused to start because of its OS sandbox.',\n 'entry.fail.startup-sandbox.fault': 'This is about OS restrictions on this machine.',\n 'entry.fail.startup-sandbox.action':\n 'On Ubuntu 23.10 and later this is usually AppArmor restricting user namespaces: add the AppArmor profile from Details for this browser, then click Open again.',\n 'entry.fail.startup-crashed.title': 'The browser exited during startup.',\n 'entry.fail.startup-crashed.fault': 'This is about the browser on this machine, not the page.',\n 'entry.fail.startup-crashed.action':\n 'Click Open to retry; if it keeps failing, show Details to the machine owner.',\n 'entry.fail.startup-timeout.title': 'The browser took too long to start.',\n 'entry.fail.startup-timeout.fault': 'This machine may be slow or overloaded.',\n 'entry.fail.startup-timeout.action':\n 'Click Open to retry; if it keeps failing, restart the machine or ask its owner.',\n 'entry.error': 'Browser action failed',\n};\n\nexport type BrowserTranslate = (\n key: BrowserKey,\n params?: Record,\n) => string;\n","export type BrowserFailureKind =\n | 'provision-no-network'\n | 'provision-no-disk-space'\n | 'provision-no-permission'\n | 'provision-missing-libs'\n | 'provision-failed'\n | 'startup-missing-binary'\n | 'startup-spawn-failed'\n | 'startup-sandbox'\n | 'startup-crashed'\n | 'startup-timeout';\n\nexport const BROWSER_FAILURE_KINDS: readonly BrowserFailureKind[] = [\n 'provision-no-network',\n 'provision-no-disk-space',\n 'provision-no-permission',\n 'provision-missing-libs',\n 'provision-failed',\n 'startup-missing-binary',\n 'startup-spawn-failed',\n 'startup-sandbox',\n 'startup-crashed',\n 'startup-timeout',\n];\n\nexport function isBrowserFailureKind(value: unknown): value is BrowserFailureKind {\n return typeof value === 'string' && (BROWSER_FAILURE_KINDS as readonly string[]).includes(value);\n}\n\nexport interface BrowserInstallProgress {\n readonly downloadedBytes: number;\n readonly totalBytes: number;\n}\n","import type { ReactElement, ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { color, space, text } from './tokens.stylex.js';\n\nconst styles = stylex.create({\n note: {\n margin: 0,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n overflowWrap: 'anywhere',\n },\n inset: { paddingBlock: space.x2, paddingInline: space.x2 },\n muted: { color: color.muted },\n subtle: { color: color.subtle },\n danger: { color: color.danger },\n success: { color: color.success },\n warning: { color: color.warning },\n});\n\nexport type NoteTone = 'muted' | 'subtle' | 'danger' | 'success' | 'warning';\n\nexport function Note({\n tone = 'muted',\n inset = false,\n children,\n}: {\n readonly tone?: NoteTone;\n readonly inset?: boolean;\n readonly children: ReactNode;\n}): ReactElement {\n return (\n \n {children}\n

\n );\n}\n","import { useState, type ReactElement, type ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\nimport { Button } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { Note } from './ds/note.js';\nimport { color, radius, space, text } from './ds/tokens.stylex.js';\n\nconst styles = stylex.create({\n root: {\n display: 'grid',\n gap: space.x3,\n justifyItems: 'start',\n width: '100%',\n },\n progress: {\n display: 'grid',\n gap: space.x1,\n width: '100%',\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n },\n bar: {\n width: '100%',\n height: '6px',\n accentColor: color.accent,\n },\n command: {\n margin: 0,\n width: '100%',\n boxSizing: 'border-box',\n paddingBlock: space.x2,\n paddingInline: space.x2,\n borderRadius: radius.sm,\n backgroundColor: color.hover,\n color: color.fg,\n fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace',\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n whiteSpace: 'pre-wrap',\n overflowWrap: 'anywhere',\n },\n actions: {\n display: 'flex',\n gap: space.x2,\n flexWrap: 'wrap',\n },\n});\n\nexport type MissingPackagesAccess = 'root' | 'sudo' | 'none';\n\nexport interface MissingPackagesLabels {\n readonly missing: string;\n readonly manual: string;\n readonly install: string;\n readonly copy: string;\n readonly copied: string;\n}\n\nexport function formatProgressMiB(bytes: number): string {\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nexport function ProgressLine({\n percent,\n label,\n}: {\n readonly percent: number;\n readonly label: string;\n}): ReactElement {\n const value = Math.max(0, Math.min(100, percent));\n return (\n
\n \n {label}\n
\n );\n}\n\nexport function MissingPackages({\n command,\n access,\n installing,\n busy = false,\n onInstall,\n labels,\n children,\n}: {\n readonly command: string;\n readonly access: MissingPackagesAccess;\n readonly installing?: { readonly percent: number; readonly label: string } | undefined;\n readonly busy?: boolean;\n readonly onInstall: () => void;\n readonly labels: MissingPackagesLabels;\n readonly children?: ReactNode;\n}): ReactElement {\n const [copied, setCopied] = useState(false);\n const copy = (): void => {\n void navigator.clipboard?.writeText(command).then(() => setCopied(true));\n };\n return (\n
\n {installing === undefined ? (\n {labels.missing}\n ) : (\n \n )}\n {access === 'none' && installing === undefined ? (\n <>\n {labels.manual}\n
{command}
\n \n ) : null}\n
\n {access !== 'none' && installing === undefined ? (\n \n ) : null}\n {access === 'none' ? (\n \n ) : null}\n {children}\n
\n
\n );\n}\n","import { useCallback, useRef, useState, type ReactElement } from 'react';\n\nimport {\n isBrowserFailureKind,\n type BrowserFailureKind,\n type BrowserInstallProgress,\n} from '../failure-kinds.js';\nimport {\n MissingPackages,\n type MissingPackagesAccess,\n} from '../../../client/src/client/missing-packages.js';\nimport type { BrowserTranslate } from './locale.js';\n\nexport interface BrowserFailure {\n readonly message: string;\n readonly code?: string;\n readonly detail?: string;\n readonly packages?: readonly string[];\n}\n\nexport class BrowserApiError extends Error {\n readonly code?: string;\n readonly detail?: string;\n readonly packages?: readonly string[];\n\n constructor(message: string, code?: string, detail?: string, packages?: readonly string[]) {\n super(message);\n this.name = 'BrowserApiError';\n if (code !== undefined) this.code = code;\n if (detail !== undefined) this.detail = detail;\n if (packages !== undefined) this.packages = packages;\n }\n}\n\nexport function readFailure(cause: unknown): BrowserFailure {\n if (cause instanceof BrowserApiError)\n return {\n message: cause.message,\n ...(cause.code === undefined ? {} : { code: cause.code }),\n ...(cause.detail === undefined ? {} : { detail: cause.detail }),\n ...(cause.packages === undefined ? {} : { packages: cause.packages }),\n };\n return { message: cause instanceof Error ? cause.message : String(cause) };\n}\n\ninterface InstallState {\n readonly access?: MissingPackagesAccess;\n readonly state?: 'installing' | 'installed' | 'failed';\n readonly percent?: number;\n readonly text?: string;\n}\n\nconst INSTALL_ENDPOINT = './api/browser/install-packages';\n\nfunction BrowserMissingLibs({\n packages,\n t,\n onRetry,\n}: {\n readonly packages: readonly string[];\n readonly t: BrowserTranslate;\n readonly onRetry?: (() => void) | undefined;\n}): ReactElement {\n const [install, setInstall] = useState({});\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState();\n const retried = useRef(false);\n const read = useCallback(async (): Promise => {\n const response = await fetch(INSTALL_ENDPOINT, { cache: 'no-store' });\n const next = (await response.json()) as InstallState;\n setInstall(next);\n return next;\n }, []);\n const resource = useCallback(\n (node: HTMLDivElement | null): void => {\n if (node === null) return;\n void read().catch(() => undefined);\n },\n [read],\n );\n const poll = (): void => {\n void read()\n .then((next) => {\n if (next.state === 'installing') {\n setTimeout(poll, 1000);\n return;\n }\n if (next.state === 'installed' && !retried.current) {\n retried.current = true;\n onRetry?.();\n }\n })\n .catch((cause: unknown) => setError(String(cause)));\n };\n const start = (): void => {\n setBusy(true);\n setError(undefined);\n void fetch(INSTALL_ENDPOINT, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ authorize: true, packages }),\n })\n .then(async (response) => {\n if (!response.ok) throw new Error(((await response.json()) as { error?: string }).error);\n poll();\n })\n .catch((cause: unknown) => setError(String(cause)))\n .finally(() => setBusy(false));\n };\n const installing = install.state === 'installing';\n return (\n
\n {install.state === 'failed' && install.text !== undefined ? (\n
{install.text}
\n ) : null}\n {error === undefined ? null :
{error}
}\n \n
\n );\n}\n\nexport function BrowserFailureNotice({\n failure,\n t,\n onRetry,\n}: {\n readonly failure: BrowserFailure;\n readonly t: BrowserTranslate;\n readonly onRetry?: (() => void) | undefined;\n}): ReactElement | null {\n if (!isBrowserFailureKind(failure.code)) return null;\n const kind: BrowserFailureKind = failure.code;\n return (\n
\n
{t(`entry.fail.${kind}.title`)}
\n
{t(`entry.fail.${kind}.fault`)}
\n {kind === 'provision-missing-libs' && (failure.packages?.length ?? 0) > 0 ? (\n \n ) : (\n
{t(`entry.fail.${kind}.action`)}
\n )}\n {failure.detail === undefined || failure.detail === '' ? null : (\n
\n {t('entry.fail.details')}\n
{failure.detail}
\n
\n )}\n
\n );\n}\n\nfunction formatMiB(bytes: number): string {\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nexport function BrowserProvisionProgress({\n progress,\n t,\n}: {\n readonly progress: BrowserInstallProgress;\n readonly t: BrowserTranslate;\n}): ReactElement {\n if (progress.totalBytes <= 0)\n return (\n
\n {t('entry.provision.preparing')}\n
\n );\n const percent = Math.max(\n 0,\n Math.min(99, Math.floor((progress.downloadedBytes / progress.totalBytes) * 100)),\n );\n return (\n
\n \n \n {t('entry.provision.downloading', {\n percent: String(percent),\n downloaded: formatMiB(progress.downloadedBytes),\n total: formatMiB(progress.totalBytes),\n })}\n \n
\n );\n}\n","import { border, color, radius, space, text } from './ds/tokens.stylex.js';\nimport { useId, useRef, useState, type KeyboardEvent, type ReactElement } from 'react';\nimport { createPortal } from 'react-dom';\nimport {\n IconChevronDownOutlineRegular,\n IconPlusOutlineRegular,\n Input,\n MenuSurface,\n useAnchoredPosition,\n useDismissOnOutsidePointer,\n} from '@deepseek-ai/dsh-client-ui-primitives';\n\nexport interface ComboboxOption {\n readonly value: string;\n readonly label: string;\n readonly hint?: string | undefined;\n readonly disabled?: boolean | undefined;\n}\n\nexport const COMBOBOX_CSS = `\n.bh-combobox { position: relative; flex: 1; min-width: 0; }\n.bh-combobox-input { display: flex; padding-right: ${space.x6}; }\n.bh-combobox input { width: 100%; text-overflow: ellipsis; }\n.bh-combobox input[readonly] { cursor: pointer; }\n.bh-combobox-toggle {\n position: absolute; right: 4px; top: 50%; transform: translateY(-50%); width: 24px; height: 24px;\n display: flex; align-items: center; justify-content: center;\n border: 0; border-radius: ${radius.sm}; padding: 0;\n color: var(--dsw-alias-label-secondary); background: transparent; cursor: pointer;\n}\n.bh-combobox-toggle:hover { background: var(--dsw-alias-interactive-bg-hover); }\n.bh-combobox-toggle:disabled { opacity: 0.5; cursor: default; }\n.bh-combobox-list {\n position: fixed; z-index: 1100; box-sizing: border-box;\n background: var(--dsw-alias-bg-base);\n --dsw-elevation-stroke-color: var(--dsw-alias-border-l1);\n box-shadow: var(--dsw-elevation-prominent);\n}\n.bh-combobox-scroll > button {\n display: flex; align-items: baseline; justify-content: space-between; gap: ${space.x4};\n width: 100%; min-height: 34px; padding: ${space.x2} ${space.x3};\n border: 0; border-radius: ${radius.sm}; background: transparent;\n color: var(--dsw-alias-label-primary); text-align: left; font: inherit; font-size: ${text.bodySize}; line-height: ${text.bodyLine}; cursor: pointer;\n overflow-wrap: anywhere;\n}\n.bh-combobox-scroll > button[aria-selected=\"true\"] { font-weight: ${text.strong}; }\n.bh-combobox-scroll > button:disabled { color: var(--dsw-alias-label-tertiary); cursor: default; }\n.bh-combobox-scroll > button:not(:disabled):hover, .bh-combobox-scroll > button[data-active] {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n.bh-combobox-scroll { max-height: 260px; overflow-y: auto; padding: ${space.x2}; box-sizing: border-box; }\n.bh-combobox-hint { flex: none; color: var(--dsw-alias-label-secondary); font-size: ${text.metaSize}; font-weight: ${text.regular}; }\n.bh-combobox-empty { padding: ${space.x2} ${space.x3}; color: var(--dsw-alias-label-secondary); font-size: ${text.bodySize}; }\n.bh-combobox-scroll > .bh-combobox-action { justify-content: flex-start; align-items: center; gap: ${space.x2}; border-top: ${border.hairline} solid ${color.divider}; border-radius: 0; margin-top: ${space.x2}; }\n`;\n\nexport function Combobox({\n value,\n options,\n onSelect,\n label,\n toggleLabel,\n disabled = false,\n invalid = false,\n errorId,\n placeholder,\n emptyLabel,\n fallbackValue,\n createLabel,\n searchable = true,\n className,\n action,\n}: {\n readonly value: string;\n readonly options: readonly ComboboxOption[];\n readonly onSelect: (value: string) => void;\n readonly label: string;\n readonly toggleLabel: string;\n readonly disabled?: boolean;\n readonly invalid?: boolean;\n readonly errorId?: string;\n readonly placeholder?: string;\n readonly emptyLabel?: string;\n readonly fallbackValue?: string;\n readonly createLabel?: (query: string) => string;\n readonly searchable?: boolean;\n readonly className?: string;\n readonly action?: {\n readonly label: string;\n readonly onSelect: () => void;\n readonly disabled?: boolean;\n };\n}): ReactElement {\n const root = useRef(null);\n const panel = useRef(null);\n const listId = useId();\n const actionValue = `${listId}-action`;\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(undefined);\n const [active, setActive] = useState(undefined);\n const current = value === '' && fallbackValue !== undefined ? fallbackValue : value;\n const display = options.find((option) => option.value === current)?.label ?? current;\n const trimmed = query?.trim() ?? '';\n const needle = trimmed.toLowerCase();\n const matches: ComboboxOption[] = options.filter((option) =>\n [option.label, option.value, option.hint ?? ''].some((text) =>\n text.toLowerCase().includes(needle),\n ),\n );\n const canCreate =\n createLabel !== undefined &&\n trimmed !== '' &&\n !options.some((option) => option.value === trimmed);\n const choices: ComboboxOption[] = canCreate\n ? [...matches, { value: trimmed, label: createLabel(trimmed) }]\n : matches;\n const shown =\n action === undefined\n ? choices\n : [...choices, { value: actionValue, label: action.label, disabled: action.disabled }];\n const enabled = shown.filter((option) => option.disabled !== true);\n const hasPopup = shown.length > 0 || (choices.length === 0 && emptyLabel !== undefined);\n const highlighted = shown.findIndex(\n (option) => option.value === active && option.disabled !== true,\n );\n const position = useAnchoredPosition({\n open,\n anchorRef: root,\n panelRef: panel,\n gap: 4,\n margin: 12,\n });\n useDismissOnOutsidePointer(root, open, setOpen, panel);\n\n const dismiss = (): void => {\n setOpen(false);\n setQuery(undefined);\n setActive(undefined);\n };\n const select = (next: string): void => {\n dismiss();\n if (action !== undefined && next === actionValue) action.onSelect();\n else onSelect(next);\n };\n const typedChoice = (): string | undefined => {\n if (query === undefined) return current === '' ? undefined : current;\n if (trimmed === '') return fallbackValue;\n if (createLabel !== undefined) return trimmed;\n const available = matches.filter((option) => option.disabled !== true);\n const exact = available.find(\n (option) => option.value.toLowerCase() === needle || option.label.toLowerCase() === needle,\n );\n return (exact ?? available[0])?.value;\n };\n const onKeyDown = (event: KeyboardEvent): void => {\n if (event.nativeEvent.isComposing) return;\n if (event.key === 'Escape') {\n if (!open) return;\n event.preventDefault();\n event.stopPropagation();\n dismiss();\n } else if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n setOpen(true);\n if (enabled.length === 0) return;\n const offset = event.key === 'ArrowDown' ? 1 : -1;\n const at = enabled.findIndex((option) => option.value === active);\n const next =\n enabled[\n at < 0\n ? offset === 1\n ? 0\n : enabled.length - 1\n : (at + offset + enabled.length) % enabled.length\n ];\n setActive(next?.value);\n const index = shown.findIndex((option) => option.value === next?.value);\n document.getElementById(`${listId}-${index}`)?.scrollIntoView?.({ block: 'nearest' });\n } else if (event.key === 'Enter' && open) {\n event.preventDefault();\n const choice = shown[highlighted]?.value ?? typedChoice();\n if (choice === undefined) dismiss();\n else select(choice);\n }\n };\n\n return (\n \n = 0 ? `${listId}-${highlighted}` : undefined\n }\n aria-invalid={invalid}\n aria-describedby={invalid ? errorId : undefined}\n value={query ?? display}\n placeholder={placeholder}\n disabled={disabled}\n autoComplete=\"off\"\n readOnly={!searchable}\n data-searchable={searchable || undefined}\n onFocus={(event) => {\n if (searchable) event.currentTarget.select();\n setOpen(true);\n }}\n onClick={() => setOpen(true)}\n onChange={(event) => {\n setQuery(event.target.value);\n setActive(undefined);\n setOpen(true);\n }}\n onBlur={dismiss}\n onKeyDown={onKeyDown}\n />\n event.preventDefault()}\n onClick={() => {\n if (open) dismiss();\n else {\n root.current?.querySelector('input')?.focus();\n setOpen(true);\n }\n }}\n >\n \n \n {open && !disabled && hasPopup\n ? createPortal(\n \n
\n {choices.length === 0 && emptyLabel !== undefined ? (\n
{emptyLabel}
\n ) : null}\n {shown.map((option, index) => (\n event.preventDefault()}\n onMouseEnter={() => {\n if (option.disabled !== true) setActive(option.value);\n }}\n onClick={() => select(option.value)}\n >\n {option.value === actionValue ? : null}\n {option.label}\n {option.hint === undefined ? null : (\n {option.hint}\n )}\n \n ))}\n
\n ,\n document.body,\n )\n : null}\n \n );\n}\n","import type { ReactElement } from 'react';\n\nimport { Combobox } from '../../../client/src/client/combobox.js';\nimport type { BrowserTranslate } from './locale.js';\n\nexport function ProfileCombobox({\n value,\n profiles,\n disabled,\n invalid,\n errorId,\n onSelect,\n t,\n}: {\n readonly value: string;\n readonly profiles: readonly string[];\n readonly disabled: boolean;\n readonly invalid: boolean;\n readonly errorId: string;\n readonly onSelect: (name: string) => void;\n readonly t: BrowserTranslate;\n}): ReactElement {\n const names = [...new Set(['default', ...profiles, value === '' ? 'default' : value])];\n return (\n ({ value: name, label: name }))}\n onSelect={onSelect}\n label={t('entry.profile.label')}\n toggleLabel={t('entry.profile.choose')}\n disabled={disabled}\n invalid={invalid}\n errorId={errorId}\n fallbackValue=\"default\"\n createLabel={(name) => t('entry.profile.create', { name })}\n />\n );\n}\n","import { space } from './ds/tokens.stylex.js';\nimport { panelMaterials, validTargetId } from './appearance-panels.js';\nimport { appearanceMaterials } from './appearance-materials.js';\nimport {\n APPEARANCE_KEY,\n APPEARANCE_PRIMARY,\n Appearance,\n type AppearanceSnapshot,\n} from './appearance.js';\nimport { NATIVE_LIGHT, NATIVE_DARK } from './appearance-native-tokens.js';\nexport const APPEARANCE_CLASS = 'bh-appearance-scope';\nexport function appearanceCss(snapshot: AppearanceSnapshot): string {\n const { config, mode } = snapshot;\n const selected = config.modes[mode];\n const primary = selected.primary ?? APPEARANCE_PRIMARY[selected.preset][mode];\n const materials = appearanceMaterials(selected, mode);\n const tokens: Record = {\n ...NATIVE_LIGHT,\n ...(mode === 'dark' ? NATIVE_DARK : {}),\n };\n for (const part of ['header', 'body'] as const) {\n const material = materials[part];\n tokens[`--bh-global-${part}-fill`] =\n `color-mix(in srgb, ${material.color} ${material.opacity}%, transparent)`;\n tokens[`--bh-global-${part}-blur`] = `${material.blur}px`;\n }\n tokens['--dsw-alias-state-business-primary'] = primary;\n tokens['--dsw-alias-state-business-secondary'] =\n `color-mix(in srgb, ${primary} 45%, transparent)`;\n tokens['--dsw-alias-state-business-tertiary'] = `color-mix(in srgb, ${primary} 14%, transparent)`;\n tokens['--dsw-specific-sidebar-nav-item-active'] =\n `color-mix(in srgb, ${primary} 14%, transparent)`;\n return `.bh-root,.bh-workspace-mount[data-workspace-enabled],.${APPEARANCE_CLASS},[data-bh-appearance-owned]{color:var(--dsw-alias-label-primary);color-scheme:${mode};${Object.entries(\n tokens,\n )\n .map(([k, v]) => `${k}:${v}`)\n .join(\n ';',\n )}}:root [data-bh-appearance-owned][data-menu-material],:root .${APPEARANCE_CLASS}[data-menu-material],:root .${APPEARANCE_CLASS} [data-menu-material]{--dsw-elevation-stroke-color:var(--dsw-alias-border-${mode === 'dark' ? 'l3' : 'l4'})}${materialCss()}${panelCss(snapshot)}`;\n}\n\nexport function mountAppearance(owner: Appearance): () => void {\n const style = document.createElement('style');\n style.dataset.plugin = '@botharness/ui';\n style.dataset.pluginCss = '@botharness/ui/appearance';\n const update = () => {\n style.textContent = appearanceCss(owner.getSnapshot());\n style.dataset.bhAppearance = owner.getSnapshot().mode;\n };\n const media = window.matchMedia('(prefers-color-scheme: dark)');\n const onStorage = (event: StorageEvent) => {\n if (event.key === APPEARANCE_KEY || event.key === null) owner.refresh();\n };\n update();\n document.head.appendChild(style);\n const off = owner.subscribe(update);\n media.addEventListener('change', owner.refresh);\n window.addEventListener('storage', onStorage);\n return () => {\n off();\n style.remove();\n media.removeEventListener('change', owner.refresh);\n window.removeEventListener('storage', onStorage);\n };\n}\n\nfunction materialCss(): string {\n const scope = ':root .bh-workspace-mount[data-workspace-enabled]';\n return `\n${scope} .bh-dock-theme { --dv-group-view-background-color:transparent; --dv-tabs-and-actions-container-background-color:transparent; --dv-activegroup-visiblepanel-tab-background-color:transparent; --dv-inactivegroup-visiblepanel-tab-background-color:transparent; --dv-activegroup-hiddenpanel-tab-background-color:transparent; --dv-inactivegroup-hiddenpanel-tab-background-color:transparent; }\n${scope} .bh-root, ${scope} .bh-workspace-rail { background:transparent; }\n${scope} .dv-tabs-and-actions-container, ${scope} .bh-channel-session-header { background:var(--bh-global-header-fill); backdrop-filter:blur(var(--bh-global-header-blur)); }\n${scope} [data-appearance-header] { background:var(--bh-global-header-fill); backdrop-filter:blur(var(--bh-global-header-blur)); }\n${scope} .bh-channel-subpanel-body { display:flex; flex-direction:column; flex:1; min-height:0; min-width:0; overflow:auto; }\n${scope} .bh-channel-subpanel-body > section { flex:1; min-height:0; }\n${scope} .bh-memory-commit-view { display:flex; flex-direction:column; padding:0; }\n${scope} .bh-memory-commit-header { margin:0; flex-shrink:0; }\n${scope} .bh-memory-detail-body { flex:1; padding:${space.x3} ${space.x4}; }\n${scope} [data-appearance-body], ${scope} .dv-content-container { background:var(--bh-global-body-fill); backdrop-filter:blur(var(--bh-global-body-blur)); }\n`;\n}\n\nfunction panelCss({ config, mode }: AppearanceSnapshot): string {\n return Object.keys(config.modes[mode].panels ?? {})\n .filter(validTargetId)\n .map((id) => {\n const material = panelMaterials(config.modes[mode], mode, id);\n const scope = `:root .bh-workspace-mount[data-workspace-enabled] .dv-groupview:has(> .dv-tabs-and-actions-container .dv-active-tab [data-dock-header=\"${id.slice(5)}\"])`;\n return (['header', 'body'] as const)\n .map(\n (part) =>\n `${scope} > ${part === 'header' ? '.dv-tabs-and-actions-container' : '.dv-content-container'}, :root .bh-workspace-mount[data-workspace-enabled] [data-appearance-${part}=\"${id.slice(5)}\"] { background:color-mix(in srgb, ${material[part].color} ${material[part].opacity}%, transparent); backdrop-filter:blur(${material[part].blur}px); }`,\n )\n .join('');\n })\n .join('');\n}\n","import { Modal as NativeModal, Menu as NativeMenu } from '@deepseek-ai/dsh-client-ui-primitives';\nimport type { ComponentProps } from 'react';\nimport { APPEARANCE_CLASS } from './appearance-scope.js';\nexport function Modal(props: ComponentProps) {\n return (\n \n );\n}\nexport function Menu(props: ComponentProps) {\n return (\n \n );\n}\n","import { Menu } from '../appearance-primitives.js';\nimport type { ComponentProps } from 'react';\nimport { createPortal } from 'react-dom';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { useMountedResource } from '../mounted-resource.js';\nimport { border, space } from './tokens.stylex.js';\n\nexport interface MenuPoint {\n readonly x: number;\n readonly y: number;\n}\n\nexport function pointerMenuPosition(\n point: MenuPoint,\n width: number,\n height: number,\n viewport: { width: number; height: number; top: number },\n) {\n const margin = Number.parseFloat(space.x4);\n return {\n x: Math.max(margin, Math.min(point.x, viewport.width - width - margin)),\n y: Math.max(\n Math.max(margin, viewport.top),\n Math.min(point.y, viewport.height - height - margin),\n ),\n };\n}\n\ntype PointerMenuProps = Omit<\n ComponentProps,\n 'open' | 'portal' | 'getAnchorRect' | 'side' | 'align' | 'className'\n> & { point: MenuPoint; container?: Element; align?: 'start' | 'end' };\n\nexport function PointerMenu({\n point,\n container = document.body,\n align = 'start',\n ...props\n}: PointerMenuProps) {\n const mount = useMountedResource(\n (node) => {\n const menu = node.querySelector('[role=\"menu\"]');\n if (!menu) return;\n const originalMaxWidth = Number.parseFloat(getComputedStyle(menu).maxWidth);\n const originalMinWidth = Number.parseFloat(getComputedStyle(menu).minWidth);\n const place = () => {\n const scale = node.getBoundingClientRect();\n if (!scale.width || !scale.height) return;\n const cssZoom =\n 'currentCSSZoom' in node && typeof node.currentCSSZoom === 'number'\n ? node.currentCSSZoom\n : undefined;\n const scaleX = cssZoom ?? scale.width;\n const scaleY = cssZoom ?? scale.height;\n const root = document.documentElement;\n const clearance = root.hasAttribute('data-fullscreen')\n ? 0\n : Number.parseFloat(\n getComputedStyle(root).getPropertyValue('--dsh-frame-top-clearance'),\n ) || 0;\n const margin = Number.parseFloat(space.x4);\n const availableWidth = Math.max(0, innerWidth - 2 * margin) / scaleX;\n menu.style.minWidth = `${Math.min(originalMinWidth || 0, availableWidth)}px`;\n menu.style.maxWidth = `${Math.min(originalMaxWidth || Infinity, availableWidth)}px`;\n menu.style.maxHeight = `${Math.max(0, innerHeight - Math.max(margin, clearance) - margin) / scaleY}px`;\n const box = menu.getBoundingClientRect();\n const desired = pointerMenuPosition(\n { x: align === 'end' ? point.x - box.width : point.x, y: point.y },\n box.width,\n box.height,\n {\n width: innerWidth,\n height: innerHeight,\n top: clearance,\n },\n );\n const left = Number.parseFloat(node.style.left) || 0;\n const top = Number.parseFloat(node.style.top) || 0;\n node.style.left = `${left + (desired.x - box.left) / scaleX}px`;\n node.style.top = `${top + (desired.y - box.top) / scaleY}px`;\n };\n place();\n const observer =\n typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(place);\n observer?.observe(menu);\n observer?.observe(node);\n window.addEventListener('resize', place);\n window.addEventListener('scroll', place, true);\n return () => {\n observer?.disconnect();\n window.removeEventListener('resize', place);\n window.removeEventListener('scroll', place, true);\n };\n },\n [point.x, point.y, align],\n );\n return createPortal(\n \n \n ,\n container,\n );\n}\n\nconst styles = stylex.create({\n origin: {\n position: 'fixed',\n left: 0,\n top: 0,\n width: border.hairline,\n height: border.hairline,\n zIndex: 1100,\n pointerEvents: 'none',\n },\n menu: { pointerEvents: 'auto' },\n});\n","import type { ButtonHTMLAttributes, InputHTMLAttributes, ReactElement, ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { border, color, radius, size, space, text } from './tokens.stylex.js';\n\nexport const pillStyles = stylex.create({\n pill: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: space.x2,\n maxWidth: '100%',\n height: size.icon,\n paddingInline: `${space.x4} ${space.x3}`,\n borderWidth: 0,\n borderRadius: radius.sm,\n backgroundColor: { default: color.surface, ':hover': color.hover },\n color: color.fg,\n fontFamily: 'inherit',\n fontSize: text.bodySize,\n lineHeight: text.bodyLine,\n whiteSpace: 'nowrap',\n cursor: { default: 'pointer', ':disabled': 'default' },\n opacity: { default: 1, ':disabled': 0.5 },\n outline: { default: 'none', ':focus-visible': `${border.focus} solid ${color.accent}` },\n outlineOffset: '1px',\n },\n});\n\nexport function PillButton({\n children,\n ...rest\n}: { readonly children: ReactNode } & Omit<\n ButtonHTMLAttributes,\n 'className' | 'style' | 'type' | 'children'\n>): ReactElement {\n return (\n \n );\n}\n\nexport function PillFileButton({\n children,\n ...input\n}: { readonly children: ReactNode } & Omit<\n InputHTMLAttributes,\n 'className' | 'style' | 'type' | 'children' | 'hidden'\n>): ReactElement {\n return (\n \n );\n}\n","import { PointerMenu, type MenuPoint } from './pointer-menu.js';\nimport { useMountedResource } from '../mounted-resource.js';\nimport { useRef, useState, type ReactElement, type ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\nimport { IconChevronDownOutlineRegular } from '@deepseek-ai/dsh-client-ui-primitives';\n\nimport { pillStyles } from './pill-button.js';\nimport { color, space } from './tokens.stylex.js';\n\nconst styles = stylex.create({\n label: {\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n chevron: {\n display: 'inline-flex',\n flexShrink: 0,\n color: color.muted,\n },\n});\n\nexport interface SelectOption {\n readonly value: Value;\n readonly label: ReactNode;\n}\n\nexport interface SelectProps {\n readonly label: string;\n readonly value: Value;\n readonly options: readonly SelectOption[];\n readonly onChange: (value: Value) => void;\n readonly disabled?: boolean;\n readonly align?: 'start' | 'end';\n readonly autoFocus?: boolean;\n readonly reselect?: boolean;\n}\n\nexport function Select({\n label,\n value,\n options,\n onChange,\n disabled = false,\n align = 'end',\n autoFocus = false,\n reselect = false,\n}: SelectProps): ReactElement {\n const [open, setOpen] = useState(false);\n const [point, setPoint] = useState();\n const trigger = useRef(null);\n const active = open && !disabled;\n const mount = useMountedResource(\n (node) => {\n trigger.current = node;\n if (!active)\n return () => {\n trigger.current = null;\n };\n const place = () => {\n const rect = node.getBoundingClientRect();\n const scale = node.offsetHeight > 0 ? rect.height / node.offsetHeight : 1;\n const next = {\n x: align === 'end' ? rect.right : rect.left,\n y: rect.bottom + Number.parseFloat(space.x2) * scale,\n };\n setPoint((previous) => (previous?.x === next.x && previous.y === next.y ? previous : next));\n };\n place();\n const resize = typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(place);\n resize?.observe(node);\n resize?.observe(document.documentElement);\n const observer = new MutationObserver(place);\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['style', 'data-fullscreen'],\n });\n window.addEventListener('resize', place);\n window.addEventListener('scroll', place, true);\n return () => {\n trigger.current = null;\n resize?.disconnect();\n observer.disconnect();\n window.removeEventListener('resize', place);\n window.removeEventListener('scroll', place, true);\n };\n },\n [active, align],\n );\n const close = () => {\n const button = trigger.current;\n const menu = document.activeElement?.closest('[data-pointer-menu]');\n setOpen(false);\n setPoint(undefined);\n queueMicrotask(() => {\n const focused = document.activeElement;\n if (\n button?.isConnected &&\n !button.disabled &&\n (focused === document.body || (focused !== null && menu?.contains(focused)))\n )\n button.focus({ preventScroll: true });\n });\n };\n const current = options.find((option) => option.value === value);\n return (\n <>\n {\n if (active) event.stopPropagation();\n }}\n onClick={() => {\n if (active) close();\n else setOpen(true);\n }}\n {...stylex.props(pillStyles.pill)}\n >\n {current?.label}\n \n \n \n \n {active && point ? (\n }\n items={options.map((option) => ({ id: option.value, label: option.label }))}\n selectedId={value}\n onSelect={(id) => {\n close();\n const next = options.find((option) => option.value === id);\n if (next !== undefined && (reselect || next.value !== value)) onChange(next.value);\n }}\n onClose={close}\n />\n ) : null}\n \n );\n}\n","import { useId, type ReactElement, type ReactNode, type Ref } from 'react';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { border, color, space, text } from './tokens.stylex.js';\n\nconst NARROW = '@media (max-width: 648px)';\nconst COMPACT = '@container bh-settings (max-width: 480px)';\n\nconst styles = stylex.create({\n rows: {\n display: 'flex',\n flexDirection: 'column',\n minWidth: 0,\n },\n section: {\n display: 'flex',\n flexDirection: 'column',\n minWidth: 0,\n paddingTop: { default: space.x5, ':first-child': 0 },\n },\n sectionHead: {\n display: 'flex',\n flexDirection: 'column',\n gap: space.x1,\n paddingBottom: space.x2,\n },\n sectionTitle: {\n margin: 0,\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n fontWeight: text.strong,\n },\n row: {\n display: 'flex',\n alignItems: { default: 'center', [NARROW]: 'stretch', [COMPACT]: 'stretch' },\n flexDirection: { default: 'row', [NARROW]: 'column', [COMPACT]: 'column' },\n gap: { default: space.x4, [NARROW]: space.x3, [COMPACT]: space.x3 },\n minWidth: 0,\n paddingBlock: space.x4,\n borderBottomWidth: border.hairline,\n borderBottomStyle: 'solid',\n borderBottomColor: { default: color.divider, ':last-child': 'transparent' },\n },\n text: {\n display: 'flex',\n flexDirection: 'column',\n gap: space.x1,\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: 0,\n minWidth: 0,\n },\n title: {\n color: color.fg,\n fontSize: text.titleSize,\n lineHeight: text.titleLine,\n fontWeight: text.strong,\n overflowWrap: 'anywhere',\n },\n description: {\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n overflowWrap: 'anywhere',\n },\n control: {\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n justifyContent: { default: 'flex-end', [NARROW]: 'flex-start', [COMPACT]: 'flex-start' },\n gap: space.x3,\n flexShrink: 0,\n minWidth: 0,\n maxWidth: { default: '60%', [NARROW]: '100%', [COMPACT]: '100%' },\n },\n value: {\n color: color.muted,\n fontSize: text.bodySize,\n lineHeight: text.bodyLine,\n textAlign: 'end',\n overflowWrap: 'anywhere',\n },\n});\n\nexport function SettingsRows({\n children,\n rootRef,\n}: {\n readonly children: ReactNode;\n readonly rootRef?: Ref | undefined;\n}): ReactElement {\n return (\n
\n {children}\n
\n );\n}\n\nexport interface SettingsSectionProps {\n readonly title?: ReactNode;\n readonly description?: ReactNode;\n readonly children: ReactNode;\n}\n\nexport function SettingsSection({\n title,\n description,\n children,\n}: SettingsSectionProps): ReactElement {\n const id = useId();\n return (\n \n {title === undefined ? null : (\n
\n

\n {title}\n

\n {description === undefined ? null : (\n
{description}
\n )}\n
\n )}\n {children}\n \n );\n}\n\nexport interface SettingsRowProps {\n readonly title: ReactNode;\n readonly description?: ReactNode;\n readonly control?: ReactNode;\n readonly children?: ReactNode;\n readonly rootRef?: Ref | undefined;\n readonly data?: Readonly>;\n}\n\nexport function SettingsRow({\n title,\n description,\n control,\n children,\n rootRef,\n data,\n}: SettingsRowProps): ReactElement {\n const id = useId();\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n return (\n \n
\n
\n {title}\n
\n {description === undefined ? null : (\n
\n {description}\n
\n )}\n {children}\n
\n {control === undefined ? null :
{control}
}\n \n );\n}\n\nexport function SettingsValue({ children }: { readonly children: ReactNode }): ReactElement {\n return {children};\n}\n","import { useMemo, useState, useSyncExternalStore, type ReactElement } from 'react';\nimport { Note } from '../../../client/src/client/ds/note.js';\nimport { Select } from '../../../client/src/client/ds/select.js';\nimport { SettingsRow, SettingsRows } from '../../../client/src/client/ds/settings-row.js';\nimport type { BrowserClientContext } from './index.js';\nimport { LOCALE_NS, type BrowserTranslate } from './locale.js';\n\ninterface TargetScope {\n getSnapshot(): {\n status: string;\n writable: boolean;\n value:\n | {\n target?: 'local' | 'container' | 'extension' | 'daily-control' | 'profile-control';\n localDriver?: 'current' | 'agent-browser';\n containerDriver?: 'current' | 'agent-browser';\n }\n | undefined;\n };\n subscribe(listener: () => void): () => void;\n set(field: string, value: unknown): Promise;\n}\n\nfunction ConfigChoice({\n scope,\n field,\n value,\n writable,\n title,\n items,\n}: {\n scope: TargetScope;\n field: 'target' | 'localDriver' | 'containerDriver';\n value: string;\n writable: boolean;\n title: string;\n items: { id: string; label: string }[];\n}): ReactElement {\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState();\n return (\n <>\n ({ value: item.id, label: item.label }))}\n disabled={!writable || saving}\n onChange={(id) => {\n setSaving(true);\n setError(undefined);\n void scope\n .set(field, id)\n .then(() => {\n if (scope.getSnapshot().value?.[field] !== id)\n throw new Error('Browser setting was not saved');\n })\n .catch((cause: unknown) => setError(String(cause)))\n .finally(() => setSaving(false));\n }}\n />\n }\n />\n {error === undefined ? null : {error}}\n \n );\n}\n\nexport function BrowserTargetSettings({\n scope,\n t,\n}: {\n scope: TargetScope;\n t: BrowserTranslate;\n}): ReactElement {\n const store = useMemo(\n () => ({\n subscribe: (listener: () => void) => scope.subscribe(listener),\n getSnapshot: () => scope.getSnapshot(),\n }),\n [scope],\n );\n const snapshot = useSyncExternalStore(store.subscribe, store.getSnapshot);\n const target = snapshot.value?.target ?? 'local';\n return (\n \n ({ id, label: t(`settings.${id}`) }))}\n />\n {target !== 'local' && target !== 'container' ? null : (\n ({\n id,\n label: t(`settings.driver.${id}`),\n }))}\n />\n )}\n \n );\n}\n\nexport function registerBrowserSettings(ctx: BrowserClientContext, t: BrowserTranslate): void {\n ctx.inject(['configForms', 'slots'], (settingsCtx) => {\n const native = settingsCtx as unknown as {\n configForms: { get(namespace: string): TargetScope };\n slots: {\n inject(name: string, callback: () => unknown): () => void;\n register(\n options: {\n name: string;\n id: string;\n order: number;\n label: () => string;\n locale: string;\n inject: () => { scope: TargetScope; t: BrowserTranslate };\n },\n component: typeof BrowserTargetSettings,\n ): () => void;\n };\n };\n const scope = native.configForms.get('botharness-browser');\n return native.slots.inject('botharness.settings.section', () =>\n native.slots.register(\n {\n name: 'botharness.settings.section',\n id: 'browser',\n order: 32,\n label: () => t('settings.section'),\n locale: LOCALE_NS,\n inject: () => ({ scope, t }),\n },\n BrowserTargetSettings,\n ),\n );\n });\n}\n","import { useCallback, useRef, useState, type ReactElement } from 'react';\nimport { Button, Input, Tag } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { SidebarCardList, SidebarCardRow } from '../../../client/src/client/sidebar-card.js';\nimport type { BrowserTranslate } from './locale.js';\n\nimport type { ProfileView } from '../profile-control.js';\n\nexport function ProfileBrowserControl({\n slug,\n view,\n paused,\n enabled,\n t,\n refresh,\n}: {\n readonly slug: string | undefined;\n readonly view: ProfileView | undefined;\n readonly paused: boolean;\n readonly enabled: boolean;\n readonly t: BrowserTranslate;\n readonly refresh: () => void;\n}): ReactElement {\n const [pair, setPair] = useState<{ code: string; expiresAt: number } | undefined>();\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState();\n const active = useRef(false);\n const sequence = useRef(0);\n const resource = useCallback((node: HTMLDivElement | null): void => {\n active.current = node !== null;\n if (node === null) sequence.current += 1;\n }, []);\n const invoke = (action: 'pair' | 'forget' | 'pause'): void => {\n if (slug === undefined || busy) return;\n const request = ++sequence.current;\n setBusy(true);\n setError(undefined);\n setPair(undefined);\n void fetch(action === 'pause' ? './api/browser/takeover' : `./api/browser/profile/${action}`, {\n method: 'POST',\n cache: 'no-store',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ slug, ...(action === 'pause' ? { active: !paused } : {}) }),\n })\n .then(async (response) => {\n const body = (await response.json()) as {\n ok: boolean;\n error?: string;\n code?: string;\n expiresAt?: number;\n };\n if (!response.ok || !body.ok) throw new Error(body.error ?? t('entry.error'));\n if (!active.current || sequence.current !== request) return;\n if (action === 'pair' && body.code !== undefined && body.expiresAt !== undefined)\n setPair({ code: body.code, expiresAt: body.expiresAt });\n })\n .catch((cause: unknown) => {\n if (active.current && sequence.current === request)\n setError(cause instanceof Error ? cause.message : t('entry.error'));\n })\n .finally(() => {\n if (active.current && sequence.current === request) {\n setBusy(false);\n refresh();\n }\n });\n };\n return (\n
\n \n \n {view?.paired !== true ? (\n {t('entry.chip.unpaired')}\n ) : view.connected ? (\n {t('entry.chip.connected')}\n ) : (\n {t('entry.chip.offline')}\n )}\n {paused ? {t('entry.chip.paused')} : null}\n \n }\n meta={\n <>\n {t('entry.profile.scope')}\n \n {view?.paired\n ? t(view.connected ? 'entry.profile.connected' : 'entry.profile.disconnected')\n : t('entry.view.noTabs')}\n {view?.connected ? ` · ${view.tabs}` : ''}\n \n \n }\n detail={\n
\n \n {t('entry.profile.install')}\n \n
\n invoke(view?.paired ? 'forget' : 'pair')}\n >\n {t(view?.paired ? 'entry.profile.forget' : 'entry.profile.pair')}\n \n {view?.connected ? (\n invoke('pause')}\n >\n {t(paused ? 'entry.view.resume' : 'entry.view.pause')}\n \n ) : null}\n
\n {view?.paired || pair === undefined ? null : (\n <>\n {t('entry.profile.instructions')}\n \n {location.origin}\n \n )}\n
\n }\n />\n
\n {error === undefined ? null : (\n
\n {error}\n
\n )}\n
\n );\n}\n","import { useCallback, useRef, useState, type ReactElement } from 'react';\nimport { Button, Tag } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { SidebarCardList, SidebarCardRow } from '../../../client/src/client/sidebar-card.js';\nimport type { DailyView } from '../daily.js';\nimport type { BrowserTranslate } from './locale.js';\n\nexport function DailyBrowserControl({\n slug,\n view,\n enabled,\n paused,\n t,\n refresh,\n}: {\n readonly slug: string | undefined;\n readonly view: DailyView | null;\n readonly enabled: boolean;\n readonly paused: boolean;\n readonly t: BrowserTranslate;\n readonly refresh: () => void;\n}): ReactElement {\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState();\n const mounted = useRef(false);\n const resource = useCallback((node: HTMLDivElement | null): void => {\n mounted.current = node !== null;\n }, []);\n const invoke = (action: 'connect' | 'grant' | 'return' | 'pause'): void => {\n if (busy || slug === undefined) return;\n setBusy(true);\n setError(undefined);\n void fetch(action === 'pause' ? './api/browser/takeover' : `./api/browser/daily/${action}`, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ slug, ...(action === 'pause' ? { active: !paused } : {}) }),\n })\n .then(async (response) => {\n const body = (await response.json()) as { ok: boolean; error?: string };\n if (!response.ok || !body.ok) throw new Error(body.error ?? t('entry.error'));\n })\n .catch((cause: unknown) => {\n if (mounted.current) setError(cause instanceof Error ? cause.message : t('entry.error'));\n })\n .finally(() => {\n if (mounted.current) {\n setBusy(false);\n refresh();\n }\n });\n };\n return (\n
\n \n \n {view === null || view.state === 'error' ? (\n {t('entry.chip.disconnected')}\n ) : view.state === 'connecting' ? (\n {t('entry.chip.connecting')}\n ) : view.state === 'confirm' ? (\n {t('entry.chip.confirm')}\n ) : (\n {t('entry.chip.controlled')}\n )}\n {paused && view?.state === 'controlled' ? (\n {t('entry.chip.paused')}\n ) : null}\n \n }\n meta={\n view === null || view.state === 'error' ? undefined : (\n \n {t(\n view.state === 'connecting'\n ? 'entry.daily.select'\n : view.state === 'confirm'\n ? 'entry.daily.confirm'\n : 'entry.daily.controlled',\n )}\n \n )\n }\n detail={\n
\n {view === null || view.state === 'error' || view.url === '' ? null : (\n <>\n {view.title || view.url}\n {view.url}\n \n )}\n \n {t('entry.daily.install')}\n \n
\n {view === null || view.state === 'error' ? (\n invoke('connect')}\n >\n {t('entry.daily.connect')}\n \n ) : (\n <>\n {view.state === 'confirm' ? (\n invoke('grant')}\n >\n {t('entry.daily.allow')}\n \n ) : null}\n {view.state === 'controlled' ? (\n invoke('pause')}\n >\n {t(paused ? 'entry.view.resume' : 'entry.view.pause')}\n \n ) : null}\n invoke('return')}\n >\n {t(\n view.state === 'connecting' ? 'entry.borrow.cancel' : 'entry.borrow.return',\n )}\n \n \n )}\n
\n
\n }\n />\n
\n {view?.error === undefined ? null : (\n
\n {view.error}\n
\n )}\n {error === undefined ? null : (\n
\n {error}\n
\n )}\n
\n );\n}\n","import { useCallback, useRef, useState, type ReactElement } from 'react';\nimport { Button, Input, Tag } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { SidebarCardList, SidebarCardRow } from '../../../client/src/client/sidebar-card.js';\nimport type { BrowserTranslate } from './locale.js';\n\nexport interface BorrowedTabView {\n readonly title: string;\n readonly url: string;\n readonly expiresAt: number;\n}\n\nexport function BorrowedBrowser({\n slug,\n tab,\n enabled,\n t,\n refresh,\n}: {\n readonly slug: string | undefined;\n readonly tab: BorrowedTabView | null | undefined;\n readonly enabled: boolean;\n readonly t: BrowserTranslate;\n readonly refresh: () => void;\n}): ReactElement {\n const [pair, setPair] = useState<{ code: string; expiresAt: number } | undefined>();\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState();\n const active = useRef(false);\n const sequence = useRef(0);\n const resource = useCallback((node: HTMLDivElement | null): void => {\n active.current = node !== null;\n if (node === null) sequence.current += 1;\n }, []);\n const invoke = (action: 'pair' | 'return'): void => {\n if (slug === undefined || busy) return;\n const request = ++sequence.current;\n setBusy(true);\n setError(undefined);\n setPair(undefined);\n void fetch(`./api/browser/borrow/${action}`, {\n method: 'POST',\n cache: 'no-store',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ slug }),\n })\n .then(async (response) => {\n const body = (await response.json()) as {\n ok: boolean;\n error?: string;\n code?: string;\n expiresAt?: number;\n };\n if (!response.ok || !body.ok) throw new Error(body.error ?? t('entry.error'));\n if (!active.current || sequence.current !== request) return;\n if (action === 'pair' && body.code !== undefined && body.expiresAt !== undefined)\n setPair({ code: body.code, expiresAt: body.expiresAt });\n })\n .catch((cause: unknown) => {\n if (active.current && sequence.current === request)\n setError(cause instanceof Error ? cause.message : t('entry.error'));\n })\n .finally(() => {\n if (active.current && sequence.current === request) {\n setBusy(false);\n refresh();\n }\n });\n };\n return (\n
\n \n {t('entry.chip.notShared')}\n ) : (\n {t('entry.chip.readOnly')}\n )\n }\n meta={{t(tab == null ? 'entry.borrow.none' : 'entry.borrow.readOnly')}}\n detail={\n
\n {tab == null ? null : (\n <>\n {tab.title || tab.url}\n {tab.url}\n \n )}\n invoke(tab == null ? 'pair' : 'return')}\n >\n {t(tab == null ? 'entry.borrow.pair' : 'entry.borrow.return')}\n \n {tab != null || pair === undefined ? null : (\n <>\n {t('entry.borrow.instructions')}\n \n {location.origin}\n {\n sequence.current += 1;\n setPair(undefined);\n invoke('return');\n }}\n >\n {t('entry.borrow.cancel')}\n \n \n )}\n
\n }\n />\n
\n {error === undefined ? null : (\n
\n {error}\n
\n )}\n
\n );\n}\n","export const STYLEX_CSS: string = '@bh-stylex-css';\n","import { border, color, radius, space, text } from '../../../client/src/client/ds/tokens.stylex.js';\nimport { COMBOBOX_CSS } from '../../../client/src/client/combobox.js';\nimport { STYLEX_CSS } from '../../../client/src/client/ds/stylex-css.js';\n\nexport const styles =\n COMBOBOX_CSS +\n `\n.bh-browser-access-control { position: relative; display: flex; align-items: center; }\n.bh-browser-borrow { display: grid; gap: ${space.x3}; font-size: ${text.metaSize}; }\n.bh-browser-borrow-title, .bh-browser-daily-install { color: var(--dsw-alias-label-primary); text-underline-offset: 3px; }\n.bh-browser-borrow-url { overflow-wrap: anywhere; }\n.bh-browser-borrow-url { color: var(--dsw-alias-label-secondary); }\n.bh-browser-access-power {\n display: flex; align-items: center; justify-content: center; width: 28px; height: 28px;\n padding: 0; border: 0; border-radius: ${radius.md}; background: transparent;\n color: var(--dsw-alias-label-secondary); cursor: pointer;\n}\n.bh-browser-access-power:hover { background: var(--dsw-alias-interactive-bg-hover); }\n.bh-browser-access-power[aria-pressed='true'] { color: var(--dsw-alias-state-business-primary); background: var(--dsw-alias-interactive-bg-hover); }\n.bh-browser-access-power:focus-visible { outline: ${border.focus} solid var(--dsw-alias-state-business-primary); outline-offset: 2px; }\n.bh-browser-access-power:disabled { opacity: 0.5; cursor: default; }\n.bh-browser-access-power.bh-access-failed { color: var(--dsw-alias-state-error-primary); }\n.bh-browser-access-error { order: -1; padding: 0 ${space.x2}; color: var(--dsw-alias-state-error-primary); font-size: ${text.metaSize}; line-height: ${text.metaLine}; white-space: nowrap; }\n\n.bh-browser-local { display: grid; gap: ${space.x3}; font-size: ${text.metaSize}; }\n.bh-browser-card-detail { display: grid; gap: ${space.x3}; justify-items: start; font-size: ${text.metaSize}; }\n.bh-browser-card-field { display: flex; align-items: center; justify-content: space-between; gap: ${space.x3}; width: 100%; color: var(--dsw-alias-label-secondary); }\n.bh-browser-card-field > span:first-child { flex: none; }\n.bh-browser-cards .bh-card-meta [role=\"status\"] { color: inherit; }\n.bh-browser-note { color: var(--dsw-alias-label-secondary); }\n.bh-browser-frame { display: block; width: 100%; border: ${border.hairline} solid ${color.divider}; border-radius: ${radius.md}; }\n.bh-browser-actions { display: flex; flex-wrap: wrap; gap: ${space.x3}; }\n.bh-browser-tab[aria-pressed=\"true\"] { background: var(--dsw-alias-interactive-bg-hover); }\n.bh-browser-tab[aria-current=\"true\"] .bh-browser-tab-title { font-weight: ${text.strong}; }\n.bh-browser-tab .bh-browser-tab-url { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.bh-browser-tabs .bh-card-main { padding: ${space.x3} ${space.x3}; }\n.bh-browser-error { color: var(--dsw-alias-state-error-primary); overflow-wrap: anywhere; }\n.bh-viewer-btn-content { display: inline-flex; align-items: center; gap: ${space.x2}; }\n@media (max-width: 560px) {\n [data-bh-viewer-btn-label] { display: none; }\n}\n.bh-browser-progress { display: grid; gap: ${space.x2}; color: var(--dsw-alias-label-secondary); }\n.bh-browser-progress-bar { width: 100%; height: 6px; accent-color: var(--dsw-alias-state-business-primary); }\n.bh-browser-failure { display: grid; gap: ${space.x2}; overflow-wrap: anywhere; }\n.bh-browser-failure-title { color: var(--dsw-alias-label-primary); font-weight: ${text.strong}; }\n.bh-browser-failure-fault, .bh-browser-failure-action { color: var(--dsw-alias-label-secondary); }\n.bh-browser-failure-details { color: var(--dsw-alias-label-secondary); }\n.bh-browser-failure-details pre { overflow-x: auto; white-space: pre-wrap; font-size: ${text.metaSize}; }\n` +\n STYLEX_CSS;\n","/**\n * Vendored Access Power glyph from lucide-react@1.46.0 (ISC, ADR-0032).\n *\n * Source: the lucide `dist/esm/icons/power.mjs` glyph data. Vendored at the\n * stock 2-unit stroke without adding a `lucide-react` runtime dependency.\n *\n * ISC License\n *\n * Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2022 as part of Feather (MIT).\n * All other copyright (c) for Lucide are held by Lucide Contributors 2022.\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\nimport type { ReactElement } from 'react';\nexport function AccessPowerIcon(): ReactElement {\n return (\n \n \n \n \n );\n}\n","import type { ReactElement } from 'react';\n\nfunction baseProps(size: number): {\n width: number;\n height: number;\n viewBox: string;\n fill: string;\n stroke: string;\n strokeWidth: number;\n strokeLinecap: 'round';\n strokeLinejoin: 'round';\n 'aria-hidden': true;\n} {\n return {\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n 'aria-hidden': true,\n };\n}\n\nexport function TrackpadIcon({ size = 14 }: { readonly size?: number }): ReactElement {\n return (\n \n \n \n \n );\n}\n\nexport function TakeoverIcon({ size = 14 }: { readonly size?: number }): ReactElement {\n return (\n \n \n \n \n \n );\n}\n","import { PanelEmptyState } from '../../../client/src/client/ds/empty-state.js';\nimport { RemoteViewer } from '../../../client/src/client/remote-viewer/index.js';\nimport type { ViewerTranslate } from '../../../client/src/client/remote-viewer/locale.js';\nimport {\n useId,\n useCallback,\n useRef,\n useState,\n useSyncExternalStore,\n type ComponentType,\n type ReactElement,\n} from 'react';\nimport {\n Button,\n IconFullscreenOutlineRegular,\n Switch,\n Tag,\n Tooltip,\n} from '@deepseek-ai/dsh-client-ui-primitives';\nimport { ChannelSidebarIcon } from '../../../client/src/client/channel-sidebar-icon.js';\nimport { useMountedResource } from '../../../client/src/client/mounted-resource.js';\nimport { SidebarCardList, SidebarCardRow } from '../../../client/src/client/sidebar-card.js';\nimport type {} from '@deepseek-ai/dsh-client-ui-slots';\n\nimport { LOCALE_NS, en, zh, type BrowserTranslate } from './locale.js';\nimport {\n BrowserApiError,\n BrowserFailureNotice,\n BrowserProvisionProgress,\n readFailure,\n type BrowserFailure,\n} from './browser-failure.js';\nimport { isBrowserFailureKind } from '../failure-kinds.js';\nimport { ProfileCombobox } from './profile-combobox.js';\nimport { registerBrowserSettings } from './settings.js';\nimport { ProfileBrowserControl } from './profile-browser.js';\nimport type { ProfileView } from '../profile-control.js';\nimport { DailyBrowserControl } from './daily-browser.js';\nimport type { DailyView } from '../daily.js';\nimport { BorrowedBrowser, type BorrowedTabView } from './borrowed-browser.js';\nimport { styles } from './styles.js';\n\nconst ENTRY_ID = 'botharness-browser';\nconst OBSERVATION_ENDPOINT = './api/browser/observation';\nconst TAKEOVER_ENDPOINT = './api/browser/takeover';\nconst OPEN_ENDPOINT = './api/browser/open';\nconst STOP_ENDPOINT = './api/browser/stop';\nconst baseRelative = (path: string | null | undefined): string | undefined =>\n path === null || path === undefined ? undefined : path.startsWith('/') ? `.${path}` : path;\n\nimport { AccessPowerIcon } from './access-power-icon.js';\nimport { TakeoverIcon, TrackpadIcon } from './viewer-icons.js';\n\nexport const name = 'botharness-browser-client';\n\nexport const inject = ['channelSidebar', 'connection', 'locale'];\n\nexport interface BrowserClientContext {\n readonly locale: {\n bind(namespace: string): BrowserTranslate;\n register(namespace: string, dictionaries: { zh: unknown; en: unknown }): () => void;\n };\n inject(names: readonly string[], callback: (ctx: BrowserClientContext) => void): void;\n effect(callback: () => () => void, name: string): void;\n}\n\ninterface ChannelSidebarEntryProps {\n readonly botSlug?: string;\n readonly t: BrowserTranslate;\n readonly expanded?: boolean;\n readonly setExpanded?: (expanded: boolean) => void;\n readonly setExpandable?: (expandable: boolean) => void;\n}\n\ninterface ChannelSidebarRegistryLike {\n register(entry: {\n readonly id: string;\n readonly label: string;\n readonly icon?: string;\n readonly order: number;\n readonly scope: 'channel' | 'personabot';\n readonly component: ComponentType;\n readonly headerAction?: ComponentType;\n readonly badge?: ComponentType;\n readonly tab?: string;\n }): () => void;\n}\n\ninterface ConnectionRpcLike {\n call(\n path: string,\n method: string,\n options?: { args?: unknown },\n ): Promise<{ ok: boolean; value?: unknown; error?: { message?: string } }>;\n}\n\nlet connectionRpc: ConnectionRpcLike | undefined;\n\ninterface BotInfoView {\n readonly displayName: string | undefined;\n readonly browserAccess: boolean | undefined;\n readonly browserProfile: string | undefined;\n readonly profiles: readonly string[];\n}\n\ninterface BrowserTabView {\n readonly targetId: string;\n readonly url: string;\n readonly title: string;\n readonly current: boolean;\n}\n\ninterface BrowserObservation {\n readonly target?: 'local' | 'container' | 'extension' | 'daily-control' | 'profile-control';\n readonly daily?: DailyView | null;\n readonly profile?: ProfileView;\n readonly borrowed?: BorrowedTabView | null;\n readonly viewerUrl?: string | null;\n readonly cleanupRequired?: boolean;\n readonly running: boolean;\n readonly frame: string | null;\n readonly focused: string | null;\n readonly takeover: boolean;\n readonly handoffPending?: boolean;\n readonly provisioning?: { downloadedBytes: number; totalBytes: number } | null;\n readonly tabs: readonly BrowserTabView[];\n readonly profiles?: readonly string[];\n}\n\nasync function requestJson(url: string, init?: RequestInit): Promise {\n const response = await fetch(url, { cache: 'no-store', ...init });\n const body = (await response.json()) as T & {\n ok?: boolean;\n error?: string;\n code?: string;\n detail?: string;\n packages?: string[];\n };\n if (!response.ok || body.ok === false) {\n throw new BrowserApiError(\n body.error ?? `HTTP ${String(response.status)}`,\n body.code,\n body.detail,\n body.packages,\n );\n }\n return body;\n}\n\ninterface ReadableStore {\n subscribe(listener: () => void): () => void;\n getSnapshot(): T;\n}\n\ntype BotInfoStore = ReadableStore & {\n refresh(): void;\n setAccess(enabled: boolean): void;\n};\n\nconst botInfoStores = new Map();\n\nfunction botInfoStore(botSlug: string | undefined): BotInfoStore {\n const key = botSlug ?? '';\n const existing = botInfoStores.get(key);\n if (existing !== undefined) return existing;\n const created = createBotInfoStore(botSlug);\n botInfoStores.set(key, created);\n return created;\n}\n\nfunction createBotInfoStore(botSlug: string | undefined): BotInfoStore {\n let info: BotInfoView = {\n displayName: undefined,\n browserAccess: undefined,\n browserProfile: undefined,\n profiles: [],\n };\n const listeners = new Set<() => void>();\n let loadedAt = Number.NEGATIVE_INFINITY;\n const load = (): void => {\n const rpc = connectionRpc;\n if (rpc === undefined || botSlug === undefined) return;\n void rpc\n .call('/api', 'botharness/list', { args: {} })\n .then((result) => {\n if (!result.ok) return;\n const value = result.value as {\n bots?: readonly {\n slug?: unknown;\n displayName?: unknown;\n browserAccess?: unknown;\n browserProfile?: unknown;\n }[];\n };\n const bots = value.bots ?? [];\n const match = bots.find((bot) => bot.slug === botSlug);\n if (match === undefined) return;\n const profiles = [\n ...new Set(\n bots\n .map((bot) => (typeof bot.browserProfile === 'string' ? bot.browserProfile : ''))\n .filter((name) => name !== ''),\n ),\n ].sort();\n info = {\n displayName:\n typeof match.displayName === 'string' && match.displayName.length > 0\n ? match.displayName\n : undefined,\n browserAccess: match.browserAccess === true,\n browserProfile:\n typeof match.browserProfile === 'string' && match.browserProfile !== ''\n ? match.browserProfile\n : undefined,\n profiles,\n };\n for (const listener of listeners) listener();\n })\n .catch(() => undefined);\n };\n return {\n setAccess(enabled) {\n info = { ...info, browserAccess: enabled };\n for (const listener of listeners) listener();\n },\n subscribe(listener) {\n if (listeners.size === 0 && Date.now() - loadedAt > 5000) {\n loadedAt = Date.now();\n load();\n }\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n getSnapshot: () => info,\n refresh: load,\n };\n}\n\ninterface ObservationStore {\n subscribe(listener: () => void): () => void;\n getSnapshot(): BrowserObservation | undefined;\n setTab(targetId: string | undefined): void;\n refresh(): void;\n confirmTakeover(active: boolean): void;\n}\n\nfunction observationUrl(botSlug: string | undefined, tabId: string | undefined): string {\n const base = `${OBSERVATION_ENDPOINT}?slug=${encodeURIComponent(botSlug ?? '')}`;\n return tabId === undefined || tabId === '' ? base : `${base}&tab=${encodeURIComponent(tabId)}`;\n}\n\nfunction createObservationStore(botSlug: string | undefined): ObservationStore {\n let value: BrowserObservation | undefined;\n let tab: string | undefined;\n let timer: ReturnType | undefined;\n let refreshing = false;\n let revision = 0;\n let refreshAgain = false;\n const listeners = new Set<() => void>();\n const refresh = async (): Promise => {\n if (refreshing) {\n refreshAgain = true;\n return;\n }\n refreshing = true;\n const requestedTab = tab;\n const requestedRevision = revision;\n try {\n const next = await requestJson(observationUrl(botSlug, requestedTab));\n if (tab === requestedTab && revision === requestedRevision) value = next;\n } catch {\n if (tab === requestedTab && revision === requestedRevision) value = undefined;\n } finally {\n refreshing = false;\n }\n for (const listener of listeners) listener();\n if (refreshAgain && listeners.size > 0) {\n refreshAgain = false;\n void refresh();\n }\n };\n return {\n subscribe(listener) {\n listeners.add(listener);\n if (listeners.size === 1) {\n void refresh();\n timer = setInterval(() => void refresh(), 1500);\n }\n return () => {\n listeners.delete(listener);\n if (listeners.size === 0 && timer !== undefined) {\n clearInterval(timer);\n timer = undefined;\n }\n };\n },\n getSnapshot: () => value,\n setTab(targetId) {\n tab = targetId;\n void refresh();\n },\n confirmTakeover(active) {\n revision += 1;\n if (value !== undefined) value = { ...value, takeover: active };\n for (const listener of listeners) listener();\n },\n refresh: () => void refresh(),\n };\n}\n\nfunction BrowserHeaderAction({\n botSlug,\n t,\n setExpandable,\n setExpanded,\n}: ChannelSidebarEntryProps): ReactElement {\n const store = botInfoStore(botSlug);\n const [busy, setBusy] = useState(false);\n const inFlight = useRef(false);\n const [error, setError] = useState(false);\n const subscribe = (listener: () => void): (() => void) => {\n const sync = (): void => {\n setExpandable?.(store.getSnapshot().browserAccess !== undefined);\n };\n const unsubscribe = store.subscribe(() => {\n sync();\n listener();\n });\n sync();\n return unsubscribe;\n };\n const info = useSyncExternalStore(subscribe, store.getSnapshot);\n const accessOn = info.browserAccess === true;\n\n const onToggle = (next: boolean): void => {\n const rpc = connectionRpc;\n if (rpc === undefined || botSlug === undefined || inFlight.current) return;\n inFlight.current = true;\n setBusy(true);\n setError(false);\n void rpc\n .call('/api', 'botharness/browserAccessSet', { args: { slug: botSlug, enabled: next } })\n .then((result) => {\n if (!result.ok) {\n setError(true);\n return;\n }\n const value = result.value as { bot?: { browserAccess?: unknown } };\n const applied = value.bot?.browserAccess === true;\n store.setAccess(applied);\n setExpanded?.(applied);\n })\n .catch(() => {\n setError(true);\n })\n .finally(() => {\n inFlight.current = false;\n setBusy(false);\n });\n };\n\n const label = t(accessOn ? 'entry.access.disable' : 'entry.access.enable');\n return (\n \n \n onToggle(!accessOn)}\n >\n \n \n \n {error ? (\n \n {t('entry.access.failureHint')}\n \n ) : null}\n \n );\n}\n\nfunction BrowserBody({ botSlug, t }: ChannelSidebarEntryProps): ReactElement {\n const [store] = useState(() => createObservationStore(botSlug));\n const infoStore = botInfoStore(botSlug);\n const observation = useSyncExternalStore(store.subscribe, store.getSnapshot);\n const info = useSyncExternalStore(infoStore.subscribe, infoStore.getSnapshot);\n const [follow, setFollow] = useState(true);\n const [preview, setPreview] = useState(undefined);\n const [busy, setBusy] = useState(false);\n const errorId = useId();\n const [profileInvalid, setProfileInvalid] = useState(false);\n const [profileOverride, setProfileOverride] = useState(undefined);\n const [failure, setFailure] = useState(undefined);\n const [viewer, setViewer] = useState();\n const [interaction, setInteraction] = useState(false);\n const viewerScope = useRef('');\n const previousViewer = useRef<{ identity: string; url: string | undefined }>({\n identity: '',\n url: undefined,\n });\n const mounted = useRef(true);\n const viewerRequest = useRef(0);\n const interactionResource = useCallback((node: HTMLDivElement | null): void => {\n mounted.current = node !== null;\n if (node === null) viewerRequest.current += 1;\n }, []);\n const disableInteraction = useCallback(() => {\n viewerRequest.current += 1;\n setInteraction(false);\n }, []);\n const [inputMode, setInputMode] = useState<'direct' | 'trackpad'>(() =>\n typeof window !== 'undefined' &&\n window.innerWidth < 768 &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(pointer: coarse)').matches\n ? 'trackpad'\n : 'direct',\n );\n const finePointer =\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(pointer: fine)').matches;\n const showHeaderTakeover = inputMode === 'direct' && finePointer;\n\n const tabs = observation?.tabs ?? [];\n const focused = observation?.focused ?? null;\n const currentTab = tabs.find((tab) => tab.current);\n const orderedTabs =\n currentTab === undefined ? tabs : [currentTab, ...tabs.filter((tab) => !tab.current)];\n const cleanupRequired = observation?.cleanupRequired === true;\n const failureNotice =\n !cleanupRequired && failure !== undefined && isBrowserFailureKind(failure.code) ? (\n \n invoke(OPEN_ENDPOINT, follow || preview === undefined ? {} : { tab: preview })\n }\n />\n ) : null;\n let visibleError: string | undefined = failure?.message;\n if (cleanupRequired) visibleError = t('entry.view.cleanupFailed');\n if (failureNotice !== null) visibleError = undefined;\n const provisioning = observation?.provisioning ?? null;\n const paused = observation?.takeover === true;\n const viewerUrl =\n observation?.running === true &&\n (observation?.target === 'container' || observation?.target === 'local')\n ? baseRelative(observation.viewerUrl)\n : undefined;\n const narrowViewer = typeof window !== 'undefined' && window.innerWidth < 700;\n const viewerDesign =\n observation?.target === 'local' && (inputMode === 'trackpad' || narrowViewer)\n ? { width: 390, height: 700 }\n : { width: 1024, height: 768 };\n const identity = `${botSlug ?? ''}:${profileOverride ?? info.browserProfile ?? ''}:${observation?.target ?? ''}`;\n const scope = `${identity}:${viewerUrl ?? ''}`;\n const previous = previousViewer.current;\n if (viewerScope.current !== scope) {\n viewerScope.current = scope;\n viewerRequest.current += 1;\n previousViewer.current = { identity, url: viewerUrl };\n if (interaction) setInteraction(false);\n if ((previous.identity !== identity || previous.url !== undefined) && viewer !== undefined)\n setViewer(undefined);\n }\n if (!paused && interaction) setInteraction(false);\n const viewerTranslate: ViewerTranslate = (key) => t(key);\n const postTakeoverEnable = (): void => {\n if (botSlug === undefined || viewerUrl === undefined) return;\n const request = ++viewerRequest.current;\n const expectedScope = viewerScope.current;\n setBusy(true);\n setFailure(undefined);\n void requestJson<{ takeover: boolean }>(TAKEOVER_ENDPOINT, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ slug: botSlug, active: true }),\n })\n .then((result) => {\n if (\n mounted.current &&\n request === viewerRequest.current &&\n viewerScope.current === expectedScope\n ) {\n store.confirmTakeover(result.takeover);\n setInteraction(result.takeover);\n }\n })\n .catch((cause: unknown) => {\n if (mounted.current && request === viewerRequest.current) setFailure(readFailure(cause));\n })\n .finally(() => {\n if (mounted.current) {\n setBusy(false);\n store.refresh();\n }\n });\n };\n const toggleTakeover = (): void => {\n if (interaction) {\n disableInteraction();\n if (observation?.handoffPending !== true) invoke(TAKEOVER_ENDPOINT, { active: false });\n return;\n }\n if (busy || botSlug === undefined || viewerUrl === undefined) return;\n postTakeoverEnable();\n };\n const botName = info.displayName ?? botSlug ?? '';\n const takeoverTitle =\n interaction && paused\n ? `${t('entry.view.browserTitle', { name: botName })} · ${t('entry.takeover.active')}`\n : t('entry.view.browserTitle', { name: botName });\n const toggleRef = useRef(toggleTakeover);\n toggleRef.current = toggleTakeover;\n const messageResource = useMountedResource(() => {\n const onMessage = (event: MessageEvent): void => {\n const data = event.data as { type?: unknown } | null;\n if (typeof window === 'undefined' || event.origin !== window.location.origin) return;\n if (data === null || typeof data !== 'object' || data.type !== 'bh-takeover-toggle') return;\n const ours = [...document.querySelectorAll('iframe')].some(\n (frame) =>\n frame.contentWindow === event.source &&\n (frame.getAttribute('src') ?? '').includes('/botharness-browser/viewer/'),\n );\n if (!ours) return;\n toggleRef.current();\n };\n window.addEventListener('message', onMessage);\n return () => window.removeEventListener('message', onMessage);\n }, []);\n const takeoverNote = useRef(undefined);\n const wantTakeoverNote = interaction && paused;\n if (takeoverNote.current !== wantTakeoverNote && typeof document !== 'undefined') {\n takeoverNote.current = wantTakeoverNote;\n try {\n for (const frame of Array.from(document.querySelectorAll('iframe'))) {\n if ((frame.getAttribute('src') ?? '').includes('/botharness-browser/viewer/')) {\n frame.contentWindow?.postMessage(\n { type: 'bh-takeover-state', active: wantTakeoverNote },\n window.location.origin,\n );\n }\n }\n } catch {\n void 0;\n }\n }\n const bodyResource = useCallback(\n (node: HTMLDivElement | null): void => {\n interactionResource(node);\n messageResource(node);\n },\n [interactionResource, messageResource],\n );\n\n const invoke = (endpoint: string, body: Record = {}): void => {\n if (busy || botSlug === undefined) return;\n setBusy(true);\n setProfileInvalid(false);\n setFailure(undefined);\n void requestJson<{ ok: boolean; viewerUrl?: string | null; takeover?: boolean }>(endpoint, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ slug: botSlug, ...body }),\n })\n .then((result) => {\n if (typeof result.takeover === 'boolean') store.confirmTakeover(result.takeover);\n if (\n endpoint === OPEN_ENDPOINT &&\n result.viewerUrl !== undefined &&\n result.viewerUrl !== null\n ) {\n setViewer(baseRelative(result.viewerUrl));\n setInteraction(false);\n }\n if (endpoint === STOP_ENDPOINT) {\n setViewer(undefined);\n setInteraction(false);\n }\n })\n .catch((cause: unknown) => setFailure(readFailure(cause)))\n .finally(() => {\n setBusy(false);\n store.refresh();\n });\n };\n\n const onFollow = (next: boolean): void => {\n setFollow(next);\n if (next) {\n setPreview(undefined);\n store.setTab(undefined);\n } else {\n const selected = focused ?? preview;\n setPreview(selected);\n store.setTab(selected);\n }\n };\n\n const onSelectTab = (targetId: string): void => {\n setFollow(false);\n setPreview(targetId);\n store.setTab(targetId);\n };\n\n const onPause = (): void => {\n disableInteraction();\n invoke(TAKEOVER_ENDPOINT, { active: !paused });\n };\n\n const currentProfile = profileOverride ?? info.browserProfile ?? '';\n\n const saveProfile = (name: string): void => {\n const rpc = connectionRpc;\n if (rpc === undefined || botSlug === undefined || busy) return;\n const trimmed = name.trim();\n const next = trimmed === 'default' ? '' : trimmed;\n if (next === currentProfile) {\n setProfileInvalid(false);\n setFailure(undefined);\n return;\n }\n disableInteraction();\n setViewer(undefined);\n setBusy(true);\n setProfileInvalid(false);\n setFailure(undefined);\n void rpc\n .call('/api', 'botharness/browserProfileSet', { args: { slug: botSlug, profile: next } })\n .then((result) => {\n if (!result.ok) {\n setProfileInvalid(true);\n setFailure({ message: result.error?.message ?? t('entry.profile.failed') });\n return;\n }\n const value = result.value as { bot?: { browserProfile?: unknown } };\n setProfileOverride(\n typeof value.bot?.browserProfile === 'string' ? value.bot.browserProfile : '',\n );\n setPreview(undefined);\n store.setTab(undefined);\n infoStore.refresh();\n })\n .catch((cause: unknown) => {\n setProfileInvalid(true);\n setFailure(readFailure(cause));\n })\n .finally(() => {\n setBusy(false);\n store.refresh();\n });\n };\n\n if (!cleanupRequired && observation?.target === 'profile-control')\n return (\n \n );\n\n if (!cleanupRequired && observation?.target === 'daily-control')\n return (\n \n );\n\n if (!cleanupRequired && observation?.target === 'extension')\n return (\n \n );\n\n return (\n
\n \n \n {observation?.running === true ? (\n {t('entry.chip.running')}\n ) : (\n {t('entry.chip.stopped')}\n )}\n {paused ? {t('entry.chip.paused')} : null}\n \n }\n detail={\n
\n
\n {t('entry.profile.label')}\n \n
\n {viewerUrl === undefined ? (\n
\n {t('entry.view.follow')}\n \n
\n ) : null}\n
\n {viewerUrl === undefined ? (\n \n invoke(OPEN_ENDPOINT, follow || preview === undefined ? {} : { tab: preview })\n }\n >\n {t(busy ? 'entry.view.opening' : 'entry.view.open')}\n \n ) : (\n {\n if (viewerUrl !== undefined) setViewer(viewerUrl);\n }}\n >\n \n \n {t('entry.view.fullscreen')}\n \n \n )}\n \n {t(paused ? 'entry.view.resume' : 'entry.view.pause')}\n \n {observation?.running === true || cleanupRequired ? (\n invoke(STOP_ENDPOINT)}\n >\n {t('entry.view.stop')}\n \n ) : null}\n
\n
\n }\n />\n
\n {viewerUrl === undefined ? (\n <>\n {observation?.frame === null || observation?.frame === undefined ? (\n
{t('entry.view.noFrame')}
\n ) : (\n {t('entry.label')}\n )}\n \n ) : (\n \n {failure.message}\n
\n )\n }\n busy={busy}\n stopping={false}\n hideStop\n hideInteractiveToggle\n allowFrameInput\n onStop={() => invoke(STOP_ENDPOINT)}\n interactive={interaction && paused}\n onToggleInteractive={toggleTakeover}\n onDisableInteraction={disableInteraction}\n expanded={viewer === viewerUrl}\n onExpandedChange={(next) => {\n setViewer(next ? viewerUrl : undefined);\n if (!next) disableInteraction();\n }}\n extraControls={\n <>\n {showHeaderTakeover ? (\n setInputMode('trackpad')}\n >\n \n \n {t('entry.view.inputMode.trackpad')}\n \n \n ) : null}\n {showHeaderTakeover ? (\n \n \n \n \n {t(interaction ? 'entry.takeover.stop' : 'entry.takeover.start')}\n \n \n \n ) : null}\n \n }\n />\n )}\n {tabs.length === 0 ? (\n
{t('entry.view.noTabs')}
\n ) : (\n
    \n {orderedTabs.map((tab) => (\n
  • \n
    \n onSelectTab(tab.targetId)}\n >\n \n \n \n \n \n {tab.title === '' ? tab.url : tab.title}\n \n {tab.title === '' ? null : (\n {tab.url}\n )}\n \n \n
    \n
  • \n ))}\n
\n )}\n {provisioning !== null ? : null}\n {failureNotice}\n {visibleError !== undefined ? (\n
\n {visibleError}\n
\n ) : null}\n \n );\n}\n\nfunction createBrowserBody(t: BrowserTranslate): ComponentType {\n return function BrowserBodyView(props: Omit): ReactElement {\n const store = botInfoStore(props.botSlug);\n const info = useSyncExternalStore(store.subscribe, store.getSnapshot);\n if (info.browserAccess === false)\n return {t('entry.access.description')};\n return ;\n };\n}\n\nfunction createBrowserBadge(t: BrowserTranslate): ComponentType {\n return function BrowserBadge({ botSlug }: Omit) {\n const store = botInfoStore(botSlug);\n const info = useSyncExternalStore(store.subscribe, store.getSnapshot);\n if (info.browserAccess !== true) return null;\n return (\n \n );\n };\n}\n\nfunction createBrowserHeader(t: BrowserTranslate): ComponentType {\n return function BrowserHeaderView(props: Omit): ReactElement {\n return ;\n };\n}\n\nexport function apply(ctx: BrowserClientContext): void {\n botInfoStores.clear();\n const t = ctx.locale.bind(LOCALE_NS);\n registerBrowserSettings(ctx, t);\n ctx.effect(() => {\n const sheet = document.createElement('style');\n sheet.dataset.plugin = '@botharness/browser';\n sheet.dataset.pluginCss = '@botharness/browser/client.css';\n sheet.textContent = styles;\n document.head.append(sheet);\n return () => sheet.remove();\n }, 'botharness-browser: styles');\n ctx.effect(() => ctx.locale.register(LOCALE_NS, { zh, en }), 'botharness-browser: dictionaries');\n ctx.inject(['channelSidebar', 'connection'], (sidebarCtx) => {\n const registry = (sidebarCtx as unknown as { channelSidebar?: ChannelSidebarRegistryLike })\n .channelSidebar;\n connectionRpc = (sidebarCtx as unknown as { connection?: { rpc?: ConnectionRpcLike } })\n .connection?.rpc;\n if (registry === undefined) return;\n ctx.effect(\n () =>\n registry.register({\n id: ENTRY_ID,\n icon: 'globe',\n label: t('entry.label'),\n order: 41,\n scope: 'personabot',\n component: createBrowserBody(t),\n headerAction: createBrowserHeader(t),\n badge: createBrowserBadge(t),\n tab: 'screen',\n }),\n 'botharness-browser: channel sidebar entry',\n );\n });\n}\n"],"x_google_ignoreList":[0],"mappings":"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;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;GACF;GACA,mBAAmB,CACjB,CACE,QACA,EACE,GAAG,sHACL,CACF,GACA,CACE,QACA,EACE,GAAG,yGACL,CACF,CACF;GACA,OAAO,CACL,CACE,YACA,EACE,QAAQ,oCACV,CACF,GACA,CACE,QACA,EACE,GAAG,6GACL,CACF,CACF;GACA,cAAc;IACZ,CACE,QACA,EACE,GAAG,6GACL,CACF;IACA,CACE,QACA,EACE,GAAG,WACL,CACF;IACA,CACE,QACA,EACE,GAAG,WACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;GACF;GACA,OAAO;IACL,CACE,QACA,EACE,GAAG,4CACL,CACF;IACA,CACE,QACA,EACE,GAAG,8BACL,CACF;IACA,CACE,QACA,EACE,GAAG,6BACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;GACF;GACA,cAAc;IACZ,CACE,QACA,EACE,GAAG,WACL,CACF;IACA,CACE,QACA,EACE,GAAG,WACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;GACF;GACA,UAAU,CACR,CACE,QACA,EACE,GAAG,0UACL,CACF,GACA,CACE,UACA;IACE,IAAI;IACJ,IAAI;IACJ,GAAG;GACL,CACF,CACF;GACA,SAAS;IACP,CACE,QACA;KACE,OAAO;KACP,QAAQ;KACR,GAAG;KACH,GAAG;KACH,IAAI;IACN,CACF;IACA,CACE,QACA;KACE,IAAI;KACJ,IAAI;KACJ,IAAI;KACJ,IAAI;IACN,CACF;IACA,CACE,QACA;KACE,IAAI;KACJ,IAAI;KACJ,IAAI;KACJ,IAAI;IACN,CACF;GACF;GACA,OAAO;IACL,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;IACA,CACE,QACA,EACE,GAAG,kDACL,CACF;I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"} \ No newline at end of file diff --git a/packages/browser/test/target-settings.test.ts b/packages/browser/test/target-settings.test.ts index 44542ca28..ef0aa25db 100644 --- a/packages/browser/test/target-settings.test.ts +++ b/packages/browser/test/target-settings.test.ts @@ -78,7 +78,7 @@ describe('Browser Target native settings seam', () => { ); expect(host.textContent).toContain('settings.local'); await act(async () => host.querySelector('button')!.click()); - const choice = [...host.querySelectorAll('button')].find( + const choice = [...document.querySelectorAll('button')].find( (b) => b.textContent === 'settings.container', ); expect(choice).toBeDefined(); @@ -86,7 +86,7 @@ describe('Browser Target native settings seam', () => { expect(scope.getSnapshot().value.target).toBe('container'); for (const target of ['extension', 'daily-control', 'profile-control'] as const) { await act(async () => host.querySelector('button')!.click()); - const next = [...host.querySelectorAll('button')].find( + const next = [...document.querySelectorAll('button')].find( (button) => button.textContent === `settings.${target}`, ); expect(next).toBeDefined(); @@ -139,7 +139,7 @@ describe('Browser Target native settings seam', () => { (button) => button.textContent === 'settings.driver.current', )!; await act(async () => driver.click()); - const candidate = [...host.querySelectorAll('button')].find( + const candidate = [...document.querySelectorAll('button')].find( (button) => button.textContent === 'settings.driver.agent-browser', )!; await act(async () => candidate.click()); @@ -175,7 +175,7 @@ describe('Browser Target native settings seam', () => { expect(picker.textContent).toBe('settings.local'); expect(picker.getAttribute('aria-haspopup')).toBe('menu'); await act(async () => picker.click()); - const choice = [...host.querySelectorAll('button')].find( + const choice = [...document.querySelectorAll('button')].find( (button) => button.textContent === 'settings.extension', )!; await act(async () => choice.click()); diff --git a/packages/client/src/client/ds/pointer-menu.tsx b/packages/client/src/client/ds/pointer-menu.tsx index 6c56e7266..eeaba5b12 100644 --- a/packages/client/src/client/ds/pointer-menu.tsx +++ b/packages/client/src/client/ds/pointer-menu.tsx @@ -30,17 +30,29 @@ export function pointerMenuPosition( type PointerMenuProps = Omit< ComponentProps, 'open' | 'portal' | 'getAnchorRect' | 'side' | 'align' | 'className' -> & { point: MenuPoint; container?: Element }; +> & { point: MenuPoint; container?: Element; align?: 'start' | 'end' }; -export function PointerMenu({ point, container = document.body, ...props }: PointerMenuProps) { +export function PointerMenu({ + point, + container = document.body, + align = 'start', + ...props +}: PointerMenuProps) { const mount = useMountedResource( (node) => { const menu = node.querySelector('[role="menu"]'); if (!menu) return; const originalMaxWidth = Number.parseFloat(getComputedStyle(menu).maxWidth); + const originalMinWidth = Number.parseFloat(getComputedStyle(menu).minWidth); const place = () => { const scale = node.getBoundingClientRect(); if (!scale.width || !scale.height) return; + const cssZoom = + 'currentCSSZoom' in node && typeof node.currentCSSZoom === 'number' + ? node.currentCSSZoom + : undefined; + const scaleX = cssZoom ?? scale.width; + const scaleY = cssZoom ?? scale.height; const root = document.documentElement; const clearance = root.hasAttribute('data-fullscreen') ? 0 @@ -48,18 +60,25 @@ export function PointerMenu({ point, container = document.body, ...props }: Poin getComputedStyle(root).getPropertyValue('--dsh-frame-top-clearance'), ) || 0; const margin = Number.parseFloat(space.x4); - menu.style.maxWidth = `${Math.min(originalMaxWidth || Infinity, (innerWidth - 2 * margin) / scale.width)}px`; - menu.style.maxHeight = `${Math.max(0, innerHeight - Math.max(margin, clearance) - margin) / scale.height}px`; + const availableWidth = Math.max(0, innerWidth - 2 * margin) / scaleX; + menu.style.minWidth = `${Math.min(originalMinWidth || 0, availableWidth)}px`; + menu.style.maxWidth = `${Math.min(originalMaxWidth || Infinity, availableWidth)}px`; + menu.style.maxHeight = `${Math.max(0, innerHeight - Math.max(margin, clearance) - margin) / scaleY}px`; const box = menu.getBoundingClientRect(); - const desired = pointerMenuPosition(point, box.width, box.height, { - width: innerWidth, - height: innerHeight, - top: clearance, - }); + const desired = pointerMenuPosition( + { x: align === 'end' ? point.x - box.width : point.x, y: point.y }, + box.width, + box.height, + { + width: innerWidth, + height: innerHeight, + top: clearance, + }, + ); const left = Number.parseFloat(node.style.left) || 0; const top = Number.parseFloat(node.style.top) || 0; - node.style.left = `${left + (desired.x - box.left) / scale.width}px`; - node.style.top = `${top + (desired.y - box.top) / scale.height}px`; + node.style.left = `${left + (desired.x - box.left) / scaleX}px`; + node.style.top = `${top + (desired.y - box.top) / scaleY}px`; }; place(); const observer = @@ -74,7 +93,7 @@ export function PointerMenu({ point, container = document.body, ...props }: Poin window.removeEventListener('scroll', place, true); }; }, - [point.x, point.y], + [point.x, point.y, align], ); return createPortal( diff --git a/packages/client/src/client/ds/select.tsx b/packages/client/src/client/ds/select.tsx index 1b3c198cc..f2672ecc9 100644 --- a/packages/client/src/client/ds/select.tsx +++ b/packages/client/src/client/ds/select.tsx @@ -1,10 +1,11 @@ -import { Menu } from '../appearance-primitives.js'; -import { useState, type ReactElement, type ReactNode } from 'react'; +import { PointerMenu, type MenuPoint } from './pointer-menu.js'; +import { useMountedResource } from '../mounted-resource.js'; +import { useRef, useState, type ReactElement, type ReactNode } from 'react'; import * as stylex from '@stylexjs/stylex'; import { IconChevronDownOutlineRegular } from '@deepseek-ai/dsh-client-ui-primitives'; import { pillStyles } from './pill-button.js'; -import { color } from './tokens.stylex.js'; +import { color, space } from './tokens.stylex.js'; const styles = stylex.create({ label: { @@ -47,41 +48,103 @@ export function Select({ reselect = false, }: SelectProps): ReactElement { const [open, setOpen] = useState(false); + const [point, setPoint] = useState(); + const trigger = useRef(null); + const active = open && !disabled; + const mount = useMountedResource( + (node) => { + trigger.current = node; + if (!active) + return () => { + trigger.current = null; + }; + const place = () => { + const rect = node.getBoundingClientRect(); + const scale = node.offsetHeight > 0 ? rect.height / node.offsetHeight : 1; + const next = { + x: align === 'end' ? rect.right : rect.left, + y: rect.bottom + Number.parseFloat(space.x2) * scale, + }; + setPoint((previous) => (previous?.x === next.x && previous.y === next.y ? previous : next)); + }; + place(); + const resize = typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(place); + resize?.observe(node); + resize?.observe(document.documentElement); + const observer = new MutationObserver(place); + observer.observe(document.documentElement, { + attributes: true, + attributeFilter: ['style', 'data-fullscreen'], + }); + window.addEventListener('resize', place); + window.addEventListener('scroll', place, true); + return () => { + trigger.current = null; + resize?.disconnect(); + observer.disconnect(); + window.removeEventListener('resize', place); + window.removeEventListener('scroll', place, true); + }; + }, + [active, align], + ); + const close = () => { + const button = trigger.current; + const menu = document.activeElement?.closest('[data-pointer-menu]'); + setOpen(false); + setPoint(undefined); + queueMicrotask(() => { + const focused = document.activeElement; + if ( + button?.isConnected && + !button.disabled && + (focused === document.body || (focused !== null && menu?.contains(focused))) + ) + button.focus({ preventScroll: true }); + }); + }; const current = options.find((option) => option.value === value); return ( - ({ id: option.value, label: option.label }))} - selectedId={value} - onSelect={(id) => { - setOpen(false); - const next = options.find((option) => option.value === id); - if (next !== undefined && (reselect || next.value !== value)) onChange(next.value); - }} - onClose={() => { - setOpen(false); - }} - anchor={ - + {active && point ? ( +