dsh-coding-sidebar 1.0.7 → 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +2 -2
  2. package/lib/client-editor.js +485 -228
  3. package/lib/client-registry.js +1238 -7583
  4. package/lib/client-terminal.js +345 -189
  5. package/lib/client.js +1213 -7558
  6. package/lib/index.js +518 -69
  7. package/lib/types/agent-pty.d.ts +62 -4
  8. package/lib/types/bundle-route.d.ts +1 -1
  9. package/lib/types/client/DiffView.d.ts +33 -1
  10. package/lib/types/client/EditorHost.d.ts +4 -1
  11. package/lib/types/client/FileTree.d.ts +6 -2
  12. package/lib/types/client/TerminalWaitBanner.d.ts +6 -0
  13. package/lib/types/client/TreePanel.d.ts +4 -1
  14. package/lib/types/client/api.d.ts +26 -0
  15. package/lib/types/client/chunk-loader.d.ts +1 -1
  16. package/lib/types/client/chunks/locale.d.ts +3 -0
  17. package/lib/types/client/conversation-draft.d.ts +85 -4
  18. package/lib/types/client/locales.d.ts +13 -20
  19. package/lib/types/client/selection-popup.d.ts +58 -0
  20. package/lib/types/client/service.d.ts +1 -1
  21. package/lib/types/client/state.d.ts +15 -0
  22. package/lib/types/client/terminal-font.d.ts +25 -2
  23. package/lib/types/context-types.d.ts +3 -1
  24. package/lib/types/fs-operations.d.ts +42 -0
  25. package/lib/types/git.d.ts +15 -0
  26. package/lib/types/index.d.ts +9 -0
  27. package/lib/types/prefs-shared.d.ts +7 -5
  28. package/lib/types/pty-manager.d.ts +53 -0
  29. package/lib/types/wire.d.ts +6 -2
  30. package/package.json +1 -1
  31. package/src/agent-pty.ts +221 -33
  32. package/src/bundle-route.ts +1 -1
  33. package/src/client/DiffTab.tsx +10 -1
  34. package/src/client/DiffView.tsx +174 -19
  35. package/src/client/EditorHost.tsx +9 -2
  36. package/src/client/FileTree.tsx +151 -8
  37. package/src/client/Sidebar.tsx +95 -25
  38. package/src/client/TerminalView.tsx +41 -0
  39. package/src/client/TerminalWaitBanner.tsx +32 -0
  40. package/src/client/TextEditor.tsx +27 -45
  41. package/src/client/TreePanel.tsx +22 -2
  42. package/src/client/api.ts +20 -0
  43. package/src/client/chunk-loader.ts +1 -1
  44. package/src/client/chunks/locale.tsx +60 -0
  45. package/src/client/conversation-draft.ts +233 -7
  46. package/src/client/index.tsx +19 -8
  47. package/src/client/locales-ar.ts +17 -4
  48. package/src/client/locales-de.ts +17 -4
  49. package/src/client/locales-fr.ts +17 -4
  50. package/src/client/locales-hi.ts +17 -4
  51. package/src/client/locales-id.ts +17 -4
  52. package/src/client/locales-it.ts +17 -4
  53. package/src/client/locales-ja.ts +17 -4
  54. package/src/client/locales-ko.ts +17 -4
  55. package/src/client/locales-nl.ts +17 -4
  56. package/src/client/locales-pl.ts +17 -4
  57. package/src/client/locales-pt.ts +17 -4
  58. package/src/client/locales-ru.ts +17 -4
  59. package/src/client/locales-sv.ts +17 -4
  60. package/src/client/locales-th.ts +17 -4
  61. package/src/client/locales-tr.ts +17 -4
  62. package/src/client/locales-vi.ts +17 -4
  63. package/src/client/locales-zh-HK.ts +17 -4
  64. package/src/client/locales-zh-MO.ts +17 -4
  65. package/src/client/locales-zh-TW.ts +17 -4
  66. package/src/client/locales.ts +41 -51
  67. package/src/client/selection-popup.ts +155 -0
  68. package/src/client/service.ts +1 -1
  69. package/src/client/sidebar.module.css +68 -0
  70. package/src/client/state.ts +56 -10
  71. package/src/client/terminal-font.ts +34 -3
  72. package/src/context-types.ts +3 -2
  73. package/src/fs-operations.ts +126 -4
  74. package/src/git.ts +56 -3
  75. package/src/index.ts +82 -7
  76. package/src/open-external.ts +3 -4
  77. package/src/prefs-shared.ts +7 -5
  78. package/src/pty-manager.ts +176 -5
  79. package/src/sidechat-routes.ts +13 -1
  80. package/src/tools.ts +24 -6
  81. package/src/wire.ts +3 -0
@@ -18017,6 +18017,15 @@ globalThis.__dshChunks__["editor"] = (require) => {
18017
18017
  path,
18018
18018
  content
18019
18019
  })),
18020
+ /** Rename one tree row within its directory (single-segment name; a
18021
+ * destination-existence clash is a 409; symlink rows rename the link). */
18022
+ fsRename: (scope, path, name) => call$1("fs.rename", scopePayload(scope, {
18023
+ path,
18024
+ name
18025
+ })),
18026
+ /** Delete one tree row permanently (recursive for directories; a symlink
18027
+ * row unlinks the link only). */
18028
+ fsRemove: (scope, path) => call$1("fs.remove", scopePayload(scope, { path })),
18020
18029
  /** Upload one file's raw bytes into `dir` (keeps the folder tree via
18021
18030
  * `relativePath`); the host streams it under the session workspace. */
18022
18031
  uploadFile: (scope, dir, relativePath, body, signal) => fetchUpload(scope, dir, relativePath, body, signal),
@@ -18038,6 +18047,13 @@ globalThis.__dshChunks__["editor"] = (require) => {
18038
18047
  }), signal),
18039
18048
  /** Full patch text of one commit (diff display for the history rows). */
18040
18049
  gitCommitDiff: (scope, hash, worktree, signal) => call$1("git.commit-diff", gitPayload(scope, worktree, { hash }), signal),
18050
+ /** Both sides' full file contents for a diff-fold expansion; a missing
18051
+ * side is null (untracked / deleted) and the view degrades the fold. */
18052
+ gitFoldContents: (scope, opts, worktree, signal) => call$1("git.fold-contents", gitPayload(scope, worktree, {
18053
+ path: opts.path,
18054
+ ...opts.staged !== void 0 ? { staged: opts.staged } : {},
18055
+ ...opts.hash !== void 0 ? { hash: opts.hash } : {}
18056
+ }), signal),
18041
18057
  /** Discard the worktree changes of one file (the index is untouched). */
18042
18058
  gitDiscard: (scope, path, worktree) => call$1("git.discard", gitPayload(scope, worktree, { path })),
18043
18059
  /** Revert one commit onto the current branch. */
