dsh-coding-sidebar 1.0.8 → 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.
- package/lib/client-editor.js +223 -175
- package/lib/client-registry.js +763 -344
- package/lib/client-terminal.js +283 -179
- package/lib/client.js +760 -341
- package/lib/index.js +151 -2
- package/lib/types/client/DiffView.d.ts +33 -1
- package/lib/types/client/EditorHost.d.ts +3 -0
- package/lib/types/client/FileTree.d.ts +4 -0
- package/lib/types/client/TerminalWaitBanner.d.ts +6 -0
- package/lib/types/client/TreePanel.d.ts +3 -0
- package/lib/types/client/api.d.ts +26 -0
- package/lib/types/client/locales.d.ts +12 -0
- package/lib/types/client/state.d.ts +15 -0
- package/lib/types/fs-operations.d.ts +42 -0
- package/lib/types/git.d.ts +15 -0
- package/package.json +1 -1
- package/src/client/DiffTab.tsx +10 -1
- package/src/client/DiffView.tsx +174 -19
- package/src/client/EditorHost.tsx +8 -1
- package/src/client/FileTree.tsx +147 -4
- package/src/client/Sidebar.tsx +54 -3
- package/src/client/TerminalView.tsx +28 -0
- package/src/client/TerminalWaitBanner.tsx +32 -0
- package/src/client/TreePanel.tsx +6 -1
- package/src/client/api.ts +20 -0
- package/src/client/locales-ar.ts +12 -0
- package/src/client/locales-de.ts +12 -0
- package/src/client/locales-fr.ts +12 -0
- package/src/client/locales-hi.ts +12 -0
- package/src/client/locales-id.ts +12 -0
- package/src/client/locales-it.ts +12 -0
- package/src/client/locales-ja.ts +12 -0
- package/src/client/locales-ko.ts +12 -0
- package/src/client/locales-nl.ts +12 -0
- package/src/client/locales-pl.ts +12 -0
- package/src/client/locales-pt.ts +12 -0
- package/src/client/locales-ru.ts +12 -0
- package/src/client/locales-sv.ts +12 -0
- package/src/client/locales-th.ts +12 -0
- package/src/client/locales-tr.ts +12 -0
- package/src/client/locales-vi.ts +12 -0
- package/src/client/locales-zh-HK.ts +12 -0
- package/src/client/locales-zh-MO.ts +12 -0
- package/src/client/locales-zh-TW.ts +12 -0
- package/src/client/locales.ts +24 -0
- package/src/client/sidebar.module.css +68 -0
- package/src/client/state.ts +42 -3
- package/src/fs-operations.ts +126 -4
- package/src/git.ts +39 -2
- package/src/index.ts +43 -1
package/lib/client-registry.js
CHANGED
|
@@ -194,7 +194,8 @@ window.__ModuleLoader__.load({
|
|
|
194
194
|
expanded: [],
|
|
195
195
|
revealed: [],
|
|
196
196
|
splits: leaf,
|
|
197
|
-
floats: []
|
|
197
|
+
floats: [],
|
|
198
|
+
agentWaits: {}
|
|
198
199
|
};
|
|
199
200
|
}
|
|
200
201
|
/** Whether a tree node (or any descendant) carries the given pane/split id. */
|
|
@@ -809,6 +810,19 @@ window.__ModuleLoader__.load({
|
|
|
809
810
|
function agentTabId(uuid) {
|
|
810
811
|
return `${AGENT_TAB_PREFIX}${uuid}`;
|
|
811
812
|
}
|
|
813
|
+
/** Shallow equality of two agent-wait maps (same keys, same needle+since). */
|
|
814
|
+
function sameAgentWaits(a, b) {
|
|
815
|
+
if (a === void 0) return Object.keys(b).length === 0;
|
|
816
|
+
const aKeys = Object.keys(a);
|
|
817
|
+
if (aKeys.length !== Object.keys(b).length) return false;
|
|
818
|
+
for (const key of aKeys) {
|
|
819
|
+
const av = a[key];
|
|
820
|
+
const bv = b[key];
|
|
821
|
+
if (av === void 0 || bv === void 0) return false;
|
|
822
|
+
if (av.needle !== bv.needle || av.since !== bv.since) return false;
|
|
823
|
+
}
|
|
824
|
+
return true;
|
|
825
|
+
}
|
|
812
826
|
/**
|
|
813
827
|
* Reconcile the sidebar's agent-terminal tabs with the host's live list.
|
|
814
828
|
* The host pushes the current list of agent terminals (created by the model
|
|
@@ -827,7 +841,12 @@ window.__ModuleLoader__.load({
|
|
|
827
841
|
const serverUuids = new Set(agentTerminals.map((t) => t.uuid));
|
|
828
842
|
const toAdd = agentTerminals.filter((t) => !existingUuids.has(t.uuid));
|
|
829
843
|
const toRemove = existingAgentTabs.filter((tab) => !serverUuids.has(agentUuidOf(tab.id)) && tab.pin === void 0);
|
|
830
|
-
|
|
844
|
+
const serverWaits = {};
|
|
845
|
+
for (const terminal of agentTerminals) if (terminal.waiting !== void 0 && terminal.waiting !== null) serverWaits[terminal.uuid] = {
|
|
846
|
+
needle: terminal.waiting.needle,
|
|
847
|
+
since: terminal.waiting.since
|
|
848
|
+
};
|
|
849
|
+
if (toAdd.length === 0 && toRemove.length === 0 && sameAgentWaits(state.agentWaits, serverWaits)) return state;
|
|
831
850
|
let splits = state.splits;
|
|
832
851
|
let floats = state.floats;
|
|
833
852
|
for (const tab of toRemove) {
|
|
@@ -841,7 +860,8 @@ window.__ModuleLoader__.load({
|
|
|
841
860
|
let next = {
|
|
842
861
|
...state,
|
|
843
862
|
splits,
|
|
844
|
-
floats
|
|
863
|
+
floats,
|
|
864
|
+
agentWaits: serverWaits
|
|
845
865
|
};
|
|
846
866
|
for (const terminal of toAdd) {
|
|
847
867
|
const tab = {
|
|
@@ -993,7 +1013,8 @@ window.__ModuleLoader__.load({
|
|
|
993
1013
|
expanded: record.expanded,
|
|
994
1014
|
revealed: [],
|
|
995
1015
|
splits: migratedSplits,
|
|
996
|
-
floats
|
|
1016
|
+
floats,
|
|
1017
|
+
agentWaits: {}
|
|
997
1018
|
};
|
|
998
1019
|
}
|
|
999
1020
|
/** Collapse persisted split panes left empty after ephemeral diff tabs are dropped. */
|
|
@@ -1468,7 +1489,7 @@ window.__ModuleLoader__.load({
|
|
|
1468
1489
|
if (claimed) return tab;
|
|
1469
1490
|
}
|
|
1470
1491
|
}
|
|
1471
|
-
const SIDEBAR_SERVICE_VERSION = "1.0.
|
|
1492
|
+
const SIDEBAR_SERVICE_VERSION = "1.0.9";
|
|
1472
1493
|
/**
|
|
1473
1494
|
* Monotonic capability list consumers use to gate new API usage (features
|
|
1474
1495
|
* are never removed). Each string names a v0.12.0+ capability:
|
|
@@ -2084,6 +2105,18 @@ window.__ModuleLoader__.load({
|
|
|
2084
2105
|
producedOpen: "在侧边栏中打开",
|
|
2085
2106
|
showInFolder: "在文件夹中显示",
|
|
2086
2107
|
disconnected: "终端连接断开,重连中…",
|
|
2108
|
+
terminalWaitBanner: "Agent 正在等待 {needle}",
|
|
2109
|
+
terminalSkipWait: "跳过等待",
|
|
2110
|
+
gitFoldExpand: "展开 {count} 行上下文",
|
|
2111
|
+
gitFoldLoading: "展开中…",
|
|
2112
|
+
gitFoldFailed: "展开失败",
|
|
2113
|
+
rename: "重命名",
|
|
2114
|
+
renameInvalid: "名称不能为空,且不能包含路径分隔符。",
|
|
2115
|
+
delete: "删除",
|
|
2116
|
+
deleteTitle: "删除「{name}」?",
|
|
2117
|
+
deleteDescFile: "将永久删除该文件,此操作不可撤销。",
|
|
2118
|
+
deleteDescDir: "将永久删除该目录及其全部内容,此操作不可撤销。",
|
|
2119
|
+
dismiss: "关闭",
|
|
2087
2120
|
exited: "终端进程已退出",
|
|
2088
2121
|
noSession: "选择一个会话以使用侧边栏",
|
|
2089
2122
|
pluginNotLoaded: "插件未加载,标签页暂不可用:",
|
|
@@ -2420,6 +2453,18 @@ window.__ModuleLoader__.load({
|
|
|
2420
2453
|
producedOpen: "Open in sidebar",
|
|
2421
2454
|
showInFolder: "Show in folder",
|
|
2422
2455
|
disconnected: "Terminal disconnected, reconnecting…",
|
|
2456
|
+
terminalWaitBanner: "Agent is waiting for {needle}",
|
|
2457
|
+
terminalSkipWait: "Skip wait",
|
|
2458
|
+
gitFoldExpand: "Expand {count} context lines",
|
|
2459
|
+
gitFoldLoading: "Expanding…",
|
|
2460
|
+
gitFoldFailed: "Failed to expand",
|
|
2461
|
+
rename: "Rename",
|
|
2462
|
+
renameInvalid: "The name cannot be empty or contain path separators.",
|
|
2463
|
+
delete: "Delete",
|
|
2464
|
+
deleteTitle: "Delete \"{name}\"?",
|
|
2465
|
+
deleteDescFile: "This permanently deletes the file. This cannot be undone.",
|
|
2466
|
+
deleteDescDir: "This permanently deletes the directory and everything inside it. This cannot be undone.",
|
|
2467
|
+
dismiss: "Dismiss",
|
|
2423
2468
|
exited: "Terminal process exited",
|
|
2424
2469
|
noSession: "Select a conversation to use the sidebar",
|
|
2425
2470
|
pluginNotLoaded: "Plugin not loaded; tab unavailable:",
|
|
@@ -2954,7 +2999,7 @@ window.__ModuleLoader__.load({
|
|
|
2954
2999
|
}
|
|
2955
3000
|
//#endregion
|
|
2956
3001
|
//#region \0dsh-css:/Users/libing/kk_Projects/dsh-coding-sidebar/src/client/sidebar.module.css.mjs
|
|
2957
|
-
const css$4 = "[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}";
|
|
3002
|
+
const css$4 = "[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}";
|
|
2958
3003
|
const tagId$4 = "dsh-external/dsh-coding-sidebar/sidebar.module.css";
|
|
2959
3004
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$4) + "]") === null) {
|
|
2960
3005
|
const tag = document.createElement("style");
|
|
@@ -2964,207 +3009,212 @@ window.__ModuleLoader__.load({
|
|
|
2964
3009
|
document.head.appendChild(tag);
|
|
2965
3010
|
}
|
|
2966
3011
|
var sidebar_module_css_default = {
|
|
2967
|
-
"
|
|
2968
|
-
"editorSearchHint": "S5HVoW_editorSearchHint",
|
|
2969
|
-
"paneContent": "S5HVoW_paneContent",
|
|
2970
|
-
"editorTitle": "S5HVoW_editorTitle",
|
|
2971
|
-
"selectionPopup": "S5HVoW_selectionPopup",
|
|
2972
|
-
"browser": "S5HVoW_browser",
|
|
2973
|
-
"toggleButton": "S5HVoW_toggleButton",
|
|
2974
|
-
"editorHeader": "S5HVoW_editorHeader",
|
|
2975
|
-
"editorTreeSearch": "S5HVoW_editorTreeSearch",
|
|
2976
|
-
"dropLeft": "S5HVoW_dropLeft",
|
|
2977
|
-
"explorerCopied": "S5HVoW_explorerCopied",
|
|
2978
|
-
"producedRow": "S5HVoW_producedRow",
|
|
2979
|
-
"gitRow": "S5HVoW_gitRow",
|
|
2980
|
-
"browserLiveStatus": "S5HVoW_browserLiveStatus",
|
|
2981
|
-
"floatWindow": "S5HVoW_floatWindow",
|
|
2982
|
-
"splitChild": "S5HVoW_splitChild",
|
|
2983
|
-
"editorTreePanelFull": "S5HVoW_editorTreePanelFull",
|
|
2984
|
-
"orphanedType": "S5HVoW_orphanedType",
|
|
3012
|
+
"explorerSymlink": "S5HVoW_explorerSymlink",
|
|
2985
3013
|
"terminalDepsActions": "S5HVoW_terminalDepsActions",
|
|
2986
|
-
"
|
|
2987
|
-
"
|
|
2988
|
-
"
|
|
2989
|
-
"
|
|
2990
|
-
"
|
|
2991
|
-
"
|
|
2992
|
-
"
|
|
2993
|
-
"
|
|
2994
|
-
"tabBar": "S5HVoW_tabBar",
|
|
2995
|
-
"floatContent": "S5HVoW_floatContent",
|
|
2996
|
-
"editorDownloadLink": "S5HVoW_editorDownloadLink",
|
|
2997
|
-
"panelHidden": "S5HVoW_panelHidden",
|
|
2998
|
-
"explorer": "S5HVoW_explorer",
|
|
2999
|
-
"browserInput": "S5HVoW_browserInput",
|
|
3000
|
-
"gitDiffDel": "S5HVoW_gitDiffDel",
|
|
3001
|
-
"editorPlaceholder": "S5HVoW_editorPlaceholder",
|
|
3002
|
-
"editorSearchInput": "S5HVoW_editorSearchInput",
|
|
3003
|
-
"browserFrame": "S5HVoW_browserFrame",
|
|
3004
|
-
"browserBlockedTitle": "S5HVoW_browserBlockedTitle",
|
|
3005
|
-
"sandboxStatusOn": "S5HVoW_sandboxStatusOn",
|
|
3006
|
-
"terminalDepsTitle": "S5HVoW_terminalDepsTitle",
|
|
3007
|
-
"gitHeader": "S5HVoW_gitHeader",
|
|
3008
|
-
"gitBadge": "S5HVoW_gitBadge",
|
|
3014
|
+
"boundaryError": "S5HVoW_boundaryError",
|
|
3015
|
+
"explorerName": "S5HVoW_explorerName",
|
|
3016
|
+
"terminalDepsHint": "S5HVoW_terminalDepsHint",
|
|
3017
|
+
"splitCol": "S5HVoW_splitCol",
|
|
3018
|
+
"paneCard": "S5HVoW_paneCard",
|
|
3019
|
+
"terminalWrap": "S5HVoW_terminalWrap",
|
|
3020
|
+
"uploadOverlay": "S5HVoW_uploadOverlay",
|
|
3021
|
+
"gitDiffFileOld": "S5HVoW_gitDiffFileOld",
|
|
3009
3022
|
"gitLogLine1": "S5HVoW_gitLogLine1",
|
|
3010
|
-
"
|
|
3011
|
-
"
|
|
3012
|
-
"
|
|
3013
|
-
"uploadDropZoneText": "S5HVoW_uploadDropZoneText",
|
|
3014
|
-
"terminalRetry": "S5HVoW_terminalRetry",
|
|
3015
|
-
"dropOverlay": "S5HVoW_dropOverlay",
|
|
3016
|
-
"editorBody": "S5HVoW_editorBody",
|
|
3017
|
-
"browserBlocked": "S5HVoW_browserBlocked",
|
|
3023
|
+
"explorerCopied": "S5HVoW_explorerCopied",
|
|
3024
|
+
"gitLogHash": "S5HVoW_gitLogHash",
|
|
3025
|
+
"explorerRowRevealed": "S5HVoW_explorerRowRevealed",
|
|
3018
3026
|
"browserBlockedActions": "S5HVoW_browserBlockedActions",
|
|
3019
|
-
"explorerBody": "S5HVoW_explorerBody",
|
|
3020
|
-
"gitDiffTab": "S5HVoW_gitDiffTab",
|
|
3021
|
-
"gitDiffTabHeader": "S5HVoW_gitDiffTabHeader",
|
|
3022
|
-
"terminalBannerUrl": "S5HVoW_terminalBannerUrl",
|
|
3023
|
-
"gitDiffTabTitle": "S5HVoW_gitDiffTabTitle",
|
|
3024
3027
|
"tabBoundaryError": "S5HVoW_tabBoundaryError",
|
|
3025
|
-
"
|
|
3026
|
-
"
|
|
3027
|
-
"gitCommitButton": "S5HVoW_gitCommitButton",
|
|
3028
|
-
"gitLogLine2": "S5HVoW_gitLogLine2",
|
|
3028
|
+
"openWithPin": "S5HVoW_openWithPin",
|
|
3029
|
+
"browserLiveTarget": "S5HVoW_browserLiveTarget",
|
|
3029
3030
|
"splitRow": "S5HVoW_splitRow",
|
|
3030
|
-
"
|
|
3031
|
-
"
|
|
3032
|
-
"
|
|
3033
|
-
"
|
|
3034
|
-
"
|
|
3035
|
-
"
|
|
3036
|
-
"
|
|
3037
|
-
"
|
|
3031
|
+
"panelResizeActive": "S5HVoW_panelResizeActive",
|
|
3032
|
+
"tabClose": "S5HVoW_tabClose",
|
|
3033
|
+
"dividerActive": "S5HVoW_dividerActive",
|
|
3034
|
+
"tabBarDrop": "S5HVoW_tabBarDrop",
|
|
3035
|
+
"browserInput": "S5HVoW_browserInput",
|
|
3036
|
+
"sandboxDot": "S5HVoW_sandboxDot",
|
|
3037
|
+
"dirtyDot": "S5HVoW_dirtyDot",
|
|
3038
|
+
"gitLogRef": "S5HVoW_gitLogRef",
|
|
3039
|
+
"terminalBannerUrl": "S5HVoW_terminalBannerUrl",
|
|
3040
|
+
"dropOverlay": "S5HVoW_dropOverlay",
|
|
3041
|
+
"gitFoldRow": "S5HVoW_gitFoldRow",
|
|
3038
3042
|
"editorSearchResult": "S5HVoW_editorSearchResult",
|
|
3039
|
-
"
|
|
3040
|
-
"
|
|
3041
|
-
"
|
|
3043
|
+
"editorPlaceholder": "S5HVoW_editorPlaceholder",
|
|
3044
|
+
"browserBlockedDesc": "S5HVoW_browserBlockedDesc",
|
|
3045
|
+
"openWithName": "S5HVoW_openWithName",
|
|
3046
|
+
"gitConfirmDesc": "S5HVoW_gitConfirmDesc",
|
|
3047
|
+
"explorerRow": "S5HVoW_explorerRow",
|
|
3048
|
+
"editorPathInput": "S5HVoW_editorPathInput",
|
|
3049
|
+
"explorerBody": "S5HVoW_explorerBody",
|
|
3042
3050
|
"pinnedTab": "S5HVoW_pinnedTab",
|
|
3043
|
-
"
|
|
3044
|
-
"
|
|
3045
|
-
"
|
|
3046
|
-
"
|
|
3051
|
+
"gitPlaceholder": "S5HVoW_gitPlaceholder",
|
|
3052
|
+
"producedChip": "S5HVoW_producedChip",
|
|
3053
|
+
"floatContent": "S5HVoW_floatContent",
|
|
3054
|
+
"uploadOverlayCancel": "S5HVoW_uploadOverlayCancel",
|
|
3055
|
+
"terminalRepairCommand": "S5HVoW_terminalRepairCommand",
|
|
3056
|
+
"gitHeader": "S5HVoW_gitHeader",
|
|
3057
|
+
"floatTitle": "S5HVoW_floatTitle",
|
|
3058
|
+
"openWithChevron": "S5HVoW_openWithChevron",
|
|
3059
|
+
"gitWorktreeRow": "S5HVoW_gitWorktreeRow",
|
|
3060
|
+
"editorTreePanelFull": "S5HVoW_editorTreePanelFull",
|
|
3061
|
+
"sandboxStatusOn": "S5HVoW_sandboxStatusOn",
|
|
3062
|
+
"gitDiffFileChevron": "S5HVoW_gitDiffFileChevron",
|
|
3063
|
+
"tabTitle": "S5HVoW_tabTitle",
|
|
3064
|
+
"tabBadge": "S5HVoW_tabBadge",
|
|
3065
|
+
"sandboxStatus": "S5HVoW_sandboxStatus",
|
|
3066
|
+
"tabList": "S5HVoW_tabList",
|
|
3067
|
+
"uploadDropZone": "S5HVoW_uploadDropZone",
|
|
3068
|
+
"floatResize": "S5HVoW_floatResize",
|
|
3069
|
+
"editorBody": "S5HVoW_editorBody",
|
|
3070
|
+
"explorerDir": "S5HVoW_explorerDir",
|
|
3071
|
+
"editorTreeSearch": "S5HVoW_editorTreeSearch",
|
|
3047
3072
|
"floatDropHintLabel": "S5HVoW_floatDropHintLabel",
|
|
3048
|
-
"
|
|
3049
|
-
"
|
|
3073
|
+
"terminalWaitBanner": "S5HVoW_terminalWaitBanner",
|
|
3074
|
+
"tabBar": "S5HVoW_tabBar",
|
|
3050
3075
|
"gitLogRow": "S5HVoW_gitLogRow",
|
|
3051
|
-
"
|
|
3052
|
-
"
|
|
3076
|
+
"dropRight": "S5HVoW_dropRight",
|
|
3077
|
+
"gitDiffFileChevronExpanded": "S5HVoW_gitDiffFileChevronExpanded",
|
|
3078
|
+
"floatWindow": "S5HVoW_floatWindow",
|
|
3079
|
+
"gitError": "S5HVoW_gitError",
|
|
3080
|
+
"gitSectionHeader": "S5HVoW_gitSectionHeader",
|
|
3081
|
+
"browserLiveCanvas": "S5HVoW_browserLiveCanvas",
|
|
3082
|
+
"explorerRef": "S5HVoW_explorerRef",
|
|
3083
|
+
"uploadDropChatHint": "S5HVoW_uploadDropChatHint",
|
|
3053
3084
|
"floatWindowDragging": "S5HVoW_floatWindowDragging",
|
|
3054
|
-
"
|
|
3055
|
-
"
|
|
3085
|
+
"toggleButton": "S5HVoW_toggleButton",
|
|
3086
|
+
"pane": "S5HVoW_pane",
|
|
3087
|
+
"panelHidden": "S5HVoW_panelHidden",
|
|
3088
|
+
"dropLeft": "S5HVoW_dropLeft",
|
|
3089
|
+
"uploadDropChatCard": "S5HVoW_uploadDropChatCard",
|
|
3090
|
+
"panelResize": "S5HVoW_panelResize",
|
|
3091
|
+
"uploadOverlayProgress": "S5HVoW_uploadOverlayProgress",
|
|
3092
|
+
"orphanedType": "S5HVoW_orphanedType",
|
|
3093
|
+
"editorBinaryNotice": "S5HVoW_editorBinaryNotice",
|
|
3094
|
+
"selectionPopup": "S5HVoW_selectionPopup",
|
|
3095
|
+
"terminal": "S5HVoW_terminal",
|
|
3096
|
+
"floatDropHint": "S5HVoW_floatDropHint",
|
|
3097
|
+
"uploadDropHero": "S5HVoW_uploadDropHero",
|
|
3098
|
+
"editorError": "S5HVoW_editorError",
|
|
3099
|
+
"explorerRenameInput": "S5HVoW_explorerRenameInput",
|
|
3056
3100
|
"terminalDepsBanner": "S5HVoW_terminalDepsBanner",
|
|
3057
|
-
"
|
|
3058
|
-
"
|
|
3059
|
-
"
|
|
3060
|
-
"
|
|
3061
|
-
"
|
|
3062
|
-
"
|
|
3063
|
-
"
|
|
3064
|
-
"editorTreeDock": "S5HVoW_editorTreeDock",
|
|
3065
|
-
"uploadDropChatHint": "S5HVoW_uploadDropChatHint",
|
|
3066
|
-
"gitDiffExpand": "S5HVoW_gitDiffExpand",
|
|
3067
|
-
"uploadOverlayCancel": "S5HVoW_uploadOverlayCancel",
|
|
3068
|
-
"producedLabel": "S5HVoW_producedLabel",
|
|
3069
|
-
"gitDiffFilePath": "S5HVoW_gitDiffFilePath",
|
|
3101
|
+
"terminalDepsCommandRow": "S5HVoW_terminalDepsCommandRow",
|
|
3102
|
+
"tabActive": "S5HVoW_tabActive",
|
|
3103
|
+
"terminalDepsNote": "S5HVoW_terminalDepsNote",
|
|
3104
|
+
"gitDiffTab": "S5HVoW_gitDiffTab",
|
|
3105
|
+
"gitName": "S5HVoW_gitName",
|
|
3106
|
+
"gitDiffHunk": "S5HVoW_gitDiffHunk",
|
|
3107
|
+
"gitCommit": "S5HVoW_gitCommit",
|
|
3070
3108
|
"dropDown": "S5HVoW_dropDown",
|
|
3071
|
-
"
|
|
3072
|
-
"
|
|
3073
|
-
"
|
|
3109
|
+
"gitBranchSelect": "S5HVoW_gitBranchSelect",
|
|
3110
|
+
"editorSearchInput": "S5HVoW_editorSearchInput",
|
|
3111
|
+
"gitDiffTabTitle": "S5HVoW_gitDiffTabTitle",
|
|
3074
3112
|
"gitDiffMeta": "S5HVoW_gitDiffMeta",
|
|
3075
|
-
"
|
|
3076
|
-
"
|
|
3077
|
-
"
|
|
3078
|
-
"
|
|
3079
|
-
"
|
|
3080
|
-
"
|
|
3081
|
-
"uploadDropZonePill": "S5HVoW_uploadDropZonePill",
|
|
3082
|
-
"explorerError": "S5HVoW_explorerError",
|
|
3083
|
-
"gitCommit": "S5HVoW_gitCommit",
|
|
3084
|
-
"browserBlockedDesc": "S5HVoW_browserBlockedDesc",
|
|
3085
|
-
"uploadOverlay": "S5HVoW_uploadOverlay",
|
|
3086
|
-
"dropCenter": "S5HVoW_dropCenter",
|
|
3087
|
-
"gitRowMain": "S5HVoW_gitRowMain",
|
|
3088
|
-
"editorStatus": "S5HVoW_editorStatus",
|
|
3089
|
-
"gitName": "S5HVoW_gitName",
|
|
3090
|
-
"gitDiffHunkHeader": "S5HVoW_gitDiffHunkHeader",
|
|
3091
|
-
"sandboxStatusOff": "S5HVoW_sandboxStatusOff",
|
|
3092
|
-
"gitDiff": "S5HVoW_gitDiff",
|
|
3093
|
-
"editorBanner": "S5HVoW_editorBanner",
|
|
3094
|
-
"browserMessage": "S5HVoW_browserMessage",
|
|
3095
|
-
"uploadDropZone": "S5HVoW_uploadDropZone",
|
|
3096
|
-
"tabBarPlus": "S5HVoW_tabBarPlus",
|
|
3097
|
-
"paneTab": "S5HVoW_paneTab",
|
|
3098
|
-
"explorerRow": "S5HVoW_explorerRow",
|
|
3099
|
-
"browserBar": "S5HVoW_browserBar",
|
|
3113
|
+
"dsh-toc-flash": "S5HVoW_dsh-toc-flash",
|
|
3114
|
+
"split": "S5HVoW_split",
|
|
3115
|
+
"explorer": "S5HVoW_explorer",
|
|
3116
|
+
"splitChild": "S5HVoW_splitChild",
|
|
3117
|
+
"sandboxStatusText": "S5HVoW_sandboxStatusText",
|
|
3118
|
+
"gitDiffFile": "S5HVoW_gitDiffFile",
|
|
3100
3119
|
"floatHeader": "S5HVoW_floatHeader",
|
|
3101
|
-
"
|
|
3102
|
-
"
|
|
3103
|
-
"
|
|
3104
|
-
"
|
|
3105
|
-
"
|
|
3120
|
+
"gitDiffFilePath": "S5HVoW_gitDiffFilePath",
|
|
3121
|
+
"gitDiffFileTag": "S5HVoW_gitDiffFileTag",
|
|
3122
|
+
"gitFoldRowFailed": "S5HVoW_gitFoldRowFailed",
|
|
3123
|
+
"editorTreeResize": "S5HVoW_editorTreeResize",
|
|
3124
|
+
"gitDiffExpand": "S5HVoW_gitDiffExpand",
|
|
3125
|
+
"gitLogSubject": "S5HVoW_gitLogSubject",
|
|
3126
|
+
"producedRow": "S5HVoW_producedRow",
|
|
3127
|
+
"browserLive": "S5HVoW_browserLive",
|
|
3128
|
+
"paneTab": "S5HVoW_paneTab",
|
|
3129
|
+
"gitDiffHunkSection": "S5HVoW_gitDiffHunkSection",
|
|
3130
|
+
"gitBadge": "S5HVoW_gitBadge",
|
|
3131
|
+
"divider": "S5HVoW_divider",
|
|
3132
|
+
"browserLiveStatus": "S5HVoW_browserLiveStatus",
|
|
3133
|
+
"workbench": "S5HVoW_workbench",
|
|
3106
3134
|
"terminalBanner": "S5HVoW_terminalBanner",
|
|
3107
|
-
"
|
|
3108
|
-
"
|
|
3109
|
-
"
|
|
3110
|
-
"
|
|
3111
|
-
"
|
|
3135
|
+
"editorTitle": "S5HVoW_editorTitle",
|
|
3136
|
+
"terminalRetry": "S5HVoW_terminalRetry",
|
|
3137
|
+
"gitLink": "S5HVoW_gitLink",
|
|
3138
|
+
"gitLogMeta": "S5HVoW_gitLogMeta",
|
|
3139
|
+
"explorerRowDropTarget": "S5HVoW_explorerRowDropTarget",
|
|
3140
|
+
"paneContent": "S5HVoW_paneContent",
|
|
3141
|
+
"paneEmptyCards": "S5HVoW_paneEmptyCards",
|
|
3142
|
+
"uploadDropZoneText": "S5HVoW_uploadDropZoneText",
|
|
3143
|
+
"gitSection": "S5HVoW_gitSection",
|
|
3144
|
+
"editorDownloadLink": "S5HVoW_editorDownloadLink",
|
|
3112
3145
|
"gitRowSelected": "S5HVoW_gitRowSelected",
|
|
3146
|
+
"panel": "S5HVoW_panel",
|
|
3147
|
+
"gitLogMore": "S5HVoW_gitLogMore",
|
|
3148
|
+
"editorSearchHint": "S5HVoW_editorSearchHint",
|
|
3149
|
+
"tab": "S5HVoW_tab",
|
|
3150
|
+
"editorTreeToggleActive": "S5HVoW_editorTreeToggleActive",
|
|
3151
|
+
"uploadOverlayTitle": "S5HVoW_uploadOverlayTitle",
|
|
3152
|
+
"editor": "S5HVoW_editor",
|
|
3153
|
+
"editorBanner": "S5HVoW_editorBanner",
|
|
3154
|
+
"explorerHidden": "S5HVoW_explorerHidden",
|
|
3155
|
+
"editorStatus": "S5HVoW_editorStatus",
|
|
3156
|
+
"tabBarPlus": "S5HVoW_tabBarPlus",
|
|
3157
|
+
"dsh-row-in": "S5HVoW_dsh-row-in",
|
|
3158
|
+
"panelBody": "S5HVoW_panelBody",
|
|
3159
|
+
"browser": "S5HVoW_browser",
|
|
3160
|
+
"paneDrop": "S5HVoW_paneDrop",
|
|
3161
|
+
"gitDiffMetaText": "S5HVoW_gitDiffMetaText",
|
|
3162
|
+
"openWithPinActive": "S5HVoW_openWithPinActive",
|
|
3163
|
+
"iconButton": "S5HVoW_iconButton",
|
|
3113
3164
|
"paneTabHidden": "S5HVoW_paneTabHidden",
|
|
3114
|
-
"
|
|
3165
|
+
"gitEmpty": "S5HVoW_gitEmpty",
|
|
3166
|
+
"uploadDropZonePill": "S5HVoW_uploadDropZonePill",
|
|
3167
|
+
"browserBar": "S5HVoW_browserBar",
|
|
3168
|
+
"browserFrame": "S5HVoW_browserFrame",
|
|
3115
3169
|
"git": "S5HVoW_git",
|
|
3116
|
-
"gitWorktreeLabel": "S5HVoW_gitWorktreeLabel",
|
|
3117
|
-
"gitError": "S5HVoW_gitError",
|
|
3118
3170
|
"editorMain": "S5HVoW_editorMain",
|
|
3119
|
-
"
|
|
3120
|
-
"
|
|
3121
|
-
"
|
|
3122
|
-
"
|
|
3123
|
-
"
|
|
3124
|
-
"
|
|
3125
|
-
"
|
|
3126
|
-
"
|
|
3127
|
-
"
|
|
3128
|
-
"
|
|
3129
|
-
"
|
|
3130
|
-
"gitLogMeta": "S5HVoW_gitLogMeta",
|
|
3131
|
-
"gitConfirmDesc": "S5HVoW_gitConfirmDesc",
|
|
3132
|
-
"boundaryError": "S5HVoW_boundaryError",
|
|
3133
|
-
"workbench": "S5HVoW_workbench",
|
|
3134
|
-
"floatDropHint": "S5HVoW_floatDropHint",
|
|
3135
|
-
"uploadOverlayStatus": "S5HVoW_uploadOverlayStatus",
|
|
3136
|
-
"split": "S5HVoW_split",
|
|
3171
|
+
"gitLogLine2": "S5HVoW_gitLogLine2",
|
|
3172
|
+
"editorTreePanel": "S5HVoW_editorTreePanel",
|
|
3173
|
+
"gitDiffDel": "S5HVoW_gitDiffDel",
|
|
3174
|
+
"sandboxStatusOff": "S5HVoW_sandboxStatusOff",
|
|
3175
|
+
"editorHeader": "S5HVoW_editorHeader",
|
|
3176
|
+
"uploadOverlayCard": "S5HVoW_uploadOverlayCard",
|
|
3177
|
+
"gitDiffCode": "S5HVoW_gitDiffCode",
|
|
3178
|
+
"producedLabel": "S5HVoW_producedLabel",
|
|
3179
|
+
"openWithLabel": "S5HVoW_openWithLabel",
|
|
3180
|
+
"browserBlockedButton": "S5HVoW_browserBlockedButton",
|
|
3181
|
+
"terminalWaitNeedle": "S5HVoW_terminalWaitNeedle",
|
|
3137
3182
|
"explorerRoot": "S5HVoW_explorerRoot",
|
|
3138
|
-
"explorerHidden": "S5HVoW_explorerHidden",
|
|
3139
|
-
"terminalWrap": "S5HVoW_terminalWrap",
|
|
3140
|
-
"gitDiffFileChevronExpanded": "S5HVoW_gitDiffFileChevronExpanded",
|
|
3141
|
-
"gitWorktreeRow": "S5HVoW_gitWorktreeRow",
|
|
3142
|
-
"openWithName": "S5HVoW_openWithName",
|
|
3143
|
-
"openWithPinActive": "S5HVoW_openWithPinActive",
|
|
3144
|
-
"dsh-toc-flash": "S5HVoW_dsh-toc-flash",
|
|
3145
|
-
"splitCol": "S5HVoW_splitCol",
|
|
3146
3183
|
"editorStatusError": "S5HVoW_editorStatusError",
|
|
3147
|
-
"
|
|
3148
|
-
"
|
|
3149
|
-
"
|
|
3150
|
-
"
|
|
3151
|
-
"
|
|
3152
|
-
"
|
|
3153
|
-
"
|
|
3154
|
-
"
|
|
3155
|
-
"
|
|
3156
|
-
"
|
|
3157
|
-
"
|
|
3184
|
+
"dropUp": "S5HVoW_dropUp",
|
|
3185
|
+
"floatClose": "S5HVoW_floatClose",
|
|
3186
|
+
"gitDiffLine": "S5HVoW_gitDiffLine",
|
|
3187
|
+
"sandboxAction": "S5HVoW_sandboxAction",
|
|
3188
|
+
"editorCm": "S5HVoW_editorCm",
|
|
3189
|
+
"gitCommitButton": "S5HVoW_gitCommitButton",
|
|
3190
|
+
"browserBlockedTitle": "S5HVoW_browserBlockedTitle",
|
|
3191
|
+
"explorerError": "S5HVoW_explorerError",
|
|
3192
|
+
"gitWorktreeLabel": "S5HVoW_gitWorktreeLabel",
|
|
3193
|
+
"toggleCluster": "S5HVoW_toggleCluster",
|
|
3194
|
+
"producedMore": "S5HVoW_producedMore",
|
|
3195
|
+
"gitDiffAdd": "S5HVoW_gitDiffAdd",
|
|
3196
|
+
"dividerCol": "S5HVoW_dividerCol",
|
|
3197
|
+
"browserBlocked": "S5HVoW_browserBlocked",
|
|
3198
|
+
"gitDiffTabHeader": "S5HVoW_gitDiffTabHeader",
|
|
3199
|
+
"terminalDepsTitle": "S5HVoW_terminalDepsTitle",
|
|
3200
|
+
"uploadOverlayProgressFill": "S5HVoW_uploadOverlayProgressFill",
|
|
3158
3201
|
"explorerBroken": "S5HVoW_explorerBroken",
|
|
3202
|
+
"editorTreeDock": "S5HVoW_editorTreeDock",
|
|
3203
|
+
"browserStart": "S5HVoW_browserStart",
|
|
3204
|
+
"explorerEmpty": "S5HVoW_explorerEmpty",
|
|
3205
|
+
"gitRowMain": "S5HVoW_gitRowMain",
|
|
3206
|
+
"uploadOverlayStatus": "S5HVoW_uploadOverlayStatus",
|
|
3207
|
+
"gitDiff": "S5HVoW_gitDiff",
|
|
3208
|
+
"gitDiffHunkHeader": "S5HVoW_gitDiffHunkHeader",
|
|
3209
|
+
"gitRow": "S5HVoW_gitRow",
|
|
3159
3210
|
"explorerHeader": "S5HVoW_explorerHeader",
|
|
3160
|
-
"
|
|
3161
|
-
"
|
|
3162
|
-
"
|
|
3163
|
-
"
|
|
3164
|
-
"
|
|
3165
|
-
"
|
|
3166
|
-
"
|
|
3167
|
-
"gitPlaceholder": "S5HVoW_gitPlaceholder"
|
|
3211
|
+
"editorBinary": "S5HVoW_editorBinary",
|
|
3212
|
+
"browserMessage": "S5HVoW_browserMessage",
|
|
3213
|
+
"gitDiffNum": "S5HVoW_gitDiffNum",
|
|
3214
|
+
"dividerRow": "S5HVoW_dividerRow",
|
|
3215
|
+
"gitDiffCtx": "S5HVoW_gitDiffCtx",
|
|
3216
|
+
"dropCenter": "S5HVoW_dropCenter",
|
|
3217
|
+
"gitCommitInput": "S5HVoW_gitCommitInput"
|
|
3168
3218
|
};
|
|
3169
3219
|
//#endregion
|
|
3170
3220
|
//#region src/client/intercept.tsx
|
|
@@ -3427,6 +3477,15 @@ window.__ModuleLoader__.load({
|
|
|
3427
3477
|
path,
|
|
3428
3478
|
content
|
|
3429
3479
|
})),
|
|
3480
|
+
/** Rename one tree row within its directory (single-segment name; a
|
|
3481
|
+
* destination-existence clash is a 409; symlink rows rename the link). */
|
|
3482
|
+
fsRename: (scope, path, name) => call("fs.rename", scopePayload(scope, {
|
|
3483
|
+
path,
|
|
3484
|
+
name
|
|
3485
|
+
})),
|
|
3486
|
+
/** Delete one tree row permanently (recursive for directories; a symlink
|
|
3487
|
+
* row unlinks the link only). */
|
|
3488
|
+
fsRemove: (scope, path) => call("fs.remove", scopePayload(scope, { path })),
|
|
3430
3489
|
/** Upload one file's raw bytes into `dir` (keeps the folder tree via
|
|
3431
3490
|
* `relativePath`); the host streams it under the session workspace. */
|
|
3432
3491
|
uploadFile: (scope, dir, relativePath, body, signal) => fetchUpload(scope, dir, relativePath, body, signal),
|
|
@@ -3448,6 +3507,13 @@ window.__ModuleLoader__.load({
|
|
|
3448
3507
|
}), signal),
|
|
3449
3508
|
/** Full patch text of one commit (diff display for the history rows). */
|
|
3450
3509
|
gitCommitDiff: (scope, hash, worktree, signal) => call("git.commit-diff", gitPayload(scope, worktree, { hash }), signal),
|
|
3510
|
+
/** Both sides' full file contents for a diff-fold expansion; a missing
|
|
3511
|
+
* side is null (untracked / deleted) and the view degrades the fold. */
|
|
3512
|
+
gitFoldContents: (scope, opts, worktree, signal) => call("git.fold-contents", gitPayload(scope, worktree, {
|
|
3513
|
+
path: opts.path,
|
|
3514
|
+
...opts.staged !== void 0 ? { staged: opts.staged } : {},
|
|
3515
|
+
...opts.hash !== void 0 ? { hash: opts.hash } : {}
|
|
3516
|
+
}), signal),
|
|
3451
3517
|
/** Discard the worktree changes of one file (the index is untouched). */
|
|
3452
3518
|
gitDiscard: (scope, path, worktree) => call("git.discard", gitPayload(scope, worktree, { path })),
|
|
3453
3519
|
/** Revert one commit onto the current branch. */
|
|
@@ -3460,6 +3526,9 @@ window.__ModuleLoader__.load({
|
|
|
3460
3526
|
ptyClose: (scope, tab) => call("pty.close", scopePayload(scope, { tab })),
|
|
3461
3527
|
/** Release an agent terminal by uuid (tab closed while WS was down). */
|
|
3462
3528
|
agentPtyClose: (uuid) => call("agent-pty.close", { uuid }),
|
|
3529
|
+
/** Skip every active terminal_wait_for on one agent terminal (the wait
|
|
3530
|
+
* banner's skip button). Idempotent: {skipped:0} when none is active. */
|
|
3531
|
+
agentSkipWait: (uuid) => call("agent-pty.skip-wait", { uuid }),
|
|
3463
3532
|
/** Terminal dependency status (issue #140): after a WS close 1011 with
|
|
3464
3533
|
* reason `pty-deps-missing` the view fetches the full repair details here
|
|
3465
3534
|
* (the close reason itself is capped at 123 bytes). */
|
|
@@ -4351,13 +4420,19 @@ window.__ModuleLoader__.load({
|
|
|
4351
4420
|
})]
|
|
4352
4421
|
});
|
|
4353
4422
|
function FileTree(props) {
|
|
4354
|
-
const { sessionId, cwd, expanded, revealed, onToggle, onOpenFile, onOpenFileNewTab, onOpenFileSide, openWithTargets, openWithPinned, openWithSsh, onOpenWith, onToggleOpenWithPin, onReferenceFile, refreshTick, onUploadRequest, busy } = props;
|
|
4423
|
+
const { sessionId, cwd, expanded, revealed, onToggle, onOpenFile, onOpenFileNewTab, onOpenFileSide, openWithTargets, openWithPinned, openWithSsh, onOpenWith, onToggleOpenWithPin, onReferenceFile, refreshTick, onUploadRequest, busy, onPathRenamed, onPathRemoved } = props;
|
|
4355
4424
|
const [data, setData] = (0, react.useState)({});
|
|
4356
4425
|
const dataRef = (0, react.useRef)(data);
|
|
4357
4426
|
/** The row whose path was just copied ("copied" label replaces its button). */
|
|
4358
4427
|
const [copiedPath, setCopiedPath] = (0, react.useState)(null);
|
|
4359
4428
|
/** Open context menu: the row path (and whether it is a directory) plus the cursor position. */
|
|
4360
4429
|
const [rowMenu, setRowMenu] = (0, react.useState)(null);
|
|
4430
|
+
/** The row being renamed inline (pre-filled base name; Enter commits). */
|
|
4431
|
+
const [renaming, setRenaming] = (0, react.useState)(null);
|
|
4432
|
+
/** The row pending delete confirmation (the Modal owns the final call). */
|
|
4433
|
+
const [deleting, setDeleting] = (0, react.useState)(null);
|
|
4434
|
+
/** The last mutation failure (dismissable strip above the tree). */
|
|
4435
|
+
const [mutationError, setMutationError] = (0, react.useState)(null);
|
|
4361
4436
|
/** Whether a file drag hovers the tree (drives the portaled drop zone). */
|
|
4362
4437
|
const [dropOver, setDropOver] = (0, react.useState)(false);
|
|
4363
4438
|
/** The directory a drag is hovering right now (null = body, drop to root). */
|
|
@@ -4512,6 +4587,89 @@ window.__ModuleLoader__.load({
|
|
|
4512
4587
|
}, COPIED_MS);
|
|
4513
4588
|
});
|
|
4514
4589
|
}, []);
|
|
4590
|
+
/** Re-fetch one directory level (a mutation changed it on disk). */
|
|
4591
|
+
const reloadDir = (0, react.useCallback)((dir) => {
|
|
4592
|
+
dataRef.current = {
|
|
4593
|
+
...dataRef.current,
|
|
4594
|
+
[dir]: {}
|
|
4595
|
+
};
|
|
4596
|
+
setData(dataRef.current);
|
|
4597
|
+
api.fsTree({
|
|
4598
|
+
sessionId,
|
|
4599
|
+
cwd
|
|
4600
|
+
}, dir).then((listing) => {
|
|
4601
|
+
storeLevel(dir, { entries: listing.entries });
|
|
4602
|
+
}).catch((error) => {
|
|
4603
|
+
storeLevel(dir, { error: error instanceof Error ? error.message : String(error) });
|
|
4604
|
+
});
|
|
4605
|
+
}, [
|
|
4606
|
+
sessionId,
|
|
4607
|
+
cwd,
|
|
4608
|
+
storeLevel
|
|
4609
|
+
]);
|
|
4610
|
+
/** Commit the inline rename: single-segment name; the row reloads from
|
|
4611
|
+
* its parent and open tabs retarget through the caller. */
|
|
4612
|
+
const commitRename = (target) => {
|
|
4613
|
+
const name = target.name.trim();
|
|
4614
|
+
if (name === "" || name.includes("/") || name.includes("\\")) {
|
|
4615
|
+
setMutationError(t("renameInvalid"));
|
|
4616
|
+
return;
|
|
4617
|
+
}
|
|
4618
|
+
api.fsRename({
|
|
4619
|
+
sessionId,
|
|
4620
|
+
cwd
|
|
4621
|
+
}, target.path, name).then(({ path }) => {
|
|
4622
|
+
setRenaming(null);
|
|
4623
|
+
reloadDir(parentOf(target.path) ?? path);
|
|
4624
|
+
onPathRenamed?.(target.path, path);
|
|
4625
|
+
}).catch((error) => {
|
|
4626
|
+
setMutationError(error instanceof Error ? error.message : String(error));
|
|
4627
|
+
});
|
|
4628
|
+
};
|
|
4629
|
+
/** Commit the confirmed delete: the parent reloads and the caller closes
|
|
4630
|
+
* every open tab at or under the removed path. */
|
|
4631
|
+
const commitDelete = (target) => {
|
|
4632
|
+
api.fsRemove({
|
|
4633
|
+
sessionId,
|
|
4634
|
+
cwd
|
|
4635
|
+
}, target.path).then(() => {
|
|
4636
|
+
setDeleting(null);
|
|
4637
|
+
reloadDir(parentOf(target.path) ?? target.path);
|
|
4638
|
+
onPathRemoved?.(target.path);
|
|
4639
|
+
}).catch((error) => {
|
|
4640
|
+
setMutationError(error instanceof Error ? error.message : String(error));
|
|
4641
|
+
});
|
|
4642
|
+
};
|
|
4643
|
+
/** The inline rename input (auto-focused, pre-selected; Enter/blur commits,
|
|
4644
|
+
* Esc cancels, an IME composition never triggers the key handlers). */
|
|
4645
|
+
const renameCancelled = (0, react.useRef)(false);
|
|
4646
|
+
const renderRenameInput = (path) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
4647
|
+
autoFocus: true,
|
|
4648
|
+
className: sidebar_module_css_default.explorerRenameInput,
|
|
4649
|
+
defaultValue: renaming?.name ?? "",
|
|
4650
|
+
onClick: (event) => {
|
|
4651
|
+
event.stopPropagation();
|
|
4652
|
+
},
|
|
4653
|
+
onKeyDown: (event) => {
|
|
4654
|
+
event.stopPropagation();
|
|
4655
|
+
if (event.nativeEvent.isComposing) return;
|
|
4656
|
+
if (event.key === "Enter") {
|
|
4657
|
+
event.preventDefault();
|
|
4658
|
+
if (renaming !== null) commitRename(renaming);
|
|
4659
|
+
} else if (event.key === "Escape") {
|
|
4660
|
+
event.preventDefault();
|
|
4661
|
+
renameCancelled.current = true;
|
|
4662
|
+
setRenaming(null);
|
|
4663
|
+
}
|
|
4664
|
+
},
|
|
4665
|
+
onBlur: () => {
|
|
4666
|
+
if (renameCancelled.current) {
|
|
4667
|
+
renameCancelled.current = false;
|
|
4668
|
+
return;
|
|
4669
|
+
}
|
|
4670
|
+
if (renaming !== null) commitRename(renaming);
|
|
4671
|
+
}
|
|
4672
|
+
});
|
|
4515
4673
|
/** The row's trailing actions: the @-reference button, or the copied label. */
|
|
4516
4674
|
const rowActions = (entry) => {
|
|
4517
4675
|
if (copiedPath === entry.path) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
@@ -4673,7 +4831,7 @@ window.__ModuleLoader__.load({
|
|
|
4673
4831
|
},
|
|
4674
4832
|
children: [
|
|
4675
4833
|
isOpen ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(VscFolderOpened, { size: 14 }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(VscFolder, { size: 14 }),
|
|
4676
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4834
|
+
renaming?.path === entry.path ? renderRenameInput(entry.path) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4677
4835
|
className: sidebar_module_css_default.explorerName,
|
|
4678
4836
|
children: entry.name
|
|
4679
4837
|
}),
|
|
@@ -4712,7 +4870,7 @@ window.__ModuleLoader__.load({
|
|
|
4712
4870
|
},
|
|
4713
4871
|
children: [
|
|
4714
4872
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(VscFile, { size: 14 }),
|
|
4715
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4873
|
+
renaming?.path === entry.path ? renderRenameInput(entry.path) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4716
4874
|
className: sidebar_module_css_default.explorerName,
|
|
4717
4875
|
children: entry.name
|
|
4718
4876
|
}),
|
|
@@ -4808,6 +4966,27 @@ window.__ModuleLoader__.load({
|
|
|
4808
4966
|
event.target.value = "";
|
|
4809
4967
|
}
|
|
4810
4968
|
}),
|
|
4969
|
+
mutationError !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
4970
|
+
className: clsx(sidebar_module_css_default.explorerRow, sidebar_module_css_default.explorerError),
|
|
4971
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4972
|
+
style: {
|
|
4973
|
+
flex: 1,
|
|
4974
|
+
minWidth: 0,
|
|
4975
|
+
overflow: "hidden",
|
|
4976
|
+
textOverflow: "ellipsis"
|
|
4977
|
+
},
|
|
4978
|
+
children: mutationError
|
|
4979
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
4980
|
+
type: "button",
|
|
4981
|
+
className: sidebar_module_css_default.explorerRef,
|
|
4982
|
+
"aria-label": t("dismiss"),
|
|
4983
|
+
title: t("dismiss"),
|
|
4984
|
+
onClick: () => {
|
|
4985
|
+
setMutationError(null);
|
|
4986
|
+
},
|
|
4987
|
+
children: t("dismiss")
|
|
4988
|
+
})]
|
|
4989
|
+
}),
|
|
4811
4990
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Menu, {
|
|
4812
4991
|
open: rowMenu !== null,
|
|
4813
4992
|
onClose: () => {
|
|
@@ -4844,7 +5023,19 @@ window.__ModuleLoader__.load({
|
|
|
4844
5023
|
id: "absolute",
|
|
4845
5024
|
label: t("copyAbsolute"),
|
|
4846
5025
|
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCopyOutline16, { size: 16 })
|
|
4847
|
-
}
|
|
5026
|
+
},
|
|
5027
|
+
...onPathRenamed !== void 0 && rowMenu !== null && rowMenu.path !== root || onPathRemoved !== void 0 && rowMenu !== null && rowMenu.path !== root ? [{
|
|
5028
|
+
id: "mutation-sep",
|
|
5029
|
+
type: "separator"
|
|
5030
|
+
}] : [],
|
|
5031
|
+
...onPathRenamed !== void 0 && rowMenu !== null && rowMenu.path !== root ? [{
|
|
5032
|
+
id: "rename-row",
|
|
5033
|
+
label: t("rename")
|
|
5034
|
+
}] : [],
|
|
5035
|
+
...onPathRemoved !== void 0 && rowMenu !== null && rowMenu.path !== root ? [{
|
|
5036
|
+
id: "delete-row",
|
|
5037
|
+
label: t("delete")
|
|
5038
|
+
}] : []
|
|
4848
5039
|
],
|
|
4849
5040
|
onSelect: (id) => {
|
|
4850
5041
|
const target = rowMenu;
|
|
@@ -4871,12 +5062,54 @@ window.__ModuleLoader__.load({
|
|
|
4871
5062
|
fileInputRef.current?.click();
|
|
4872
5063
|
return;
|
|
4873
5064
|
}
|
|
5065
|
+
if (id === "rename-row") {
|
|
5066
|
+
setMutationError(null);
|
|
5067
|
+
setRenaming({
|
|
5068
|
+
path: target.path,
|
|
5069
|
+
name: baseName$1(target.path)
|
|
5070
|
+
});
|
|
5071
|
+
return;
|
|
5072
|
+
}
|
|
5073
|
+
if (id === "delete-row") {
|
|
5074
|
+
setDeleting({
|
|
5075
|
+
path: target.path,
|
|
5076
|
+
isDir: target.isDir
|
|
5077
|
+
});
|
|
5078
|
+
return;
|
|
5079
|
+
}
|
|
4874
5080
|
copyPath(id === "relative" ? relativeTo(cwd ?? "", target.path) : target.path, target.path);
|
|
4875
5081
|
},
|
|
4876
5082
|
portal: true,
|
|
4877
5083
|
align: "start",
|
|
4878
5084
|
getAnchorRect: () => rowMenu === null ? null : new DOMRect(rowMenu.x, rowMenu.y, 0, 0),
|
|
4879
5085
|
anchor: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {})
|
|
5086
|
+
}),
|
|
5087
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Modal, {
|
|
5088
|
+
open: deleting !== null,
|
|
5089
|
+
onClose: () => {
|
|
5090
|
+
setDeleting(null);
|
|
5091
|
+
},
|
|
5092
|
+
title: deleting === null ? "" : t("deleteTitle", { name: baseName$1(deleting.path) }),
|
|
5093
|
+
closeLabel: t("cancel"),
|
|
5094
|
+
footer: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
5095
|
+
variant: "outline",
|
|
5096
|
+
onClick: () => {
|
|
5097
|
+
setDeleting(null);
|
|
5098
|
+
},
|
|
5099
|
+
children: t("cancel")
|
|
5100
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
5101
|
+
variant: "primary",
|
|
5102
|
+
onClick: () => {
|
|
5103
|
+
const target = deleting;
|
|
5104
|
+
if (target === null) return;
|
|
5105
|
+
commitDelete(target);
|
|
5106
|
+
},
|
|
5107
|
+
children: t("delete")
|
|
5108
|
+
})] }),
|
|
5109
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5110
|
+
className: sidebar_module_css_default.explorerError,
|
|
5111
|
+
children: deleting?.isDir === true ? t("deleteDescDir") : t("deleteDescFile")
|
|
5112
|
+
})
|
|
4880
5113
|
})
|
|
4881
5114
|
]
|
|
4882
5115
|
});
|
|
@@ -5275,7 +5508,7 @@ window.__ModuleLoader__.load({
|
|
|
5275
5508
|
* intake.
|
|
5276
5509
|
*/
|
|
5277
5510
|
function TreePanel(props) {
|
|
5278
|
-
const { sessionId, cwd, expanded, revealed, onToggle, onOpenFile, onOpenFileNewTab, onOpenFileSide, openWithTargets, openWithPinned, openWithSsh, onOpenWith, onToggleOpenWithPin, onReferenceFile, full } = props;
|
|
5511
|
+
const { sessionId, cwd, expanded, revealed, onToggle, onOpenFile, onOpenFileNewTab, onOpenFileSide, openWithTargets, openWithPinned, openWithSsh, onOpenWith, onToggleOpenWithPin, onReferenceFile, onPathRenamed, onPathRemoved, full } = props;
|
|
5279
5512
|
const [query, setQuery] = (0, react.useState)("");
|
|
5280
5513
|
const [results, setResults] = (0, react.useState)(null);
|
|
5281
5514
|
const [error, setError] = (0, react.useState)(null);
|
|
@@ -5475,6 +5708,8 @@ window.__ModuleLoader__.load({
|
|
|
5475
5708
|
onOpenWith,
|
|
5476
5709
|
onToggleOpenWithPin,
|
|
5477
5710
|
onReferenceFile,
|
|
5711
|
+
onPathRenamed,
|
|
5712
|
+
onPathRemoved,
|
|
5478
5713
|
refreshTick,
|
|
5479
5714
|
onUploadRequest: startUpload,
|
|
5480
5715
|
busy
|
|
@@ -5669,7 +5904,7 @@ window.__ModuleLoader__.load({
|
|
|
5669
5904
|
return Math.min(TREE_WIDTH_MAX, Math.max(TREE_WIDTH_MIN, Math.round(value)));
|
|
5670
5905
|
}
|
|
5671
5906
|
function EditorHost(props) {
|
|
5672
|
-
const { ctx, store, scope, tab, expanded, revealed, onToggleDir, onReferenceFile } = props;
|
|
5907
|
+
const { ctx, store, scope, tab, expanded, revealed, onToggleDir, onReferenceFile, onPathRenamed, onPathRemoved } = props;
|
|
5673
5908
|
const path = tab.path ?? "";
|
|
5674
5909
|
const isDir = metaOf(tab).dir === true;
|
|
5675
5910
|
const [load, setLoad] = (0, react.useState)({ status: "loading" });
|
|
@@ -5862,7 +6097,9 @@ window.__ModuleLoader__.load({
|
|
|
5862
6097
|
openWithSsh: openWithSshActive(openWithConfig),
|
|
5863
6098
|
onOpenWith: openWith,
|
|
5864
6099
|
onToggleOpenWithPin: toggleOpenWithPin,
|
|
5865
|
-
onReferenceFile
|
|
6100
|
+
onReferenceFile,
|
|
6101
|
+
onPathRenamed,
|
|
6102
|
+
onPathRemoved
|
|
5866
6103
|
})
|
|
5867
6104
|
});
|
|
5868
6105
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
@@ -5970,7 +6207,9 @@ window.__ModuleLoader__.load({
|
|
|
5970
6207
|
openWithSsh: openWithSshActive(openWithConfig),
|
|
5971
6208
|
onOpenWith: openWith,
|
|
5972
6209
|
onToggleOpenWithPin: toggleOpenWithPin,
|
|
5973
|
-
onReferenceFile
|
|
6210
|
+
onReferenceFile,
|
|
6211
|
+
onPathRenamed,
|
|
6212
|
+
onPathRemoved
|
|
5974
6213
|
})]
|
|
5975
6214
|
})]
|
|
5976
6215
|
})]
|
|
@@ -6029,75 +6268,75 @@ window.__ModuleLoader__.load({
|
|
|
6029
6268
|
document.head.appendChild(tag);
|
|
6030
6269
|
}
|
|
6031
6270
|
var SideCardSection_module_css_default = {
|
|
6032
|
-
"
|
|
6033
|
-
"
|
|
6271
|
+
"pluginGroup": "AC9POW_pluginGroup",
|
|
6272
|
+
"typedInputNumber": "AC9POW_typedInputNumber",
|
|
6273
|
+
"card": "AC9POW_card",
|
|
6274
|
+
"rowGear": "AC9POW_rowGear",
|
|
6275
|
+
"cardTop": "AC9POW_cardTop",
|
|
6276
|
+
"popupDialog": "AC9POW_popupDialog",
|
|
6277
|
+
"pluginGroupHeading": "AC9POW_pluginGroupHeading",
|
|
6034
6278
|
"pluginEntry": "AC9POW_pluginEntry",
|
|
6279
|
+
"selectAnchorText": "AC9POW_selectAnchorText",
|
|
6280
|
+
"pluginName": "AC9POW_pluginName",
|
|
6281
|
+
"pluginCopyBtn": "AC9POW_pluginCopyBtn",
|
|
6282
|
+
"intro": "AC9POW_intro",
|
|
6283
|
+
"selectAnchorIcon": "AC9POW_selectAnchorIcon",
|
|
6284
|
+
"pluginEmpty": "AC9POW_pluginEmpty",
|
|
6285
|
+
"pluginEntryActions": "AC9POW_pluginEntryActions",
|
|
6286
|
+
"cardSwitchTrack": "AC9POW_cardSwitchTrack",
|
|
6287
|
+
"openWithHint": "AC9POW_openWithHint",
|
|
6288
|
+
"groupHeading": "AC9POW_groupHeading",
|
|
6289
|
+
"addCard": "AC9POW_addCard",
|
|
6290
|
+
"openWithFamily": "AC9POW_openWithFamily",
|
|
6291
|
+
"openWithEditorTemplate": "AC9POW_openWithEditorTemplate",
|
|
6292
|
+
"suffix": "AC9POW_suffix",
|
|
6293
|
+
"done": "AC9POW_done",
|
|
6294
|
+
"cardSwitch": "AC9POW_cardSwitch",
|
|
6295
|
+
"pluginEntries": "AC9POW_pluginEntries",
|
|
6296
|
+
"cssTextArea": "AC9POW_cssTextArea",
|
|
6297
|
+
"cardIconChip": "AC9POW_cardIconChip",
|
|
6298
|
+
"error": "AC9POW_error",
|
|
6299
|
+
"pluginTopicBtn": "AC9POW_pluginTopicBtn",
|
|
6035
6300
|
"count": "AC9POW_count",
|
|
6036
|
-
"
|
|
6037
|
-
"row": "AC9POW_row",
|
|
6301
|
+
"typedInput": "AC9POW_typedInput",
|
|
6038
6302
|
"cardOn": "AC9POW_cardOn",
|
|
6039
|
-
"
|
|
6040
|
-
"
|
|
6041
|
-
"
|
|
6042
|
-
"
|
|
6303
|
+
"openWithRemove": "AC9POW_openWithRemove",
|
|
6304
|
+
"rowText": "AC9POW_rowText",
|
|
6305
|
+
"switchTrack": "AC9POW_switchTrack",
|
|
6306
|
+
"cardSwitchThumb": "AC9POW_cardSwitchThumb",
|
|
6307
|
+
"selectOptionText": "AC9POW_selectOptionText",
|
|
6308
|
+
"cardTitle": "AC9POW_cardTitle",
|
|
6309
|
+
"openWithEditorInput": "AC9POW_openWithEditorInput",
|
|
6310
|
+
"popupRow": "AC9POW_popupRow",
|
|
6043
6311
|
"selectOption": "AC9POW_selectOption",
|
|
6044
|
-
"
|
|
6045
|
-
"
|
|
6046
|
-
"
|
|
6312
|
+
"pluginJumpBtn": "AC9POW_pluginJumpBtn",
|
|
6313
|
+
"title": "AC9POW_title",
|
|
6314
|
+
"versionBadgeTag": "AC9POW_versionBadgeTag",
|
|
6315
|
+
"row": "AC9POW_row",
|
|
6047
6316
|
"pluginDesc": "AC9POW_pluginDesc",
|
|
6317
|
+
"cardDesc": "AC9POW_cardDesc",
|
|
6318
|
+
"pluginEntryHead": "AC9POW_pluginEntryHead",
|
|
6319
|
+
"group": "AC9POW_group",
|
|
6320
|
+
"selectOptionIcon": "AC9POW_selectOptionIcon",
|
|
6048
6321
|
"pluginSearch": "AC9POW_pluginSearch",
|
|
6049
|
-
"
|
|
6050
|
-
"
|
|
6322
|
+
"section": "AC9POW_section",
|
|
6323
|
+
"switchThumb": "AC9POW_switchThumb",
|
|
6324
|
+
"switchInput": "AC9POW_switchInput",
|
|
6325
|
+
"grid": "AC9POW_grid",
|
|
6326
|
+
"cardMain": "AC9POW_cardMain",
|
|
6051
6327
|
"pluginModal": "AC9POW_pluginModal",
|
|
6052
|
-
"cardTop": "AC9POW_cardTop",
|
|
6053
|
-
"intro": "AC9POW_intro",
|
|
6054
|
-
"cardTitle": "AC9POW_cardTitle",
|
|
6055
|
-
"selectAnchorText": "AC9POW_selectAnchorText",
|
|
6056
|
-
"cssTextArea": "AC9POW_cssTextArea",
|
|
6057
|
-
"versionBadgeName": "AC9POW_versionBadgeName",
|
|
6058
|
-
"cardSwitchThumb": "AC9POW_cardSwitchThumb",
|
|
6059
|
-
"desc": "AC9POW_desc",
|
|
6060
|
-
"pluginGroupHeading": "AC9POW_pluginGroupHeading",
|
|
6061
6328
|
"cardSettings": "AC9POW_cardSettings",
|
|
6062
|
-
"
|
|
6063
|
-
"
|
|
6064
|
-
"grid": "AC9POW_grid",
|
|
6065
|
-
"switchTrack": "AC9POW_switchTrack",
|
|
6329
|
+
"pluginInstall": "AC9POW_pluginInstall",
|
|
6330
|
+
"versionBadgeName": "AC9POW_versionBadgeName",
|
|
6066
6331
|
"openWithEditorRow": "AC9POW_openWithEditorRow",
|
|
6067
|
-
"
|
|
6068
|
-
"pluginName": "AC9POW_pluginName",
|
|
6069
|
-
"versionBadgeTag": "AC9POW_versionBadgeTag",
|
|
6070
|
-
"openWithEditorInput": "AC9POW_openWithEditorInput",
|
|
6071
|
-
"section": "AC9POW_section",
|
|
6332
|
+
"popupRows": "AC9POW_popupRows",
|
|
6072
6333
|
"control": "AC9POW_control",
|
|
6334
|
+
"pluginList": "AC9POW_pluginList",
|
|
6335
|
+
"desc": "AC9POW_desc",
|
|
6336
|
+
"switch": "AC9POW_switch",
|
|
6073
6337
|
"percentInput": "AC9POW_percentInput",
|
|
6074
|
-
"selectAnchorIcon": "AC9POW_selectAnchorIcon",
|
|
6075
|
-
"popupDialog": "AC9POW_popupDialog",
|
|
6076
|
-
"pluginEntries": "AC9POW_pluginEntries",
|
|
6077
|
-
"cardMain": "AC9POW_cardMain",
|
|
6078
6338
|
"selectAnchor": "AC9POW_selectAnchor",
|
|
6079
|
-
"
|
|
6080
|
-
"card": "AC9POW_card",
|
|
6081
|
-
"done": "AC9POW_done",
|
|
6082
|
-
"suffix": "AC9POW_suffix",
|
|
6083
|
-
"openWithHint": "AC9POW_openWithHint",
|
|
6084
|
-
"openWithEditorTemplate": "AC9POW_openWithEditorTemplate",
|
|
6085
|
-
"cardSwitch": "AC9POW_cardSwitch",
|
|
6086
|
-
"versionBadge": "AC9POW_versionBadge",
|
|
6087
|
-
"pluginEntryActions": "AC9POW_pluginEntryActions",
|
|
6088
|
-
"pluginCopyBtn": "AC9POW_pluginCopyBtn",
|
|
6089
|
-
"typedInputNumber": "AC9POW_typedInputNumber",
|
|
6090
|
-
"popupRows": "AC9POW_popupRows",
|
|
6091
|
-
"switchThumb": "AC9POW_switchThumb",
|
|
6092
|
-
"error": "AC9POW_error",
|
|
6093
|
-
"cardSwitchTrack": "AC9POW_cardSwitchTrack",
|
|
6094
|
-
"addCard": "AC9POW_addCard",
|
|
6095
|
-
"pluginEmpty": "AC9POW_pluginEmpty",
|
|
6096
|
-
"openWithFamily": "AC9POW_openWithFamily",
|
|
6097
|
-
"selectOptionText": "AC9POW_selectOptionText",
|
|
6098
|
-
"pluginInstall": "AC9POW_pluginInstall",
|
|
6099
|
-
"switchInput": "AC9POW_switchInput",
|
|
6100
|
-
"popupRow": "AC9POW_popupRow"
|
|
6339
|
+
"versionBadge": "AC9POW_versionBadge"
|
|
6101
6340
|
};
|
|
6102
6341
|
//#endregion
|
|
6103
6342
|
//#region src/client/open-with-settings.tsx
|
|
@@ -7216,6 +7455,56 @@ window.__ModuleLoader__.load({
|
|
|
7216
7455
|
if (path.startsWith("a/") || path.startsWith("b/")) return path.slice(2);
|
|
7217
7456
|
return path;
|
|
7218
7457
|
}
|
|
7458
|
+
/** How many old-side rows a hunk carries (rows without an old number are
|
|
7459
|
+
* pure additions and do not advance the old side). */
|
|
7460
|
+
function hunkOldEnd(hunk) {
|
|
7461
|
+
return hunk.oldStart + hunk.lines.filter((line) => line.oldNum !== null).length - 1;
|
|
7462
|
+
}
|
|
7463
|
+
/** How many new-side rows a hunk carries. */
|
|
7464
|
+
function hunkNewEnd(hunk) {
|
|
7465
|
+
return hunk.newStart + hunk.lines.filter((line) => line.newNum !== null).length - 1;
|
|
7466
|
+
}
|
|
7467
|
+
/**
|
|
7468
|
+
* Materialize a git gap fold's hidden rows from the two sides' full file
|
|
7469
|
+
* contents, by the fold's known line ranges: the old side drives context
|
|
7470
|
+
* rows (each mapped onto the new side through the fold's offset — a gap is
|
|
7471
|
+
* an unchanged run, so the sides align), and new-side lines the old range
|
|
7472
|
+
* never reaches become pure additions. Line numbers clip to the actual
|
|
7473
|
+
* content (a no-newline file's ranges can overrun by one); `\r` endings
|
|
7474
|
+
* survive verbatim, like git's own context lines.
|
|
7475
|
+
*/
|
|
7476
|
+
function foldRowsFromContents(fold, oldContent, newContent) {
|
|
7477
|
+
const oldLines = oldContent.length === 0 ? [] : oldContent.split("\n");
|
|
7478
|
+
const newLines = newContent.length === 0 ? [] : newContent.split("\n");
|
|
7479
|
+
const offset = fold.newStart - fold.oldStart;
|
|
7480
|
+
const rows = [];
|
|
7481
|
+
const oldFrom = Math.max(fold.oldStart, 1);
|
|
7482
|
+
const oldTo = Math.min(fold.oldEnd, oldLines.length);
|
|
7483
|
+
for (let oldLine = oldFrom; oldLine <= oldTo; oldLine += 1) {
|
|
7484
|
+
const text = oldLines[oldLine - 1] ?? "";
|
|
7485
|
+
const newLine = oldLine + offset;
|
|
7486
|
+
rows.push(newLine >= fold.newStart && newLine <= fold.newEnd && newLine <= newLines.length ? {
|
|
7487
|
+
kind: "ctx",
|
|
7488
|
+
text,
|
|
7489
|
+
oldNum: oldLine,
|
|
7490
|
+
newNum: newLine
|
|
7491
|
+
} : {
|
|
7492
|
+
kind: "ctx",
|
|
7493
|
+
text,
|
|
7494
|
+
oldNum: oldLine,
|
|
7495
|
+
newNum: null
|
|
7496
|
+
});
|
|
7497
|
+
}
|
|
7498
|
+
const newFrom = Math.max(Math.max(fold.newStart, 1), oldTo + offset + 1);
|
|
7499
|
+
const newTo = Math.min(fold.newEnd, newLines.length);
|
|
7500
|
+
for (let newLine = newFrom; newLine <= newTo; newLine += 1) rows.push({
|
|
7501
|
+
kind: "add",
|
|
7502
|
+
text: newLines[newLine - 1] ?? "",
|
|
7503
|
+
oldNum: null,
|
|
7504
|
+
newNum: newLine
|
|
7505
|
+
});
|
|
7506
|
+
return rows;
|
|
7507
|
+
}
|
|
7219
7508
|
/** The file header badge: added / deleted / renamed / binary ('' for a plain edit). */
|
|
7220
7509
|
function fileTag(file) {
|
|
7221
7510
|
if (file.binary) return t("diffBinary");
|
|
@@ -7239,7 +7528,7 @@ window.__ModuleLoader__.load({
|
|
|
7239
7528
|
});
|
|
7240
7529
|
return expanded;
|
|
7241
7530
|
}
|
|
7242
|
-
function DiffView({ diff, untrackedPath, untrackedContent }) {
|
|
7531
|
+
function DiffView({ diff, untrackedPath, untrackedContent, foldSource }) {
|
|
7243
7532
|
const parsed = (0, react.useMemo)(() => {
|
|
7244
7533
|
if (untrackedPath !== void 0) return { files: [untrackedFile(untrackedPath, untrackedContent ?? "")] };
|
|
7245
7534
|
return parseUnifiedDiff(diff);
|
|
@@ -7250,9 +7539,43 @@ window.__ModuleLoader__.load({
|
|
|
7250
7539
|
]);
|
|
7251
7540
|
const [expanded, setExpanded] = (0, react.useState)(false);
|
|
7252
7541
|
const [expandedFiles, setExpandedFiles] = (0, react.useState)(() => defaultExpandedFiles(parsed.files));
|
|
7542
|
+
const [foldRows, setFoldRows] = (0, react.useState)(/* @__PURE__ */ new Map());
|
|
7543
|
+
const foldInflight = (0, react.useRef)(/* @__PURE__ */ new Map());
|
|
7253
7544
|
(0, react.useEffect)(() => {
|
|
7254
7545
|
setExpandedFiles(defaultExpandedFiles(parsed.files));
|
|
7255
7546
|
}, [parsed]);
|
|
7547
|
+
(0, react.useEffect)(() => {
|
|
7548
|
+
setFoldRows(/* @__PURE__ */ new Map());
|
|
7549
|
+
foldInflight.current.clear();
|
|
7550
|
+
}, [parsed]);
|
|
7551
|
+
/** Fetch both sides' contents and materialize one fold's hidden rows. */
|
|
7552
|
+
const resolveFold = (key, file, fold) => {
|
|
7553
|
+
if (foldSource === void 0 || foldInflight.current.has(key)) return;
|
|
7554
|
+
setFoldRows((current) => new Map(current).set(key, { status: "loading" }));
|
|
7555
|
+
const task = (async () => {
|
|
7556
|
+
try {
|
|
7557
|
+
const path = displayPath(file.newPath === "/dev/null" ? file.oldPath : file.newPath);
|
|
7558
|
+
const contents = await api.gitFoldContents(foldSource.scope, {
|
|
7559
|
+
path,
|
|
7560
|
+
...foldSource.ref.kind === "commit" ? { hash: foldSource.ref.hashFull } : { staged: foldSource.ref.staged === true }
|
|
7561
|
+
}, foldSource.ref.kind === "worktree" ? foldSource.ref.worktree : void 0);
|
|
7562
|
+
if (contents.old === null || contents.new === null) {
|
|
7563
|
+
setFoldRows((current) => new Map(current).set(key, { status: "failed" }));
|
|
7564
|
+
return;
|
|
7565
|
+
}
|
|
7566
|
+
const rows = foldRowsFromContents(fold, contents.old, contents.new);
|
|
7567
|
+
setFoldRows((current) => new Map(current).set(key, {
|
|
7568
|
+
status: "ready",
|
|
7569
|
+
rows
|
|
7570
|
+
}));
|
|
7571
|
+
} catch {
|
|
7572
|
+
setFoldRows((current) => new Map(current).set(key, { status: "failed" }));
|
|
7573
|
+
} finally {
|
|
7574
|
+
foldInflight.current.delete(key);
|
|
7575
|
+
}
|
|
7576
|
+
})();
|
|
7577
|
+
foldInflight.current.set(key, task);
|
|
7578
|
+
};
|
|
7256
7579
|
const rows = (0, react.useMemo)(() => {
|
|
7257
7580
|
const out = [];
|
|
7258
7581
|
parsed.files.forEach((file, fileIndex) => {
|
|
@@ -7263,7 +7586,30 @@ window.__ModuleLoader__.load({
|
|
|
7263
7586
|
type: "path"
|
|
7264
7587
|
});
|
|
7265
7588
|
if (file.binary || !expandedFiles.has(fileIndex)) return;
|
|
7589
|
+
let prevOldEnd = 0;
|
|
7590
|
+
let prevNewEnd = 0;
|
|
7266
7591
|
file.hunks.forEach((hunk, hunkIndex) => {
|
|
7592
|
+
const oldGap = hunk.oldStart - prevOldEnd - 1;
|
|
7593
|
+
const newGap = hunk.newStart - prevNewEnd - 1;
|
|
7594
|
+
if (foldSource !== void 0 && (oldGap > 0 || newGap > 0)) {
|
|
7595
|
+
const key = `f${fileIndex}fold${hunkIndex}`;
|
|
7596
|
+
out.push({
|
|
7597
|
+
key,
|
|
7598
|
+
file,
|
|
7599
|
+
fileIndex,
|
|
7600
|
+
type: "fold",
|
|
7601
|
+
fold: {
|
|
7602
|
+
oldStart: prevOldEnd + 1,
|
|
7603
|
+
oldEnd: Math.max(hunk.oldStart - 1, prevOldEnd),
|
|
7604
|
+
newStart: prevNewEnd + 1,
|
|
7605
|
+
newEnd: Math.max(hunk.newStart - 1, prevNewEnd)
|
|
7606
|
+
},
|
|
7607
|
+
count: Math.max(oldGap, newGap, 0),
|
|
7608
|
+
state: foldRows.get(key)
|
|
7609
|
+
});
|
|
7610
|
+
}
|
|
7611
|
+
prevOldEnd = hunkOldEnd(hunk);
|
|
7612
|
+
prevNewEnd = hunkNewEnd(hunk);
|
|
7267
7613
|
out.push({
|
|
7268
7614
|
key: `f${fileIndex}h${hunkIndex}`,
|
|
7269
7615
|
file,
|
|
@@ -7284,7 +7630,12 @@ window.__ModuleLoader__.load({
|
|
|
7284
7630
|
});
|
|
7285
7631
|
});
|
|
7286
7632
|
return out;
|
|
7287
|
-
}, [
|
|
7633
|
+
}, [
|
|
7634
|
+
parsed,
|
|
7635
|
+
expandedFiles,
|
|
7636
|
+
foldRows,
|
|
7637
|
+
foldSource
|
|
7638
|
+
]);
|
|
7288
7639
|
const hidden = rows.length - MAX_DIFF_ROWS;
|
|
7289
7640
|
const capped = hidden > 0 && !expanded;
|
|
7290
7641
|
const headLines = Math.ceil(MAX_DIFF_ROWS / 2);
|
|
@@ -7292,6 +7643,29 @@ window.__ModuleLoader__.load({
|
|
|
7292
7643
|
const head = capped ? rows.slice(0, headLines) : rows;
|
|
7293
7644
|
const tail = capped ? rows.slice(rows.length - tailLines) : [];
|
|
7294
7645
|
if (rows.length === 0) return null;
|
|
7646
|
+
const renderLine = (line, key) => {
|
|
7647
|
+
const lineClass = line.kind === "del" ? sidebar_module_css_default.gitDiffDel : line.kind === "add" ? sidebar_module_css_default.gitDiffAdd : line.kind === "meta" ? sidebar_module_css_default.gitDiffMeta : sidebar_module_css_default.gitDiffCtx;
|
|
7648
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
7649
|
+
className: clsx(sidebar_module_css_default.gitDiffLine, lineClass),
|
|
7650
|
+
children: line.kind === "meta" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7651
|
+
className: sidebar_module_css_default.gitDiffMetaText,
|
|
7652
|
+
children: line.text
|
|
7653
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
7654
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7655
|
+
className: sidebar_module_css_default.gitDiffNum,
|
|
7656
|
+
children: line.oldNum ?? ""
|
|
7657
|
+
}),
|
|
7658
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7659
|
+
className: sidebar_module_css_default.gitDiffNum,
|
|
7660
|
+
children: line.newNum ?? ""
|
|
7661
|
+
}),
|
|
7662
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7663
|
+
className: sidebar_module_css_default.gitDiffCode,
|
|
7664
|
+
children: line.text
|
|
7665
|
+
})
|
|
7666
|
+
] })
|
|
7667
|
+
}, key);
|
|
7668
|
+
};
|
|
7295
7669
|
const renderRow = (row) => {
|
|
7296
7670
|
if (row.type === "path") {
|
|
7297
7671
|
const tag = fileTag(row.file);
|
|
@@ -7356,28 +7730,21 @@ window.__ModuleLoader__.load({
|
|
|
7356
7730
|
})]
|
|
7357
7731
|
}, row.key);
|
|
7358
7732
|
}
|
|
7359
|
-
|
|
7360
|
-
|
|
7361
|
-
|
|
7362
|
-
|
|
7363
|
-
|
|
7364
|
-
|
|
7365
|
-
|
|
7366
|
-
|
|
7367
|
-
|
|
7368
|
-
|
|
7369
|
-
|
|
7370
|
-
})
|
|
7371
|
-
|
|
7372
|
-
|
|
7373
|
-
|
|
7374
|
-
}),
|
|
7375
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7376
|
-
className: sidebar_module_css_default.gitDiffCode,
|
|
7377
|
-
children: line.text
|
|
7378
|
-
})
|
|
7379
|
-
] })
|
|
7380
|
-
}, row.key);
|
|
7733
|
+
if (row.type === "fold") {
|
|
7734
|
+
if (row.state?.status === "ready") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react.Fragment, { children: row.state.rows.map((line, index) => renderLine(line, `${row.key}r${index}`)) }, row.key);
|
|
7735
|
+
const loading = row.state?.status === "loading";
|
|
7736
|
+
const failed = row.state?.status === "failed";
|
|
7737
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
7738
|
+
type: "button",
|
|
7739
|
+
className: clsx(sidebar_module_css_default.gitFoldRow, failed && sidebar_module_css_default.gitFoldRowFailed),
|
|
7740
|
+
disabled: loading || failed,
|
|
7741
|
+
onClick: () => {
|
|
7742
|
+
resolveFold(row.key, row.file, row.fold);
|
|
7743
|
+
},
|
|
7744
|
+
children: failed ? t("gitFoldFailed") : loading ? t("gitFoldLoading") : t("gitFoldExpand", { count: row.count })
|
|
7745
|
+
}, row.key);
|
|
7746
|
+
}
|
|
7747
|
+
return renderLine(row.line, row.key);
|
|
7381
7748
|
};
|
|
7382
7749
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7383
7750
|
className: sidebar_module_css_default.gitDiff,
|
|
@@ -7501,7 +7868,18 @@ window.__ModuleLoader__.load({
|
|
|
7501
7868
|
diff: "",
|
|
7502
7869
|
untrackedPath: diff.kind === "worktree" ? diff.path : "",
|
|
7503
7870
|
untrackedContent: data.untracked
|
|
7504
|
-
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DiffView, {
|
|
7871
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DiffView, {
|
|
7872
|
+
diff: data.diff,
|
|
7873
|
+
foldSource: {
|
|
7874
|
+
scope: {
|
|
7875
|
+
sessionId,
|
|
7876
|
+
cwd,
|
|
7877
|
+
...diff.repoRoot !== void 0 ? { repoRoot: diff.repoRoot } : {}
|
|
7878
|
+
},
|
|
7879
|
+
ref: diff,
|
|
7880
|
+
cwd
|
|
7881
|
+
}
|
|
7882
|
+
}), data.diff === "" && data.untracked === void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
7505
7883
|
className: sidebar_module_css_default.gitEmpty,
|
|
7506
7884
|
children: t("diffEmpty")
|
|
7507
7885
|
})] })
|
|
@@ -7815,58 +8193,58 @@ Mode: this is a continuable side conversation. Your answers stay in this side th
|
|
|
7815
8193
|
document.head.appendChild(tag);
|
|
7816
8194
|
}
|
|
7817
8195
|
var SubagentView_module_css_default = {
|
|
7818
|
-
"
|
|
7819
|
-
"
|
|
7820
|
-
"
|
|
7821
|
-
"
|
|
7822
|
-
"
|
|
7823
|
-
"jobsCount": "F2T6aa_jobsCount",
|
|
8196
|
+
"jobsTitle": "F2T6aa_jobsTitle",
|
|
8197
|
+
"subagentSecondary": "F2T6aa_subagentSecondary",
|
|
8198
|
+
"subagentLiveText": "F2T6aa_subagentLiveText",
|
|
8199
|
+
"subagentNode": "F2T6aa_subagentNode",
|
|
8200
|
+
"jobsRowSelected": "F2T6aa_jobsRowSelected",
|
|
7824
8201
|
"jobsDot": "F2T6aa_jobsDot",
|
|
7825
|
-
"
|
|
8202
|
+
"subagentCount": "F2T6aa_subagentCount",
|
|
7826
8203
|
"subagentRefresh": "F2T6aa_subagentRefresh",
|
|
8204
|
+
"subagentError": "F2T6aa_subagentError",
|
|
8205
|
+
"jobsKind": "F2T6aa_jobsKind",
|
|
7827
8206
|
"subagentTitle": "F2T6aa_subagentTitle",
|
|
8207
|
+
"jobsRowMain": "F2T6aa_jobsRowMain",
|
|
8208
|
+
"subagentChildren": "F2T6aa_subagentChildren",
|
|
8209
|
+
"jobsKillError": "F2T6aa_jobsKillError",
|
|
7828
8210
|
"historyToggle": "F2T6aa_historyToggle",
|
|
7829
|
-
"
|
|
7830
|
-
"
|
|
7831
|
-
"
|
|
7832
|
-
"
|
|
7833
|
-
"
|
|
7834
|
-
"
|
|
8211
|
+
"jobsPane": "F2T6aa_jobsPane",
|
|
8212
|
+
"jobsPaneLabel": "F2T6aa_jobsPaneLabel",
|
|
8213
|
+
"jobsList": "F2T6aa_jobsList",
|
|
8214
|
+
"jobsPaneHint": "F2T6aa_jobsPaneHint",
|
|
8215
|
+
"subagentRowActive": "F2T6aa_subagentRowActive",
|
|
8216
|
+
"subagentHeader": "F2T6aa_subagentHeader",
|
|
8217
|
+
"subagentEmptyHint": "F2T6aa_subagentEmptyHint",
|
|
8218
|
+
"jobsLabel": "F2T6aa_jobsLabel",
|
|
7835
8219
|
"jobsKill": "F2T6aa_jobsKill",
|
|
7836
|
-
"
|
|
8220
|
+
"subagent": "F2T6aa_subagent",
|
|
8221
|
+
"jobsRow": "F2T6aa_jobsRow",
|
|
8222
|
+
"subagentDot": "F2T6aa_subagentDot",
|
|
8223
|
+
"jobsPanePre": "F2T6aa_jobsPanePre",
|
|
7837
8224
|
"jobsPaneClose": "F2T6aa_jobsPaneClose",
|
|
7838
|
-
"
|
|
7839
|
-
"jobs": "F2T6aa_jobs",
|
|
7840
|
-
"jobsRowSelected": "F2T6aa_jobsRowSelected",
|
|
7841
|
-
"subagentEmptyHint": "F2T6aa_subagentEmptyHint",
|
|
7842
|
-
"subagentError": "F2T6aa_subagentError",
|
|
7843
|
-
"jobsContent": "F2T6aa_jobsContent",
|
|
8225
|
+
"jobsRowSettled": "F2T6aa_jobsRowSettled",
|
|
7844
8226
|
"subagentLabel": "F2T6aa_subagentLabel",
|
|
7845
|
-
"
|
|
7846
|
-
"
|
|
7847
|
-
"
|
|
7848
|
-
"subagentChildren": "F2T6aa_subagentChildren",
|
|
7849
|
-
"jobsPane": "F2T6aa_jobsPane",
|
|
8227
|
+
"jobsHeader": "F2T6aa_jobsHeader",
|
|
8228
|
+
"jobsCount": "F2T6aa_jobsCount",
|
|
8229
|
+
"jobsKillArmed": "F2T6aa_jobsKillArmed",
|
|
7850
8230
|
"jobsPaneError": "F2T6aa_jobsPaneError",
|
|
7851
|
-
"
|
|
7852
|
-
"
|
|
7853
|
-
"
|
|
7854
|
-
"
|
|
7855
|
-
"subagentLiveText": "F2T6aa_subagentLiveText",
|
|
7856
|
-
"subagentNode": "F2T6aa_subagentNode",
|
|
7857
|
-
"jobsPaneLabel": "F2T6aa_jobsPaneLabel",
|
|
7858
|
-
"subagentCount": "F2T6aa_subagentCount",
|
|
8231
|
+
"subagentBody": "F2T6aa_subagentBody",
|
|
8232
|
+
"jobsLabelLine": "F2T6aa_jobsLabelLine",
|
|
8233
|
+
"jobsPaneDot": "F2T6aa_jobsPaneDot",
|
|
8234
|
+
"subagentRowLoading": "F2T6aa_subagentRowLoading",
|
|
7859
8235
|
"subagentLiveArgs": "F2T6aa_subagentLiveArgs",
|
|
7860
|
-
"
|
|
7861
|
-
"jobsHeader": "F2T6aa_jobsHeader",
|
|
7862
|
-
"subagentHeader": "F2T6aa_subagentHeader",
|
|
7863
|
-
"subagentSecondary": "F2T6aa_subagentSecondary",
|
|
8236
|
+
"subagentLive": "F2T6aa_subagentLive",
|
|
7864
8237
|
"subagentErrorRetry": "F2T6aa_subagentErrorRetry",
|
|
7865
|
-
"subagent": "F2T6aa_subagent",
|
|
7866
8238
|
"subagentRow": "F2T6aa_subagentRow",
|
|
7867
|
-
"
|
|
7868
|
-
"
|
|
7869
|
-
"
|
|
8239
|
+
"jobs": "F2T6aa_jobs",
|
|
8240
|
+
"jobsPaneHeader": "F2T6aa_jobsPaneHeader",
|
|
8241
|
+
"subagentLiveTool": "F2T6aa_subagentLiveTool",
|
|
8242
|
+
"subagentRowDisabled": "F2T6aa_subagentRowDisabled",
|
|
8243
|
+
"jobsPaneStatus": "F2T6aa_jobsPaneStatus",
|
|
8244
|
+
"jobsSecondary": "F2T6aa_jobsSecondary",
|
|
8245
|
+
"subagentContent": "F2T6aa_subagentContent",
|
|
8246
|
+
"jobsContent": "F2T6aa_jobsContent",
|
|
8247
|
+
"subagentEmpty": "F2T6aa_subagentEmpty"
|
|
7870
8248
|
};
|
|
7871
8249
|
//#endregion
|
|
7872
8250
|
//#region src/client/SubagentView.tsx
|
|
@@ -8973,44 +9351,44 @@ Mode: this is a continuable side conversation. Your answers stay in this side th
|
|
|
8973
9351
|
document.head.appendChild(tag);
|
|
8974
9352
|
}
|
|
8975
9353
|
var SideChatView_module_css_default = {
|
|
8976
|
-
"sidechatHeroTitle": "_64UoUa_sidechatHeroTitle",
|
|
8977
|
-
"sidechatComposerInput": "_64UoUa_sidechatComposerInput",
|
|
8978
|
-
"sidechatScroll": "_64UoUa_sidechatScroll",
|
|
8979
|
-
"sidechatFadeIn": "_64UoUa_sidechatFadeIn",
|
|
8980
|
-
"sidechatRowBody": "_64UoUa_sidechatRowBody",
|
|
8981
|
-
"sidechatDetailHeader": "_64UoUa_sidechatDetailHeader",
|
|
8982
|
-
"sidechatIconBtn": "_64UoUa_sidechatIconBtn",
|
|
8983
|
-
"sidechatHero": "_64UoUa_sidechatHero",
|
|
8984
|
-
"sidechatRowProse": "_64UoUa_sidechatRowProse",
|
|
8985
9354
|
"sidechatPrimaryBtn": "_64UoUa_sidechatPrimaryBtn",
|
|
8986
|
-
"
|
|
8987
|
-
"
|
|
8988
|
-
"
|
|
9355
|
+
"sidechatHint": "_64UoUa_sidechatHint",
|
|
9356
|
+
"sidechatComposerBar": "_64UoUa_sidechatComposerBar",
|
|
9357
|
+
"sidechatHeaderSpacer": "_64UoUa_sidechatHeaderSpacer",
|
|
8989
9358
|
"sidechatBtnIn": "_64UoUa_sidechatBtnIn",
|
|
8990
|
-
"
|
|
9359
|
+
"sidechatIconBtn": "_64UoUa_sidechatIconBtn",
|
|
9360
|
+
"sidechatScroll": "_64UoUa_sidechatScroll",
|
|
8991
9361
|
"sidechatRowSummary": "_64UoUa_sidechatRowSummary",
|
|
9362
|
+
"sidechatError": "_64UoUa_sidechatError",
|
|
9363
|
+
"sidechatFadeIn": "_64UoUa_sidechatFadeIn",
|
|
9364
|
+
"sidechatAssistant": "_64UoUa_sidechatAssistant",
|
|
8992
9365
|
"sidechatRowCode": "_64UoUa_sidechatRowCode",
|
|
8993
|
-
"sidechatStatus": "_64UoUa_sidechatStatus",
|
|
8994
|
-
"sidechatRow": "_64UoUa_sidechatRow",
|
|
8995
|
-
"sidechatComposerBar": "_64UoUa_sidechatComposerBar",
|
|
8996
|
-
"sidechatHeaderSpacer": "_64UoUa_sidechatHeaderSpacer",
|
|
8997
9366
|
"sidechatSendBtn": "_64UoUa_sidechatSendBtn",
|
|
8998
|
-
"
|
|
8999
|
-
"sidechatRowMeta": "_64UoUa_sidechatRowMeta",
|
|
9000
|
-
"sidechatRowFailed": "_64UoUa_sidechatRowFailed",
|
|
9001
|
-
"sidechatAgentBadge": "_64UoUa_sidechatAgentBadge",
|
|
9002
|
-
"sidechatHeroDesc": "_64UoUa_sidechatHeroDesc",
|
|
9367
|
+
"sidechatHeroTitle": "_64UoUa_sidechatHeroTitle",
|
|
9003
9368
|
"sidechatUser": "_64UoUa_sidechatUser",
|
|
9004
|
-
"
|
|
9005
|
-
"
|
|
9369
|
+
"sidechatRowProse": "_64UoUa_sidechatRowProse",
|
|
9370
|
+
"sidechatRowStatic": "_64UoUa_sidechatRowStatic",
|
|
9371
|
+
"sidechatStatus": "_64UoUa_sidechatStatus",
|
|
9372
|
+
"sidechatRowMeta": "_64UoUa_sidechatRowMeta",
|
|
9006
9373
|
"sidechat": "_64UoUa_sidechat",
|
|
9374
|
+
"sidechatRowChevron": "_64UoUa_sidechatRowChevron",
|
|
9007
9375
|
"sidechatRowLabel": "_64UoUa_sidechatRowLabel",
|
|
9008
|
-
"sidechatRowMono": "_64UoUa_sidechatRowMono",
|
|
9009
|
-
"sidechatRowIn": "_64UoUa_sidechatRowIn",
|
|
9010
9376
|
"sidechatComposerMeta": "_64UoUa_sidechatComposerMeta",
|
|
9011
|
-
"
|
|
9377
|
+
"sidechatSweep": "_64UoUa_sidechatSweep",
|
|
9378
|
+
"sidechatRowIn": "_64UoUa_sidechatRowIn",
|
|
9379
|
+
"sidechatRowFailed": "_64UoUa_sidechatRowFailed",
|
|
9380
|
+
"sidechatComposerInput": "_64UoUa_sidechatComposerInput",
|
|
9381
|
+
"sidechatRowMono": "_64UoUa_sidechatRowMono",
|
|
9382
|
+
"sidechatHeroDesc": "_64UoUa_sidechatHeroDesc",
|
|
9383
|
+
"sidechatStatusText": "_64UoUa_sidechatStatusText",
|
|
9384
|
+
"sidechatAgentBadge": "_64UoUa_sidechatAgentBadge",
|
|
9385
|
+
"sidechatDetailHeader": "_64UoUa_sidechatDetailHeader",
|
|
9386
|
+
"sidechatRow": "_64UoUa_sidechatRow",
|
|
9387
|
+
"sidechatRowLine": "_64UoUa_sidechatRowLine",
|
|
9388
|
+
"sidechatRowBody": "_64UoUa_sidechatRowBody",
|
|
9012
9389
|
"sidechatHeaderDot": "_64UoUa_sidechatHeaderDot",
|
|
9013
|
-
"
|
|
9390
|
+
"sidechatShimmerText": "_64UoUa_sidechatShimmerText",
|
|
9391
|
+
"sidechatHero": "_64UoUa_sidechatHero",
|
|
9014
9392
|
"sidechatComposer": "_64UoUa_sidechatComposer"
|
|
9015
9393
|
};
|
|
9016
9394
|
//#endregion
|
|
@@ -12062,7 +12440,7 @@ Mode: this is a continuable side conversation. Your answers stay in this side th
|
|
|
12062
12440
|
}
|
|
12063
12441
|
/** Render the content of one tab (dispatched by type). */
|
|
12064
12442
|
const TabContent = (0, react.memo)(function TabContent(props) {
|
|
12065
|
-
const { tab, effectiveTabId, sessionId, cwd, expanded, revealed, onToggleDir, onReferenceFile, ctx, store, visible, onSubagentJump, onOpenDiff } = props;
|
|
12443
|
+
const { tab, effectiveTabId, sessionId, cwd, expanded, revealed, onToggleDir, onReferenceFile, ctx, store, visible, onSubagentJump, onOpenDiff, onPathRenamed, onPathRemoved } = props;
|
|
12066
12444
|
const scope = {
|
|
12067
12445
|
sessionId,
|
|
12068
12446
|
cwd
|
|
@@ -12935,6 +13313,39 @@ Mode: this is a continuable side conversation. Your answers stay in this side th
|
|
|
12935
13313
|
sessionId,
|
|
12936
13314
|
cwd
|
|
12937
13315
|
]);
|
|
13316
|
+
/** Tree-row rename reconciliation: retarget every open tab whose path was
|
|
13317
|
+
* the renamed file (the editor content survives and later saves land on
|
|
13318
|
+
* the new path; the title follows the new base name). */
|
|
13319
|
+
const onPathRenamed = (0, react.useCallback)((oldPath, newPath) => {
|
|
13320
|
+
const service = ctx.get("betterSidebar");
|
|
13321
|
+
if (service === void 0) return;
|
|
13322
|
+
const snapshot = store.getSnapshot().state;
|
|
13323
|
+
if (snapshot === void 0) return;
|
|
13324
|
+
for (const leaf of allLeaves(snapshot.splits)) for (const tab of leaf.tabs) if (tab.path === oldPath) service.updateTab(tab.id, {
|
|
13325
|
+
path: newPath,
|
|
13326
|
+
title: baseName$1(newPath)
|
|
13327
|
+
});
|
|
13328
|
+
for (const float of snapshot.floats) if (float.tab.path === oldPath) service.updateTab(float.tab.id, {
|
|
13329
|
+
path: newPath,
|
|
13330
|
+
title: baseName$1(newPath)
|
|
13331
|
+
});
|
|
13332
|
+
}, [ctx, store]);
|
|
13333
|
+
/** Tree-row delete reconciliation: close every open tab at or under the
|
|
13334
|
+
* removed path (a stale tab's next save would fail against a missing
|
|
13335
|
+
* path). Floating tabs are as open as docked ones. */
|
|
13336
|
+
const onPathRemoved = (0, react.useCallback)((target) => {
|
|
13337
|
+
const service = ctx.get("betterSidebar");
|
|
13338
|
+
if (service === void 0) return;
|
|
13339
|
+
const snapshot = store.getSnapshot().state;
|
|
13340
|
+
if (snapshot === void 0) return;
|
|
13341
|
+
const tabs = [];
|
|
13342
|
+
for (const leaf of allLeaves(snapshot.splits)) tabs.push(...leaf.tabs);
|
|
13343
|
+
for (const float of snapshot.floats) tabs.push(float.tab);
|
|
13344
|
+
for (const tab of tabs) {
|
|
13345
|
+
const path = tab.path;
|
|
13346
|
+
if (path !== void 0 && (path === target || isWithinWorkspace(target, path))) service.closeTab(tab.id);
|
|
13347
|
+
}
|
|
13348
|
+
}, [ctx, store]);
|
|
12938
13349
|
if (state === void 0 || sessionId === void 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
12939
13350
|
"data-dsh-panel-host": true,
|
|
12940
13351
|
...osFileDragShield,
|
|
@@ -12986,6 +13397,12 @@ Mode: this is a continuable side conversation. Your answers stay in this side th
|
|
|
12986
13397
|
* strip must never break because a plugin's badge computation failed.
|
|
12987
13398
|
*/
|
|
12988
13399
|
const tabBadgeOf = (tab) => {
|
|
13400
|
+
if (isAgentTabId(tab.id)) {
|
|
13401
|
+
if (state.agentWaits?.[agentUuidOf(tab.id)] !== void 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
13402
|
+
className: sidebar_module_css_default.tabBadge,
|
|
13403
|
+
children: "⏳"
|
|
13404
|
+
});
|
|
13405
|
+
}
|
|
12989
13406
|
const descriptor = ctx.get("betterSidebar")?.getTab(tab.type);
|
|
12990
13407
|
if (descriptor?.badge === void 0) return null;
|
|
12991
13408
|
let value;
|
|
@@ -13026,6 +13443,8 @@ Mode: this is a continuable side conversation. Your answers stay in this side th
|
|
|
13026
13443
|
store.reduce((s) => toggleExpanded(s, path));
|
|
13027
13444
|
},
|
|
13028
13445
|
onReferenceFile: referenceInChat,
|
|
13446
|
+
onPathRenamed,
|
|
13447
|
+
onPathRemoved,
|
|
13029
13448
|
ctx,
|
|
13030
13449
|
store,
|
|
13031
13450
|
visible: placement === "float" ? true : state.panelOpen && active,
|