dsh-vscode-workbench 0.1.12 → 0.1.14
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/README.en.md +11 -6
- package/README.md +11 -6
- package/lib/client.js +131 -81
- package/lib/client.js.map +1 -1
- package/lib/index.js +92 -2
- package/lib/index.js.map +1 -1
- package/lib/types/client/Workbench.d.ts +8 -0
- package/lib/types/watch-ignore.d.ts +8 -0
- package/package.json +17 -16
- package/src/client/Workbench.tsx +27 -6
- package/src/client/styles.ts +7 -3
- package/src/index.ts +9 -2
- package/src/watch-ignore.ts +63 -0
package/README.en.md
CHANGED
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
- **Preview**: Markdown source, outline, relative links, and images; built-in PDF paging and zoom plus DOCX rendering, with DOC/ODT download support.
|
|
40
40
|
- **Search and Git**: `@vscode/ripgrep` supports case, whole-word, regex, and path filters; Git covers stage, unstage, discard, commit, branches, diffs, commit files, and the graph.
|
|
41
41
|
- **Terminal**: `node-pty` and xterm with up to eight sessions, rename, a right-side switcher, splits, ANSI output, and Ctrl+C.
|
|
42
|
-
- **Layout and DSH**: the primary view, terminal panel, and DSH conversation sidebar can be shown and resized independently; settings manage theme and
|
|
43
|
-
- **Sync and restore**: workspace file changes stream to the UI
|
|
42
|
+
- **Layout and DSH**: the primary view, terminal panel, and DSH conversation sidebar can be shown and resized independently; settings manage theme, widths, and watcher exclusions.
|
|
43
|
+
- **Sync and restore**: workspace file changes stream to the UI after skipping large trees such as `node_modules`, `vendor`, `third_party`, `build`, and `dist`, with extra exclusions configurable in settings; reload restores views, tabs, expanded directories, panels, and layout.
|
|
44
44
|
|
|
45
45
|
The workbench mounts through the official `sidebar.footer.action` and `shell.overlay` extension points. It does not replace or disable `ui-layout`.
|
|
46
46
|
|
|
@@ -64,10 +64,10 @@ The workbench mounts through the official `sidebar.footer.action` and `shell.ove
|
|
|
64
64
|
|
|
65
65
|
## Installation
|
|
66
66
|
|
|
67
|
-
Plugin 0.1.
|
|
67
|
+
Plugin 0.1.14 targets DeepSeek Harness `0.2.2-rc.1` (Cordis `4.1.0`). Update Harness before installing; see the table below for older plugin versions.
|
|
68
68
|
|
|
69
69
|
```bash
|
|
70
|
-
npm i -g @deepseek-ai/dsh@0.2.
|
|
70
|
+
npm i -g @deepseek-ai/dsh@0.2.2-rc.1
|
|
71
71
|
```
|
|
72
72
|
|
|
73
73
|
```bash
|
|
@@ -138,16 +138,17 @@ The plugin marketplace files this under the generic `plugin-side install failure
|
|
|
138
138
|
|
|
139
139
|
| Plugin version | Required Harness |
|
|
140
140
|
| --- | --- |
|
|
141
|
+
| 0.1.14 | `0.2.2-rc.1` (Cordis `4.1.0`, default baseline); also checked with `0.2.1-rc.5` (Cordis `4.0.5`) |
|
|
141
142
|
| 0.1.12 | `0.2.1-rc.5` (Cordis `4.0.5`, default baseline); also checked with `0.2.2-rc.1` (Cordis `4.1.0`, Node.js ≥24.9) |
|
|
142
143
|
| 0.1.11 | `0.2.1-rc.5` (Cordis `4.0.5`, default baseline); also checked with `0.2.2-rc.1` (Cordis `4.1.0`, Node.js ≥24.9) |
|
|
143
144
|
| 0.1.10 | `0.2.1-rc.4` (Cordis `4.0.5`, previous validation baseline) |
|
|
144
145
|
| 0.1.9 | `0.2.1-alpha.3` (Cordis `4.0.5-alpha.2`, previous validation baseline) |
|
|
145
146
|
| 0.1.8 | `0.1.1-rc.2` |
|
|
146
147
|
|
|
147
|
-
No plugin version runs on Harness `0.2.0-rc.2`: 0.1.9 needs the `workingDirectory` service that first shipped in Harness `0.2.1-alpha.2`, while 0.1.8 only targets `0.1.1-rc.2`. Update Harness to `0.2.
|
|
148
|
+
No plugin version runs on Harness `0.2.0-rc.2`: 0.1.9 needs the `workingDirectory` service that first shipped in Harness `0.2.1-alpha.2`, while 0.1.8 only targets `0.1.1-rc.2`. Update Harness to `0.2.2-rc.1` before installing plugin 0.1.14, for example with a global npm install:
|
|
148
149
|
|
|
149
150
|
```bash
|
|
150
|
-
npm i -g @deepseek-ai/dsh@0.2.
|
|
151
|
+
npm i -g @deepseek-ai/dsh@0.2.2-rc.1
|
|
151
152
|
```
|
|
152
153
|
|
|
153
154
|
`dsh plugin allow-version` only bypasses the version gate; it does not supply the missing host services, so the plugin still fails to load on `0.2.0-rc.2`. Update Harness instead.
|
|
@@ -160,6 +161,10 @@ Both dependency environments pass type checking, 52 tests and the build, coverin
|
|
|
160
161
|
|
|
161
162
|
Version 0.1.12 focuses on reliability and macOS usability. It preserves and restores unsaved workspace drafts, hardens concurrent saves and file operations, adds a draggable title bar with correct window clearance, and hides the native DSH sidebar chrome while the workbench is active. WebSocket URLs now follow the DSH transport, and terminal startup repairs the `spawn-helper` execute bits. PDF, DOCX, image and Markdown previews were verified in DSH Desktop.
|
|
162
163
|
|
|
164
|
+
Version 0.1.14 fixes the overlapping header on Windows Desktop: DSH 0.2 reserves a 40px custom title bar at the top of the window and draws its App and Edit menus there. The workbench now honors `data-windows-titlebar`, starts below that bar, and no longer overlaps sidebar titles such as Source Control, while the title bar drag area remains usable. The development and test baseline moves to Harness `0.2.2-rc.1` / Cordis `4.1.0` while keeping the compatibility range for `0.2.1-rc.5` / Cordis `4.0.5`.
|
|
165
|
+
|
|
166
|
+
Version 0.1.14 also targets large repositories and crowded tab strips. The file watcher skips large trees such as `vendor`, `third_party`/`third_part`, `build`, `dist`, `out`, `target`, `.venv`, and `__pycache__` by default, with extra exclusions configurable in workbench settings; running out of watches now disables auto-refresh instead of crashing DSH at the inotify limit. Tabs stay on one line with ellipsis and no native scrollbar, the close-all action stays pinned to the right, and the active tab scrolls into view. The bottom status bar is hidden by default and can be re-enabled in settings.
|
|
167
|
+
|
|
163
168
|
- Client contributions use `ui-renderer` slots and select the current session through `ui-session`'s `mainView` retain count, replacing the removed `dsh-client-runtime`.
|
|
164
169
|
- Files, search, Git and new terminals use `workingDirectory.get(session)`. Workspace selection follows the working-directory projection; missing sessions return 404.
|
|
165
170
|
- HTTP and WebSocket routes share Harness authentication and Host/Origin checks through `connection.requestRejection()`. Terminals also require loopback access.
|
package/README.md
CHANGED
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
- **预览**:Markdown 支持源码、大纲、相对链接和图片;内置 PDF 翻页缩放与 DOCX 渲染,DOC/ODT 可直接下载打开。
|
|
40
40
|
- **搜索与 Git**:`@vscode/ripgrep` 支持大小写、全词、正则和路径筛选;Git 提供暂存、撤销、丢弃、提交、分支、差异、提交文件和提交图表。
|
|
41
41
|
- **终端**:基于 `node-pty` 与 xterm,支持最多 8 个会话、会话重命名、右侧切换、分屏、ANSI 输出和 Ctrl+C。
|
|
42
|
-
- **布局与 DSH**:左侧视图、终端面板和右侧 DSH
|
|
43
|
-
-
|
|
42
|
+
- **布局与 DSH**:左侧视图、终端面板和右侧 DSH 对话栏可独立显示和调整;设置面板管理主题、各栏宽度和文件监听排除项。
|
|
43
|
+
- **同步与恢复**:工作区文件变化实时推送,默认跳过 `node_modules`、`vendor`、`third_party`、`build`、`dist` 等大目录,可在设置里追加排除项;刷新后恢复活动视图、标签、目录展开、面板和布局。
|
|
44
44
|
|
|
45
45
|
工作台通过官方 `sidebar.footer.action` 与 `shell.overlay` 扩展点挂载,不替换或卸载 `ui-layout`。
|
|
46
46
|
|
|
@@ -64,10 +64,10 @@
|
|
|
64
64
|
|
|
65
65
|
## 安装
|
|
66
66
|
|
|
67
|
-
插件 0.1.
|
|
67
|
+
插件 0.1.14 适配 DeepSeek Harness `0.2.2-rc.1`(Cordis `4.1.0`)。请先更新 Harness,再安装插件;旧版对应关系见下表。
|
|
68
68
|
|
|
69
69
|
```bash
|
|
70
|
-
npm i -g @deepseek-ai/dsh@0.2.
|
|
70
|
+
npm i -g @deepseek-ai/dsh@0.2.2-rc.1
|
|
71
71
|
```
|
|
72
72
|
|
|
73
73
|
```bash
|
|
@@ -138,16 +138,17 @@ dsh: nothing was installed.
|
|
|
138
138
|
|
|
139
139
|
| 插件版本 | 需要的 Harness |
|
|
140
140
|
| --- | --- |
|
|
141
|
+
| 0.1.14 | `0.2.2-rc.1`(Cordis `4.1.0`,默认基线);另验证 `0.2.1-rc.5`(Cordis `4.0.5`) |
|
|
141
142
|
| 0.1.12 | `0.2.1-rc.5`(Cordis `4.0.5`,默认基线);另验证 `0.2.2-rc.1`(Cordis `4.1.0`,Node.js ≥24.9) |
|
|
142
143
|
| 0.1.11 | `0.2.1-rc.5`(Cordis `4.0.5`,默认基线);另验证 `0.2.2-rc.1`(Cordis `4.1.0`,Node.js ≥24.9) |
|
|
143
144
|
| 0.1.10 | `0.2.1-rc.4`(Cordis `4.0.5`,旧版验证基线) |
|
|
144
145
|
| 0.1.9 | `0.2.1-alpha.3`(Cordis `4.0.5-alpha.2`,旧版验证基线) |
|
|
145
146
|
| 0.1.8 | `0.1.1-rc.2` |
|
|
146
147
|
|
|
147
|
-
Harness `0.2.0-rc.2` 上没有可用的插件版本:0.1.9 依赖 Harness `0.2.1-alpha.2` 才引入的 `workingDirectory` 服务,0.1.8 又只适配 `0.1.1-rc.2`。请先把 Harness 升级到 `0.2.
|
|
148
|
+
Harness `0.2.0-rc.2` 上没有可用的插件版本:0.1.9 依赖 Harness `0.2.1-alpha.2` 才引入的 `workingDirectory` 服务,0.1.8 又只适配 `0.1.1-rc.2`。请先把 Harness 升级到 `0.2.2-rc.1` 再安装 0.1.14,例如 npm 全局安装时:
|
|
148
149
|
|
|
149
150
|
```bash
|
|
150
|
-
npm i -g @deepseek-ai/dsh@0.2.
|
|
151
|
+
npm i -g @deepseek-ai/dsh@0.2.2-rc.1
|
|
151
152
|
```
|
|
152
153
|
|
|
153
154
|
`dsh plugin allow-version` 只跳过版本闸门,不会补上缺失的宿主服务,在 `0.2.0-rc.2` 上插件仍然加载不起来;请优先升级 Harness。
|
|
@@ -160,6 +161,10 @@ npm i -g @deepseek-ai/dsh@0.2.1-rc.5
|
|
|
160
161
|
|
|
161
162
|
0.1.12 在此基础上集中修复可靠性与 macOS 使用问题:保留并恢复工作区草稿,加强并发保存和文件操作;补齐可拖动标题栏与窗口留白,修正活动工作台的 DSH 原生侧栏遮挡;WebSocket 地址跟随 DSH transport,终端启动时自动修复 `spawn-helper` 执行位。PDF、DOCX、图片和 Markdown 预览已在 DSH Desktop 中实际验证。
|
|
162
163
|
|
|
164
|
+
0.1.14 修复 Windows Desktop 的顶部叠字:DSH 0.2 的 Windows 自定义标题栏会在窗口顶部预留 40px,并绘制「应用」「编辑」菜单;工作台现在识别 `data-windows-titlebar`,从标题栏下沿开始布局,不再与「源代码管理」等侧栏标题重叠,同时保留标题栏的拖动区域。开发与测试基线同步升级到 Harness `0.2.2-rc.1` / Cordis `4.1.0`,并在 `0.2.1-rc.5` / Cordis `4.0.5` 上保留兼容范围。
|
|
165
|
+
|
|
166
|
+
0.1.14 同时处理大仓库与多标签场景:文件监听默认跳过 `vendor`、`third_party`/`third_part`、`build`、`dist`、`out`、`target`、`.venv`、`__pycache__` 等大目录,并允许在工作台设置里追加排除项;监听资源耗尽时只停用自动刷新,不再让 DSH 因 inotify 上限崩溃。标签栏改为单行省略并隐藏原生滚动条,关闭全部按钮固定右侧,切换标签时自动滚入可视区域。底部状态栏默认隐藏,可在设置中重新开启。
|
|
167
|
+
|
|
163
168
|
- 客户端通过 `ui-renderer` 提供的槽位服务注册界面,使用 `ui-session` 的 `mainView` 引用选择当前会话;不再依赖已移除的 `dsh-client-runtime`。
|
|
164
169
|
- 文件、搜索、Git 和新建终端通过 `workingDirectory.get(session)` 使用会话当前目录,跟随工作目录投影切换;失效会话返回 404。
|
|
165
170
|
- HTTP 与 WebSocket 接口使用 `connection.requestRejection()`,共享 Harness 登录认证及 Host/Origin 校验;终端额外保留 loopback 限制。
|
package/lib/client.js
CHANGED
|
@@ -46404,6 +46404,12 @@ section.${c}>footer { z-index: 1; }
|
|
|
46404
46404
|
const path = tab.title ?? tab.diffSourcePath ?? tab.path.replace(/^diff:/, "");
|
|
46405
46405
|
return path.split(/[\\/]/).at(-1) ?? path;
|
|
46406
46406
|
}
|
|
46407
|
+
/** Return the horizontal scroll offset that keeps an active tab inside the tab strip. */
|
|
46408
|
+
function tabScrollLeft(scrollLeft, viewport, tab) {
|
|
46409
|
+
if (tab.left < viewport.left) return scrollLeft - (viewport.left - tab.left);
|
|
46410
|
+
if (tab.right > viewport.right) return scrollLeft + (tab.right - viewport.right);
|
|
46411
|
+
return scrollLeft;
|
|
46412
|
+
}
|
|
46407
46413
|
/** Invoke `fn` at most once per `ms` after the latest call, always running the freshest callback. */
|
|
46408
46414
|
function useDebouncedCallback(fn, ms) {
|
|
46409
46415
|
const fnRef = (0, react.useRef)(fn);
|
|
@@ -47604,13 +47610,16 @@ section.${c}>footer { z-index: 1; }
|
|
|
47604
47610
|
const [panelHeight, setPanelHeight] = (0, react.useState)(260);
|
|
47605
47611
|
const [sideWidth, setSideWidth] = (0, react.useState)(210);
|
|
47606
47612
|
const [primarySideVisible, setPrimarySideVisible] = (0, react.useState)(() => localStorage.getItem("dvw:primary-side-visible") !== "closed");
|
|
47607
|
-
const [statusVisible, setStatusVisible] = (0, react.useState)(() => localStorage.getItem("dvw:status-visible")
|
|
47613
|
+
const [statusVisible, setStatusVisible] = (0, react.useState)(() => localStorage.getItem("dvw:status-bar-visible") === "open");
|
|
47608
47614
|
const [settingsOpen, setSettingsOpen] = (0, react.useState)(false);
|
|
47609
47615
|
const [chatWidth, setChatWidth] = (0, react.useState)(() => Math.max(400, Math.min(720, Math.round(Number(localStorage.getItem("dvw:dsh-chat-width")) || 420))));
|
|
47610
47616
|
const [chatVisible, setChatVisible] = (0, react.useState)(() => localStorage.getItem("dvw:dsh-chat-visible") !== "closed");
|
|
47611
47617
|
const [outlineVisible, setOutlineVisible] = (0, react.useState)(() => localStorage.getItem("dvw:outline") !== "closed");
|
|
47618
|
+
const [watchIgnores, setWatchIgnores] = (0, react.useState)(() => localStorage.getItem("dvw:watch-ignore") ?? "");
|
|
47619
|
+
const [appliedWatchIgnores, setAppliedWatchIgnores] = (0, react.useState)(() => localStorage.getItem("dvw:watch-ignore") ?? "");
|
|
47612
47620
|
const tabsRef = (0, react.useRef)(tabs);
|
|
47613
47621
|
tabsRef.current = tabs;
|
|
47622
|
+
const tabListRef = (0, react.useRef)(null);
|
|
47614
47623
|
const workspaceRequests = (0, react.useRef)(new WorkspaceRequestScope());
|
|
47615
47624
|
const loadingTabs = (0, react.useRef)(/* @__PURE__ */ new Map());
|
|
47616
47625
|
const dshDark = useDshDarkTheme();
|
|
@@ -47624,7 +47633,12 @@ section.${c}>footer { z-index: 1; }
|
|
|
47624
47633
|
(0, react.useEffect)(() => localStorage.setItem("dvw:dsh-chat-visible", chatVisible ? "open" : "closed"), [chatVisible]);
|
|
47625
47634
|
(0, react.useEffect)(() => localStorage.setItem("dvw:dsh-chat-width", String(Math.round(chatWidth))), [chatWidth]);
|
|
47626
47635
|
(0, react.useEffect)(() => localStorage.setItem("dvw:primary-side-visible", primarySideVisible ? "open" : "closed"), [primarySideVisible]);
|
|
47627
|
-
(0, react.useEffect)(() => localStorage.setItem("dvw:status-visible", statusVisible ? "open" : "closed"), [statusVisible]);
|
|
47636
|
+
(0, react.useEffect)(() => localStorage.setItem("dvw:status-bar-visible", statusVisible ? "open" : "closed"), [statusVisible]);
|
|
47637
|
+
(0, react.useEffect)(() => localStorage.setItem("dvw:watch-ignore", watchIgnores), [watchIgnores]);
|
|
47638
|
+
(0, react.useEffect)(() => {
|
|
47639
|
+
const timer = setTimeout(() => setAppliedWatchIgnores(watchIgnores), 400);
|
|
47640
|
+
return () => clearTimeout(timer);
|
|
47641
|
+
}, [watchIgnores]);
|
|
47628
47642
|
(0, react.useEffect)(() => {
|
|
47629
47643
|
if (!snapshot.visible) return;
|
|
47630
47644
|
document.body.setAttribute("data-dvw-workbench-active", "");
|
|
@@ -47797,7 +47811,10 @@ section.${c}>footer { z-index: 1; }
|
|
|
47797
47811
|
}, [sessionId]);
|
|
47798
47812
|
(0, react.useEffect)(() => {
|
|
47799
47813
|
if (!snapshot.visible || sessionId === void 0 || workspace === void 0) return;
|
|
47800
|
-
const
|
|
47814
|
+
const query = new URLSearchParams({ sessionId });
|
|
47815
|
+
const ignores = appliedWatchIgnores.trim();
|
|
47816
|
+
if (ignores !== "") query.set("ignore", ignores);
|
|
47817
|
+
const url = websocketUrl(`/dsh-vscode/ws/files?${query.toString()}`);
|
|
47801
47818
|
if (url === void 0) return;
|
|
47802
47819
|
const ws = new WebSocket(url);
|
|
47803
47820
|
let closed = false;
|
|
@@ -47824,7 +47841,8 @@ section.${c}>footer { z-index: 1; }
|
|
|
47824
47841
|
snapshot.visible,
|
|
47825
47842
|
sessionId,
|
|
47826
47843
|
workspace,
|
|
47827
|
-
loadTab
|
|
47844
|
+
loadTab,
|
|
47845
|
+
appliedWatchIgnores
|
|
47828
47846
|
]);
|
|
47829
47847
|
(0, react.useEffect)(() => {
|
|
47830
47848
|
if (sessionId === void 0 || active === void 0 || workspace === void 0) return;
|
|
@@ -47836,6 +47854,14 @@ section.${c}>footer { z-index: 1; }
|
|
|
47836
47854
|
tabs,
|
|
47837
47855
|
loadTab
|
|
47838
47856
|
]);
|
|
47857
|
+
(0, react.useEffect)(() => {
|
|
47858
|
+
const list = tabListRef.current;
|
|
47859
|
+
const selected = list?.querySelector(".dvw-tab[data-active=\"true\"]");
|
|
47860
|
+
if (list === null || selected === null || selected === void 0) return;
|
|
47861
|
+
const listRect = list.getBoundingClientRect();
|
|
47862
|
+
const tabRect = selected.getBoundingClientRect();
|
|
47863
|
+
list.scrollLeft = tabScrollLeft(list.scrollLeft, listRect, tabRect);
|
|
47864
|
+
}, [active, tabs.length]);
|
|
47839
47865
|
const open = (path, line, column) => {
|
|
47840
47866
|
if (sessionId !== void 0) openForWorkspace(path, line, column);
|
|
47841
47867
|
};
|
|
@@ -48009,82 +48035,101 @@ section.${c}>footer { z-index: 1; }
|
|
|
48009
48035
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Icon, { name: "close" })
|
|
48010
48036
|
})] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
48011
48037
|
className: "dvw-settings-body",
|
|
48012
|
-
children: [
|
|
48013
|
-
/* @__PURE__ */ (0, react_jsx_runtime.
|
|
48014
|
-
|
|
48015
|
-
|
|
48016
|
-
|
|
48017
|
-
|
|
48018
|
-
[
|
|
48019
|
-
|
|
48020
|
-
|
|
48021
|
-
|
|
48022
|
-
|
|
48023
|
-
|
|
48038
|
+
children: [
|
|
48039
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", { children: [
|
|
48040
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", { children: "外观" }),
|
|
48041
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", { children: "颜色主题" }),
|
|
48042
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
48043
|
+
className: "dvw-settings-themes",
|
|
48044
|
+
children: [
|
|
48045
|
+
["dsh", "跟随 DSH"],
|
|
48046
|
+
["dark", "深色"],
|
|
48047
|
+
["light", "浅色"]
|
|
48048
|
+
].map(([value, label]) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
48049
|
+
"data-active": theme === value,
|
|
48050
|
+
onClick: () => setTheme(value),
|
|
48051
|
+
children: [
|
|
48052
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: `dvw-theme-swatch ${value}` }),
|
|
48053
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: label }),
|
|
48054
|
+
theme === value && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Icon, { name: "check" })
|
|
48055
|
+
]
|
|
48056
|
+
}, value))
|
|
48057
|
+
})
|
|
48058
|
+
] }),
|
|
48059
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", { children: [
|
|
48060
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", { children: "布局" }),
|
|
48061
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
48062
|
+
className: "dvw-setting-check",
|
|
48063
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
48064
|
+
type: "checkbox",
|
|
48065
|
+
checked: primarySideVisible,
|
|
48066
|
+
onChange: (event) => setPrimarySideVisible(event.target.checked)
|
|
48067
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "显示左侧视图" })]
|
|
48068
|
+
}),
|
|
48069
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
48070
|
+
className: "dvw-setting-check",
|
|
48071
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
48072
|
+
type: "checkbox",
|
|
48073
|
+
checked: chatVisible,
|
|
48074
|
+
onChange: (event) => setChatVisible(event.target.checked)
|
|
48075
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "显示 DSH 对话栏" })]
|
|
48076
|
+
}),
|
|
48077
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
48078
|
+
className: "dvw-setting-check",
|
|
48079
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
48080
|
+
type: "checkbox",
|
|
48081
|
+
checked: statusVisible,
|
|
48082
|
+
onChange: (event) => setStatusVisible(event.target.checked)
|
|
48083
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "显示底部状态栏" })]
|
|
48084
|
+
}),
|
|
48085
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
48086
|
+
className: "dvw-setting-range",
|
|
48024
48087
|
children: [
|
|
48025
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
48026
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("
|
|
48027
|
-
|
|
48088
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "左侧视图宽度" }),
|
|
48089
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
48090
|
+
type: "range",
|
|
48091
|
+
min: "210",
|
|
48092
|
+
max: "640",
|
|
48093
|
+
step: "1",
|
|
48094
|
+
value: Math.round(sideWidth),
|
|
48095
|
+
onChange: (event) => setSideWidth(Math.round(Number(event.target.value)))
|
|
48096
|
+
}),
|
|
48097
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("output", { children: [sideWidth, "px"] })
|
|
48028
48098
|
]
|
|
48029
|
-
},
|
|
48030
|
-
|
|
48031
|
-
|
|
48032
|
-
|
|
48033
|
-
|
|
48034
|
-
|
|
48035
|
-
|
|
48036
|
-
|
|
48037
|
-
|
|
48038
|
-
|
|
48039
|
-
|
|
48040
|
-
|
|
48041
|
-
|
|
48042
|
-
|
|
48043
|
-
|
|
48044
|
-
|
|
48045
|
-
|
|
48046
|
-
|
|
48047
|
-
|
|
48048
|
-
|
|
48049
|
-
|
|
48050
|
-
|
|
48051
|
-
|
|
48052
|
-
|
|
48053
|
-
|
|
48054
|
-
|
|
48055
|
-
|
|
48056
|
-
|
|
48057
|
-
|
|
48058
|
-
|
|
48059
|
-
|
|
48060
|
-
|
|
48061
|
-
|
|
48062
|
-
|
|
48063
|
-
min: "210",
|
|
48064
|
-
max: "640",
|
|
48065
|
-
step: "1",
|
|
48066
|
-
value: Math.round(sideWidth),
|
|
48067
|
-
onChange: (event) => setSideWidth(Math.round(Number(event.target.value)))
|
|
48068
|
-
}),
|
|
48069
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("output", { children: [sideWidth, "px"] })
|
|
48070
|
-
]
|
|
48071
|
-
}),
|
|
48072
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
48073
|
-
className: "dvw-setting-range",
|
|
48074
|
-
children: [
|
|
48075
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "DSH 对话栏宽度" }),
|
|
48076
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
48077
|
-
type: "range",
|
|
48078
|
-
min: "400",
|
|
48079
|
-
max: "720",
|
|
48080
|
-
step: "1",
|
|
48081
|
-
value: Math.round(chatWidth),
|
|
48082
|
-
onChange: (event) => setChatWidth(Math.max(400, Math.round(Number(event.target.value))))
|
|
48083
|
-
}),
|
|
48084
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("output", { children: [chatWidth, "px"] })
|
|
48085
|
-
]
|
|
48086
|
-
})
|
|
48087
|
-
] })]
|
|
48099
|
+
}),
|
|
48100
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
48101
|
+
className: "dvw-setting-range",
|
|
48102
|
+
children: [
|
|
48103
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "DSH 对话栏宽度" }),
|
|
48104
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
48105
|
+
type: "range",
|
|
48106
|
+
min: "400",
|
|
48107
|
+
max: "720",
|
|
48108
|
+
step: "1",
|
|
48109
|
+
value: Math.round(chatWidth),
|
|
48110
|
+
onChange: (event) => setChatWidth(Math.max(400, Math.round(Number(event.target.value))))
|
|
48111
|
+
}),
|
|
48112
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("output", { children: [chatWidth, "px"] })
|
|
48113
|
+
]
|
|
48114
|
+
})
|
|
48115
|
+
] }),
|
|
48116
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", { children: [
|
|
48117
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", { children: "文件监听" }),
|
|
48118
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", { children: "自动刷新排除项(每行一个目录名或相对路径)" }),
|
|
48119
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
|
|
48120
|
+
className: "dvw-setting-textarea",
|
|
48121
|
+
rows: 4,
|
|
48122
|
+
spellCheck: false,
|
|
48123
|
+
placeholder: "vendor\nthird_part/libs/boost",
|
|
48124
|
+
value: watchIgnores,
|
|
48125
|
+
onChange: (event) => setWatchIgnores(event.target.value)
|
|
48126
|
+
}),
|
|
48127
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
48128
|
+
className: "dvw-setting-hint",
|
|
48129
|
+
children: "默认已跳过 node_modules、vendor、third_party、build、dist 等大目录;修改后会自动重新连接监听。"
|
|
48130
|
+
})
|
|
48131
|
+
] })
|
|
48132
|
+
]
|
|
48088
48133
|
})]
|
|
48089
48134
|
})
|
|
48090
48135
|
}),
|
|
@@ -48190,6 +48235,7 @@ section.${c}>footer { z-index: 1; }
|
|
|
48190
48235
|
className: "dvw-tabs",
|
|
48191
48236
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
48192
48237
|
className: "dvw-tab-list",
|
|
48238
|
+
ref: tabListRef,
|
|
48193
48239
|
children: tabs.map((tab) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
48194
48240
|
className: "dvw-tab",
|
|
48195
48241
|
"data-active": tab.path === active,
|
|
@@ -48441,22 +48487,23 @@ section.${c}>footer { z-index: 1; }
|
|
|
48441
48487
|
//#region src/client/styles.ts
|
|
48442
48488
|
const CSS$1 = String.raw`
|
|
48443
48489
|
@font-face{font-family:codicon;font-display:block;src:url('/dsh-vscode/codicons/codicon.ttf') format('truetype')}
|
|
48444
|
-
:root{--dvw-titlebar-height:0px}html[data-platform=darwin]{--dvw-titlebar-height:var(--dsh-frame-top-clearance,48px)}
|
|
48490
|
+
:root{--dvw-titlebar-height:0px}html[data-platform=darwin]{--dvw-titlebar-height:var(--dsh-frame-top-clearance,48px)}html[data-windows-titlebar]{--dvw-titlebar-height:var(--dsh-frame-top-clearance,40px)}
|
|
48445
48491
|
.codicon{display:inline-block;font:normal normal normal 16px/1 codicon;text-align:center;text-decoration:none;text-rendering:auto;-webkit-font-smoothing:antialiased;user-select:none}
|
|
48446
48492
|
.codicon-add:before{content:"\ea60"}.codicon-git-branch:before,.codicon-source-control:before{content:"\ea68"}.codicon-search:before{content:"\ea6d"}.codicon-edit:before{content:"\ea73"}.codicon-close:before{content:"\ea76"}.codicon-close-all:before{content:"\eac1"}.codicon-cloud-upload:before{content:"\eac3"}.codicon-file:before{content:"\ea7b"}.codicon-new-file:before{content:"\ea7f"}.codicon-new-folder:before{content:"\ea80"}.codicon-folder:before{content:"\ea83"}.codicon-trash:before{content:"\ea81"}.codicon-code:before{content:"\eac4"}.codicon-check:before{content:"\eab2"}.codicon-chevron-down:before{content:"\eab4"}.codicon-chevron-right:before{content:"\eab6"}.codicon-color-mode:before{content:"\eac6"}.codicon-diff:before,.codicon-diff-sidebyside:before{content:"\eae1"}.codicon-diff-single:before{content:"\ec22"}.codicon-discard:before{content:"\eae2"}.codicon-file-code:before{content:"\eae9"}.codicon-file-media:before{content:"\eaea"}.codicon-file-pdf:before{content:"\eaeb"}.codicon-file-zip:before{content:"\eaef"}.codicon-files:before{content:"\eaf0"}.codicon-folder-opened:before{content:"\eaf7"}.codicon-git-commit:before{content:"\eafc"}.codicon-graph:before{content:"\eb03"}.codicon-home:before{content:"\eb06"}.codicon-list-tree:before{content:"\eb86"}.codicon-preview:before{content:"\eb2f"}.codicon-refresh:before{content:"\eb37"}.codicon-remove:before{content:"\eb3b"}.codicon-check-all:before{content:"\ebb1"}
|
|
48447
48493
|
.codicon-layout-sidebar-right:before{content:"\ebf4"}.codicon-layout-sidebar-right-off:before{content:"\ec00"}.codicon-settings:before{content:"\eb51"}.codicon-sparkle:before{content:"\ec10"}.codicon-split-horizontal:before{content:"\eb56"}.codicon-terminal:before{content:"\ea85"}
|
|
48448
48494
|
.dvw-launch{display:flex;align-items:center;gap:10px;width:100%;height:36px;padding:0 9px;border:0;border-radius:8px;background:transparent;color:var(--dsw-alias-label-secondary,#aaa);cursor:pointer;font:inherit}.dvw-launch:hover{background:var(--dsw-alias-interactive-bg-hover,#292929);color:var(--dsw-alias-label-primary,#fff)}.dvw-launcher-mount{position:fixed;z-index:20;right:16px;bottom:16px}.dvw-launcher-mount .dvw-launch{width:auto;height:32px;padding:0 12px;justify-content:center;border:1px solid var(--dsw-alias-border-l3,#e5e7eb);border-radius:6px;background:var(--dsw-alias-bg-layer-1,#fff);box-shadow:0 1px 2px rgba(0,0,0,.06);color:var(--dsw-alias-label-primary,#333)}body[data-ds-dark-theme] .dvw-launcher-mount .dvw-launch{color:var(--dsw-alias-label-primary,#ddd)}@media(max-width:640px){.dvw-launcher-mount{right:8px;bottom:8px}.dvw-launcher-mount .dvw-launch{height:30px;padding:0 10px;font-size:12px}}
|
|
48449
48495
|
.dvw-overlay{--dvw-side-width:210px;--dvw-base:var(--dsw-alias-bg-base,#181818);--dvw-surface-1:var(--dsw-alias-bg-layer-1,#1e1e1e);--dvw-surface-2:var(--dsw-alias-bg-layer-2,#252526);--dvw-surface-3:var(--dsw-alias-bg-layer-3,#2d2d30);--dvw-text:var(--dsw-alias-label-primary,#ccc);--dvw-text-2:var(--dsw-alias-label-secondary,#aaa);--dvw-text-3:var(--dsw-alias-label-tertiary,#858585);--dvw-border:var(--dsw-alias-border-l2,#333);--dvw-border-soft:var(--dsw-alias-border-l3,#292929);--dvw-hover:var(--dsw-alias-interactive-bg-hover,rgba(255,255,255,.08));--dvw-active:var(--dsw-alias-interactive-bg-active,rgba(255,255,255,.14));--dvw-accent:var(--dsw-alias-state-business-primary,#3b82f6);--dvw-error:var(--dsw-alias-state-error-primary,#f48771);--dvw-success:var(--dsw-alias-state-success-primary,#73c991);--dvw-warn:var(--dsw-alias-state-warn-primary,#d7ba7d);position:absolute;inset:0;z-index:100;display:grid;grid-template-columns:48px var(--dvw-side-width) minmax(0,1fr);grid-template-rows:minmax(0,1fr) auto 24px;box-sizing:border-box;padding-top:var(--dvw-titlebar-height);background:var(--dvw-base);color:var(--dvw-text);pointer-events:auto;font:13px/1.4 var(--dsw-font-family,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif);overflow:hidden;color-scheme:light}
|
|
48450
48496
|
.dvw-titlebar{display:none}html[data-platform=darwin] .dvw-titlebar{position:absolute;top:0;right:0;left:0;z-index:6;display:flex;align-items:center;gap:8px;height:var(--dvw-titlebar-height);padding:0 12px 0 84px;border-bottom:1px solid var(--dvw-border-soft);background:var(--dvw-base);color:var(--dvw-text-3);font-size:12px;-webkit-app-region:drag;user-select:none}.dvw-titlebar strong{flex:none;font-weight:600;color:var(--dvw-text-2)}.dvw-titlebar span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
|
48497
|
+
html[data-windows-titlebar] .dvw-overlay{top:var(--dvw-titlebar-height);padding-top:0}
|
|
48451
48498
|
body[data-ds-dark-theme] .dvw-overlay,.dvw-overlay[data-dvw-theme=dark]{color-scheme:dark}
|
|
48452
48499
|
.dvw-overlay[data-dvw-theme=dark]{--dvw-base:#151517;--dvw-surface-1:#232324;--dvw-surface-2:#2c2c2e;--dvw-surface-3:#353638;--dvw-text:#f9fafb;--dvw-text-2:#cfd3d6;--dvw-text-3:#adb2b8;--dvw-border:#ffffff1f;--dvw-border-soft:#ffffff29;--dvw-hover:#ffffff14;--dvw-active:#ffffff24;--dvw-accent:#679efe;--dvw-error:#f25a5a;--dvw-success:#22c55e;--dvw-warn:#f59e0b}
|
|
48453
48500
|
.dvw-overlay[data-dvw-theme=light]{--dvw-base:#fff;--dvw-surface-1:#fff;--dvw-surface-2:#fff;--dvw-surface-3:#fff;--dvw-text:#0f1115;--dvw-text-2:#61666b;--dvw-text-3:#81858c;--dvw-border:#0000001a;--dvw-border-soft:#0000001f;--dvw-hover:#2631480f;--dvw-active:#2631481a;--dvw-accent:#4176e6;--dvw-error:#ec1313;--dvw-success:#22c55e;--dvw-warn:#f59e0b;color-scheme:light}
|
|
48454
48501
|
.dvw-overlay *{box-sizing:border-box}.dvw-activity{grid-row:1/3;background:var(--dvw-base);border-right:1px solid var(--dvw-border-soft);display:flex;flex-direction:column;align-items:center}.dvw-act{width:48px;height:48px;border:0;border-left:2px solid transparent;background:transparent;color:var(--dvw-text-3);font-size:22px;cursor:pointer}.dvw-act:hover,.dvw-act[data-active=true]{color:var(--dvw-text)}.dvw-act[data-active=true]{border-left-color:var(--dvw-accent)}.dvw-act.dsh{margin-top:auto}.dvw-side{grid-column:2;grid-row:1/3;min-width:0;width:100%;background:var(--dvw-surface-1);border-right:1px solid var(--dvw-border);display:flex;flex-direction:column}.dvw-side-resizer{grid-column:2;grid-row:1/3;justify-self:end;width:4px;height:100%;z-index:4;cursor:ew-resize;transform:translateX(2px);touch-action:none}.dvw-side-resizer:hover,.dvw-side-resizer:focus-visible,.dvw-side-resizer[data-dragging=true]{background:var(--dvw-accent)}.dvw-side-head{height:36px;display:flex;align-items:center;padding:0 12px;text-transform:uppercase;font-size:11px;letter-spacing:.4px}.dvw-toolbar{margin-left:auto;display:flex;gap:2px}.dvw-icon{border:0;background:transparent;color:var(--dvw-text-2);border-radius:4px;min-width:24px;height:24px;display:inline-grid;place-items:center;cursor:pointer}.dvw-icon:hover{background:var(--dvw-hover);color:var(--dvw-text)}.dvw-icon:disabled{opacity:.45;cursor:default}.dvw-file-picker{display:none}.dvw-tree,.dvw-results,.dvw-git{overflow:auto;flex:1}.dvw-tree[data-drop-target=true]{outline:1px dashed var(--dvw-accent);outline-offset:-3px}.dvw-tree-row{display:flex;align-items:center;height:24px;padding-right:6px;cursor:pointer;white-space:nowrap}.dvw-tree-row:hover{background:var(--dvw-hover)}.dvw-tree-row[data-selected=true],.dvw-tree-row[data-drop-target=true]{background:var(--dvw-active)}.dvw-chevron{width:16px;flex:none;text-align:center;color:var(--dvw-text-3)}.dvw-file-icon{width:18px;flex:none;color:var(--dvw-text-2)}.dvw-file-icon.folder{color:var(--dvw-accent)}.dvw-tree-name{overflow:hidden;text-overflow:ellipsis}.dvw-tree-rename,.dvw-tree-create-input{min-width:0;flex:1;height:20px;border:1px solid var(--dvw-accent);border-radius:0;background:var(--dvw-surface-1);color:var(--dvw-text);padding:0 3px;font:inherit;letter-spacing:0;outline:0}.dvw-tree-create-row{cursor:text}.dvw-tree-create-row:hover{background:transparent}.dvw-tree-create-input::placeholder{color:var(--dvw-text-3)}.dvw-tree-create-input[aria-invalid=true]{border-color:var(--dvw-error)}.dvw-tree-create-error{min-height:20px;padding-top:2px;padding-right:6px;padding-bottom:3px;color:var(--dvw-error);font-size:11px;line-height:15px;white-space:normal;overflow-wrap:anywhere}.dvw-tree-status{margin-left:auto;padding-left:6px;font-size:11px;font-weight:600;color:var(--dvw-warn)}.dvw-tree-status[data-status=M]{color:var(--dvw-warn)}.dvw-tree-status[data-status=A]{color:var(--dvw-success)}.dvw-tree-status[data-status=D]{color:var(--dvw-error)}.dvw-context-menu{position:fixed;z-index:40;min-width:148px;padding:4px;border:1px solid var(--dvw-border);border-radius:5px;background:var(--dvw-surface-3);box-shadow:0 6px 20px rgba(0,0,0,.3)}.dvw-context-menu button{width:100%;height:28px;border:0;border-radius:3px;background:transparent;color:var(--dvw-text);display:flex;align-items:center;gap:8px;padding:0 8px;text-align:left;font:inherit;cursor:pointer}.dvw-context-menu button:hover{background:var(--dvw-hover)}.dvw-context-menu .dvw-context-delete{color:var(--dvw-error)}
|
|
48455
|
-
.dvw-main{grid-column:3;grid-row:1;display:flex;min-width:0;min-height:0;flex-direction:column;background:var(--dvw-surface-1)}.dvw-tabs{height:36px;background:var(--dvw-base);display:flex;overflow
|
|
48502
|
+
.dvw-main{grid-column:3;grid-row:1;display:flex;min-width:0;min-height:0;flex-direction:column;background:var(--dvw-surface-1)}.dvw-tabs{height:36px;background:var(--dvw-base);display:flex;overflow:hidden}.dvw-tab{height:36px;min-width:110px;max-width:260px;border:0;border-right:1px solid var(--dvw-border-soft);background:var(--dvw-base);color:var(--dvw-text-2);padding:0 8px 0 12px;display:flex;align-items:center;gap:8px;cursor:pointer;flex:none;overflow:hidden;white-space:nowrap}.dvw-tab[data-active=true]{background:var(--dvw-surface-1);color:var(--dvw-text);border-top:1px solid var(--dvw-accent)}.dvw-tab-name{overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0;text-align:left;white-space:nowrap}.dvw-editor{position:relative;flex:1;min-height:0}.dvw-editor-toolbar{position:absolute;z-index:3;top:0;right:0;left:0;height:36px;display:flex;align-items:center;justify-content:flex-end;gap:4px;padding:0 10px;border-bottom:1px solid var(--dvw-border-soft);background:var(--dvw-surface-1)}.dvw-editor-body{position:absolute;inset:0;min-height:0}.dvw-editor-body[data-toolbar=true]{top:36px}.dvw-mode-button{height:27px;padding:0 10px;display:flex;align-items:center;gap:6px;border:1px solid transparent;border-radius:5px;background:transparent;color:var(--dvw-text-2);cursor:pointer}.dvw-mode-button:hover{background:var(--dvw-hover)}.dvw-mode-button[data-active=true]{border-color:var(--dvw-border);background:var(--dvw-active);color:var(--dvw-text)}.dvw-empty{height:100%;display:grid;place-items:center;color:var(--dvw-text-3);text-align:center}.dvw-empty strong{font-size:24px;color:var(--dvw-text-2)}.dvw-message{padding:12px;color:var(--dvw-warn)}
|
|
48456
48503
|
.dvw-bottom{grid-column:3;grid-row:2;height:260px;min-height:120px;border-top:1px solid var(--dvw-border);background:var(--dvw-base);display:flex;flex-direction:column}.dvw-bottom-head{height:35px;display:flex;align-items:center;gap:14px;padding:0 12px}.dvw-bottom-title{border:0;border-bottom:1px solid var(--dvw-text);background:transparent;color:var(--dvw-text);height:35px}.dvw-bottom-body{flex:1;min-height:0}.dvw-status{grid-column:1/4;grid-row:3;background:var(--dvw-accent);color:#fff;display:flex;align-items:center;padding:0 8px;gap:18px;font-size:12px}.dvw-theme-control{position:relative;margin-left:auto}.dvw-theme-trigger{height:22px;min-width:112px;display:flex;align-items:center;gap:7px;padding:0 8px;border:0;border-radius:5px;background:color-mix(in srgb,#000 17%,transparent);color:#fff;cursor:pointer}.dvw-theme-trigger:hover{background:color-mix(in srgb,#000 27%,transparent)}.dvw-theme-orb{width:13px;height:13px;border:2px solid #fff;border-radius:50%;background:linear-gradient(90deg,#17181c 50%,#fff 50%)}.dvw-theme-orb.dark{background:#17181c}.dvw-theme-orb.light{background:#fff}.dvw-theme-menu{position:absolute;right:0;bottom:29px;width:224px;padding:6px;border:1px solid var(--dvw-border);border-radius:10px;background:var(--dvw-surface-3);box-shadow:0 10px 35px rgba(0,0,0,.28);color:var(--dvw-text)}.dvw-theme-menu button{width:100%;min-height:48px;border:0;border-radius:7px;background:transparent;color:inherit;display:grid;grid-template-columns:30px 1fr 20px;align-items:center;text-align:left;padding:6px;cursor:pointer}.dvw-theme-menu button:hover,.dvw-theme-menu button[aria-checked=true]{background:var(--dvw-hover)}.dvw-theme-menu strong,.dvw-theme-menu small{display:block}.dvw-theme-menu small{color:var(--dvw-text-3);margin-top:2px}.dvw-theme-swatch{width:22px;height:22px;border-radius:6px;border:1px solid var(--dvw-border);background:linear-gradient(135deg,#17181c 0 50%,#fff 50%)}.dvw-theme-swatch.dark{background:#17181c}.dvw-theme-swatch.light{background:#fff}
|
|
48457
48504
|
.dvw-search-form{padding:8px;display:grid;gap:6px}.dvw-input,.dvw-textarea,.dvw-select{width:100%;border:1px solid var(--dvw-border);background:var(--dvw-surface-2);color:var(--dvw-text);padding:5px 7px;outline:none}.dvw-input:focus,.dvw-textarea:focus,.dvw-select:focus{border-color:var(--dvw-accent)}.dvw-options{display:flex;align-items:center;gap:8px;font-size:11px}.dvw-result-file{padding:5px 8px;font-weight:600}.dvw-result{padding:4px 8px 4px 20px;cursor:pointer;display:flex;gap:8px}.dvw-result:hover{background:var(--dvw-hover)}.dvw-line{color:var(--dvw-text-3);min-width:30px;text-align:right}.dvw-preview{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
|
48458
48505
|
.dvw-git-head{padding:7px 10px;border-bottom:1px solid var(--dvw-border);display:flex;align-items:center;gap:8px}.dvw-branch{min-width:0;border:0;background:transparent;color:var(--dvw-text);font:inherit;font-weight:600;display:flex;align-items:center;gap:5px;cursor:pointer}.dvw-commit{display:grid;grid-template-columns:1fr auto;gap:6px;padding:9px}.dvw-commit .dvw-input{grid-column:1/3}.dvw-commit-button{grid-column:1/3;height:31px;border:0;border-radius:6px;background:color-mix(in srgb,var(--dvw-accent) 24%,var(--dvw-surface-2));color:var(--dvw-text);display:flex;align-items:center;justify-content:center;gap:7px;cursor:pointer}.dvw-commit-button:hover{background:color-mix(in srgb,var(--dvw-accent) 34%,var(--dvw-surface-2))}.dvw-commit-button:disabled{opacity:.45;cursor:default}.dvw-group-head{height:30px;display:flex;align-items:center;gap:5px;padding:0 6px 0 9px;border-radius:5px;font-weight:600;position:sticky;top:0;background:var(--dvw-surface-1);z-index:1}.dvw-group-head:hover{background:var(--dvw-hover)}.dvw-group-head .dvw-count{margin-left:auto;min-width:20px;height:20px;border-radius:10px;display:grid;place-items:center;background:var(--dvw-surface-3);color:var(--dvw-text-2);font-size:11px}.dvw-change{display:flex;align-items:center;min-height:28px;padding:3px 5px 3px 19px;gap:5px;cursor:pointer}.dvw-change:hover{background:var(--dvw-hover)}.dvw-change .dvw-icon{opacity:0}.dvw-change:hover .dvw-icon,.dvw-change:focus-within .dvw-icon{opacity:1}.dvw-change-path{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.dvw-badge{font-size:11px;color:var(--dvw-warn)}.dvw-graph{border-top:1px solid var(--dvw-border-soft);margin-top:8px;padding-top:3px}.dvw-graph-list{padding-bottom:8px}.dvw-graph-row{width:100%;height:38px;border:0;background:transparent;color:var(--dvw-text);display:flex;align-items:center;padding:0 7px;text-align:left;cursor:pointer;overflow:hidden}.dvw-graph-row:hover{background:var(--dvw-hover)}.dvw-graph-svg{flex:none;align-self:stretch}.dvw-graph-copy{display:flex;min-width:0;flex:1;flex-direction:column;justify-content:center}.dvw-graph-subject{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dvw-graph-meta{font-size:11px;color:var(--dvw-text-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dvw-ref{max-width:82px;margin-left:4px;padding:1px 5px;border:1px solid color-mix(in srgb,var(--dvw-accent) 50%,transparent);border-radius:9px;color:var(--dvw-accent);font-size:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dvw-error{padding:8px;color:var(--dvw-error);white-space:pre-wrap}.dvw-diff{margin:0;height:100%;overflow:auto;padding:8px 0;background:var(--dvw-surface-1);font:12px/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;white-space:pre}.dvw-diff-line{display:block;min-height:18px;padding:0 14px}.dvw-diff-line.add{background:color-mix(in srgb,var(--dvw-success) 15%,transparent);color:var(--dvw-success)}.dvw-diff-line.remove{background:color-mix(in srgb,var(--dvw-error) 13%,transparent);color:var(--dvw-error)}.dvw-diff-line.hunk{background:color-mix(in srgb,var(--dvw-accent) 12%,transparent);color:var(--dvw-accent)}.dvw-diff-line.meta{color:var(--dvw-text-3)}.dvw-diff-empty{padding:24px;color:var(--dvw-text-3)}
|
|
48459
|
-
.dvw-
|
|
48506
|
+
.dvw-tab-list{display:flex;min-width:0;flex:1;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;scrollbar-width:none}.dvw-tab-list::-webkit-scrollbar{display:none}.dvw-tab-actions{flex:none;width:42px;display:grid;place-items:center;padding:0 6px;border-left:1px solid var(--dvw-border-soft);background:var(--dvw-base)}.dvw-close-all{border:1px solid var(--dvw-border);background:var(--dvw-base)}.dvw-monaco-diff{position:absolute;inset:0}.dvw-diff-toolbar{justify-content:flex-end}.dvw-group-head{gap:2px;padding-left:2px}.dvw-group-toggle{min-width:0;height:30px;flex:1;border:0;border-radius:5px;background:transparent;color:var(--dvw-text);font:inherit;font-weight:600;display:flex;align-items:center;gap:5px;padding:0 7px;cursor:pointer;text-align:left}.dvw-group-toggle:hover{background:var(--dvw-hover)}.dvw-graph-entry[data-expanded=true]{background:color-mix(in srgb,var(--dvw-accent) 5%,transparent)}.dvw-commit-files{padding:1px 0 5px 26px}.dvw-commit-file{width:100%;height:27px;border:0;background:transparent;color:var(--dvw-text);display:flex;align-items:center;gap:6px;padding:0 7px;text-align:left;cursor:pointer}.dvw-commit-file:hover{background:var(--dvw-hover)}.dvw-commit-file-name{white-space:nowrap}.dvw-commit-file-dir{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--dvw-text-3);font-size:11px}
|
|
48460
48507
|
.dvw-outline{flex:none;max-height:38%;display:flex;flex-direction:column;border-bottom:1px solid var(--dvw-border)}.dvw-outline-head{height:30px;display:flex;align-items:center;justify-content:space-between;padding:0 5px 0 10px;font-weight:600}.dvw-outline-head>span{display:flex;align-items:center;gap:6px}.dvw-outline-list{overflow:auto;padding-bottom:5px}.dvw-outline-item{display:block;width:100%;height:25px;border:0;background:transparent;color:var(--dvw-text-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left;cursor:pointer}.dvw-outline-item:hover{background:var(--dvw-hover);color:var(--dvw-text)}.dvw-image-preview{position:absolute;inset:0;overflow:auto;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;padding:24px;background:repeating-conic-gradient(var(--dvw-surface-2) 0 25%,var(--dvw-surface-1) 0 50%) 0/20px 20px}.dvw-image-preview img{max-width:100%;max-height:calc(100% - 32px);object-fit:contain;box-shadow:0 4px 24px rgba(0,0,0,.22)}.dvw-image-preview span{max-width:100%;padding:3px 8px;border-radius:5px;background:var(--dvw-surface-1);color:var(--dvw-text-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
|
48461
48508
|
.dvw-pdf-preview{position:absolute;inset:0;display:flex;min-height:0;flex-direction:column;background:var(--dvw-base);color:var(--dvw-text)}.dvw-pdf-toolbar{height:30px;flex:none;display:flex;align-items:center;justify-content:center;gap:2px;padding:0 8px;border-bottom:1px solid var(--dvw-border);background:var(--dvw-surface-1);font-variant-numeric:tabular-nums}.dvw-pdf-toolbar .dvw-icon{font-size:18px}.dvw-pdf-zoom{min-width:52px;height:24px;border:0;border-radius:4px;background:var(--dvw-active);color:var(--dvw-text);font:inherit;cursor:pointer}.dvw-pdf-zoom:hover{background:var(--dvw-hover)}.dvw-pdf-separator{width:1px;height:18px;margin:0 4px;background:var(--dvw-border)}.dvw-pdf-page{min-height:0;flex:1;overflow:auto;display:flex;justify-content:center;padding:8px;background:var(--dvw-base)}.dvw-pdf-page canvas{flex:none;background:#fff;box-shadow:0 2px 12px rgba(0,0,0,.28)}.dvw-docx-preview{position:absolute;inset:0;overflow:auto;padding:28px;background:var(--dvw-base);color:#222}.dvw-docx-preview .docx-wrapper{margin:auto;background:#fff;box-shadow:0 2px 12px rgba(0,0,0,.2)}.dvw-document-error,.dvw-document-download{height:100%;display:grid;place-content:center;justify-items:center;gap:12px;padding:24px;color:var(--dvw-text-2);text-align:center}.dvw-document-download a{color:var(--dvw-accent);text-decoration:none}.dvw-document-download a:hover{text-decoration:underline}
|
|
48462
48509
|
.dvw-markdown{height:100%;overflow:auto;padding:28px clamp(24px,6vw,80px) 60px;color:var(--dvw-text);font-size:15px;line-height:1.65}.dvw-markdown>*:first-child{margin-top:0}.dvw-markdown h1,.dvw-markdown h2{padding-bottom:.3em;border-bottom:1px solid var(--dvw-border)}.dvw-markdown h1{font-size:2em}.dvw-markdown h2{font-size:1.5em}.dvw-markdown h3{font-size:1.25em}.dvw-markdown a{color:var(--dvw-accent)}.dvw-markdown code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;background:var(--dvw-surface-2);border-radius:4px;padding:.15em .35em}.dvw-markdown pre{overflow:auto;padding:14px;border:1px solid var(--dvw-border-soft);border-radius:7px;background:var(--dvw-base)}.dvw-markdown pre code{padding:0;background:transparent}.dvw-markdown blockquote{margin-left:0;padding-left:14px;border-left:3px solid var(--dvw-border);color:var(--dvw-text-2)}.dvw-markdown table{border-collapse:collapse;display:block;overflow:auto}.dvw-markdown th,.dvw-markdown td{padding:6px 12px;border:1px solid var(--dvw-border)}.dvw-markdown tr:nth-child(2n){background:var(--dvw-hover)}.dvw-markdown img{max-width:100%}.dvw-markdown hr{border:0;border-top:1px solid var(--dvw-border)}
|
|
@@ -48505,6 +48552,9 @@ body[data-dvw-workbench-active] [data-sidebar-toggle]{display:none!important}
|
|
|
48505
48552
|
.dvw-settings-themes{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.dvw-settings-themes button{height:56px;display:grid;grid-template-columns:28px 1fr 18px;align-items:center;gap:7px;padding:0 9px;border:1px solid var(--dvw-border);border-radius:7px;background:var(--dvw-base);color:var(--dvw-text);text-align:left;cursor:pointer}.dvw-settings-themes button:hover{background:var(--dvw-hover)}.dvw-settings-themes button[data-active=true]{border-color:var(--dvw-accent);background:color-mix(in srgb,var(--dvw-accent) 10%,var(--dvw-base))}
|
|
48506
48553
|
.dvw-setting-check{height:36px;display:flex;align-items:center;gap:9px;border-bottom:1px solid var(--dvw-border-soft);cursor:pointer}.dvw-setting-check input{accent-color:var(--dvw-accent)}.dvw-setting-range{display:grid;grid-template-columns:145px 1fr 52px;align-items:center;gap:10px;min-height:42px}.dvw-setting-range input{accent-color:var(--dvw-accent)}.dvw-setting-range output{text-align:right;color:var(--dvw-text-3);font-variant-numeric:tabular-nums}
|
|
48507
48554
|
@media(max-width:900px){.dvw-overlay[data-dvw-chat=true]{grid-template-columns:44px min(210px,var(--dvw-side-width)) minmax(0,1fr) min(400px,var(--dvw-chat-width))}[data-dvw-conversation-panel]{width:min(400px,var(--dvw-chat-width))!important}}
|
|
48555
|
+
.dvw-setting-textarea{width:100%;min-height:84px;resize:vertical;padding:8px 10px;border:1px solid var(--dvw-border);border-radius:6px;background:var(--dvw-base);color:var(--dvw-text);font:12px/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
|
|
48556
|
+
.dvw-setting-textarea:focus{outline:none;border-color:var(--dvw-accent)}
|
|
48557
|
+
.dvw-setting-hint{margin:8px 0 0;color:var(--dvw-text-3);font-size:11px;line-height:1.5}
|
|
48508
48558
|
`;
|
|
48509
48559
|
function installStyles() {
|
|
48510
48560
|
const id = "dsh-vscode-workbench/styles";
|