@@ -18050,6 +18066,9 @@ globalThis.__dshChunks__["editor"] = (require) => {
18050
18066
  ptyClose: (scope, tab) => call$1("pty.close", scopePayload(scope, { tab })),
18051
18067
  /** Release an agent terminal by uuid (tab closed while WS was down). */
18052
18068
  agentPtyClose: (uuid) => call$1("agent-pty.close", { uuid }),
18069
+ /** Skip every active terminal_wait_for on one agent terminal (the wait
18070
+ * banner's skip button). Idempotent: {skipped:0} when none is active. */
18071
+ agentSkipWait: (uuid) => call$1("agent-pty.skip-wait", { uuid }),
18053
18072
  /** Terminal dependency status (issue #140): after a WS close 1011 with
18054
18073
  * reason `pty-deps-missing` the view fetches the full repair details here
18055
18074
  * (the close reason itself is capped at 123 bytes). */
@@ -43208,19 +43227,126 @@ globalThis.__dshChunks__["editor"] = (require) => {
43208
43227
  //#endregion
43209
43228
  //#region src/client/conversation-draft.ts
43210
43229
  /**
43211
- * Append `text` to the session's composer draft (space-separated, like the
43212
- * @-mentions). Returns false — and logs when the conversation service or
43213
- * the session scope is unavailable.
43230
+ * Splice `text` into `draft` at `caret` (replacing any live selection) with
43231
+ * whitespace-aware joins and report the caret position right after the
43232
+ * inserted text. `caret === null` (position unknown) appends at the end,
43233
+ * exactly like the original behavior.
43234
+ */
43235
+ function spliceInsert(draft, text, caret) {
43236
+ if (caret === null || draft === "") {
43237
+ const next = draft.trim() === "" ? text : `${draft} ${text}`;
43238
+ return {
43239
+ draft: next,
43240
+ caretAfter: next.length
43241
+ };
43242
+ }
43243
+ const prefix = draft.slice(0, caret.start);
43244
+ const suffix = draft.slice(caret.end);
43245
+ if (prefix === "" && suffix === "") return {
43246
+ draft: text,
43247
+ caretAfter: text.length
43248
+ };
43249
+ const left = prefix === "" || /\s$/.test(prefix) ? "" : " ";
43250
+ return {
43251
+ draft: `${prefix}${left}${text}${suffix === "" || /^\s/.test(suffix) ? "" : " "}${suffix}`,
43252
+ caretAfter: prefix.length + left.length + text.length
43253
+ };
43254
+ }
43255
+ /**
43256
+ * Locate the composer `<textarea>` in the conversation column: prefer the
43257
+ * `data-phase`-tagged textarea (the composer's marker), falling back to any
43258
+ * textarea in the column, then to a bare data-phase textarea (older host
43259
+ * layouts without the column attribute). Null in jsdom-less hosts.
43260
+ */
43261
+ function findComposerTextarea() {
43262
+ if (typeof document === "undefined") return null;
43263
+ const column = document.querySelector("#root [data-slot=\"conversation\"]");
43264
+ const find = (scope) => scope.querySelector("textarea[data-phase]") ?? scope.querySelector("textarea");
43265
+ return column !== null ? find(column) : document.querySelector("textarea[data-phase]");
43266
+ }
43267
+ /**
43268
+ * Resolve the composer's live caret from its DOM `<textarea>`. The draft
43269
+ * store has no caret API, so the sidebar reads the composed input's selection
43270
+ * directly; the value-sync check (`el.value === draft`) discards stale or
43271
+ * wrong-composer reads — a caret must never be applied against a draft it
43272
+ * was not measured on.
43273
+ *
43274
+ * Returns null when the composer is missing, disabled/read-only, out of
43275
+ * sync with the store draft, or has no measurable selection (odd hosts
43276
+ * report null selectionStart/End).
43277
+ */
43278
+ function probeComposerCaret(draft) {
43279
+ const el = findComposerTextarea();
43280
+ if (el === null || el.disabled || el.readOnly) return null;
43281
+ if (el.value !== draft) return null;
43282
+ let start = el.selectionStart;
43283
+ let end = el.selectionEnd;
43284
+ if (typeof start !== "number" || typeof end !== "number") return null;
43285
+ if (!Number.isFinite(start) || !Number.isFinite(end)) return null;
43286
+ start = Math.max(0, Math.min(start, draft.length));
43287
+ end = Math.max(start, Math.min(end, draft.length));
43288
+ return {
43289
+ start,
43290
+ end
43291
+ };
43292
+ }
43293
+ /**
43294
+ * Restore the composer caret to `caretIndex` after a programmatic
43295
+ * `setDraft` commit. A controlled textarea update resets the caret (React
43296
+ * commits the value asynchronously and the browser moves the caret to the
43297
+ * start/end), so the placement is scheduled and retried across at most two
43298
+ * animation frames (setTimeout fallback), and only applied when the textarea
43299
+ * still matches `expectedDraft` — a newer edit or a different composer wins
43300
+ * the race untouched. The caret is clamped into the value bounds, mirroring
43301
+ * how browsers clamp type-in positions.
43302
+ */
43303
+ function placeComposerCaretAfterInsert(expectedDraft, caretIndex) {
43304
+ let remaining = 2;
43305
+ let scheduled = false;
43306
+ const schedule = (fn) => {
43307
+ if (scheduled) return;
43308
+ scheduled = true;
43309
+ if (typeof requestAnimationFrame === "function") requestAnimationFrame(fn);
43310
+ else setTimeout(fn, 0);
43311
+ };
43312
+ const place = () => {
43313
+ scheduled = false;
43314
+ if (remaining <= 0) return;
43315
+ remaining -= 1;
43316
+ const el = findComposerTextarea();
43317
+ if (el === null || el.disabled || el.readOnly) return;
43318
+ if (el.value !== expectedDraft) {
43319
+ schedule(place);
43320
+ return;
43321
+ }
43322
+ const clamped = Math.max(0, Math.min(caretIndex, el.value.length));
43323
+ el.setSelectionRange(clamped, clamped);
43324
+ };
43325
+ schedule(place);
43326
+ }
43327
+ /**
43328
+ * Insert `text` into the session's composer draft at the composer's live
43329
+ * caret (see {@link probeComposerCaret}), falling back to appending at the
43330
+ * end when the caret cannot be resolved. Returns false — and logs — when the
43331
+ * conversation service or the session scope is unavailable.
43214
43332
  */
43215
43333
  function appendToDraft(ctx, sessionId, text) {
43216
43334
  try {
43217
43335
  const actx = ctx.sessions.scope(sessionId);
43218
- if (actx === void 0) return false;
43336
+ if (actx === void 0) {
43337
+ console.warn("[dsh-coding-sidebar] draft insert skipped: no session scope", sessionId);
43338
+ return false;
43339
+ }
43219
43340
  const conversation = ctx.get("conversation");
43220
- if (conversation === void 0) return false;
43341
+ if (conversation === void 0) {
43342
+ console.warn("[dsh-coding-sidebar] draft insert skipped: conversation service unavailable");
43343
+ return false;
43344
+ }
43221
43345
  const input = conversation.input.for(actx);
43222
43346
  const draft = input.state.getSnapshot().draft;
43223
- input.setDraft(draft.trim() === "" ? text : `${draft} ${text}`);
43347
+ const { draft: next, caretAfter } = spliceInsert(draft, text, probeComposerCaret(draft));
43348
+ input.setDraft(next);
43349
+ placeComposerCaretAfterInsert(next, caretAfter);
43224
43350
  return true;
43225
43351
  } catch (error) {
43226
43352
  console.warn("[dsh-coding-sidebar] draft insert failed:", error);
@@ -43228,6 +43354,117 @@ globalThis.__dshChunks__["editor"] = (require) => {
43228
43354
  }
43229
43355
  }
43230
43356
  //#endregion
43357
+ //#region src/client/selection-popup.ts
43358
+ /**
43359
+ * The floating "add selection to conversation" popup shared by the text
43360
+ * viewer: a viewport-anchored button portaled to `document.body`, kept alive
43361
+ * across the selection gesture and committed on click.
43362
+ *
43363
+ * Dismissal contract (upstream issue #425): the popup must never outlive its
43364
+ * editor surface. The sidebar keeps every tab MOUNTED — switching tabs only
43365
+ * flips the pane cell to `display:none` and collapsing the panel translates
43366
+ * it off-screen — while the portaled `position:fixed` button stays pinned to
43367
+ * its viewport anchor, ignoring both. The caller already hides on surface
43368
+ * scrolls, selection collapse and content swaps; this hook adds the global
43369
+ * dismissal that covers everything else:
43370
+ *
43371
+ * - any `mousedown` outside the button (tab bar, composer, another pane,
43372
+ * the collapse toggle, …) closes it;
43373
+ * - `Escape` closes it;
43374
+ * - the document going hidden (`visibilitychange`) or the window losing
43375
+ * focus closes it;
43376
+ * - an `IntersectionObserver` on the editor surface closes it as soon as the
43377
+ * surface leaves the viewport — the tab-switch (`display:none`) and
43378
+ * panel-collapse (translated off-screen) paths have no DOM events of their
43379
+ * own, so the geometry signal is the only reliable one.
43380
+ *
43381
+ * The button's own `mousedown` is never treated as an outside click: the
43382
+ * caller preventDefaults it to keep the selection/caret alive until the
43383
+ * click commits (the hook's capture-phase listener runs first and must not
43384
+ * hide for it).
43385
+ */
43386
+ function useSelectionPopup(options) {
43387
+ const onCommitRef = (0, react.useRef)(options.onCommit);
43388
+ const getSurfaceRef = (0, react.useRef)(options.getSurface);
43389
+ onCommitRef.current = options.onCommit;
43390
+ getSurfaceRef.current = options.getSurface;
43391
+ const [popup, setPopup] = (0, react.useState)(null);
43392
+ /** Live mirror for click/event-time reads (no re-render race). */
43393
+ const popupRef = (0, react.useRef)(null);
43394
+ /** The portaled button itself (for the outside-click guard). */
43395
+ const buttonRef = (0, react.useRef)(null);
43396
+ /** The surface visibility observer (created lazily on open). */
43397
+ const observerRef = (0, react.useRef)(null);
43398
+ const show = (insert, left, top) => {
43399
+ const next = {
43400
+ insert,
43401
+ left: Math.min(Math.max(left, 80), window.innerWidth - 80),
43402
+ top
43403
+ };
43404
+ popupRef.current = next;
43405
+ setPopup(next);
43406
+ };
43407
+ const hide = () => {
43408
+ popupRef.current = null;
43409
+ setPopup(null);
43410
+ };
43411
+ const commit = () => {
43412
+ const current = popupRef.current;
43413
+ if (current === null) return;
43414
+ onCommitRef.current(current.insert);
43415
+ hide();
43416
+ };
43417
+ (0, react.useEffect)(() => {
43418
+ const onMouseDown = (event) => {
43419
+ if (popupRef.current === null) return;
43420
+ const button = buttonRef.current;
43421
+ if (button !== null && (button === event.target || button.contains(event.target))) return;
43422
+ hide();
43423
+ };
43424
+ const onKeyDown = (event) => {
43425
+ if (event.key === "Escape" && popupRef.current !== null) hide();
43426
+ };
43427
+ const onVisibilityChange = () => {
43428
+ if (document.hidden && popupRef.current !== null) hide();
43429
+ };
43430
+ const onWindowBlur = () => {
43431
+ if (popupRef.current !== null) hide();
43432
+ };
43433
+ document.addEventListener("mousedown", onMouseDown, true);
43434
+ document.addEventListener("keydown", onKeyDown, true);
43435
+ document.addEventListener("visibilitychange", onVisibilityChange);
43436
+ window.addEventListener("blur", onWindowBlur);
43437
+ return () => {
43438
+ document.removeEventListener("mousedown", onMouseDown, true);
43439
+ document.removeEventListener("keydown", onKeyDown, true);
43440
+ document.removeEventListener("visibilitychange", onVisibilityChange);
43441
+ window.removeEventListener("blur", onWindowBlur);
43442
+ observerRef.current?.disconnect();
43443
+ observerRef.current = null;
43444
+ };
43445
+ }, []);
43446
+ (0, react.useEffect)(() => {
43447
+ if (popup === null) return;
43448
+ observerRef.current?.disconnect();
43449
+ observerRef.current = null;
43450
+ if (typeof IntersectionObserver === "undefined") return;
43451
+ const surface = getSurfaceRef.current();
43452
+ if (surface === null) return;
43453
+ const observer = new IntersectionObserver((entries) => {
43454
+ for (const entry of entries) if (!entry.isIntersecting) hide();
43455
+ }, { threshold: 0 });
43456
+ observerRef.current = observer;
43457
+ observer.observe(surface);
43458
+ }, [popup !== null]);
43459
+ return {
43460
+ popup,
43461
+ buttonRef,
43462
+ show,
43463
+ hide,
43464
+ commit
43465
+ };
43466
+ }
43467
+ //#endregion
43231
43468
  //#region src/client/paths.ts
43232
43469
  /**
43233
43470
  * The path relative to the session's working directory.
@@ -43368,6 +43605,7 @@ globalThis.__dshChunks__["editor"] = (require) => {
43368
43605
  terminalDepsFailed: "终端依赖 node-pty 加载失败",
43369
43606
  terminalDepsHint: "在 DSH 所在环境的终端或 cmd 中执行以下命令修复,然后点重试(node-pty 与 DSH 核心保持同一版本):",
43370
43607
  terminalDepsProfile: "(检测到 profile:{profile})",
43608
+ terminalShellNotFound: "未找到配置的 Shell:{name},请到 设置 → 侧边卡片 → 终端 检查 Shell 路径",
43371
43609
  refresh: "刷新",
43372
43610
  refreshUnsavedConfirm: "文件已在磁盘更新,刷新将丢弃未保存编辑。继续吗?",
43373
43611
  save: "保存",
@@ -43432,6 +43670,18 @@ globalThis.__dshChunks__["editor"] = (require) => {
43432
43670
  producedOpen: "在侧边栏中打开",
43433
43671
  showInFolder: "在文件夹中显示",
43434
43672
  disconnected: "终端连接断开,重连中…",
43673
+ terminalWaitBanner: "Agent 正在等待 {needle}",
43674
+ terminalSkipWait: "跳过等待",
43675
+ gitFoldExpand: "展开 {count} 行上下文",
43676
+ gitFoldLoading: "展开中…",
43677
+ gitFoldFailed: "展开失败",
43678
+ rename: "重命名",
43679
+ renameInvalid: "名称不能为空,且不能包含路径分隔符。",
43680
+ delete: "删除",
43681
+ deleteTitle: "删除「{name}」?",
43682
+ deleteDescFile: "将永久删除该文件,此操作不可撤销。",
43683
+ deleteDescDir: "将永久删除该目录及其全部内容,此操作不可撤销。",
43684
+ dismiss: "关闭",
43435
43685
  exited: "终端进程已退出",
43436
43686
  noSession: "选择一个会话以使用侧边栏",
43437
43687
  pluginNotLoaded: "插件未加载,标签页暂不可用:",
@@ -43491,10 +43741,10 @@ globalThis.__dshChunks__["editor"] = (require) => {
43491
43741
  settingsConflict: "设置已被其他窗口修改,请重试",
43492
43742
  binaryNoPreview: "此文件类型不支持预览",
43493
43743
  downloadToView: "下载查看",
43494
- settingsSubagentTitle: "检测到子代理时自动展开任务管理页",
43495
- settingsSubagentDesc: "当前会话产生新的子代理时,自动展开侧边栏并打开任务管理页;关闭后需手动打开",
43496
- settingsJobsTitle: "有新后台任务时自动展开后台任务页",
43497
- settingsJobsDesc: "当前会话出现新的后台任务时,自动展开侧边栏并打开后台任务页(每个新任务都会触发);关闭后需手动打开",
43744
+ settingsSubagentTitle: "检测到子代理时自动激活任务管理页",
43745
+ settingsSubagentDesc: "当前会话产生新的子代理时,自动激活任务管理页;宽屏同时展开侧边栏,窄屏不强制展开全屏抽屉;关闭后需手动打开",
43746
+ settingsJobsTitle: "有新后台任务时自动激活后台任务页",
43747
+ settingsJobsDesc: "当前会话出现新的后台任务时,自动激活后台任务页(每个新任务都会触发);宽屏同时展开侧边栏,窄屏不强制展开全屏抽屉;关闭后需手动打开",
43498
43748
  settingsToolsTitle: "为模型注入终端工具",
43499
43749
  settingsToolsDesc: "开启后,模型可通过 terminal_create 等 8 个工具创建并操作侧边栏终端(默认关闭)",
43500
43750
  settingsFontFamilyTitle: "终端字体",
@@ -43703,6 +43953,7 @@ globalThis.__dshChunks__["editor"] = (require) => {
43703
43953
  terminalDepsFailed: "Terminal dependency node-pty failed to load",
43704
43954
  terminalDepsHint: "Run the command below in a terminal or cmd on the DSH machine to repair it, then retry (node-pty stays in sync with the DSH core version):",
43705
43955
  terminalDepsProfile: " (detected profile: {profile})",
43956
+ terminalShellNotFound: "Configured shell not found: {name} — check the shell path under Settings → Side card → Terminal",
43706
43957
  refresh: "Refresh",
43707
43958
  refreshUnsavedConfirm: "The file changed on disk. Refreshing will discard unsaved edits. Continue?",
43708
43959
  save: "Save",
@@ -43767,6 +44018,18 @@ globalThis.__dshChunks__["editor"] = (require) => {
43767
44018
  producedOpen: "Open in sidebar",
43768
44019
  showInFolder: "Show in folder",
43769
44020
  disconnected: "Terminal disconnected, reconnecting…",
44021
+ terminalWaitBanner: "Agent is waiting for {needle}",
44022
+ terminalSkipWait: "Skip wait",
44023
+ gitFoldExpand: "Expand {count} context lines",
44024
+ gitFoldLoading: "Expanding…",
44025
+ gitFoldFailed: "Failed to expand",
44026
+ rename: "Rename",
44027
+ renameInvalid: "The name cannot be empty or contain path separators.",
44028
+ delete: "Delete",
44029
+ deleteTitle: "Delete \"{name}\"?",
44030
+ deleteDescFile: "This permanently deletes the file. This cannot be undone.",
44031
+ deleteDescDir: "This permanently deletes the directory and everything inside it. This cannot be undone.",
44032
+ dismiss: "Dismiss",
43770
44033
  exited: "Terminal process exited",
43771
44034
  noSession: "Select a conversation to use the sidebar",
43772
44035
  pluginNotLoaded: "Plugin not loaded; tab unavailable:",
@@ -43826,10 +44089,10 @@ globalThis.__dshChunks__["editor"] = (require) => {
43826
44089
  settingsConflict: "The setting changed in another window — please retry",
43827
44090
  binaryNoPreview: "This file type cannot be previewed",
43828
44091
  downloadToView: "Download to view",
43829
- settingsSubagentTitle: "Auto-open the Tasks page when a subagent appears",
43830
- settingsSubagentDesc: "Expand the side card and open the Tasks page when the current conversation spawns a new subagent; turn off to open it manually",
43831
- settingsJobsTitle: "Auto-open the Jobs page on a new background job",
43832
- settingsJobsDesc: "Expand the side card and open the Jobs page whenever a new background job appears for the current conversation (every new job triggers); turn off to open it manually",
44092
+ settingsSubagentTitle: "Auto-activate the Tasks page when a subagent appears",
44093
+ settingsSubagentDesc: "Activate the Tasks page when the current conversation spawns a new subagent; on wide screens the side card expands with it, narrow screens never force the full-screen drawer; turn off to open it manually",
44094
+ settingsJobsTitle: "Auto-activate the Jobs page on a new background job",
44095
+ settingsJobsDesc: "Activate the Jobs page whenever a new background job appears for the current conversation (every new job triggers); on wide screens the side card expands with it, narrow screens never force the full-screen drawer; turn off to open it manually",
43833
44096
  settingsToolsTitle: "Inject terminal tools for the model",
43834
44097
  settingsToolsDesc: "When enabled, the model can create and drive sidebar terminals through the 8 terminal_* tools (off by default)",
43835
44098
  settingsFontFamilyTitle: "Terminal font family",
@@ -43981,7 +44244,7 @@ globalThis.__dshChunks__["editor"] = (require) => {
43981
44244
  }
43982
44245
  //#endregion
43983
44246
  //#region \0dsh-css:/Users/libing/kk_Projects/dsh-coding-sidebar/src/client/sidebar.module.css.mjs
43984
- const css = "[data-dsh-panel-host]{z-index:25;pointer-events:none;position:fixed;inset:0;overflow:hidden}[data-dsh-panel-host][data-dsh-panel-host-degraded]{position:absolute;top:0;left:0}.S5HVoW_toggleCluster{top:calc(3px + env(safe-area-inset-top));z-index:45;pointer-events:auto;flex-direction:row;gap:4px;display:flex;position:absolute;right:10px}.S5HVoW_panel:not(.S5HVoW_panelHidden) .S5HVoW_tabBar{padding-right:72px}.S5HVoW_toggleButton{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out), color var(--ds-transition-duration-slow) var(--ds-ease-in-out);background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;display:flex}.S5HVoW_toggleButton:hover:not(:disabled):not([aria-disabled=true]){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_toggleButton:disabled,.S5HVoW_toggleButton[aria-disabled=true]{opacity:.4;cursor:default}.S5HVoW_panel{box-sizing:border-box;z-index:40;pointer-events:auto;background:var(--dsw-alias-bg-layer-1);border-left:1px solid var(--dsw-alias-border-l2);padding-bottom:env(safe-area-inset-bottom);transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), width var(--ds-transition-duration-slow) var(--ds-ease-in-out);flex-direction:column;display:flex;position:absolute;top:0;bottom:0;right:0}.S5HVoW_panelHidden{pointer-events:none;visibility:hidden;transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), width var(--ds-transition-duration-slow) var(--ds-ease-in-out), visibility 0s linear var(--ds-transition-duration-slow);transform:translate(102%)}.S5HVoW_panel[data-dragging]{transition:none}.S5HVoW_panelResize{cursor:col-resize;z-index:2;touch-action:none;width:8px;position:absolute;top:0;bottom:0;left:-4px}.S5HVoW_panelResizeActive{background:var(--dsw-alias-interactive-bg-hover-accent)}.S5HVoW_panelBody{flex:1;min-width:0;min-height:0;display:flex}.S5HVoW_panel{contain:layout style}body[data-dsh-sidebar-dragging] .S5HVoW_panel{will-change:transform}.S5HVoW_floatWindow{z-index:42;pointer-events:auto;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);box-shadow:var(--dsw-shadow-lv3);contain:layout style;border-radius:8px;flex-direction:column;display:flex;position:absolute;overflow:hidden}.S5HVoW_floatWindowDragging{will-change:left, top, width, height}.S5HVoW_floatHeader{height:34px;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1);cursor:grab;user-select:none;flex:none;align-items:center;gap:4px;padding:0 4px 0 10px;display:flex}.S5HVoW_floatWindowDragging .S5HVoW_floatHeader{cursor:grabbing}.S5HVoW_floatTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.S5HVoW_floatClose{width:18px;height:18px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.S5HVoW_floatClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_floatContent{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden}.S5HVoW_floatResize{z-index:2;cursor:nwse-resize;touch-action:none;width:14px;height:14px;position:absolute;bottom:0;right:0}.S5HVoW_floatResize:hover{background:var(--dsw-alias-interactive-bg-hover-accent)}.S5HVoW_pane[data-dsh-float-dock-over]{outline:2px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-2px}.S5HVoW_floatDropHint{z-index:46;pointer-events:none;border:2px dashed var(--dsw-alias-interactive-bg-hover-accent);background:color-mix(in srgb, var(--dsw-alias-interactive-bg-hover-accent) 12%, transparent);border-radius:8px;justify-content:center;align-items:center;display:flex;position:absolute}.S5HVoW_floatDropHintLabel{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);border-radius:999px;padding:4px 12px}.S5HVoW_toggleCluster,.S5HVoW_toggleButton,.S5HVoW_tabBar,.S5HVoW_floatHeader{-webkit-app-region:no-drag}body[data-dsh-title-bar-compat] .S5HVoW_toggleCluster{top:calc(var(--dsh-title-bar-strip,40px) + 3px)}body[data-dsh-title-bar-compat] .S5HVoW_panel{padding-top:var(--dsh-title-bar-strip,40px)}.S5HVoW_iconButton{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:50%;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.S5HVoW_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_iconButton:disabled{opacity:.4;cursor:default}.S5HVoW_workbench,.S5HVoW_split{flex:1;min-width:0;min-height:0;display:flex}.S5HVoW_splitRow{flex-direction:row}.S5HVoW_splitCol{flex-direction:column}.S5HVoW_splitChild{display:flex;position:relative;overflow:hidden}.S5HVoW_divider{z-index:3;touch-action:none;flex:none;position:relative}.S5HVoW_dividerRow:after,.S5HVoW_dividerCol:after{content:\"\";background:var(--dsw-alias-border-l2);transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out);position:absolute}.S5HVoW_dividerRow{cursor:col-resize;width:7px;margin:0 -2px}.S5HVoW_dividerRow:after{width:1px;top:0;bottom:0;left:50%;transform:translate(-50%)}.S5HVoW_dividerCol{cursor:row-resize;height:7px;margin:-2px 0}.S5HVoW_dividerCol:after{height:1px;top:50%;left:0;right:0;transform:translateY(-50%)}.S5HVoW_divider:hover:after,.S5HVoW_dividerActive:after{background:var(--dsw-alias-interactive-bg-hover-accent)}.S5HVoW_pane{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.S5HVoW_paneDrop{outline:1px solid var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.S5HVoW_dropOverlay{z-index:6;pointer-events:none;background:var(--dsw-alias-interactive-bg-hover-accent);opacity:.5;position:absolute}.S5HVoW_dropLeft{width:25%;top:0;bottom:0;left:0}.S5HVoW_dropRight{width:25%;top:0;bottom:0;right:0}.S5HVoW_dropUp{height:25%;top:0;left:0;right:0}.S5HVoW_dropDown{height:25%;bottom:0;left:0;right:0}.S5HVoW_dropCenter{outline:2px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-2px;background:0 0;inset:25%}.S5HVoW_paneContent{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.S5HVoW_paneTab{flex-direction:column;flex:1;min-height:0;display:flex}.S5HVoW_paneTabHidden{display:none}.S5HVoW_paneEmptyCards{flex:1;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));align-content:start;gap:8px;min-height:0;padding:12px;display:grid;overflow:hidden}.S5HVoW_paneCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;text-align:center;border-radius:8px;flex-direction:column;justify-content:center;align-items:center;gap:6px;padding:12px 8px;display:flex}.S5HVoW_paneCard:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-border-l2)}.S5HVoW_paneCard:disabled{opacity:.45;cursor:default}.S5HVoW_tabBar{border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);flex:none;align-items:stretch;height:34px;display:flex}.S5HVoW_tabBarDrop{outline:1px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.S5HVoW_tabList{scrollbar-width:none;flex:1;min-width:0;display:flex;overflow-x:auto}.S5HVoW_tabList::-webkit-scrollbar{display:none}.S5HVoW_tab{min-width:64px;max-width:160px;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);border-right:1px solid var(--dsw-alias-border-l1);cursor:pointer;user-select:none;background:0 0;flex:none;align-items:center;gap:4px;padding:0 4px 0 10px;display:flex}.S5HVoW_tab:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_tabActive{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-active)}.S5HVoW_tabTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.S5HVoW_tabBadge{min-width:16px;height:15px;font:var(--dsw-font-xxxs-strong-11);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-brand-primary);border-radius:8px;flex:none;justify-content:center;align-items:center;padding:0 4px;display:inline-flex}.S5HVoW_tabClose{width:18px;height:18px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.S5HVoW_tabClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_tabBarPlus{background:var(--dsw-alias-bg-layer-1);width:22px;height:22px;color:var(--dsw-alias-label-tertiary);cursor:pointer;border:none;border-radius:5px;flex:none;justify-content:center;align-self:center;align-items:center;margin:0 6px;padding:0;display:inline-flex;position:sticky;right:0}.S5HVoW_tabBarPlus:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_pinnedTab{color:var(--dsw-alias-label-tertiary);font-style:italic}.S5HVoW_pinnedTab:hover{color:var(--dsw-alias-label-secondary)}.S5HVoW_explorer{flex-direction:column;flex:1;min-height:0;display:flex}.S5HVoW_explorerHeader{flex:none;justify-content:space-between;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.S5HVoW_explorerRoot{font:var(--dsw-font-s-14);color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.S5HVoW_explorerBody{flex:1;min-height:0;padding:4px 8px 8px;overflow:hidden auto}.S5HVoW_explorerRow{box-sizing:border-box;width:100%;max-width:100%;height:34px;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;white-space:nowrap;animation:S5HVoW_dsh-row-in .15s var(--ds-ease-in-out);background:0 0;border:none;border-radius:8px;align-items:center;gap:6px;padding:0 8px;display:flex}.S5HVoW_explorerRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_explorerRowRevealed{background:color-mix(in srgb, var(--dsw-alias-interactive-bg-hover-accent) 18%, transparent);box-shadow:inset 2px 0 0 var(--dsw-alias-interactive-bg-hover-accent)}.S5HVoW_explorerDir{font:var(--dsw-font-s-strong-14)}.S5HVoW_explorerHidden{opacity:.45}.S5HVoW_explorerSymlink{color:var(--dsw-alias-label-tertiary);flex:none}.S5HVoW_explorerBroken .S5HVoW_explorerName{color:var(--dsw-alias-state-error-primary)}.S5HVoW_explorerName{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.S5HVoW_explorerRef{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);height:20px;color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-strong-11);cursor:pointer;border-radius:999px;flex:none;align-items:center;padding:0 8px;display:none}.S5HVoW_explorerRef:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_explorerRow:hover .S5HVoW_explorerRef,.S5HVoW_explorerRow:focus-within .S5HVoW_explorerRef{display:inline-flex}.S5HVoW_explorerCopied{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);flex:none}.S5HVoW_explorerError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);cursor:default}@keyframes S5HVoW_dsh-row-in{0%{opacity:0}}.S5HVoW_explorerEmpty{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px}.S5HVoW_explorerRowDropTarget{background:var(--dsw-alias-interactive-bg-hover);outline:1px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.S5HVoW_uploadDropZone{z-index:1001;pointer-events:none;border:2px dashed var(--dsw-alias-interactive-bg-hover-accent);box-shadow:0 0 0 200vmax var(--dsw-alias-bg-mask-drop);animation:S5HVoW_dsh-row-in .15s var(--ds-ease-in-out);border-radius:10px;justify-content:center;align-items:flex-start;padding:12px;display:flex;position:fixed}.S5HVoW_uploadDropHero{flex-direction:column;align-items:center;gap:10px;max-width:100%;padding-top:8px;display:flex}.S5HVoW_uploadDropZonePill{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);max-width:100%;box-shadow:var(--dsw-shadow-lv2);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);border-radius:999px;align-items:center;gap:6px;padding:6px 12px;display:flex}.S5HVoW_uploadDropZoneText{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.S5HVoW_uploadDropChatHint{z-index:1002;pointer-events:none;animation:S5HVoW_dsh-row-in .15s var(--ds-ease-in-out);justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;top:0;bottom:0;left:0}.S5HVoW_uploadDropChatCard{text-align:center;max-width:100%;color:var(--dsw-alias-label-primary);font:var(--dsw-font-s-strong-14);flex-direction:column;align-items:center;gap:12px;display:flex}.S5HVoW_uploadOverlay{z-index:30;background:var(--dsw-alias-bg-mask-1);backdrop-filter:var(--dsw-mask-blur);animation:S5HVoW_dsh-row-in .15s var(--ds-ease-in-out);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.S5HVoW_uploadOverlayCard{border:1px solid var(--dsw-alias-border-inverted);background:var(--dsw-alias-bg-layer-2);min-width:280px;max-width:min(420px,100% - 48px);box-shadow:var(--dsw-shadow-lv3);border-radius:24px;flex-direction:column;gap:12px;padding:20px 24px;display:flex}.S5HVoW_uploadOverlayTitle{font:var(--dsw-font-s-strong-14);color:var(--dsw-alias-label-primary);align-items:center;gap:8px;display:flex}.S5HVoW_uploadOverlayTitle>svg{flex:none}.S5HVoW_uploadOverlayTitle>span{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.S5HVoW_uploadOverlayProgress{background:var(--dsw-alias-border-l2);border-radius:3px;height:6px;overflow:hidden}.S5HVoW_uploadOverlayProgressFill{background:var(--dsw-alias-interactive-bg-hover-accent);height:100%;transition:width .15s var(--ds-ease-in-out);border-radius:3px}.S5HVoW_uploadOverlayStatus{min-height:1em;font:var(--dsw-font-xxs-12);font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.S5HVoW_uploadOverlayCancel{border:1px solid var(--dsw-alias-border-l2);height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;background:0 0;border-radius:8px;align-self:flex-end;padding:0 14px}.S5HVoW_uploadOverlayCancel:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l2)}.S5HVoW_uploadOverlayCancel:disabled{opacity:.4;cursor:default}.S5HVoW_editor{flex-direction:column;flex:1;min-height:0;display:flex}.S5HVoW_editorHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.S5HVoW_editorTitle{min-width:0;font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.S5HVoW_editorPathInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.S5HVoW_editorPathInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.S5HVoW_editorTreeToggleActive{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-active)}.S5HVoW_editorBody{flex:1;min-height:0;display:flex}.S5HVoW_editorMain{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.S5HVoW_editorTreeDock{border-left:1px solid var(--dsw-alias-border-l1);flex:none;min-height:0;display:flex;position:relative}.S5HVoW_editorTreeResize{cursor:col-resize;touch-action:none;z-index:3;width:6px;position:absolute;top:0;bottom:0;left:0}.S5HVoW_editorTreeResize:hover{background:var(--dsw-alias-border-l2)}.S5HVoW_editorTreePanel{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.S5HVoW_editorTreePanelFull{flex:1}.S5HVoW_editorTreeSearch{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.S5HVoW_editorSearchInput{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:26px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.S5HVoW_editorSearchInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.S5HVoW_editorSearchHint{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);padding:8px 12px}.S5HVoW_editorSearchResult{width:100%;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);text-align:left;cursor:pointer;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:none;border-radius:6px;padding:4px 8px;display:block;overflow:hidden}.S5HVoW_editorSearchResult:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_editorStatus{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary)}.S5HVoW_editorStatusError{color:var(--dsw-alias-state-error-primary)}.S5HVoW_dirtyDot{background:var(--dsw-alias-state-warn-primary);border-radius:50%;flex:none;width:7px;height:7px}.S5HVoW_editorPlaceholder{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;flex:1;justify-content:center;align-items:center;padding:16px;display:flex}.S5HVoW_orphanedType{opacity:.7;overflow-wrap:anywhere;margin-top:8px;font-size:12px;display:block}.S5HVoW_editorBinary{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:12px;padding:24px 16px;display:flex}.S5HVoW_editorBinaryNotice{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.S5HVoW_editorDownloadLink{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out), border-color var(--ds-transition-duration-slow) var(--ds-ease-in-out);border-radius:6px;align-items:center;gap:6px;padding:6px 14px;text-decoration:none;display:inline-flex}.S5HVoW_editorDownloadLink:hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l2)}.S5HVoW_editorError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);padding:12px 16px}.S5HVoW_editorBanner{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex:none;padding:4px 8px}.S5HVoW_sandboxStatus{font:var(--dsw-font-xxxs-11);flex:none;align-items:center;gap:8px;padding:4px 10px;display:flex}.S5HVoW_sandboxStatusOn{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1)}.S5HVoW_sandboxStatusOff{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 10%, transparent);border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent)}.S5HVoW_sandboxDot{background:var(--dsw-alias-state-success-primary);border-radius:50%;flex:none;width:6px;height:6px}.S5HVoW_sandboxStatusOff .S5HVoW_sandboxDot{background:var(--dsw-alias-state-error-primary)}.S5HVoW_sandboxStatusText{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.S5HVoW_sandboxAction{border:1px solid var(--dsw-alias-border-l2);font:inherit;color:inherit;cursor:pointer;background:0 0;border-radius:6px;flex:none;padding:2px 8px}.S5HVoW_sandboxAction:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_browser{flex-direction:column;flex:1;min-height:0;display:flex}.S5HVoW_browserBar{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:4px;padding:6px 8px;display:flex}.S5HVoW_browserInput{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.S5HVoW_browserInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.S5HVoW_browserMessage{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex:none;padding:4px 12px}.S5HVoW_browserFrame{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.S5HVoW_browserStart{text-align:center;min-height:0;font:var(--dsw-font-xs-13);color:var(--dsw-alias-label-tertiary);flex:1;justify-content:center;align-items:center;padding:20px;display:flex}.S5HVoW_browserBlocked{text-align:center;min-height:0;color:var(--dsw-alias-state-warn-primary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:6px;padding:24px;display:flex}.S5HVoW_browserBlockedTitle{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary)}.S5HVoW_browserBlockedDesc{max-width:280px;font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-secondary)}.S5HVoW_browserBlockedActions{gap:8px;margin-top:6px;display:flex}.S5HVoW_browserBlockedButton{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxxs-11);cursor:pointer;border-radius:6px;padding:4px 12px}.S5HVoW_browserBlockedButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_editorCm{background:0 0;flex:1;min-height:0;overflow:hidden}.S5HVoW_editorCm .cm-editor{height:100%}.S5HVoW_editorCm .cm-scroller{padding:12px 16px}.S5HVoW_editorCm .cm-editor.cm-focused{outline:none}.S5HVoW_selectionPopup{z-index:60;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxxs-strong-11);white-space:nowrap;cursor:pointer;border-radius:6px;align-items:center;padding:0 10px;display:inline-flex;position:fixed;transform:translate(-50%,calc(-100% - 8px))}.S5HVoW_selectionPopup:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_terminalWrap{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.S5HVoW_terminal{flex:1;min-height:0;padding:6px 4px 6px 8px}.S5HVoW_terminal .xterm{height:100%}.S5HVoW_terminalBanner{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex-wrap:wrap;flex:none;align-items:center;gap:8px;padding:3px 10px;display:flex}.S5HVoW_terminalBannerUrl{word-break:break-all;opacity:.85;flex-basis:100%;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.S5HVoW_boundaryError{z-index:50;background:var(--dsw-alias-bg-layer-1);border-left:1px solid var(--dsw-alias-border-l2);font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex-direction:column;align-items:flex-start;gap:8px;padding:16px;display:flex;position:fixed;top:0;bottom:0;right:0;overflow:auto}.S5HVoW_terminalRetry{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxxs-strong-11);cursor:pointer;border-radius:999px;flex:none;padding:1px 8px}.S5HVoW_terminalRetry:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_terminalDepsBanner{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex-direction:column;flex:none;gap:6px;padding:10px;display:flex}.S5HVoW_terminalDepsTitle{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-state-warn-primary)}.S5HVoW_terminalDepsHint{opacity:.9}.S5HVoW_terminalDepsCommandRow{align-items:flex-start;gap:8px;display:flex}.S5HVoW_terminalRepairCommand{white-space:pre-wrap;word-break:break-all;user-select:text;min-width:0;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:4px;flex:1;max-height:160px;margin:0;padding:6px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;line-height:1.5;overflow:auto}.S5HVoW_terminalDepsNote{opacity:.85}.S5HVoW_terminalDepsActions{align-items:center;gap:8px;display:flex}.S5HVoW_tabBoundaryError{min-height:0;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex-direction:column;flex:1;align-items:flex-start;gap:8px;padding:12px 16px;display:flex;overflow:auto}.S5HVoW_git{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden auto}.S5HVoW_gitHeader{flex:none;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.S5HVoW_gitWorktreeRow{flex:none;align-items:center;gap:8px;padding:6px 8px 0 12px;display:flex}.S5HVoW_gitWorktreeLabel{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);flex:none}.S5HVoW_gitBranchSelect{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);min-width:0;height:26px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 6px}.S5HVoW_gitSection{border-top:1px solid var(--dsw-alias-border-l1)}.S5HVoW_gitSectionHeader{font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-tertiary);text-transform:uppercase;justify-content:space-between;align-items:center;padding:6px 12px 4px;display:flex}.S5HVoW_gitLink{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-brand-primary);cursor:pointer;background:0 0;border:none;padding:0}.S5HVoW_gitLink:hover:not(:disabled){text-decoration:underline}.S5HVoW_gitLink:disabled{opacity:.4;cursor:default}.S5HVoW_gitRow{min-height:34px;animation:S5HVoW_dsh-row-in .15s var(--ds-ease-in-out);border-radius:8px;align-items:center;gap:6px;margin:0 6px;padding:0 8px;display:flex}.S5HVoW_gitRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_gitRowSelected{background:var(--dsw-alias-interactive-bg-active)}.S5HVoW_gitRowMain{cursor:pointer;text-align:left;background:0 0;border:none;flex:1;align-items:center;gap:8px;min-width:0;padding:3px 0;display:flex}.S5HVoW_gitBadge{width:20px;height:16px;font:var(--dsw-font-xxxs-strong-11);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;justify-content:center;align-items:center;display:inline-flex}.S5HVoW_gitName{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.S5HVoW_gitEmpty{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);padding:4px 12px 8px}.S5HVoW_gitPlaceholder{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px}.S5HVoW_gitError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);white-space:pre-wrap;padding:8px 12px}.S5HVoW_gitDiff{border-top:1px solid var(--dsw-alias-border-l1);padding:8px}.S5HVoW_gitDiffTab{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden auto}.S5HVoW_gitDiffTabHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.S5HVoW_gitDiffTabTitle{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.S5HVoW_gitDiffFile{width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:baseline;gap:6px;padding:8px 2px 2px;display:flex}.S5HVoW_gitDiffFile:disabled{cursor:default}.S5HVoW_gitDiffFile:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_gitDiffFileChevron{color:var(--dsw-alias-label-tertiary);flex:none;transform:rotate(0)}.S5HVoW_gitDiffFileChevronExpanded{transform:rotate(90deg)}.S5HVoW_gitDiffFilePath{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.S5HVoW_gitDiffFileOld{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:none;max-width:40%;overflow:hidden}.S5HVoW_gitDiffFileTag{border:1px solid var(--dsw-alias-border-l2);font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:0 6px}.S5HVoW_gitDiffHunk{font:var(--dsw-font-markdown-code-block-small);color:var(--dsw-alias-label-tertiary);gap:8px;padding:3px 2px;display:flex}.S5HVoW_gitDiffHunkHeader{color:var(--dsw-alias-label-secondary);flex:none}.S5HVoW_gitDiffHunkSection{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.S5HVoW_gitDiffLine{font:var(--dsw-font-markdown-code-block-small);white-space:pre-wrap;overflow-wrap:anywhere;align-items:stretch;min-width:0;line-height:20px;display:flex}.S5HVoW_gitDiffNum{text-align:right;width:36px;color:var(--dsw-alias-label-tertiary);user-select:none;flex:none;padding-right:8px}.S5HVoW_gitDiffCode{flex:1;min-width:0;overflow:visible}.S5HVoW_gitDiffCtx{color:var(--dsw-alias-label-primary)}.S5HVoW_gitDiffDel{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent)}.S5HVoW_gitDiffAdd{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent)}.S5HVoW_gitDiffMeta{padding-left:2px}.S5HVoW_gitDiffMetaText{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);font-style:italic}.S5HVoW_gitDiffExpand{width:100%;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-brand-primary);cursor:pointer;text-align:center;background:0 0;border:none;margin:4px 0;display:block}.S5HVoW_gitDiffExpand:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_gitConfirmDesc{font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);white-space:pre-wrap;margin:0}.S5HVoW_gitCommit{border-top:1px solid var(--dsw-alias-border-l1);align-items:center;gap:6px;padding:8px 12px;display:flex}.S5HVoW_gitCommitInput{flex:1;min-width:0}.S5HVoW_gitCommitButton{background:var(--dsw-alias-button-primary-fill);height:26px;color:var(--dsw-alias-label-primary-inverted);font:var(--dsw-font-xxs-strong-12);cursor:pointer;border:none;border-radius:6px;flex:none;padding:0 12px}.S5HVoW_gitCommitButton:hover:not(:disabled){background:var(--dsw-alias-button-primary-hover)}.S5HVoW_gitCommitButton:disabled{opacity:.45;cursor:default}.S5HVoW_gitLogRow{cursor:pointer;border-radius:8px;flex-direction:column;gap:2px;padding:5px 12px;display:flex}.S5HVoW_gitLogRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_gitLogLine1{align-items:baseline;gap:8px;min-width:0;display:flex}.S5HVoW_gitLogHash{font:var(--dsw-font-markdown-code-block-small);color:var(--dsw-alias-label-tertiary);flex:none}.S5HVoW_gitLogLine2{flex-wrap:wrap;align-items:center;gap:6px;min-width:0;display:flex}.S5HVoW_gitLogRef{border:1px solid var(--dsw-alias-border-l2);font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-brand-primary);white-space:nowrap;border-radius:999px;flex:none;padding:0 5px}.S5HVoW_gitLogSubject{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.S5HVoW_gitLogMeta{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary)}.S5HVoW_gitLogMore{border:1px solid var(--dsw-alias-border-l2);width:calc(100% - 24px);font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border-radius:6px;margin:4px 12px 8px;padding:6px 0;display:block}.S5HVoW_gitLogMore:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_gitLogMore:disabled{opacity:.5;cursor:default}.S5HVoW_producedRow{flex-wrap:wrap;align-items:center;gap:8px;padding:4px 0;display:flex}.S5HVoW_producedLabel{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.S5HVoW_producedChip{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);max-width:200px;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);cursor:pointer;border-radius:999px;align-items:center;gap:4px;padding:2px 8px;display:inline-flex;overflow:hidden}.S5HVoW_producedChip:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_producedChip span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.S5HVoW_producedMore{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.S5HVoW_toggleButton:focus-visible,.S5HVoW_iconButton:focus-visible,.S5HVoW_tab:focus-visible,.S5HVoW_tabClose:focus-visible,.S5HVoW_tabBarPlus:focus-visible,.S5HVoW_paneCard:focus-visible,.S5HVoW_explorerRow:focus-visible,.S5HVoW_explorerRef:focus-visible,.S5HVoW_gitRowMain:focus-visible,.S5HVoW_gitLink:focus-visible,.S5HVoW_gitCommitButton:focus-visible,.S5HVoW_gitLogRow:focus-visible,.S5HVoW_gitLogMore:focus-visible,.S5HVoW_gitDiffFile:focus-visible,.S5HVoW_gitDiffExpand:focus-visible,.S5HVoW_terminalRetry:focus-visible,.S5HVoW_editorDownloadLink:focus-visible{outline:2px solid var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}@media (prefers-reduced-motion:reduce){.S5HVoW_panel,.S5HVoW_panelHidden,.S5HVoW_toggleCluster,.S5HVoW_toggleButton,.S5HVoW_tab,.S5HVoW_tabBarPlus,.S5HVoW_paneCard,.S5HVoW_explorerRow,.S5HVoW_gitRow,.S5HVoW_divider,.S5HVoW_dividerRow:after,.S5HVoW_dividerCol:after{transition:none;animation:none}}@media (width<=767px){.S5HVoW_panel:not(.S5HVoW_panelHidden) .S5HVoW_tabBar{padding-right:40px}.S5HVoW_tab{min-width:48px;max-width:128px}}.S5HVoW_openWithLabel{align-items:center;gap:8px;width:100%;min-width:0;display:flex}.S5HVoW_openWithName{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.S5HVoW_openWithChevron{color:var(--dsw-alias-label-tertiary);flex:none}.S5HVoW_openWithPin{width:20px;height:20px;color:var(--dsw-alias-label-tertiary);cursor:pointer;border-radius:6px;flex:none;justify-content:center;align-items:center;display:inline-flex}.S5HVoW_openWithPin:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_openWithPinActive{color:var(--dsw-alias-state-business-primary)}@keyframes S5HVoW_dsh-toc-flash{0%,60%{background:var(--dsw-alias-interactive-bg-hover)}to{background:0 0}}.S5HVoW_browserLive{flex-direction:column;gap:6px;padding:8px 10px;display:flex;position:absolute;inset:0;overflow:hidden}.S5HVoW_browserLiveStatus{opacity:.75;align-items:center;gap:8px;font-size:12px;display:flex}.S5HVoW_browserLiveCanvas{object-fit:contain;border:1px solid var(--dsw-alias-border-l,#80808040);cursor:crosshair;background:#fff;border-radius:8px;flex:1;width:100%;min-height:0}.S5HVoW_browserLiveTarget{max-width:260px;font-size:12px}";
44247
+ const css = "[data-dsh-panel-host]{z-index:25;pointer-events:none;position:fixed;inset:0;overflow:hidden}[data-dsh-panel-host][data-dsh-panel-host-degraded]{position:absolute;top:0;left:0}.S5HVoW_toggleCluster{top:calc(3px + env(safe-area-inset-top));z-index:45;pointer-events:auto;flex-direction:row;gap:4px;display:flex;position:absolute;right:10px}.S5HVoW_panel:not(.S5HVoW_panelHidden) .S5HVoW_tabBar{padding-right:72px}.S5HVoW_toggleButton{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out), color var(--ds-transition-duration-slow) var(--ds-ease-in-out);background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;display:flex}.S5HVoW_toggleButton:hover:not(:disabled):not([aria-disabled=true]){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_toggleButton:disabled,.S5HVoW_toggleButton[aria-disabled=true]{opacity:.4;cursor:default}.S5HVoW_panel{box-sizing:border-box;z-index:40;pointer-events:auto;background:var(--dsw-alias-bg-layer-1);border-left:1px solid var(--dsw-alias-border-l2);padding-bottom:env(safe-area-inset-bottom);transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), width var(--ds-transition-duration-slow) var(--ds-ease-in-out);flex-direction:column;display:flex;position:absolute;top:0;bottom:0;right:0}.S5HVoW_panelHidden{pointer-events:none;visibility:hidden;transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), width var(--ds-transition-duration-slow) var(--ds-ease-in-out), visibility 0s linear var(--ds-transition-duration-slow);transform:translate(102%)}.S5HVoW_panel[data-dragging]{transition:none}.S5HVoW_panelResize{cursor:col-resize;z-index:2;touch-action:none;width:8px;position:absolute;top:0;bottom:0;left:-4px}.S5HVoW_panelResizeActive{background:var(--dsw-alias-interactive-bg-hover-accent)}.S5HVoW_panelBody{flex:1;min-width:0;min-height:0;display:flex}.S5HVoW_panel{contain:layout style}body[data-dsh-sidebar-dragging] .S5HVoW_panel{will-change:transform}.S5HVoW_floatWindow{z-index:42;pointer-events:auto;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);box-shadow:var(--dsw-shadow-lv3);contain:layout style;border-radius:8px;flex-direction:column;display:flex;position:absolute;overflow:hidden}.S5HVoW_floatWindowDragging{will-change:left, top, width, height}.S5HVoW_floatHeader{height:34px;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1);cursor:grab;user-select:none;flex:none;align-items:center;gap:4px;padding:0 4px 0 10px;display:flex}.S5HVoW_floatWindowDragging .S5HVoW_floatHeader{cursor:grabbing}.S5HVoW_floatTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.S5HVoW_floatClose{width:18px;height:18px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.S5HVoW_floatClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_floatContent{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden}.S5HVoW_floatResize{z-index:2;cursor:nwse-resize;touch-action:none;width:14px;height:14px;position:absolute;bottom:0;right:0}.S5HVoW_floatResize:hover{background:var(--dsw-alias-interactive-bg-hover-accent)}.S5HVoW_pane[data-dsh-float-dock-over]{outline:2px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-2px}.S5HVoW_floatDropHint{z-index:46;pointer-events:none;border:2px dashed var(--dsw-alias-interactive-bg-hover-accent);background:color-mix(in srgb, var(--dsw-alias-interactive-bg-hover-accent) 12%, transparent);border-radius:8px;justify-content:center;align-items:center;display:flex;position:absolute}.S5HVoW_floatDropHintLabel{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);border-radius:999px;padding:4px 12px}.S5HVoW_toggleCluster,.S5HVoW_toggleButton,.S5HVoW_tabBar,.S5HVoW_floatHeader{-webkit-app-region:no-drag}body[data-dsh-title-bar-compat] .S5HVoW_toggleCluster{top:calc(var(--dsh-title-bar-strip,40px) + 3px)}body[data-dsh-title-bar-compat] .S5HVoW_panel{padding-top:var(--dsh-title-bar-strip,40px)}.S5HVoW_iconButton{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:50%;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.S5HVoW_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_iconButton:disabled{opacity:.4;cursor:default}.S5HVoW_workbench,.S5HVoW_split{flex:1;min-width:0;min-height:0;display:flex}.S5HVoW_splitRow{flex-direction:row}.S5HVoW_splitCol{flex-direction:column}.S5HVoW_splitChild{display:flex;position:relative;overflow:hidden}.S5HVoW_divider{z-index:3;touch-action:none;flex:none;position:relative}.S5HVoW_dividerRow:after,.S5HVoW_dividerCol:after{content:\"\";background:var(--dsw-alias-border-l2);transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out);position:absolute}.S5HVoW_dividerRow{cursor:col-resize;width:7px;margin:0 -2px}.S5HVoW_dividerRow:after{width:1px;top:0;bottom:0;left:50%;transform:translate(-50%)}.S5HVoW_dividerCol{cursor:row-resize;height:7px;margin:-2px 0}.S5HVoW_dividerCol:after{height:1px;top:50%;left:0;right:0;transform:translateY(-50%)}.S5HVoW_divider:hover:after,.S5HVoW_dividerActive:after{background:var(--dsw-alias-interactive-bg-hover-accent)}.S5HVoW_pane{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.S5HVoW_paneDrop{outline:1px solid var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.S5HVoW_dropOverlay{z-index:6;pointer-events:none;background:var(--dsw-alias-interactive-bg-hover-accent);opacity:.5;position:absolute}.S5HVoW_dropLeft{width:25%;top:0;bottom:0;left:0}.S5HVoW_dropRight{width:25%;top:0;bottom:0;right:0}.S5HVoW_dropUp{height:25%;top:0;left:0;right:0}.S5HVoW_dropDown{height:25%;bottom:0;left:0;right:0}.S5HVoW_dropCenter{outline:2px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-2px;background:0 0;inset:25%}.S5HVoW_paneContent{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.S5HVoW_paneTab{flex-direction:column;flex:1;min-height:0;display:flex}.S5HVoW_paneTabHidden{display:none}.S5HVoW_paneEmptyCards{flex:1;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));align-content:start;gap:8px;min-height:0;padding:12px;display:grid;overflow:hidden}.S5HVoW_paneCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;text-align:center;border-radius:8px;flex-direction:column;justify-content:center;align-items:center;gap:6px;padding:12px 8px;display:flex}.S5HVoW_paneCard:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-border-l2)}.S5HVoW_paneCard:disabled{opacity:.45;cursor:default}.S5HVoW_tabBar{border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);flex:none;align-items:stretch;height:34px;display:flex}.S5HVoW_tabBarDrop{outline:1px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.S5HVoW_tabList{scrollbar-width:none;flex:1;min-width:0;display:flex;overflow-x:auto}.S5HVoW_tabList::-webkit-scrollbar{display:none}.S5HVoW_tab{min-width:64px;max-width:160px;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);border-right:1px solid var(--dsw-alias-border-l1);cursor:pointer;user-select:none;background:0 0;flex:none;align-items:center;gap:4px;padding:0 4px 0 10px;display:flex}.S5HVoW_tab:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_tabActive{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-active)}.S5HVoW_tabTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.S5HVoW_tabBadge{min-width:16px;height:15px;font:var(--dsw-font-xxxs-strong-11);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-brand-primary);border-radius:8px;flex:none;justify-content:center;align-items:center;padding:0 4px;display:inline-flex}.S5HVoW_tabClose{width:18px;height:18px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.S5HVoW_tabClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_tabBarPlus{background:var(--dsw-alias-bg-layer-1);width:22px;height:22px;color:var(--dsw-alias-label-tertiary);cursor:pointer;border:none;border-radius:5px;flex:none;justify-content:center;align-self:center;align-items:center;margin:0 6px;padding:0;display:inline-flex;position:sticky;right:0}.S5HVoW_tabBarPlus:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_pinnedTab{color:var(--dsw-alias-label-tertiary);font-style:italic}.S5HVoW_pinnedTab:hover{color:var(--dsw-alias-label-secondary)}.S5HVoW_explorer{flex-direction:column;flex:1;min-height:0;display:flex}.S5HVoW_explorerHeader{flex:none;justify-content:space-between;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.S5HVoW_explorerRoot{font:var(--dsw-font-s-14);color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.S5HVoW_explorerBody{flex:1;min-height:0;padding:4px 8px 8px;overflow:hidden auto}.S5HVoW_explorerRow{box-sizing:border-box;width:100%;max-width:100%;height:34px;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;white-space:nowrap;animation:S5HVoW_dsh-row-in .15s var(--ds-ease-in-out);background:0 0;border:none;border-radius:8px;align-items:center;gap:6px;padding:0 8px;display:flex}.S5HVoW_explorerRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_explorerRowRevealed{background:color-mix(in srgb, var(--dsw-alias-interactive-bg-hover-accent) 18%, transparent);box-shadow:inset 2px 0 0 var(--dsw-alias-interactive-bg-hover-accent)}.S5HVoW_explorerDir{font:var(--dsw-font-s-strong-14)}.S5HVoW_explorerHidden{opacity:.45}.S5HVoW_explorerSymlink{color:var(--dsw-alias-label-tertiary);flex:none}.S5HVoW_explorerBroken .S5HVoW_explorerName{color:var(--dsw-alias-state-error-primary)}.S5HVoW_explorerName{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.S5HVoW_explorerRef{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);height:20px;color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-strong-11);cursor:pointer;border-radius:999px;flex:none;align-items:center;padding:0 8px;display:none}.S5HVoW_explorerRef:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_explorerRow:hover .S5HVoW_explorerRef,.S5HVoW_explorerRow:focus-within .S5HVoW_explorerRef{display:inline-flex}.S5HVoW_explorerCopied{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);flex:none}.S5HVoW_explorerError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);cursor:default}@keyframes S5HVoW_dsh-row-in{0%{opacity:0}}.S5HVoW_explorerEmpty{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px}.S5HVoW_explorerRowDropTarget{background:var(--dsw-alias-interactive-bg-hover);outline:1px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.S5HVoW_uploadDropZone{z-index:1001;pointer-events:none;border:2px dashed var(--dsw-alias-interactive-bg-hover-accent);box-shadow:0 0 0 200vmax var(--dsw-alias-bg-mask-drop);animation:S5HVoW_dsh-row-in .15s var(--ds-ease-in-out);border-radius:10px;justify-content:center;align-items:flex-start;padding:12px;display:flex;position:fixed}.S5HVoW_uploadDropHero{flex-direction:column;align-items:center;gap:10px;max-width:100%;padding-top:8px;display:flex}.S5HVoW_uploadDropZonePill{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);max-width:100%;box-shadow:var(--dsw-shadow-lv2);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);border-radius:999px;align-items:center;gap:6px;padding:6px 12px;display:flex}.S5HVoW_uploadDropZoneText{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.S5HVoW_uploadDropChatHint{z-index:1002;pointer-events:none;animation:S5HVoW_dsh-row-in .15s var(--ds-ease-in-out);justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;top:0;bottom:0;left:0}.S5HVoW_uploadDropChatCard{text-align:center;max-width:100%;color:var(--dsw-alias-label-primary);font:var(--dsw-font-s-strong-14);flex-direction:column;align-items:center;gap:12px;display:flex}.S5HVoW_uploadOverlay{z-index:30;background:var(--dsw-alias-bg-mask-1);backdrop-filter:var(--dsw-mask-blur);animation:S5HVoW_dsh-row-in .15s var(--ds-ease-in-out);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.S5HVoW_uploadOverlayCard{border:1px solid var(--dsw-alias-border-inverted);background:var(--dsw-alias-bg-layer-2);min-width:280px;max-width:min(420px,100% - 48px);box-shadow:var(--dsw-shadow-lv3);border-radius:24px;flex-direction:column;gap:12px;padding:20px 24px;display:flex}.S5HVoW_uploadOverlayTitle{font:var(--dsw-font-s-strong-14);color:var(--dsw-alias-label-primary);align-items:center;gap:8px;display:flex}.S5HVoW_uploadOverlayTitle>svg{flex:none}.S5HVoW_uploadOverlayTitle>span{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.S5HVoW_uploadOverlayProgress{background:var(--dsw-alias-border-l2);border-radius:3px;height:6px;overflow:hidden}.S5HVoW_uploadOverlayProgressFill{background:var(--dsw-alias-interactive-bg-hover-accent);height:100%;transition:width .15s var(--ds-ease-in-out);border-radius:3px}.S5HVoW_uploadOverlayStatus{min-height:1em;font:var(--dsw-font-xxs-12);font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.S5HVoW_uploadOverlayCancel{border:1px solid var(--dsw-alias-border-l2);height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;background:0 0;border-radius:8px;align-self:flex-end;padding:0 14px}.S5HVoW_uploadOverlayCancel:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l2)}.S5HVoW_uploadOverlayCancel:disabled{opacity:.4;cursor:default}.S5HVoW_editor{flex-direction:column;flex:1;min-height:0;display:flex}.S5HVoW_editorHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.S5HVoW_editorTitle{min-width:0;font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.S5HVoW_editorPathInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.S5HVoW_editorPathInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.S5HVoW_editorTreeToggleActive{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-active)}.S5HVoW_editorBody{flex:1;min-height:0;display:flex}.S5HVoW_editorMain{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.S5HVoW_editorTreeDock{border-left:1px solid var(--dsw-alias-border-l1);flex:none;min-height:0;display:flex;position:relative}.S5HVoW_editorTreeResize{cursor:col-resize;touch-action:none;z-index:3;width:6px;position:absolute;top:0;bottom:0;left:0}.S5HVoW_editorTreeResize:hover{background:var(--dsw-alias-border-l2)}.S5HVoW_editorTreePanel{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.S5HVoW_editorTreePanelFull{flex:1}.S5HVoW_editorTreeSearch{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.S5HVoW_editorSearchInput{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:26px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.S5HVoW_editorSearchInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.S5HVoW_editorSearchHint{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);padding:8px 12px}.S5HVoW_editorSearchResult{width:100%;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);text-align:left;cursor:pointer;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:none;border-radius:6px;padding:4px 8px;display:block;overflow:hidden}.S5HVoW_editorSearchResult:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_editorStatus{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary)}.S5HVoW_editorStatusError{color:var(--dsw-alias-state-error-primary)}.S5HVoW_dirtyDot{background:var(--dsw-alias-state-warn-primary);border-radius:50%;flex:none;width:7px;height:7px}.S5HVoW_editorPlaceholder{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;flex:1;justify-content:center;align-items:center;padding:16px;display:flex}.S5HVoW_orphanedType{opacity:.7;overflow-wrap:anywhere;margin-top:8px;font-size:12px;display:block}.S5HVoW_editorBinary{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:12px;padding:24px 16px;display:flex}.S5HVoW_editorBinaryNotice{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.S5HVoW_editorDownloadLink{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out), border-color var(--ds-transition-duration-slow) var(--ds-ease-in-out);border-radius:6px;align-items:center;gap:6px;padding:6px 14px;text-decoration:none;display:inline-flex}.S5HVoW_editorDownloadLink:hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l2)}.S5HVoW_editorError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);padding:12px 16px}.S5HVoW_editorBanner{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex:none;padding:4px 8px}.S5HVoW_sandboxStatus{font:var(--dsw-font-xxxs-11);flex:none;align-items:center;gap:8px;padding:4px 10px;display:flex}.S5HVoW_sandboxStatusOn{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1)}.S5HVoW_sandboxStatusOff{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 10%, transparent);border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent)}.S5HVoW_sandboxDot{background:var(--dsw-alias-state-success-primary);border-radius:50%;flex:none;width:6px;height:6px}.S5HVoW_sandboxStatusOff .S5HVoW_sandboxDot{background:var(--dsw-alias-state-error-primary)}.S5HVoW_sandboxStatusText{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.S5HVoW_sandboxAction{border:1px solid var(--dsw-alias-border-l2);font:inherit;color:inherit;cursor:pointer;background:0 0;border-radius:6px;flex:none;padding:2px 8px}.S5HVoW_sandboxAction:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_browser{flex-direction:column;flex:1;min-height:0;display:flex}.S5HVoW_browserBar{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:4px;padding:6px 8px;display:flex}.S5HVoW_browserInput{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.S5HVoW_browserInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.S5HVoW_browserMessage{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex:none;padding:4px 12px}.S5HVoW_browserFrame{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.S5HVoW_browserStart{text-align:center;min-height:0;font:var(--dsw-font-xs-13);color:var(--dsw-alias-label-tertiary);flex:1;justify-content:center;align-items:center;padding:20px;display:flex}.S5HVoW_browserBlocked{text-align:center;min-height:0;color:var(--dsw-alias-state-warn-primary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:6px;padding:24px;display:flex}.S5HVoW_browserBlockedTitle{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary)}.S5HVoW_browserBlockedDesc{max-width:280px;font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-secondary)}.S5HVoW_browserBlockedActions{gap:8px;margin-top:6px;display:flex}.S5HVoW_browserBlockedButton{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxxs-11);cursor:pointer;border-radius:6px;padding:4px 12px}.S5HVoW_browserBlockedButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_editorCm{background:0 0;flex:1;min-height:0;overflow:hidden}.S5HVoW_editorCm .cm-editor{height:100%}.S5HVoW_editorCm .cm-scroller{padding:12px 16px}.S5HVoW_editorCm .cm-editor.cm-focused{outline:none}.S5HVoW_selectionPopup{z-index:60;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxxs-strong-11);white-space:nowrap;cursor:pointer;border-radius:6px;align-items:center;padding:0 10px;display:inline-flex;position:fixed;transform:translate(-50%,calc(-100% - 8px))}.S5HVoW_selectionPopup:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_terminalWrap{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.S5HVoW_terminal{flex:1;min-height:0;padding:6px 4px 6px 8px}.S5HVoW_terminal .xterm{height:100%}.S5HVoW_terminalBanner{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex-wrap:wrap;flex:none;align-items:center;gap:8px;padding:3px 10px;display:flex}.S5HVoW_terminalBannerUrl{word-break:break-all;opacity:.85;flex-basis:100%;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.S5HVoW_boundaryError{z-index:50;background:var(--dsw-alias-bg-layer-1);border-left:1px solid var(--dsw-alias-border-l2);font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex-direction:column;align-items:flex-start;gap:8px;padding:16px;display:flex;position:fixed;top:0;bottom:0;right:0;overflow:auto}.S5HVoW_terminalRetry{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxxs-strong-11);cursor:pointer;border-radius:999px;flex:none;padding:1px 8px}.S5HVoW_terminalRetry:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_gitFoldRow{box-sizing:border-box;background:var(--dsw-alias-bg-layer-1);width:100%;color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);text-align:center;cursor:pointer;border:none;outline:none;padding:2px 12px;display:block}.S5HVoW_gitFoldRow:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary)}.S5HVoW_gitFoldRow:disabled{cursor:default}.S5HVoW_gitFoldRowFailed{color:var(--dsw-alias-state-error-primary);opacity:.7}.S5HVoW_explorerRenameInput{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);min-width:0;height:20px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:4px;outline:none;flex:1;padding:0 4px}.S5HVoW_terminalWaitBanner{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex:none;align-items:center;gap:8px;padding:3px 10px;display:flex}.S5HVoW_terminalWaitNeedle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;overflow:hidden}.S5HVoW_terminalDepsBanner{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex-direction:column;flex:none;gap:6px;padding:10px;display:flex}.S5HVoW_terminalDepsTitle{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-state-warn-primary)}.S5HVoW_terminalDepsHint{opacity:.9}.S5HVoW_terminalDepsCommandRow{align-items:flex-start;gap:8px;display:flex}.S5HVoW_terminalRepairCommand{white-space:pre-wrap;word-break:break-all;user-select:text;min-width:0;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:4px;flex:1;max-height:160px;margin:0;padding:6px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;line-height:1.5;overflow:auto}.S5HVoW_terminalDepsNote{opacity:.85}.S5HVoW_terminalDepsActions{align-items:center;gap:8px;display:flex}.S5HVoW_tabBoundaryError{min-height:0;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex-direction:column;flex:1;align-items:flex-start;gap:8px;padding:12px 16px;display:flex;overflow:auto}.S5HVoW_git{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden auto}.S5HVoW_gitHeader{flex:none;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.S5HVoW_gitWorktreeRow{flex:none;align-items:center;gap:8px;padding:6px 8px 0 12px;display:flex}.S5HVoW_gitWorktreeLabel{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);flex:none}.S5HVoW_gitBranchSelect{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);min-width:0;height:26px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 6px}.S5HVoW_gitSection{border-top:1px solid var(--dsw-alias-border-l1)}.S5HVoW_gitSectionHeader{font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-tertiary);text-transform:uppercase;justify-content:space-between;align-items:center;padding:6px 12px 4px;display:flex}.S5HVoW_gitLink{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-brand-primary);cursor:pointer;background:0 0;border:none;padding:0}.S5HVoW_gitLink:hover:not(:disabled){text-decoration:underline}.S5HVoW_gitLink:disabled{opacity:.4;cursor:default}.S5HVoW_gitRow{min-height:34px;animation:S5HVoW_dsh-row-in .15s var(--ds-ease-in-out);border-radius:8px;align-items:center;gap:6px;margin:0 6px;padding:0 8px;display:flex}.S5HVoW_gitRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_gitRowSelected{background:var(--dsw-alias-interactive-bg-active)}.S5HVoW_gitRowMain{cursor:pointer;text-align:left;background:0 0;border:none;flex:1;align-items:center;gap:8px;min-width:0;padding:3px 0;display:flex}.S5HVoW_gitBadge{width:20px;height:16px;font:var(--dsw-font-xxxs-strong-11);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;justify-content:center;align-items:center;display:inline-flex}.S5HVoW_gitName{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.S5HVoW_gitEmpty{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);padding:4px 12px 8px}.S5HVoW_gitPlaceholder{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px}.S5HVoW_gitError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);white-space:pre-wrap;padding:8px 12px}.S5HVoW_gitDiff{border-top:1px solid var(--dsw-alias-border-l1);padding:8px}.S5HVoW_gitDiffTab{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden auto}.S5HVoW_gitDiffTabHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.S5HVoW_gitDiffTabTitle{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.S5HVoW_gitDiffFile{width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:baseline;gap:6px;padding:8px 2px 2px;display:flex}.S5HVoW_gitDiffFile:disabled{cursor:default}.S5HVoW_gitDiffFile:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_gitDiffFileChevron{color:var(--dsw-alias-label-tertiary);flex:none;transform:rotate(0)}.S5HVoW_gitDiffFileChevronExpanded{transform:rotate(90deg)}.S5HVoW_gitDiffFilePath{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.S5HVoW_gitDiffFileOld{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:none;max-width:40%;overflow:hidden}.S5HVoW_gitDiffFileTag{border:1px solid var(--dsw-alias-border-l2);font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:0 6px}.S5HVoW_gitDiffHunk{font:var(--dsw-font-markdown-code-block-small);color:var(--dsw-alias-label-tertiary);gap:8px;padding:3px 2px;display:flex}.S5HVoW_gitDiffHunkHeader{color:var(--dsw-alias-label-secondary);flex:none}.S5HVoW_gitDiffHunkSection{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.S5HVoW_gitDiffLine{font:var(--dsw-font-markdown-code-block-small);white-space:pre-wrap;overflow-wrap:anywhere;align-items:stretch;min-width:0;line-height:20px;display:flex}.S5HVoW_gitDiffNum{text-align:right;width:36px;color:var(--dsw-alias-label-tertiary);user-select:none;flex:none;padding-right:8px}.S5HVoW_gitDiffCode{flex:1;min-width:0;overflow:visible}.S5HVoW_gitDiffCtx{color:var(--dsw-alias-label-primary)}.S5HVoW_gitDiffDel{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent)}.S5HVoW_gitDiffAdd{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent)}.S5HVoW_gitDiffMeta{padding-left:2px}.S5HVoW_gitDiffMetaText{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);font-style:italic}.S5HVoW_gitDiffExpand{width:100%;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-brand-primary);cursor:pointer;text-align:center;background:0 0;border:none;margin:4px 0;display:block}.S5HVoW_gitDiffExpand:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_gitConfirmDesc{font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);white-space:pre-wrap;margin:0}.S5HVoW_gitCommit{border-top:1px solid var(--dsw-alias-border-l1);align-items:center;gap:6px;padding:8px 12px;display:flex}.S5HVoW_gitCommitInput{flex:1;min-width:0}.S5HVoW_gitCommitButton{background:var(--dsw-alias-button-primary-fill);height:26px;color:var(--dsw-alias-label-primary-inverted);font:var(--dsw-font-xxs-strong-12);cursor:pointer;border:none;border-radius:6px;flex:none;padding:0 12px}.S5HVoW_gitCommitButton:hover:not(:disabled){background:var(--dsw-alias-button-primary-hover)}.S5HVoW_gitCommitButton:disabled{opacity:.45;cursor:default}.S5HVoW_gitLogRow{cursor:pointer;border-radius:8px;flex-direction:column;gap:2px;padding:5px 12px;display:flex}.S5HVoW_gitLogRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_gitLogLine1{align-items:baseline;gap:8px;min-width:0;display:flex}.S5HVoW_gitLogHash{font:var(--dsw-font-markdown-code-block-small);color:var(--dsw-alias-label-tertiary);flex:none}.S5HVoW_gitLogLine2{flex-wrap:wrap;align-items:center;gap:6px;min-width:0;display:flex}.S5HVoW_gitLogRef{border:1px solid var(--dsw-alias-border-l2);font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-brand-primary);white-space:nowrap;border-radius:999px;flex:none;padding:0 5px}.S5HVoW_gitLogSubject{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.S5HVoW_gitLogMeta{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary)}.S5HVoW_gitLogMore{border:1px solid var(--dsw-alias-border-l2);width:calc(100% - 24px);font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border-radius:6px;margin:4px 12px 8px;padding:6px 0;display:block}.S5HVoW_gitLogMore:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_gitLogMore:disabled{opacity:.5;cursor:default}.S5HVoW_producedRow{flex-wrap:wrap;align-items:center;gap:8px;padding:4px 0;display:flex}.S5HVoW_producedLabel{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.S5HVoW_producedChip{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);max-width:200px;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);cursor:pointer;border-radius:999px;align-items:center;gap:4px;padding:2px 8px;display:inline-flex;overflow:hidden}.S5HVoW_producedChip:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_producedChip span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.S5HVoW_producedMore{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.S5HVoW_toggleButton:focus-visible,.S5HVoW_iconButton:focus-visible,.S5HVoW_tab:focus-visible,.S5HVoW_tabClose:focus-visible,.S5HVoW_tabBarPlus:focus-visible,.S5HVoW_paneCard:focus-visible,.S5HVoW_explorerRow:focus-visible,.S5HVoW_explorerRef:focus-visible,.S5HVoW_gitRowMain:focus-visible,.S5HVoW_gitLink:focus-visible,.S5HVoW_gitCommitButton:focus-visible,.S5HVoW_gitLogRow:focus-visible,.S5HVoW_gitLogMore:focus-visible,.S5HVoW_gitDiffFile:focus-visible,.S5HVoW_gitDiffExpand:focus-visible,.S5HVoW_terminalRetry:focus-visible,.S5HVoW_editorDownloadLink:focus-visible{outline:2px solid var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}@media (prefers-reduced-motion:reduce){.S5HVoW_panel,.S5HVoW_panelHidden,.S5HVoW_toggleCluster,.S5HVoW_toggleButton,.S5HVoW_tab,.S5HVoW_tabBarPlus,.S5HVoW_paneCard,.S5HVoW_explorerRow,.S5HVoW_gitRow,.S5HVoW_divider,.S5HVoW_dividerRow:after,.S5HVoW_dividerCol:after{transition:none;animation:none}}@media (width<=767px){.S5HVoW_panel:not(.S5HVoW_panelHidden) .S5HVoW_tabBar{padding-right:40px}.S5HVoW_tab{min-width:48px;max-width:128px}}.S5HVoW_openWithLabel{align-items:center;gap:8px;width:100%;min-width:0;display:flex}.S5HVoW_openWithName{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.S5HVoW_openWithChevron{color:var(--dsw-alias-label-tertiary);flex:none}.S5HVoW_openWithPin{width:20px;height:20px;color:var(--dsw-alias-label-tertiary);cursor:pointer;border-radius:6px;flex:none;justify-content:center;align-items:center;display:inline-flex}.S5HVoW_openWithPin:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_openWithPinActive{color:var(--dsw-alias-state-business-primary)}@keyframes S5HVoW_dsh-toc-flash{0%,60%{background:var(--dsw-alias-interactive-bg-hover)}to{background:0 0}}.S5HVoW_browserLive{flex-direction:column;gap:6px;padding:8px 10px;display:flex;position:absolute;inset:0;overflow:hidden}.S5HVoW_browserLiveStatus{opacity:.75;align-items:center;gap:8px;font-size:12px;display:flex}.S5HVoW_browserLiveCanvas{object-fit:contain;border:1px solid var(--dsw-alias-border-l,#80808040);cursor:crosshair;background:#fff;border-radius:8px;flex:1;width:100%;min-height:0}.S5HVoW_browserLiveTarget{max-width:260px;font-size:12px}";
43985
44248
  const tagId = "dsh-coding-sidebar/sidebar.module.css";
43986
44249
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
43987
44250
  const tag = document.createElement("style");
@@ -43991,207 +44254,212 @@ globalThis.__dshChunks__["editor"] = (require) => {
43991
44254
  document.head.appendChild(tag);
43992
44255
  }
43993
44256
  var sidebar_module_css_default = {
43994
- "gitDiff": "S5HVoW_gitDiff",
43995
- "editorTreePanelFull": "S5HVoW_editorTreePanelFull",
43996
- "editorTreeDock": "S5HVoW_editorTreeDock",
43997
- "explorerEmpty": "S5HVoW_explorerEmpty",
43998
- "editorCm": "S5HVoW_editorCm",
43999
- "gitDiffHunk": "S5HVoW_gitDiffHunk",
44000
- "gitCommitInput": "S5HVoW_gitCommitInput",
44257
+ "gitCommit": "S5HVoW_gitCommit",
44258
+ "gitLogSubject": "S5HVoW_gitLogSubject",
44259
+ "divider": "S5HVoW_divider",
44260
+ "dividerRow": "S5HVoW_dividerRow",
44261
+ "dropUp": "S5HVoW_dropUp",
44262
+ "producedLabel": "S5HVoW_producedLabel",
44263
+ "gitDiffFileChevron": "S5HVoW_gitDiffFileChevron",
44264
+ "dropRight": "S5HVoW_dropRight",
44001
44265
  "producedRow": "S5HVoW_producedRow",
44002
- "toggleButton": "S5HVoW_toggleButton",
44003
- "gitDiffTab": "S5HVoW_gitDiffTab",
44004
- "gitRowSelected": "S5HVoW_gitRowSelected",
44005
- "terminalWrap": "S5HVoW_terminalWrap",
44006
- "editorMain": "S5HVoW_editorMain",
44007
- "gitPlaceholder": "S5HVoW_gitPlaceholder",
44008
- "editorStatus": "S5HVoW_editorStatus",
44009
- "explorerDir": "S5HVoW_explorerDir",
44010
- "editorPathInput": "S5HVoW_editorPathInput",
44011
- "editorTreeToggleActive": "S5HVoW_editorTreeToggleActive",
44012
- "dirtyDot": "S5HVoW_dirtyDot",
44013
- "gitDiffFileChevronExpanded": "S5HVoW_gitDiffFileChevronExpanded",
44014
- "gitDiffFileOld": "S5HVoW_gitDiffFileOld",
44015
- "gitSectionHeader": "S5HVoW_gitSectionHeader",
44016
- "gitConfirmDesc": "S5HVoW_gitConfirmDesc",
44017
- "panelResizeActive": "S5HVoW_panelResizeActive",
44018
- "gitLogLine1": "S5HVoW_gitLogLine1",
44019
- "tabBar": "S5HVoW_tabBar",
44020
- "splitCol": "S5HVoW_splitCol",
44021
- "editorSearchHint": "S5HVoW_editorSearchHint",
44022
- "tabBoundaryError": "S5HVoW_tabBoundaryError",
44023
- "dropOverlay": "S5HVoW_dropOverlay",
44024
- "tabBarDrop": "S5HVoW_tabBarDrop",
44025
- "explorer": "S5HVoW_explorer",
44026
- "panelHidden": "S5HVoW_panelHidden",
44027
- "uploadDropHero": "S5HVoW_uploadDropHero",
44028
- "browserBlockedTitle": "S5HVoW_browserBlockedTitle",
44029
- "browserBlockedButton": "S5HVoW_browserBlockedButton",
44030
- "uploadOverlayProgress": "S5HVoW_uploadOverlayProgress",
44031
- "terminalRetry": "S5HVoW_terminalRetry",
44032
- "terminalDepsBanner": "S5HVoW_terminalDepsBanner",
44266
+ "openWithChevron": "S5HVoW_openWithChevron",
44267
+ "gitCommitInput": "S5HVoW_gitCommitInput",
44268
+ "floatWindow": "S5HVoW_floatWindow",
44269
+ "floatDropHintLabel": "S5HVoW_floatDropHintLabel",
44270
+ "splitChild": "S5HVoW_splitChild",
44271
+ "tab": "S5HVoW_tab",
44272
+ "explorerHidden": "S5HVoW_explorerHidden",
44273
+ "floatResize": "S5HVoW_floatResize",
44274
+ "explorerRowDropTarget": "S5HVoW_explorerRowDropTarget",
44275
+ "uploadDropZonePill": "S5HVoW_uploadDropZonePill",
44033
44276
  "gitName": "S5HVoW_gitName",
44034
- "uploadDropChatCard": "S5HVoW_uploadDropChatCard",
44277
+ "gitDiffExpand": "S5HVoW_gitDiffExpand",
44278
+ "gitLogRef": "S5HVoW_gitLogRef",
44279
+ "selectionPopup": "S5HVoW_selectionPopup",
44280
+ "gitLogMore": "S5HVoW_gitLogMore",
44035
44281
  "uploadDropZone": "S5HVoW_uploadDropZone",
44036
- "producedLabel": "S5HVoW_producedLabel",
44037
- "uploadDropZoneText": "S5HVoW_uploadDropZoneText",
44282
+ "explorerRowRevealed": "S5HVoW_explorerRowRevealed",
44283
+ "browserBlocked": "S5HVoW_browserBlocked",
44284
+ "editorMain": "S5HVoW_editorMain",
44285
+ "editorCm": "S5HVoW_editorCm",
44038
44286
  "boundaryError": "S5HVoW_boundaryError",
44039
- "panelResize": "S5HVoW_panelResize",
44040
- "dsh-row-in": "S5HVoW_dsh-row-in",
44041
- "explorerRow": "S5HVoW_explorerRow",
44042
- "sandboxStatusOn": "S5HVoW_sandboxStatusOn",
44043
- "gitSection": "S5HVoW_gitSection",
44044
- "openWithLabel": "S5HVoW_openWithLabel",
44287
+ "browserBlockedDesc": "S5HVoW_browserBlockedDesc",
44288
+ "gitWorktreeRow": "S5HVoW_gitWorktreeRow",
44289
+ "gitEmpty": "S5HVoW_gitEmpty",
44290
+ "dividerActive": "S5HVoW_dividerActive",
44291
+ "sandboxDot": "S5HVoW_sandboxDot",
44292
+ "paneDrop": "S5HVoW_paneDrop",
44293
+ "uploadOverlayProgressFill": "S5HVoW_uploadOverlayProgressFill",
44294
+ "gitDiffHunkSection": "S5HVoW_gitDiffHunkSection",
44295
+ "tabList": "S5HVoW_tabList",
44296
+ "editorBinaryNotice": "S5HVoW_editorBinaryNotice",
44297
+ "gitBadge": "S5HVoW_gitBadge",
44045
44298
  "openWithName": "S5HVoW_openWithName",
44046
- "tabTitle": "S5HVoW_tabTitle",
44047
- "floatTitle": "S5HVoW_floatTitle",
44048
- "explorerHidden": "S5HVoW_explorerHidden",
44049
- "explorerRowDropTarget": "S5HVoW_explorerRowDropTarget",
44050
- "browserStart": "S5HVoW_browserStart",
44051
- "toggleCluster": "S5HVoW_toggleCluster",
44052
- "tabClose": "S5HVoW_tabClose",
44053
- "gitWorktreeLabel": "S5HVoW_gitWorktreeLabel",
44054
- "gitBranchSelect": "S5HVoW_gitBranchSelect",
44055
- "pane": "S5HVoW_pane",
44056
- "openWithPin": "S5HVoW_openWithPin",
44299
+ "explorerBody": "S5HVoW_explorerBody",
44300
+ "tabBadge": "S5HVoW_tabBadge",
44301
+ "editorTreeResize": "S5HVoW_editorTreeResize",
44302
+ "editorError": "S5HVoW_editorError",
44057
44303
  "browser": "S5HVoW_browser",
44058
- "paneTab": "S5HVoW_paneTab",
44059
- "tabActive": "S5HVoW_tabActive",
44060
- "gitEmpty": "S5HVoW_gitEmpty",
44061
- "dropRight": "S5HVoW_dropRight",
44062
- "paneCard": "S5HVoW_paneCard",
44063
- "uploadOverlayCancel": "S5HVoW_uploadOverlayCancel",
44064
- "gitDiffLine": "S5HVoW_gitDiffLine",
44065
- "terminalRepairCommand": "S5HVoW_terminalRepairCommand",
44066
- "openWithPinActive": "S5HVoW_openWithPinActive",
44067
- "browserBlocked": "S5HVoW_browserBlocked",
44304
+ "tabBoundaryError": "S5HVoW_tabBoundaryError",
44305
+ "dsh-row-in": "S5HVoW_dsh-row-in",
44306
+ "editorTreeDock": "S5HVoW_editorTreeDock",
44307
+ "editorTreeSearch": "S5HVoW_editorTreeSearch",
44308
+ "toggleButton": "S5HVoW_toggleButton",
44068
44309
  "dsh-toc-flash": "S5HVoW_dsh-toc-flash",
44069
- "uploadDropZonePill": "S5HVoW_uploadDropZonePill",
44070
- "floatDropHintLabel": "S5HVoW_floatDropHintLabel",
44310
+ "tabClose": "S5HVoW_tabClose",
44311
+ "uploadOverlayProgress": "S5HVoW_uploadOverlayProgress",
44312
+ "panel": "S5HVoW_panel",
44313
+ "editorSearchInput": "S5HVoW_editorSearchInput",
44314
+ "tabBar": "S5HVoW_tabBar",
44071
44315
  "editorSearchResult": "S5HVoW_editorSearchResult",
44072
- "terminalDepsActions": "S5HVoW_terminalDepsActions",
44073
- "dropLeft": "S5HVoW_dropLeft",
44074
- "uploadOverlayProgressFill": "S5HVoW_uploadOverlayProgressFill",
44075
- "selectionPopup": "S5HVoW_selectionPopup",
44076
- "tab": "S5HVoW_tab",
44077
- "paneTabHidden": "S5HVoW_paneTabHidden",
44316
+ "producedChip": "S5HVoW_producedChip",
44317
+ "uploadDropChatHint": "S5HVoW_uploadDropChatHint",
44318
+ "uploadDropZoneText": "S5HVoW_uploadDropZoneText",
44319
+ "panelHidden": "S5HVoW_panelHidden",
44320
+ "uploadDropChatCard": "S5HVoW_uploadDropChatCard",
44321
+ "editorDownloadLink": "S5HVoW_editorDownloadLink",
44322
+ "browserBlockedActions": "S5HVoW_browserBlockedActions",
44323
+ "gitDiffTabTitle": "S5HVoW_gitDiffTabTitle",
44324
+ "browserLive": "S5HVoW_browserLive",
44325
+ "gitDiffNum": "S5HVoW_gitDiffNum",
44326
+ "dropCenter": "S5HVoW_dropCenter",
44078
44327
  "dropDown": "S5HVoW_dropDown",
44079
- "explorerRoot": "S5HVoW_explorerRoot",
44080
- "browserBar": "S5HVoW_browserBar",
44081
- "gitDiffCtx": "S5HVoW_gitDiffCtx",
44082
- "gitCommit": "S5HVoW_gitCommit",
44083
- "terminalDepsTitle": "S5HVoW_terminalDepsTitle",
44084
44328
  "terminalDepsCommandRow": "S5HVoW_terminalDepsCommandRow",
44085
- "sandboxDot": "S5HVoW_sandboxDot",
44086
- "divider": "S5HVoW_divider",
44087
- "gitLogSubject": "S5HVoW_gitLogSubject",
44088
- "paneEmptyCards": "S5HVoW_paneEmptyCards",
44089
- "gitDiffFileChevron": "S5HVoW_gitDiffFileChevron",
44090
- "dividerCol": "S5HVoW_dividerCol",
44091
- "explorerSymlink": "S5HVoW_explorerSymlink",
44092
- "gitRow": "S5HVoW_gitRow",
44093
- "browserInput": "S5HVoW_browserInput",
44094
- "paneDrop": "S5HVoW_paneDrop",
44095
- "dropCenter": "S5HVoW_dropCenter",
44096
- "tabBadge": "S5HVoW_tabBadge",
44329
+ "paneTabHidden": "S5HVoW_paneTabHidden",
44330
+ "gitDiffHunkHeader": "S5HVoW_gitDiffHunkHeader",
44331
+ "editorTreePanelFull": "S5HVoW_editorTreePanelFull",
44332
+ "gitCommitButton": "S5HVoW_gitCommitButton",
44333
+ "gitLogMeta": "S5HVoW_gitLogMeta",
44334
+ "browserLiveStatus": "S5HVoW_browserLiveStatus",
44335
+ "editorTitle": "S5HVoW_editorTitle",
44336
+ "floatTitle": "S5HVoW_floatTitle",
44337
+ "gitLink": "S5HVoW_gitLink",
44097
44338
  "gitDiffTabHeader": "S5HVoW_gitDiffTabHeader",
44098
- "editorBody": "S5HVoW_editorBody",
44099
- "gitDiffFile": "S5HVoW_gitDiffFile",
44100
- "gitDiffMetaText": "S5HVoW_gitDiffMetaText",
44339
+ "producedMore": "S5HVoW_producedMore",
44340
+ "sandboxStatusOff": "S5HVoW_sandboxStatusOff",
44341
+ "explorer": "S5HVoW_explorer",
44342
+ "gitDiffCtx": "S5HVoW_gitDiffCtx",
44343
+ "explorerRoot": "S5HVoW_explorerRoot",
44344
+ "orphanedType": "S5HVoW_orphanedType",
44345
+ "iconButton": "S5HVoW_iconButton",
44346
+ "explorerRow": "S5HVoW_explorerRow",
44347
+ "explorerSymlink": "S5HVoW_explorerSymlink",
44348
+ "gitDiffMeta": "S5HVoW_gitDiffMeta",
44349
+ "gitDiffFileChevronExpanded": "S5HVoW_gitDiffFileChevronExpanded",
44350
+ "terminalDepsBanner": "S5HVoW_terminalDepsBanner",
44351
+ "openWithLabel": "S5HVoW_openWithLabel",
44352
+ "sandboxStatus": "S5HVoW_sandboxStatus",
44353
+ "explorerHeader": "S5HVoW_explorerHeader",
44354
+ "splitRow": "S5HVoW_splitRow",
44355
+ "terminalRetry": "S5HVoW_terminalRetry",
44356
+ "gitSection": "S5HVoW_gitSection",
44357
+ "browserBlockedButton": "S5HVoW_browserBlockedButton",
44101
44358
  "gitLogHash": "S5HVoW_gitLogHash",
44102
- "gitLogMore": "S5HVoW_gitLogMore",
44103
- "editor": "S5HVoW_editor",
44104
- "terminalBannerUrl": "S5HVoW_terminalBannerUrl",
44105
- "browserLiveStatus": "S5HVoW_browserLiveStatus",
44106
- "browserLiveCanvas": "S5HVoW_browserLiveCanvas",
44107
- "editorBanner": "S5HVoW_editorBanner",
44108
- "workbench": "S5HVoW_workbench",
44359
+ "terminalRepairCommand": "S5HVoW_terminalRepairCommand",
44360
+ "uploadOverlayTitle": "S5HVoW_uploadOverlayTitle",
44361
+ "sandboxAction": "S5HVoW_sandboxAction",
44362
+ "gitLogLine2": "S5HVoW_gitLogLine2",
44363
+ "editorHeader": "S5HVoW_editorHeader",
44364
+ "gitWorktreeLabel": "S5HVoW_gitWorktreeLabel",
44365
+ "gitDiffFile": "S5HVoW_gitDiffFile",
44366
+ "gitDiffHunk": "S5HVoW_gitDiffHunk",
44367
+ "terminalDepsTitle": "S5HVoW_terminalDepsTitle",
44368
+ "gitDiffDel": "S5HVoW_gitDiffDel",
44369
+ "openWithPinActive": "S5HVoW_openWithPinActive",
44370
+ "dividerCol": "S5HVoW_dividerCol",
44371
+ "terminal": "S5HVoW_terminal",
44372
+ "panelResize": "S5HVoW_panelResize",
44109
44373
  "gitDiffCode": "S5HVoW_gitDiffCode",
44110
- "producedChip": "S5HVoW_producedChip",
44111
- "floatContent": "S5HVoW_floatContent",
44374
+ "explorerDir": "S5HVoW_explorerDir",
44375
+ "editorSearchHint": "S5HVoW_editorSearchHint",
44376
+ "terminalWaitNeedle": "S5HVoW_terminalWaitNeedle",
44377
+ "terminalDepsNote": "S5HVoW_terminalDepsNote",
44378
+ "git": "S5HVoW_git",
44112
44379
  "floatClose": "S5HVoW_floatClose",
44113
- "explorerBroken": "S5HVoW_explorerBroken",
44114
- "gitLogRow": "S5HVoW_gitLogRow",
44380
+ "tabBarPlus": "S5HVoW_tabBarPlus",
44115
44381
  "editorBinary": "S5HVoW_editorBinary",
44116
- "gitHeader": "S5HVoW_gitHeader",
44117
44382
  "editorTreePanel": "S5HVoW_editorTreePanel",
44118
- "gitDiffHunkHeader": "S5HVoW_gitDiffHunkHeader",
44119
- "gitWorktreeRow": "S5HVoW_gitWorktreeRow",
44383
+ "browserStart": "S5HVoW_browserStart",
44384
+ "explorerName": "S5HVoW_explorerName",
44385
+ "terminalBanner": "S5HVoW_terminalBanner",
44386
+ "gitConfirmDesc": "S5HVoW_gitConfirmDesc",
44387
+ "splitCol": "S5HVoW_splitCol",
44388
+ "editorBanner": "S5HVoW_editorBanner",
44389
+ "editorPathInput": "S5HVoW_editorPathInput",
44390
+ "editorStatusError": "S5HVoW_editorStatusError",
44391
+ "sandboxStatusOn": "S5HVoW_sandboxStatusOn",
44392
+ "terminalWrap": "S5HVoW_terminalWrap",
44120
44393
  "terminalDepsHint": "S5HVoW_terminalDepsHint",
44121
- "editorBinaryNotice": "S5HVoW_editorBinaryNotice",
44122
- "splitChild": "S5HVoW_splitChild",
44123
- "browserFrame": "S5HVoW_browserFrame",
44124
- "paneContent": "S5HVoW_paneContent",
44125
- "editorSearchInput": "S5HVoW_editorSearchInput",
44394
+ "paneEmptyCards": "S5HVoW_paneEmptyCards",
44395
+ "editorPlaceholder": "S5HVoW_editorPlaceholder",
44396
+ "uploadOverlay": "S5HVoW_uploadOverlay",
44397
+ "gitSectionHeader": "S5HVoW_gitSectionHeader",
44398
+ "gitRowMain": "S5HVoW_gitRowMain",
44399
+ "gitDiffFilePath": "S5HVoW_gitDiffFilePath",
44400
+ "browserLiveCanvas": "S5HVoW_browserLiveCanvas",
44401
+ "uploadDropHero": "S5HVoW_uploadDropHero",
44402
+ "floatWindowDragging": "S5HVoW_floatWindowDragging",
44403
+ "paneCard": "S5HVoW_paneCard",
44404
+ "gitHeader": "S5HVoW_gitHeader",
44405
+ "openWithPin": "S5HVoW_openWithPin",
44406
+ "editorStatus": "S5HVoW_editorStatus",
44407
+ "explorerError": "S5HVoW_explorerError",
44408
+ "terminalBannerUrl": "S5HVoW_terminalBannerUrl",
44126
44409
  "gitDiffFileTag": "S5HVoW_gitDiffFileTag",
44127
- "dividerActive": "S5HVoW_dividerActive",
44410
+ "gitBranchSelect": "S5HVoW_gitBranchSelect",
44411
+ "tabActive": "S5HVoW_tabActive",
44412
+ "gitLogRow": "S5HVoW_gitLogRow",
44413
+ "uploadOverlayStatus": "S5HVoW_uploadOverlayStatus",
44414
+ "tabTitle": "S5HVoW_tabTitle",
44128
44415
  "pinnedTab": "S5HVoW_pinnedTab",
44129
- "uploadOverlay": "S5HVoW_uploadOverlay",
44130
- "editorTreeSearch": "S5HVoW_editorTreeSearch",
44131
- "explorerRowRevealed": "S5HVoW_explorerRowRevealed",
44132
- "gitDiffExpand": "S5HVoW_gitDiffExpand",
44133
- "gitDiffHunkSection": "S5HVoW_gitDiffHunkSection",
44134
- "floatResize": "S5HVoW_floatResize",
44135
- "panelBody": "S5HVoW_panelBody",
44416
+ "browserBlockedTitle": "S5HVoW_browserBlockedTitle",
44417
+ "gitError": "S5HVoW_gitError",
44418
+ "tabBarDrop": "S5HVoW_tabBarDrop",
44419
+ "gitPlaceholder": "S5HVoW_gitPlaceholder",
44420
+ "gitFoldRow": "S5HVoW_gitFoldRow",
44421
+ "paneTab": "S5HVoW_paneTab",
44422
+ "gitDiffMetaText": "S5HVoW_gitDiffMetaText",
44136
44423
  "floatHeader": "S5HVoW_floatHeader",
44137
- "uploadDropChatHint": "S5HVoW_uploadDropChatHint",
44138
- "editorDownloadLink": "S5HVoW_editorDownloadLink",
44139
- "terminalDepsNote": "S5HVoW_terminalDepsNote",
44140
- "git": "S5HVoW_git",
44141
- "terminal": "S5HVoW_terminal",
44142
- "panel": "S5HVoW_panel",
44143
- "sandboxStatus": "S5HVoW_sandboxStatus",
44144
- "iconButton": "S5HVoW_iconButton",
44145
- "gitDiffNum": "S5HVoW_gitDiffNum",
44146
- "gitCommitButton": "S5HVoW_gitCommitButton",
44147
- "gitLogMeta": "S5HVoW_gitLogMeta",
44148
- "dropUp": "S5HVoW_dropUp",
44149
- "uploadOverlayStatus": "S5HVoW_uploadOverlayStatus",
44150
- "gitLogRef": "S5HVoW_gitLogRef",
44151
- "explorerName": "S5HVoW_explorerName",
44152
- "gitDiffMeta": "S5HVoW_gitDiffMeta",
44153
- "browserLiveTarget": "S5HVoW_browserLiveTarget",
44424
+ "browserInput": "S5HVoW_browserInput",
44154
44425
  "floatDropHint": "S5HVoW_floatDropHint",
44155
- "floatWindowDragging": "S5HVoW_floatWindowDragging",
44156
- "orphanedType": "S5HVoW_orphanedType",
44157
- "editorTreeResize": "S5HVoW_editorTreeResize",
44158
- "uploadOverlayCard": "S5HVoW_uploadOverlayCard",
44159
- "split": "S5HVoW_split",
44160
- "sandboxStatusOff": "S5HVoW_sandboxStatusOff",
44161
- "browserBlockedDesc": "S5HVoW_browserBlockedDesc",
44162
- "terminalBanner": "S5HVoW_terminalBanner",
44163
- "explorerHeader": "S5HVoW_explorerHeader",
44164
- "splitRow": "S5HVoW_splitRow",
44165
- "explorerBody": "S5HVoW_explorerBody",
44166
- "explorerError": "S5HVoW_explorerError",
44426
+ "explorerBroken": "S5HVoW_explorerBroken",
44427
+ "floatContent": "S5HVoW_floatContent",
44428
+ "browserLiveTarget": "S5HVoW_browserLiveTarget",
44429
+ "pane": "S5HVoW_pane",
44430
+ "panelResizeActive": "S5HVoW_panelResizeActive",
44167
44431
  "sandboxStatusText": "S5HVoW_sandboxStatusText",
44168
- "tabBarPlus": "S5HVoW_tabBarPlus",
44169
- "editorError": "S5HVoW_editorError",
44170
- "gitLogLine2": "S5HVoW_gitLogLine2",
44171
- "openWithChevron": "S5HVoW_openWithChevron",
44172
- "browserLive": "S5HVoW_browserLive",
44173
- "editorHeader": "S5HVoW_editorHeader",
44174
- "gitDiffTabTitle": "S5HVoW_gitDiffTabTitle",
44432
+ "toggleCluster": "S5HVoW_toggleCluster",
44433
+ "gitFoldRowFailed": "S5HVoW_gitFoldRowFailed",
44434
+ "terminalWaitBanner": "S5HVoW_terminalWaitBanner",
44435
+ "dropLeft": "S5HVoW_dropLeft",
44436
+ "explorerCopied": "S5HVoW_explorerCopied",
44437
+ "explorerEmpty": "S5HVoW_explorerEmpty",
44438
+ "uploadOverlayCancel": "S5HVoW_uploadOverlayCancel",
44439
+ "explorerRenameInput": "S5HVoW_explorerRenameInput",
44440
+ "editor": "S5HVoW_editor",
44441
+ "workbench": "S5HVoW_workbench",
44442
+ "split": "S5HVoW_split",
44443
+ "panelBody": "S5HVoW_panelBody",
44444
+ "paneContent": "S5HVoW_paneContent",
44445
+ "uploadOverlayCard": "S5HVoW_uploadOverlayCard",
44175
44446
  "browserMessage": "S5HVoW_browserMessage",
44176
- "editorPlaceholder": "S5HVoW_editorPlaceholder",
44177
- "gitBadge": "S5HVoW_gitBadge",
44447
+ "terminalDepsActions": "S5HVoW_terminalDepsActions",
44448
+ "dropOverlay": "S5HVoW_dropOverlay",
44178
44449
  "explorerRef": "S5HVoW_explorerRef",
44179
- "editorStatusError": "S5HVoW_editorStatusError",
44180
- "tabList": "S5HVoW_tabList",
44181
- "gitDiffDel": "S5HVoW_gitDiffDel",
44182
- "gitDiffAdd": "S5HVoW_gitDiffAdd",
44183
- "gitError": "S5HVoW_gitError",
44184
- "editorTitle": "S5HVoW_editorTitle",
44185
- "browserBlockedActions": "S5HVoW_browserBlockedActions",
44186
- "gitLink": "S5HVoW_gitLink",
44187
- "gitDiffFilePath": "S5HVoW_gitDiffFilePath",
44188
- "sandboxAction": "S5HVoW_sandboxAction",
44189
- "producedMore": "S5HVoW_producedMore",
44190
- "explorerCopied": "S5HVoW_explorerCopied",
44191
- "uploadOverlayTitle": "S5HVoW_uploadOverlayTitle",
44192
- "gitRowMain": "S5HVoW_gitRowMain",
44193
- "floatWindow": "S5HVoW_floatWindow",
44194
- "dividerRow": "S5HVoW_dividerRow"
44450
+ "editorTreeToggleActive": "S5HVoW_editorTreeToggleActive",
44451
+ "gitDiff": "S5HVoW_gitDiff",
44452
+ "gitDiffTab": "S5HVoW_gitDiffTab",
44453
+ "gitDiffFileOld": "S5HVoW_gitDiffFileOld",
44454
+ "editorBody": "S5HVoW_editorBody",
44455
+ "gitRowSelected": "S5HVoW_gitRowSelected",
44456
+ "gitDiffLine": "S5HVoW_gitDiffLine",
44457
+ "gitRow": "S5HVoW_gitRow",
44458
+ "gitLogLine1": "S5HVoW_gitLogLine1",
44459
+ "browserBar": "S5HVoW_browserBar",
44460
+ "browserFrame": "S5HVoW_browserFrame",
44461
+ "dirtyDot": "S5HVoW_dirtyDot",
44462
+ "gitDiffAdd": "S5HVoW_gitDiffAdd"
44195
44463
  };
44196
44464
  //#endregion
44197
44465
  //#region src/client/TextEditor.tsx
@@ -44222,38 +44490,26 @@ globalThis.__dshChunks__["editor"] = (require) => {
44222
44490
  const themeCompRef = (0, react.useRef)(null);
44223
44491
  /** The app's resolved color scheme; the editor re-themes in place on flips. */
44224
44492
  const [dark, setDark] = (0, react.useState)(() => isDarkScheme());
44225
- /** The floating "add to conversation" popup (viewport-anchored; null = hidden). */
44226
- const [popup, setPopup] = (0, react.useState)(null);
44227
- /** Live mirror of the popup state for click-time reads (no re-render race). */
44228
- const popupRef = (0, react.useRef)(null);
44229
- const hidePopup = () => {
44230
- popupRef.current = null;
44231
- setPopup(null);
44232
- };
44233
- /** Anchor the popup above the selection center; clamp inside the viewport. */
44234
- const showPopup = (insert, left, top) => {
44235
- const next = {
44236
- insert,
44237
- left: Math.min(Math.max(left, 80), window.innerWidth - 80),
44238
- top
44239
- };
44240
- popupRef.current = next;
44241
- setPopup(next);
44242
- };
44243
- /** The popup button's click: insert the stored payload into the draft. */
44244
- const commitPopup = () => {
44245
- const current = popupRef.current;
44246
- if (current === null) return;
44247
- appendToDraft(ctx, scope.sessionId, current.insert);
44248
- hidePopup();
44249
- };
44493
+ /**
44494
+ * The floating "add to conversation" popup (viewport-anchored; null =
44495
+ * hidden). The hook owns show/hide/commit plus the global dismissal
44496
+ * listeners (outside mousedown, Escape, hidden tab/window, and the editor
44497
+ * surface leaving the viewport — the tab-switch/panel-collapse paths have
44498
+ * no DOM events of their own) — see selection-popup.ts.
44499
+ */
44500
+ const selectionPopup = useSelectionPopup({
44501
+ onCommit: (insert) => {
44502
+ appendToDraft(ctx, scope.sessionId, insert);
44503
+ },
44504
+ getSurface: () => hostRef.current
44505
+ });
44250
44506
  (0, react.useEffect)(() => subscribeColorScheme(() => {
44251
44507
  setDark(isDarkScheme());
44252
44508
  }), []);
44253
44509
  (0, react.useEffect)(() => {
44254
44510
  setDirty(false);
44255
44511
  setSaveState("idle");
44256
- hidePopup();
44512
+ selectionPopup.hide();
44257
44513
  }, [content]);
44258
44514
  (0, react.useEffect)(() => {
44259
44515
  if (content === void 0) return;
@@ -44291,31 +44547,31 @@ globalThis.__dshChunks__["editor"] = (require) => {
44291
44547
  ]),
44292
44548
  EditorView.updateListener.of((update) => {
44293
44549
  if (update.geometryChanged || update.viewportChanged) {
44294
- hidePopup();
44550
+ selectionPopup.hide();
44295
44551
  return;
44296
44552
  }
44297
44553
  if (!update.view.hasFocus) {
44298
- hidePopup();
44554
+ selectionPopup.hide();
44299
44555
  return;
44300
44556
  }
44301
44557
  if (!(update.selectionSet || update.docChanged || update.focusChanged)) return;
44302
44558
  const sel = update.state.selection.main;
44303
44559
  if (sel.empty) {
44304
- hidePopup();
44560
+ selectionPopup.hide();
44305
44561
  return;
44306
44562
  }
44307
44563
  const text = update.state.sliceDoc(sel.from, sel.to);
44308
44564
  if (text.trim() === "") {
44309
- hidePopup();
44565
+ selectionPopup.hide();
44310
44566
  return;
44311
44567
  }
44312
44568
  const rect = update.view.coordsAtPos(sel.head);
44313
44569
  if (rect === null) {
44314
- hidePopup();
44570
+ selectionPopup.hide();
44315
44571
  return;
44316
44572
  }
44317
44573
  const doc = update.state.doc;
44318
- showPopup(buildSelectionInsert(path, scope.cwd, {
44574
+ selectionPopup.show(buildSelectionInsert(path, scope.cwd, {
44319
44575
  start: doc.lineAt(sel.from).number,
44320
44576
  end: doc.lineAt(sel.to).number
44321
44577
  }, text), rect.left - window.scrollX + (rect.right - rect.left) / 2, rect.top - window.scrollY);
@@ -44403,17 +44659,18 @@ globalThis.__dshChunks__["editor"] = (require) => {
44403
44659
  className: sidebar_module_css_default.editorCm,
44404
44660
  ref: hostRef
44405
44661
  })] }),
44406
- popup !== null && (0, react_dom.createPortal)(/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
44662
+ selectionPopup.popup !== null && (0, react_dom.createPortal)(/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
44407
44663
  type: "button",
44664
+ ref: selectionPopup.buttonRef,
44408
44665
  className: sidebar_module_css_default.selectionPopup,
44409
44666
  style: {
44410
- left: popup.left,
44411
- top: popup.top
44667
+ left: selectionPopup.popup.left,
44668
+ top: selectionPopup.popup.top
44412
44669
  },
44413
44670
  onMouseDown: (event) => {
44414
44671
  event.preventDefault();
44415
44672
  },
44416
- onClick: commitPopup,
44673
+ onClick: selectionPopup.commit,
44417
44674
  children: t("addToConversation")
44418
44675
  }), document.body)
44419
44676
  ] });